formatting
This commit is contained in:
parent
a681245093
commit
ff85c93551
5 changed files with 641 additions and 549 deletions
177
common/Font.py
177
common/Font.py
|
@ -7,64 +7,64 @@ from pathlib import Path
|
|||
# note: overwritten/extended by the content of "glypNamesToUnicode.txt"
|
||||
# when addon is registered in __init__.py
|
||||
name_to_glyph_d = {
|
||||
"zero": "0",
|
||||
"one": "1",
|
||||
"two": "2",
|
||||
"three": "3",
|
||||
"four": "4",
|
||||
"five": "5",
|
||||
"six": "6",
|
||||
"seven": "7",
|
||||
"eight": "8",
|
||||
"nine": "9",
|
||||
"ampersand": "&",
|
||||
"backslash": "\\",
|
||||
"colon": ":",
|
||||
"comma": ",",
|
||||
"equal": "=",
|
||||
"exclam": "!",
|
||||
"hyphen": "-",
|
||||
"minus": "−",
|
||||
"parenleft": "(",
|
||||
"parenright": "(",
|
||||
"period": ".",
|
||||
"plus": "+",
|
||||
"question": "?",
|
||||
"quotedblleft": "“",
|
||||
"quotedblright": "”",
|
||||
"semicolon": ";",
|
||||
"slash": "/",
|
||||
"space": " ",
|
||||
}
|
||||
"zero": "0",
|
||||
"one": "1",
|
||||
"two": "2",
|
||||
"three": "3",
|
||||
"four": "4",
|
||||
"five": "5",
|
||||
"six": "6",
|
||||
"seven": "7",
|
||||
"eight": "8",
|
||||
"nine": "9",
|
||||
"ampersand": "&",
|
||||
"backslash": "\\",
|
||||
"colon": ":",
|
||||
"comma": ",",
|
||||
"equal": "=",
|
||||
"exclam": "!",
|
||||
"hyphen": "-",
|
||||
"minus": "−",
|
||||
"parenleft": "(",
|
||||
"parenright": "(",
|
||||
"period": ".",
|
||||
"plus": "+",
|
||||
"question": "?",
|
||||
"quotedblleft": "“",
|
||||
"quotedblright": "”",
|
||||
"semicolon": ";",
|
||||
"slash": "/",
|
||||
"space": " ",
|
||||
}
|
||||
|
||||
space_d = {}
|
||||
|
||||
known_misspellings = {
|
||||
# simple misspelling
|
||||
"excent" : "accent",
|
||||
"overdot" : "dotaccent",
|
||||
"diaresis": "dieresis",
|
||||
"diaeresis": "dieresis",
|
||||
# character does not exist.. maybe something else
|
||||
"Odoubleacute": "Ohungarumlaut",
|
||||
"Udoubleacute": "Uhungarumlaut",
|
||||
"Wcaron": "Wcircumflex",
|
||||
"Neng": "Nlongrightleg",
|
||||
"Lgrave": "Lacute",
|
||||
# currency stuff
|
||||
"doller": "dollar",
|
||||
"euro": "Euro",
|
||||
"yuan": "yen", # https://en.wikipedia.org/wiki/Yen_and_yuan_sign
|
||||
"pound": "sterling",
|
||||
# whoopsie
|
||||
"__": "_",
|
||||
}
|
||||
# simple misspelling
|
||||
"excent": "accent",
|
||||
"overdot": "dotaccent",
|
||||
"diaresis": "dieresis",
|
||||
"diaeresis": "dieresis",
|
||||
# character does not exist.. maybe something else
|
||||
"Odoubleacute": "Ohungarumlaut",
|
||||
"Udoubleacute": "Uhungarumlaut",
|
||||
"Wcaron": "Wcircumflex",
|
||||
"Neng": "Nlongrightleg",
|
||||
"Lgrave": "Lacute",
|
||||
# currency stuff
|
||||
"doller": "dollar",
|
||||
"euro": "Euro",
|
||||
"yuan": "yen", # https://en.wikipedia.org/wiki/Yen_and_yuan_sign
|
||||
"pound": "sterling",
|
||||
# whoopsie
|
||||
"__": "_",
|
||||
}
|
||||
|
||||
|
||||
def fix_glyph_name_misspellings(name):
|
||||
for misspelling in known_misspellings:
|
||||
if misspelling in name:
|
||||
return name.replace(misspelling,
|
||||
known_misspellings[misspelling])
|
||||
return name.replace(misspelling, known_misspellings[misspelling])
|
||||
return name
|
||||
|
||||
|
||||
|
@ -88,33 +88,37 @@ def generate_from_file_d(filepath):
|
|||
d = {}
|
||||
with open(filepath) as f:
|
||||
for line in f:
|
||||
if line[0] == '#':
|
||||
if line[0] == "#":
|
||||
continue
|
||||
split = line.split(' ')
|
||||
split = line.split(" ")
|
||||
if len(split) == 2:
|
||||
(name, hexstr) = line.split(' ')
|
||||
(name, hexstr) = line.split(" ")
|
||||
val = chr(int(hexstr, base=16))
|
||||
d[name] = val
|
||||
if len(split) == 3:
|
||||
# we might have a parameter, like for the spaces
|
||||
(name, hexstr, parameter) = line.split(' ')
|
||||
(name, hexstr, parameter) = line.split(" ")
|
||||
parameter_value = float(parameter)
|
||||
val = chr(int(hexstr, base=16))
|
||||
d[name] = [val, parameter_value]
|
||||
return d
|
||||
|
||||
|
||||
def generate_name_to_glyph_d():
|
||||
return generate_from_file_d(f"{Path(__file__).parent}/glyphNamesToUnicode.txt")
|
||||
|
||||
|
||||
def generate_space_d():
|
||||
return generate_from_file_d(f"{Path(__file__).parent}/spacesUnicode.txt")
|
||||
|
||||
|
||||
def init():
|
||||
global name_to_glyph_d
|
||||
global space_d
|
||||
name_to_glyph_d = generate_name_to_glyph_d()
|
||||
space_d = generate_space_d()
|
||||
|
||||
|
||||
class FontFace:
|
||||
"""FontFace is a class holding glyphs
|
||||
|
||||
|
@ -127,8 +131,8 @@ class FontFace:
|
|||
:param filenames: from which file is this face
|
||||
:type filenames: List[str]
|
||||
"""
|
||||
def __init__(self,
|
||||
glyphs = {}):
|
||||
|
||||
def __init__(self, glyphs={}):
|
||||
self.glyphs = glyphs
|
||||
# lists have to be initialized in __init__
|
||||
# to be attributes per instance.
|
||||
|
@ -139,13 +143,15 @@ class FontFace:
|
|||
self.filepaths = []
|
||||
self.unit_factor = 1.0
|
||||
|
||||
|
||||
class Font:
|
||||
"""Font holds the faces and various metadata for a font
|
||||
|
||||
:param faces: dictionary of faces, defaults to ``Dict[str, FontFace]``
|
||||
:type faces: Dict[str, FontFace]
|
||||
"""
|
||||
def __init__(self, faces = Dict[str, FontFace]):
|
||||
|
||||
def __init__(self, faces=Dict[str, FontFace]):
|
||||
self.faces = faces
|
||||
|
||||
|
||||
|
@ -156,14 +162,18 @@ def register_font(font_name, face_name, glyphs_in_fontfile, filepath):
|
|||
fonts[font_name].faces[face_name] = FontFace({})
|
||||
fonts[font_name].faces[face_name].glyphs_in_fontfile = glyphs_in_fontfile
|
||||
else:
|
||||
fonts[font_name].faces[face_name].glyphs_in_fontfile = \
|
||||
list(set(fonts[font_name].faces[face_name].glyphs_in_fontfile + glyphs_in_fontfile))
|
||||
fonts[font_name].faces[face_name].glyphs_in_fontfile = list(
|
||||
set(
|
||||
fonts[font_name].faces[face_name].glyphs_in_fontfile
|
||||
+ glyphs_in_fontfile
|
||||
)
|
||||
)
|
||||
if filepath not in fonts[font_name].faces[face_name].filepaths:
|
||||
fonts[font_name].faces[face_name].filepaths.append(filepath)
|
||||
|
||||
|
||||
|
||||
def add_glyph(font_name, face_name, glyph_id, glyph_object):
|
||||
""" add_glyph adds a glyph to a FontFace
|
||||
"""add_glyph adds a glyph to a FontFace
|
||||
it creates the :class:`Font` and :class:`FontFace` if it does not exist yet
|
||||
|
||||
:param font_name: The Font you want to add the glyph to
|
||||
|
@ -187,8 +197,9 @@ def add_glyph(font_name, face_name, glyph_id, glyph_object):
|
|||
if glyph_id not in fonts[font_name].faces[face_name].loaded_glyphs:
|
||||
fonts[font_name].faces[face_name].loaded_glyphs.append(glyph_id)
|
||||
|
||||
|
||||
def get_glyph(font_name, face_name, glyph_id, alternate=0):
|
||||
""" add_glyph adds a glyph to a FontFace
|
||||
"""add_glyph adds a glyph to a FontFace
|
||||
it creates the :class:`Font` and :class:`FontFace` if it does not exist yet
|
||||
|
||||
:param font_name: The :class:`Font` you want to get the glyph from
|
||||
|
@ -219,14 +230,17 @@ def get_glyph(font_name, face_name, glyph_id, alternate=0):
|
|||
if glyph_id not in fonts[font_name].faces[face_name].missing_glyphs:
|
||||
fonts[font_name].faces[face_name].missing_glyphs.append(glyph_id)
|
||||
return None
|
||||
|
||||
|
||||
return fonts[font_name].faces[face_name].glyphs.get(glyph_id)[alternate]
|
||||
|
||||
|
||||
def test_glyphs_availability(font_name, face_name, text):
|
||||
# maybe there is NOTHING yet
|
||||
if not fonts.keys().__contains__(font_name) or \
|
||||
fonts[font_name].faces.get(face_name) == None:
|
||||
return "", "", text # <loaded>, <missing>, <maybe>
|
||||
if (
|
||||
not fonts.keys().__contains__(font_name)
|
||||
or fonts[font_name].faces.get(face_name) == None
|
||||
):
|
||||
return "", "", text # <loaded>, <missing>, <maybe>
|
||||
|
||||
loaded = []
|
||||
missing = []
|
||||
|
@ -240,36 +254,45 @@ def test_glyphs_availability(font_name, face_name, text):
|
|||
if c not in fonts[font_name].faces[face_name].missing_glyphs:
|
||||
fonts[font_name].faces[face_name].missing_glyphs.append(c)
|
||||
missing.append(c)
|
||||
return ''.join(loaded), ''.join(missing), ''.join(maybe), fonts[font_name].faces[face_name].filepaths
|
||||
return (
|
||||
"".join(loaded),
|
||||
"".join(missing),
|
||||
"".join(maybe),
|
||||
fonts[font_name].faces[face_name].filepaths,
|
||||
)
|
||||
|
||||
|
||||
def get_loaded_fonts():
|
||||
return fonts.keys()
|
||||
|
||||
|
||||
def get_loaded_fonts_and_faces():
|
||||
out = []
|
||||
for f in fonts.keys():
|
||||
for ff in fonts[f].faces.keys():
|
||||
out.append([f,ff])
|
||||
out.append([f, ff])
|
||||
return out
|
||||
|
||||
|
||||
MISSING_FONT = 0
|
||||
MISSING_FACE = 1
|
||||
|
||||
|
||||
def test_availability(font_name, face_name, text):
|
||||
if not fonts.keys().__contains__(font_name):
|
||||
return MISSING_FONT
|
||||
if fonts[font_name].faces.get(face_name) == None:
|
||||
return MISSING_FACE
|
||||
loaded, missing, maybe, filepaths = test_glyphs_availability(font_name,
|
||||
face_name,
|
||||
text)
|
||||
loaded, missing, maybe, filepaths = test_glyphs_availability(
|
||||
font_name, face_name, text
|
||||
)
|
||||
return {
|
||||
"loaded": loaded,
|
||||
"missing": missing,
|
||||
"maybe": maybe,
|
||||
"filepaths": filepaths,
|
||||
}
|
||||
|
||||
"loaded": loaded,
|
||||
"missing": missing,
|
||||
"maybe": maybe,
|
||||
"filepaths": filepaths,
|
||||
}
|
||||
|
||||
|
||||
# holds all fonts
|
||||
fonts = {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue