lib/ttfunk/table/cff/font_dict.rb in ttfunk-1.7.0 vs lib/ttfunk/table/cff/font_dict.rb in ttfunk-1.8.0
- old
+ new
@@ -1,23 +1,38 @@
# frozen_string_literal: true
module TTFunk
class Table
class Cff < TTFunk::Table
+ # CFF Font dict.
class FontDict < TTFunk::Table::Cff::Dict
+ # Length of placeholders.
PLACEHOLDER_LENGTH = 5
+
+ # Operators we care about in this dict.
OPERATORS = { private: 18 }.freeze
+
+ # Inverse operator mapping.
OPERATOR_CODES = OPERATORS.invert
+ # Top dict.
+ # @return [TTFunk::Table::Cff::TopDict]
attr_reader :top_dict
+ # @param top_dict [TTFunk::Table:Cff::TopDict]
+ # @param file [TTFunk::File]
+ # @param offset [Integer]
+ # @param length [Integer]
def initialize(top_dict, file, offset, length = nil)
@top_dict = top_dict
super(file, offset, length)
end
- def encode(_mapping)
+ # Encode dict.
+ #
+ # @return [TTFunk::EncodedString]
+ def encode
EncodedString.new do |result|
each do |operator, operands|
case OPERATOR_CODES[operator]
when :private
result << encode_private
@@ -28,50 +43,47 @@
result << encode_operator(operator)
end
end
end
- def finalize(new_cff_data, mapping)
- encoded_private_dict = private_dict.encode(mapping)
+ # Finalize dict.
+ #
+ # @param new_cff_data [TTFunk::EncodedString]
+ # @return [void]
+ def finalize(new_cff_data)
+ encoded_private_dict = private_dict.encode
encoded_offset = encode_integer32(new_cff_data.length)
encoded_length = encode_integer32(encoded_private_dict.length)
- new_cff_data.resolve_placeholder(
- :"private_length_#{@table_offset}", encoded_length
- )
+ new_cff_data.resolve_placeholder(:"private_length_#{@table_offset}", encoded_length)
+ new_cff_data.resolve_placeholder(:"private_offset_#{@table_offset}", encoded_offset)
- new_cff_data.resolve_placeholder(
- :"private_offset_#{@table_offset}", encoded_offset
- )
-
private_dict.finalize(encoded_private_dict)
new_cff_data << encoded_private_dict
end
+ # Private dict.
+ #
+ # @return [TTFunk::Table::Cff::PrivateDict, nil]
def private_dict
@private_dict ||=
if (info = self[OPERATORS[:private]])
private_dict_length, private_dict_offset = info
PrivateDict.new(
file,
top_dict.cff_offset + private_dict_offset,
- private_dict_length
+ private_dict_length,
)
end
end
private
def encode_private
EncodedString.new do |result|
- result << Placeholder.new(
- :"private_length_#{@table_offset}", length: PLACEHOLDER_LENGTH
- )
-
- result << Placeholder.new(
- :"private_offset_#{@table_offset}", length: PLACEHOLDER_LENGTH
- )
+ result << Placeholder.new(:"private_length_#{@table_offset}", length: PLACEHOLDER_LENGTH)
+ result << Placeholder.new(:"private_offset_#{@table_offset}", length: PLACEHOLDER_LENGTH)
end
end
end
end
end