mirror of
https://github.com/daylinmorgan/monolisa-nerdfont-patch.git
synced 2024-12-22 06:50:44 -06:00
update font-patcher and add update fonts script
This commit is contained in:
parent
85bb7bb025
commit
bbb93d09b8
2 changed files with 32 additions and 36 deletions
49
font-patcher
49
font-patcher
|
@ -659,10 +659,8 @@ class font_patcher:
|
||||||
careful = True
|
careful = True
|
||||||
|
|
||||||
if exactEncoding is False:
|
if exactEncoding is False:
|
||||||
sourceFontList = []
|
sourceFontList = list(range(sourceFontStart, sourceFontEnd + 1))
|
||||||
sourceFontCounter = 0
|
sourceFontCounter = 0
|
||||||
for i in range(sourceFontStart, sourceFontEnd + 1):
|
|
||||||
sourceFontList.append(format(i, 'X'))
|
|
||||||
|
|
||||||
scale_factor = 0
|
scale_factor = 0
|
||||||
if scaleGlyph:
|
if scaleGlyph:
|
||||||
|
@ -675,21 +673,18 @@ class font_patcher:
|
||||||
# and only copy those that are not already contained in the source font
|
# and only copy those that are not already contained in the source font
|
||||||
if symbolFontStart == 0:
|
if symbolFontStart == 0:
|
||||||
symbolFont.selection.all()
|
symbolFont.selection.all()
|
||||||
self.sourceFont.selection.all()
|
|
||||||
careful = True
|
careful = True
|
||||||
else:
|
else:
|
||||||
symbolFont.selection.select((str("ranges"), str("unicode")), symbolFontStart, symbolFontEnd)
|
symbolFont.selection.select((str("ranges"), str("unicode")), symbolFontStart, symbolFontEnd)
|
||||||
self.sourceFont.selection.select((str("ranges"), str("unicode")), sourceFontStart, sourceFontEnd)
|
|
||||||
|
|
||||||
# Get number of selected non-empty glyphs @TODO FIXME
|
# Get number of selected non-empty glyphs
|
||||||
for index, sym_glyph in enumerate(symbolFont.selection.byGlyphs):
|
symbolFontSelection = list(symbolFont.selection.byGlyphs)
|
||||||
glyphSetLength += 1
|
glyphSetLength = len(symbolFontSelection)
|
||||||
# end for
|
|
||||||
|
|
||||||
if self.args.quiet is False:
|
if self.args.quiet is False:
|
||||||
sys.stdout.write("Adding " + str(max(1, glyphSetLength)) + " Glyphs from " + setName + " Set \n")
|
sys.stdout.write("Adding " + str(max(1, glyphSetLength)) + " Glyphs from " + setName + " Set \n")
|
||||||
|
|
||||||
for index, sym_glyph in enumerate(symbolFont.selection.byGlyphs):
|
for index, sym_glyph in enumerate(symbolFontSelection):
|
||||||
index = max(1, index)
|
index = max(1, index)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -700,25 +695,16 @@ class font_patcher:
|
||||||
if exactEncoding:
|
if exactEncoding:
|
||||||
# use the exact same hex values for the source font as for the symbol font
|
# use the exact same hex values for the source font as for the symbol font
|
||||||
currentSourceFontGlyph = sym_glyph.encoding
|
currentSourceFontGlyph = sym_glyph.encoding
|
||||||
|
|
||||||
# Save as a hex string without the '0x' prefix
|
|
||||||
copiedToSlot = format(sym_glyph.unicode, 'X')
|
|
||||||
else:
|
else:
|
||||||
# use source font defined hex values based on passed in start and end
|
# use source font defined hex values based on passed in start and end
|
||||||
# convince that this string really is a hex:
|
currentSourceFontGlyph = sourceFontList[sourceFontCounter]
|
||||||
currentSourceFontGlyph = int("0x" + sourceFontList[sourceFontCounter], 16)
|
|
||||||
copiedToSlot = sourceFontList[sourceFontCounter]
|
|
||||||
sourceFontCounter += 1
|
sourceFontCounter += 1
|
||||||
|
|
||||||
if int(copiedToSlot, 16) < 0:
|
|
||||||
print("Found invalid glyph slot number. Skipping.")
|
|
||||||
continue
|
|
||||||
|
|
||||||
if self.args.quiet is False:
|
if self.args.quiet is False:
|
||||||
if self.args.progressbars:
|
if self.args.progressbars:
|
||||||
update_progress(round(float(index + 1) / glyphSetLength, 2))
|
update_progress(round(float(index + 1) / glyphSetLength, 2))
|
||||||
else:
|
else:
|
||||||
progressText = "\nUpdating glyph: " + str(sym_glyph) + " " + str(sym_glyph.glyphname) + " putting at: " + copiedToSlot
|
progressText = "\nUpdating glyph: {} {} putting at: {:X}".format(sym_glyph, sym_glyph.glyphname, currentSourceFontGlyph)
|
||||||
sys.stdout.write(progressText)
|
sys.stdout.write(progressText)
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
@ -726,20 +712,17 @@ class font_patcher:
|
||||||
sym_dim = get_glyph_dimensions(sym_glyph)
|
sym_dim = get_glyph_dimensions(sym_glyph)
|
||||||
|
|
||||||
# check if a glyph already exists in this location
|
# check if a glyph already exists in this location
|
||||||
if copiedToSlot.startswith("uni"):
|
|
||||||
copiedToSlot = copiedToSlot[3:]
|
|
||||||
codepoint = int("0x" + copiedToSlot, 16)
|
|
||||||
if careful or 'careful' in sym_attr['params']:
|
if careful or 'careful' in sym_attr['params']:
|
||||||
if codepoint in self.sourceFont:
|
if currentSourceFontGlyph in self.sourceFont:
|
||||||
if self.args.quiet is False:
|
if self.args.quiet is False:
|
||||||
print(" Found existing Glyph at {}. Skipping...".format(copiedToSlot))
|
print(" Found existing Glyph at {:X}. Skipping...".format(currentSourceFontGlyph))
|
||||||
# We don't want to touch anything so move to next Glyph
|
# We don't want to touch anything so move to next Glyph
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# If we overwrite an existing glyph all subtable entries regarding it will be wrong
|
# If we overwrite an existing glyph all subtable entries regarding it will be wrong
|
||||||
# (Probably; at least if we add a symbol and do not substitude a ligature or such)
|
# (Probably; at least if we add a symbol and do not substitude a ligature or such)
|
||||||
if codepoint in self.sourceFont:
|
if currentSourceFontGlyph in self.sourceFont:
|
||||||
self.sourceFont[codepoint].removePosSub("*")
|
self.sourceFont[currentSourceFontGlyph].removePosSub("*")
|
||||||
|
|
||||||
# Select and copy symbol from its encoding point
|
# Select and copy symbol from its encoding point
|
||||||
# We need to do this select after the careful check, this way we don't
|
# We need to do this select after the careful check, this way we don't
|
||||||
|
@ -791,7 +774,7 @@ class font_patcher:
|
||||||
if 'overlap' in sym_attr['params']:
|
if 'overlap' in sym_attr['params']:
|
||||||
scale_ratio_x *= 1 + sym_attr['params']['overlap']
|
scale_ratio_x *= 1 + sym_attr['params']['overlap']
|
||||||
scale_ratio_y *= 1 + sym_attr['params']['overlap']
|
scale_ratio_y *= 1 + sym_attr['params']['overlap']
|
||||||
self.sourceFont.transform(psMat.scale(scale_ratio_x, scale_ratio_y))
|
self.sourceFont[currentSourceFontGlyph].transform(psMat.scale(scale_ratio_x, scale_ratio_y))
|
||||||
|
|
||||||
# Use the dimensions from the newly pasted and stretched glyph
|
# Use the dimensions from the newly pasted and stretched glyph
|
||||||
sym_dim = get_glyph_dimensions(self.sourceFont[currentSourceFontGlyph])
|
sym_dim = get_glyph_dimensions(self.sourceFont[currentSourceFontGlyph])
|
||||||
|
@ -822,7 +805,7 @@ class font_patcher:
|
||||||
x_align_distance += overlap_width
|
x_align_distance += overlap_width
|
||||||
|
|
||||||
align_matrix = psMat.translate(x_align_distance, y_align_distance)
|
align_matrix = psMat.translate(x_align_distance, y_align_distance)
|
||||||
self.sourceFont.transform(align_matrix)
|
self.sourceFont[currentSourceFontGlyph].transform(align_matrix)
|
||||||
|
|
||||||
# Needed for setting 'advance width' on each glyph so they do not overlap,
|
# Needed for setting 'advance width' on each glyph so they do not overlap,
|
||||||
# also ensures the font is considered monospaced on Windows by setting the
|
# also ensures the font is considered monospaced on Windows by setting the
|
||||||
|
@ -834,12 +817,6 @@ class font_patcher:
|
||||||
# does not overlap the bearings (edges)
|
# does not overlap the bearings (edges)
|
||||||
self.remove_glyph_neg_bearings(self.sourceFont[currentSourceFontGlyph])
|
self.remove_glyph_neg_bearings(self.sourceFont[currentSourceFontGlyph])
|
||||||
|
|
||||||
# reset selection so iteration works properly @TODO fix? rookie misunderstanding?
|
|
||||||
# This is likely needed because the selection was changed when the glyph was copy/pasted
|
|
||||||
if symbolFontStart == 0:
|
|
||||||
symbolFont.selection.all()
|
|
||||||
else:
|
|
||||||
symbolFont.selection.select((str("ranges"), str("unicode")), symbolFontStart, symbolFontEnd)
|
|
||||||
# end for
|
# end for
|
||||||
|
|
||||||
if self.args.quiet is False or self.args.progressbars:
|
if self.args.quiet is False or self.args.progressbars:
|
||||||
|
|
19
update-fonts
Executable file
19
update-fonts
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
PATCHED_FONTS=./patched
|
||||||
|
INSTALL_DIR=~/.local/share/fonts/MonoLisa
|
||||||
|
|
||||||
|
for font_dir in $PATCHED_FONTS/*; do
|
||||||
|
patched_dir="${font_dir##*/}"
|
||||||
|
echo ">>> $patched_dir"
|
||||||
|
|
||||||
|
if [[ -d "${INSTALL_DIR}/${patched_dir}" ]]; then
|
||||||
|
echo "deleting existing version"
|
||||||
|
rm -rf $INSTALL_DIR/$patched_dir
|
||||||
|
fi
|
||||||
|
|
||||||
|
dest=$INSTALL_DIR/$patched_dir
|
||||||
|
mkdir $dest && cp -v $font_dir/* $dest
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Don't forget to run 'fc-cache -f -v'"
|
Loading…
Reference in a new issue