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 21
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[:subtable] = [
    mapping[:platform_id],
    mapping[:encoding_id],
    12,
    result[:subtable]
  ].pack('nnNA*')

  result
end
new(file, table_start) click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 47
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 77
def [](_code)
  raise NotImplementedError, "cmap format #{@format} is not supported"
end
supported?() click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 73
def supported?
  false
end
unicode?() click to toggle source
# File lib/ttfunk/table/cmap/subtable.rb, line 67
def unicode?
  platform_id == 3 && (encoding_id == 1 || encoding_id == 10) &&
    format != 0 ||
    platform_id == 0 && format != 0
end

Private Instance Methods

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