parse post table
This commit is contained in:
parent
6fb1323101
commit
3c548dd7b9
|
@ -303,6 +303,13 @@ type
|
||||||
# featureList: FeatureList
|
# featureList: FeatureList
|
||||||
lookupList: LookupList
|
lookupList: LookupList
|
||||||
|
|
||||||
|
PostTable = ref object
|
||||||
|
version: float32
|
||||||
|
italicAngle: float32
|
||||||
|
underlinePosition: int16
|
||||||
|
underlineThickness: int16
|
||||||
|
isFixedPitch: uint32
|
||||||
|
|
||||||
OpenType* = ref object
|
OpenType* = ref object
|
||||||
buf*: string
|
buf*: string
|
||||||
version*: uint32
|
version*: uint32
|
||||||
|
@ -322,6 +329,7 @@ type
|
||||||
glyf*: GlyfTable
|
glyf*: GlyfTable
|
||||||
kern*: KernTable
|
kern*: KernTable
|
||||||
gpos*: GposTable
|
gpos*: GposTable
|
||||||
|
post*: PostTable
|
||||||
glyphPaths: Table[Rune, Path]
|
glyphPaths: Table[Rune, Path]
|
||||||
|
|
||||||
when defined(release):
|
when defined(release):
|
||||||
|
@ -1194,6 +1202,16 @@ proc parseGposTable(buf: string, offset: int): GPOSTable =
|
||||||
result.lookupList =
|
result.lookupList =
|
||||||
parseLookupList(buf, offset + result.lookupListOffset.int, result)
|
parseLookupList(buf, offset + result.lookupListOffset.int, result)
|
||||||
|
|
||||||
|
proc parsePostTable(buf: string, offset: int): PostTable =
|
||||||
|
buf.eofCheck(offset + 14)
|
||||||
|
|
||||||
|
result = PostTable()
|
||||||
|
result.version = buf.readFixed32(offset + 0)
|
||||||
|
result.italicAngle = buf.readFixed32(offset + 4)
|
||||||
|
result.underlinePosition = buf.readInt16(offset + 8).swap()
|
||||||
|
result.underlineThickness = buf.readInt16(offset + 10).swap()
|
||||||
|
result.isFixedPitch = buf.readUint32(offset + 12).swap()
|
||||||
|
|
||||||
proc getGlyphId(opentype: OpenType, rune: Rune): uint16 {.inline.} =
|
proc getGlyphId(opentype: OpenType, rune: Rune): uint16 {.inline.} =
|
||||||
if rune in opentype.cmap.runeToGlyphId:
|
if rune in opentype.cmap.runeToGlyphId:
|
||||||
result = opentype.cmap.runeToGlyphId[rune]
|
result = opentype.cmap.runeToGlyphId[rune]
|
||||||
|
@ -1544,7 +1562,8 @@ proc parseOpenType*(buf: string): OpenType =
|
||||||
i += 16
|
i += 16
|
||||||
|
|
||||||
const requiredTables = [
|
const requiredTables = [
|
||||||
"cmap", "head", "hhea", "hmtx", "maxp", "name", "OS/2", "loca", "glyf"
|
"cmap", "head", "hhea", "hmtx", "maxp", "name", "OS/2", "loca", "glyf",
|
||||||
|
"post"
|
||||||
]
|
]
|
||||||
for table in requiredTables:
|
for table in requiredTables:
|
||||||
if table notin result.tableRecords:
|
if table notin result.tableRecords:
|
||||||
|
@ -1571,5 +1590,7 @@ proc parseOpenType*(buf: string): OpenType =
|
||||||
if "GPOS" in result.tableRecords:
|
if "GPOS" in result.tableRecords:
|
||||||
result.gpos = parseGposTable(buf, result.tableRecords["GPOS"].offset.int)
|
result.gpos = parseGposTable(buf, result.tableRecords["GPOS"].offset.int)
|
||||||
|
|
||||||
|
result.post = parsePostTable(buf, result.tableRecords["post"].offset.int)
|
||||||
|
|
||||||
when defined(release):
|
when defined(release):
|
||||||
{.pop.}
|
{.pop.}
|
||||||
|
|
Loading…
Reference in a new issue