class TTFunk::Table::Cmap::Subtable

Constants

ENCODING_MAPPINGS

Attributes

encoding_id[R]
format[R]
platform_id[R]

Public Class Methods

encode(charmap, encoding) click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 23
def self.encode(charmap, encoding)
  case encoding
  when :mac_roman
    result = Format00.encode(charmap)
  when :unicode
    result = Format04.encode(charmap)
  when :unicode_ucs4
    result = Format12.encode(charmap)
  else
    raise NotImplementedError,
      "encoding #{encoding.inspect} is not supported"
  end

  mapping = ENCODING_MAPPINGS[encoding]

  # platform-id, encoding-id, offset
  result.merge(
    platform_id: mapping[:platform_id],
    encoding_id: mapping[:encoding_id],
    subtable: [
      mapping[:platform_id],
      mapping[:encoding_id],
      12,
      result[:subtable]
    ].pack('nnNA*')
  )
end
new(file, table_start) click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 51
def initialize(file, table_start)
  @file = file
  @platform_id, @encoding_id, @offset = read(8, 'nnN')
  @offset += table_start

  parse_from(@offset) do
    @format = read(2, 'n').first

    case @format
    when 0 then extend(TTFunk::Table::Cmap::Format00)
    when 4 then extend(TTFunk::Table::Cmap::Format04)
    when 6 then extend(TTFunk::Table::Cmap::Format06)
    when 10 then extend(TTFunk::Table::Cmap::Format10)
    when 12 then extend(TTFunk::Table::Cmap::Format12)
    end

    parse_cmap!
  end
end

Public Instance Methods

[](_code) click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 81
def [](_code)
  raise NotImplementedError, "cmap format #{@format} is not supported"
end
supported?() click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 77
def supported?
  false
end
unicode?() click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 71
def unicode?
  platform_id == 3 && (encoding_id == 1 || encoding_id == 10) &&
    format != 0 ||
    platform_id.zero? && format != 0
end

Private Instance Methods

parse_cmap!() click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 87
def parse_cmap!
  # do nothing...
end