File: charstrings_index.rb

package info (click to toggle)
ruby-ttfunk 1.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,472 kB
  • sloc: ruby: 7,954; makefile: 7
file content (45 lines) | stat: -rw-r--r-- 1,360 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# frozen_string_literal: true

module TTFunk
  class Table
    class Cff < TTFunk::Table
      # CFF Charstrings Index.
      class CharstringsIndex < TTFunk::Table::Cff::Index
        # Top dict.
        # @return [TTFunk::Table::Cff::TopDict]
        attr_reader :top_dict

        # @overload initialize(top_dict, file, offset, length = nil)
        #   @param top_dict [TTFunk::Table:Cff::TopDict]
        #   @param file [TTFunk::File]
        #   @param offset [Integer]
        #   @param length [Integer]
        def initialize(top_dict, *remaining_args)
          super(*remaining_args)
          @top_dict = top_dict
        end

        private

        def decode_item(index, _offset, _length)
          TTFunk::Table::Cff::Charstring.new(index, top_dict, font_dict_for(index), super)
        end

        def encode_items(charmap)
          charmap
            .reject { |code, mapping| mapping[:new].zero? && !code.zero? }
            .sort_by { |_code, mapping| mapping[:new] }
            .map { |(_code, mapping)| items[mapping[:old]] }
        end

        def font_dict_for(index)
          # only CID-keyed fonts contain an FD selector and font dicts
          if top_dict.is_cid_font?
            fd_index = top_dict.font_dict_selector[index]
            top_dict.font_index[fd_index]
          end
        end
      end
    end
  end
end