Skip to content

Commit

Permalink
Merge pull request #3201 from NightFurySL2001/patch-1
Browse files Browse the repository at this point in the history
Convert panoseDefault to namespace object
  • Loading branch information
anthrotype committed Jul 12, 2023
2 parents c9d965b + e97aab6 commit 8846b57
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 12 deletions.
14 changes: 2 additions & 12 deletions Lib/fontTools/fontBuilder.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ def drawTestGlyph(pen):
from .ttLib import TTFont, newTable
from .ttLib.tables._c_m_a_p import cmap_classes
from .ttLib.tables._g_l_y_f import flagCubic
from .ttLib.tables.O_S_2f_2 import Panose
from .misc.timeTools import timestampNow
import struct
from collections import OrderedDict
Expand Down Expand Up @@ -263,18 +264,7 @@ def drawTestGlyph(pen):
# to insert in setupNameTable doc string:
# print("\n".join(("%s (nameID %s)" % (k, v)) for k, v in sorted(_nameIDs.items(), key=lambda x: x[1])))

_panoseDefaults = dict(
bFamilyType=0,
bSerifStyle=0,
bWeight=0,
bProportion=0,
bContrast=0,
bStrokeVariation=0,
bArmStyle=0,
bLetterForm=0,
bMidline=0,
bXHeight=0,
)
_panoseDefaults = Panose()

_OS2Defaults = dict(
version=3,
Expand Down
7 changes: 7 additions & 0 deletions Lib/fontTools/ttLib/tables/O_S_2f_2.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@


class Panose(object):
def __init__(self, **kwargs):
_, names, _ = sstruct.getformat(panoseFormat)
for name in names:
setattr(self, name, kwargs.pop(name, 0))
for k in kwargs:
raise TypeError(f"Panose() got an unexpected keyword argument {k!r}")

def toXML(self, writer, ttFont):
formatstring, names, fixes = sstruct.getformat(panoseFormat)
for name in names:
Expand Down
45 changes: 45 additions & 0 deletions Tests/fontBuilder/fontBuilder_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,3 +420,48 @@ def test_unicodeVariationSequences(tmpdir):
fb.setupCharacterMap(cmap, uvs)
fb.save(outPath)
_verifyOutput(outPath, tables=["cmap"])


def test_setupPanose():
from fontTools.ttLib.tables.O_S_2f_2 import Panose

fb, advanceWidths, nameStrings = _setupFontBuilder(True)

pen = TTGlyphPen(None)
drawTestGlyph(pen)
glyph = pen.glyph()
glyphs = {".notdef": glyph, "A": glyph, "a": glyph, ".null": glyph}
fb.setupGlyf(glyphs)
metrics = {}
glyphTable = fb.font["glyf"]
for gn, advanceWidth in advanceWidths.items():
metrics[gn] = (advanceWidth, glyphTable[gn].xMin)
fb.setupHorizontalMetrics(metrics)

fb.setupHorizontalHeader(ascent=824, descent=200)
fb.setupNameTable(nameStrings)
fb.setupOS2()
fb.setupPost()

panoseValues = { # sample value of Times New Roman from https://www.w3.org/Printing/stevahn.html
"bFamilyType": 2,
"bSerifStyle": 2,
"bWeight": 6,
"bProportion": 3,
"bContrast": 5,
"bStrokeVariation": 4,
"bArmStyle": 5,
"bLetterForm": 2,
"bMidline": 3,
"bXHeight": 4,
}
panoseObj = Panose(**panoseValues)

for name in panoseValues:
assert getattr(fb.font["OS/2"].panose, name) == 0

fb.setupOS2(panose=panoseObj)
fb.setupPost()

for name, value in panoseValues.items():
assert getattr(fb.font["OS/2"].panose, name) == value

0 comments on commit 8846b57

Please sign in to comment.