Sha256: 0ad96941e686030ebcfe6210d87379b9833672959abafe396b0610d2b7a3578d
Contents?: true
Size: 1.81 KB
Versions: 1
Compression:
Stored size: 1.81 KB
Contents
# frozen_string_literal: true module TTFunk class Table # Character to Glyph Index Mapping (`cmap`) table. class Cmap < Table # Table version. # @return [Integer] attr_reader :version # Encoding tables. # @return [Array<TTFunk::Table::Cmap::Subtable>] attr_reader :tables # Encode table. # # @param charmap [Hash{Integer => Integer}] # @param encoding [Symbol] # @return [Hash] # * `:charmap` (<tt>Hash{Integer => Hash}</tt>) keys are the characrers in # `charset`, values are hashes: # * `:old` (<tt>Integer</tt>) - glyph ID in the original font. # * `:new` (<tt>Integer</tt>) - glyph ID in the subset font. # that maps the characters in charmap to a # * `:table` (<tt>String</tt>) - serialized table. # * `:max_glyph_id` (<tt>Integer</tt>) - maximum glyph ID in the new font. def self.encode(charmap, encoding) result = Cmap::Subtable.encode(charmap, encoding) # pack 'version' and 'table-count' result[:table] = [0, 1, result.delete(:subtable)].pack('nnA*') result end # Get Unicode encoding records. # # @return [Array<TTFunk::Table::Cmap::Subtable>] def unicode # Because most callers just call .first on the result, put tables with # highest-number format first. Unsupported formats will be ignored. @unicode ||= @tables .select { |table| table.unicode? && table.supported? } .sort { |a, b| b.format <=> a.format } end private def parse! @version, table_count = read(4, 'nn') @tables = Array.new(table_count) do Cmap::Subtable.new(file, offset) end end end end end require_relative 'cmap/subtable'
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
ttfunk-1.8.0 | lib/ttfunk/table/cmap.rb |