def test_ufoCharacterMapping_glyphNames(): ufoPath = getFontPath("MutatorSansBoldWideMutated.ufo") reader = UFOReader(ufoPath) cmap, revCmap, anchors = fetchCharacterMappingAndAnchors( reader.getGlyphSet(), ufoPath, ["A"]) assert cmap[0x0041] == "A" assert revCmap["A"] == [0x0041] assert anchors == {"A": [("top", 645, 815)]}
def test_getUpdateInfo(tmpdir): ufoSource = getFontPath("MutatorSansBoldWideMutated.ufo") ufoPath = shutil.copytree(ufoSource, tmpdir / "test.ufo") reader = UFOReader(ufoPath, validate=False) glyphSet = reader.getGlyphSet() cmap, unicodes, anchors = fetchCharacterMappingAndAnchors(glyphSet, ufoPath) state = UFOState(reader, glyphSet, getUnicodesAndAnchors=lambda: (unicodes, anchors)) feaPath = pathlib.Path(reader.fs.getsyspath("/features.fea")) feaPath.touch() state = state.newState() (needsFeaturesUpdate, needsGlyphUpdate, needsInfoUpdate, needsCmapUpdate, needsLibUpdate) = state.getUpdateInfo() assert needsFeaturesUpdate assert not needsGlyphUpdate assert not needsInfoUpdate assert not needsCmapUpdate infoPath = pathlib.Path(reader.fs.getsyspath("/fontinfo.plist")) infoPath.touch() state = state.newState() (needsFeaturesUpdate, needsGlyphUpdate, needsInfoUpdate, needsCmapUpdate, needsLibUpdate) = state.getUpdateInfo() assert not needsFeaturesUpdate assert not needsGlyphUpdate assert needsInfoUpdate assert not needsCmapUpdate glyph = Glyph("A", None) ppen = RecordingPointPen() glyphSet.readGlyph("A", glyph, ppen) glyph.anchors[0]["x"] = 123 glyphSet.writeGlyph("A", glyph, ppen.replay) state = state.newState() (needsFeaturesUpdate, needsGlyphUpdate, needsInfoUpdate, needsCmapUpdate, needsLibUpdate) = state.getUpdateInfo() assert needsFeaturesUpdate assert needsGlyphUpdate assert not needsInfoUpdate assert not needsCmapUpdate glyph = Glyph("A", None) ppen = RecordingPointPen() glyphSet.readGlyph("A", glyph, ppen) glyph.unicodes = [123] glyphSet.writeGlyph("A", glyph, ppen.replay) state = state.newState() (needsFeaturesUpdate, needsGlyphUpdate, needsInfoUpdate, needsCmapUpdate, needsLibUpdate) = state.getUpdateInfo() assert not needsFeaturesUpdate assert needsGlyphUpdate assert not needsInfoUpdate assert needsCmapUpdate
def test_ufoCharacterMapping(): ufoPath = getFontPath("MutatorSansBoldWideMutated.ufo") reader = UFOReader(ufoPath) cmap, revCmap, anchors = fetchCharacterMappingAndAnchors( reader.getGlyphSet(), ufoPath) assert cmap[0x0041] == "A" assert revCmap["A"] == [0x0041] # MutatorSansBoldWideMutated.ufo/glyphs/A_.glif contains a commented-out <unicode> # tag, that must not be parsed, as well as a commented-out <anchor>. assert 0x1234 not in cmap assert anchors == { "A": [("top", 645, 815)], "E": [("top", 582.5, 815)], "macroncmb": [("_top", 0, 815)] }