This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module TTFunk
|
||||
class Table
|
||||
class Post
|
||||
# Version 1.0 provides glyph names for standard 258 glyphs in the standard
|
||||
# Macintosh TrueType font file.
|
||||
module Format10
|
||||
# Glyph names.
|
||||
POSTSCRIPT_GLYPHS = %w[
|
||||
.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar
|
||||
percent ampersand quotesingle parenleft parenright asterisk plus comma
|
||||
hyphen period slash zero one two three four five six seven eight nine
|
||||
colon semicolon less equal greater question at
|
||||
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
||||
bracketleft backslash bracketright asciicircum underscore grave
|
||||
a b c d e f g h i j k l m n o p q r s t u v w x y z
|
||||
braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute
|
||||
Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde
|
||||
aring ccedilla eacute egrave ecircumflex edieresis iacute igrave
|
||||
icircumflex idieresis ntilde oacute ograve ocircumflex odieresis
|
||||
otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling
|
||||
section bullet paragraph germandbls registered copyright trademark
|
||||
acute dieresis notequal AE Oslash infinity plusminus lessequal
|
||||
greaterequal yen mu partialdiff summation product pi integral
|
||||
ordfeminine ordmasculine Omega ae oslash questiondown exclamdown
|
||||
logicalnot radical florin approxequal Delta guillemotleft
|
||||
guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe
|
||||
endash emdash quotedblleft quotedblright quoteleft quoteright divide
|
||||
lozenge ydieresis Ydieresis fraction currency guilsinglleft
|
||||
guilsinglright fi fl daggerdbl periodcentered quotesinglbase
|
||||
quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis
|
||||
Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple
|
||||
Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron
|
||||
breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash
|
||||
Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn
|
||||
thorn minus multiply onesuperior twosuperior threesuperior onehalf
|
||||
onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla
|
||||
scedilla Cacute cacute Ccaron ccaron dcroat
|
||||
].freeze
|
||||
|
||||
# Get glyph name for character code.
|
||||
#
|
||||
# @param code [Integer]
|
||||
# @return [String]
|
||||
def glyph_for(code)
|
||||
POSTSCRIPT_GLYPHS[code] || '.notdef'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_format!
|
||||
# do nothing. Format 1 is easy-sauce.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,48 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative 'format10'
|
||||
require 'stringio'
|
||||
|
||||
module TTFunk
|
||||
class Table
|
||||
class Post
|
||||
# Version 2.0 is used for fonts that use glyph names that are not in the
|
||||
# set of Macintosh glyph names. A given font may map some of its glyphs to
|
||||
# the standard Macintosh glyph names, and some to its own custom names.
|
||||
# A version 2.0 `post` table can be used in fonts with TrueType or CFF
|
||||
# version 2 outlines.
|
||||
module Format20
|
||||
include Format10
|
||||
|
||||
# Get glyph name for character code.
|
||||
#
|
||||
# @param code [Integer]
|
||||
# @return [String]
|
||||
def glyph_for(code)
|
||||
index = @glyph_name_index[code]
|
||||
return '.notdef' unless index
|
||||
|
||||
if index <= 257
|
||||
POSTSCRIPT_GLYPHS[index]
|
||||
else
|
||||
@names[index - 258] || '.notdef'
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_format!
|
||||
number_of_glyphs = read(2, 'n').first
|
||||
@glyph_name_index = read(number_of_glyphs * 2, 'n*')
|
||||
@names = []
|
||||
|
||||
strings = StringIO.new(io.read(offset + length - io.pos))
|
||||
until strings.eof?
|
||||
length = strings.read(1).unpack1('C')
|
||||
@names << strings.read(length)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module TTFunk
|
||||
class Table
|
||||
class Post
|
||||
# Version 3.0 specifies that no PostScript name information is provided
|
||||
# for the glyphs in this font file.
|
||||
module Format30
|
||||
# Get glyph name for character code.
|
||||
#
|
||||
# @param _code [Integer]
|
||||
# @return [String]
|
||||
def glyph_for(_code)
|
||||
'.notdef'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_format!
|
||||
# do nothing. Format 3 is easy-sauce.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,24 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module TTFunk
|
||||
class Table
|
||||
class Post
|
||||
# Version 4.0 names glyphs by their character code.
|
||||
module Format40
|
||||
# Get glyph name for character code.
|
||||
#
|
||||
# @param code [Integer]
|
||||
# @return [String]
|
||||
def glyph_for(code)
|
||||
@map[code] || 0xFFFF
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def parse_format!
|
||||
@map = read(file.maximum_profile.num_glyphs * 2, 'N*')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user