blob: d024d33359371aeb052667448a366d557dea7516 [file] [log] [blame]
from fontTools.ttLib import TTFont
from fontTools.ttLib import ttGlyphSet
from fontTools.pens.recordingPen import RecordingPen
import os
import pytest
class TTGlyphSetTest(object):
@staticmethod
def getpath(testfile):
path = os.path.dirname(__file__)
return os.path.join(path, "data", testfile)
@pytest.mark.parametrize(
"fontfile, location, expected",
[
(
"I.ttf",
None,
[
("moveTo", ((175, 0),)),
("lineTo", ((367, 0),)),
("lineTo", ((367, 1456),)),
("lineTo", ((175, 1456),)),
("closePath", ()),
],
),
(
"I.ttf",
{},
[
("moveTo", ((175, 0),)),
("lineTo", ((367, 0),)),
("lineTo", ((367, 1456),)),
("lineTo", ((175, 1456),)),
("closePath", ()),
],
),
(
"I.ttf",
{"wght": 100},
[
("moveTo", ((175, 0),)),
("lineTo", ((271, 0),)),
("lineTo", ((271, 1456),)),
("lineTo", ((175, 1456),)),
("closePath", ()),
],
),
(
"I.ttf",
{"wght": 1000},
[
("moveTo", ((128, 0),)),
("lineTo", ((550, 0),)),
("lineTo", ((550, 1456),)),
("lineTo", ((128, 1456),)),
("closePath", ()),
],
),
(
"I.ttf",
{"wght": 1000, "wdth": 25},
[
("moveTo", ((140, 0),)),
("lineTo", ((553, 0),)),
("lineTo", ((553, 1456),)),
("lineTo", ((140, 1456),)),
("closePath", ()),
],
),
(
"I.ttf",
{"wght": 1000, "wdth": 50},
[
("moveTo", ((136, 0),)),
("lineTo", ((552, 0),)),
("lineTo", ((552, 1456),)),
("lineTo", ((136, 1456),)),
("closePath", ()),
],
),
(
"I.otf",
{"wght": 1000},
[
("moveTo", ((179, 74),)),
("lineTo", ((28, 59),)),
("lineTo", ((28, 0),)),
("lineTo", ((367, 0),)),
("lineTo", ((367, 59),)),
("lineTo", ((212, 74),)),
("lineTo", ((179, 74),)),
("closePath", ()),
("moveTo", ((179, 578),)),
("lineTo", ((212, 578),)),
("lineTo", ((367, 593),)),
("lineTo", ((367, 652),)),
("lineTo", ((28, 652),)),
("lineTo", ((28, 593),)),
("lineTo", ((179, 578),)),
("closePath", ()),
("moveTo", ((98, 310),)),
("curveTo", ((98, 205), (98, 101), (95, 0))),
("lineTo", ((299, 0),)),
("curveTo", ((296, 103), (296, 207), (296, 311))),
("lineTo", ((296, 342),)),
("curveTo", ((296, 447), (296, 551), (299, 652))),
("lineTo", ((95, 652),)),
("curveTo", ((98, 549), (98, 445), (98, 342))),
("lineTo", ((98, 310),)),
("closePath", ()),
],
),
(
# In this font, /I has an lsb of 30, but an xMin of 25, so an
# offset of 5 units needs to be applied when drawing the outline.
# See https://github.com/fonttools/fonttools/issues/2824
"issue2824.ttf",
None,
[
("moveTo", ((309, 180),)),
("qCurveTo", ((274, 151), (187, 136), (104, 166), (74, 201))),
("qCurveTo", ((45, 236), (30, 323), (59, 407), (95, 436))),
("qCurveTo", ((130, 466), (217, 480), (301, 451), (330, 415))),
("qCurveTo", ((360, 380), (374, 293), (345, 210), (309, 180))),
("closePath", ()),
],
),
],
)
def test_glyphset(self, fontfile, location, expected):
font = TTFont(self.getpath(fontfile))
glyphset = font.getGlyphSet(location=location)
assert isinstance(glyphset, ttGlyphSet._TTGlyphSet)
assert list(glyphset.keys()) == [".notdef", "I"]
assert "I" in glyphset
assert glyphset.has_key("I") # we should really get rid of this...
assert len(glyphset) == 2
pen = RecordingPen()
glyph = glyphset["I"]
assert glyphset.get("foobar") is None
assert isinstance(glyph, ttGlyphSet._TTGlyph)
is_glyf = fontfile.endswith(".ttf")
glyphType = ttGlyphSet._TTGlyphGlyf if is_glyf else ttGlyphSet._TTGlyphCFF
assert isinstance(glyph, glyphType)
glyph.draw(pen)
actual = pen.value
print(actual)
assert actual == expected, (location, actual, expected)