Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def blankfont():
"""Return a subset of AdobeBlank.ttf containing the following glyphs/characters:
[
{gid=0, name=".notdef"},
{gid=1, name="a", code=0x61},
{gid=2, name="b", code=0x62},
{gid=3, name="c", code=0x63},
{gid=4, name="d", code=0x64},
{gid=5, name="e", code=0x65},
{gid=6, name="ccedilla", code=0x62},
{gid=7, name="uni0431", code=0x0431}, # CYRILLIC SMALL LETTER BE
{gid=8, name="u1F4A9", code=0x1F4A9}, # PILE OF POO
]
"""
face = hb.Face(ADOBE_BLANK_TTF_PATH.read_bytes())
font = hb.Font(face)
upem = face.upem
font.scale = (upem, upem)
hb.ot_font_set_funcs(font)
return font
def opensans():
"""Return a subset of OpenSans.ttf containing the following glyphs/characters:
[
{gid=0, name=".notdef"},
{gid=1, name="A", code=0x41},
]
"""
face = hb.Face(OPEN_SANS_TTF_PATH.read_bytes())
font = hb.Font(face)
upem = face.upem
font.scale = (upem, upem)
hb.ot_font_set_funcs(font)
return font
def shapeHB(text, font_name, font_size, features: Dict[str, bool] = None):
font = pdfmetrics.getFont(font_name)
if not isinstance(font, TTFont):
# TODO make valid for all types of fonts
raise RLKerningError("Not a TTF font")
fontdata = font.face._ttf_data
face = hb.Face(fontdata)
font = hb.Font(face)
# HB scales to integers in offset and advance so very big scale
# will divide by SCALE_MULT to get the actual size in fractional points
font.scale = (font_size * SCALE_MULT, font_size * SCALE_MULT)
hb.ot_font_set_funcs(font)
buf = hb.Buffer()
buf.add_str(text)
buf.guess_segment_properties()
hb.shape(font, buf, features)
return buf