probonopd / font-leutkirch

Other
5 stars 0 forks source link

Reduce number of points used #23

Closed probonopd closed 4 years ago

probonopd commented 4 years ago

mikado

Play "Font Mikado":

Add points at the extrema using the DTL LetterModeler Glyph Editor Improve tool

Then remove points that are not extrema, inflection points, or tangential points of curves using the DTL LetterModeler Glyph Editor Utilities, Delete point.

Before:

before

After:

after

This is a requirement so that we can apply "scale intelligent" afterwards without unintended side effects.

orig

This is an example of what happens if this is not done:

scale_intelligent

probonopd commented 4 years ago

I have written a blog article about the "Font Mikado" process and tools used:

https://medium.com/@probonopd/font-mikado-making-a-libre-typeface-and-learning-a-lot-e5e200eead5b

probonopd commented 4 years ago

After having played "Font Mikado" on all five weights, we need to do some consistency checking.

One of the rules for setting points from the Adobe black book is that one should be consistent in setting points. For me this implies that for every glyph, the number of points should be the same for each weight. There are some characters where this is clearly the case, but for "corner cases" it may not. So I need to compare the original and edited versions of all glyphs and see whether we have more than 2 different numbers of points across those; and if yes, inspect those glyphs more closely and apply the changes consistently.

# For each glyph in the font, count the number of lines in the glyph file
# across unedited and edited UFOs for all weights

GLYPHS=$(find font-leutkirch/ -name "*.glif" -exec basename {} \; | sort | uniq)

rm fonts.list || true
for GLYPH in $GLYPHS ; do
  echo "$GLYPH" >> fonts.list
  find font-leutkirch/ -name "$GLYPH" -exec wc -l {} \; \
    | sed  's|font-leutkirch/Opened in OFF saved in LeMo||g' \
    | sed 's| normalized/||g' \
    | sed 's| and Font Mikado||g' >> fonts.list
  echo "-------------"  >> fonts.list
done

# Print out the problematic glyphs - ones where we have more than 2 different numbers of lines
# across all the observed UFOs

rm fonts.result || true
for GLYPH in $GLYPHS ; do
  LINECOUNTS=$(grep /"$GLYPH" fonts.list | cut -d " " -f 1 | sort | uniq | wc -l)
  if [ "$LINECOUNTS" -gt 2 ] ; then
    echo "$GLYPH" >> fonts.result
    echo "$LINECOUNTS" >> fonts.result
    echo "-------------"  >> fonts.result
  fi
done

# Turns out we have 90 problematic glyphs:
# Glyphs where we have a different number of lines for the glyph across the different weights
# in the original and/or edited UFOs

Results in:

adieresis.glif
4
-------------
ae.glif
4
-------------
a.glif
4
-------------
alpha.glif
5
-------------
ampersand.glif
7
-------------
asciitilde.glif
4
-------------
at.glif
8
-------------
beta.glif
5
-------------
B_eta.glif
5
-------------
B_.glif
3
-------------
cent.glif
5
-------------
c.glif
3
-------------
C_.glif
3
-------------
dcroat.glif
7
-------------
d.glif
3
-------------
dollar.glif
9
-------------
edieresis.glif
5
-------------
e.glif
5
-------------
eng.glif
5
-------------
E_ng.glif
4
-------------
epsilon.glif
6
-------------
eta.glif
5
-------------
eth.glif
6
-------------
E_th.glif
3
-------------
f.glif
4
-------------
germandbls.glif
3
-------------
g.glif
7
-------------
G_.glif
4
-------------
hbar.glif
8
-------------
ij.glif
3
-------------
iota.glif
4
-------------
j.glif
5
-------------
J_.glif
4
-------------
m.glif
3
-------------
napostrophe.glif
4
-------------
nine.glif
3
-------------
oe.glif
4
-------------
omega.glif
3
-------------
onehalf.glif
5
-------------
ordfeminine.glif
4
-------------
oslash.glif
8
-------------
O_slash.glif
7
-------------
parenleft.glif
4
-------------
parenright.glif
4
-------------
percent.glif
3
-------------
p.glif
3
-------------
phi.glif
4
-------------
q.glif
3
-------------
Q_.glif
4
-------------
questiondown.glif
5
-------------
question.glif
6
-------------
registered.glif
6
-------------
R_.glif
4
-------------
rho.glif
5
-------------
R_ho.glif
3
-------------
section.glif
3
-------------
s.glif
4
-------------
S_.glif
5
-------------
sigma.glif
3
-------------
six.glif
4
-------------
sterling.glif
3
-------------
tbar.glif
3
-------------
t.glif
3
-------------
thorn.glif
4
-------------
threequarters.glif
3
-------------
tilde.glif
5
-------------
two.glif
3
-------------
uni00B_2.glif
5
-------------
uni03B_C_.glif
6
-------------
uni0412.glif
4
-------------
uni0417.glif
5
-------------
uni0419.glif
4
-------------
uni0421.glif
3
-------------
uni042D_.glif
4
-------------
uni042F_.glif
4
-------------
uni0430.glif
6
-------------
uni0431.glif
5
-------------
uni0432.glif
4
-------------
uni0435.glif
5
-------------
uni0437.glif
7
-------------
uni043B_.glif
3
-------------
uni0440.glif
4
-------------
uni0444.glif
3
-------------
uni0447.glif
4
-------------
uni044F_.glif
6
-------------
uni0451.glif
4
-------------
uni2117.glif
4
-------------
upsilon.glif
3
-------------
xi.glif
4
-------------
zeta.glif
4
-------------

"3" means that besides the number of glyphs in the original, I have 2 different numbers of glyphs in the edited version, hence I have some inconsistency across the weights. The higher the number, the more inconsistencies in the number of points across weights.

As we can see, the 8 (eight.glyph) is not in this list because apparently I managed to end up with the same number of points across all weights for this glyph (indicating good consistency), which is as it should be. But unfortunately each character is as straightforward.

So I need to compare and rework the edited versions of those glyphs because apparently when playing Font Mikado I made different decisions when editing the different weights of the same glyph, resulting in an inconsistent number of points across weights.

probonopd commented 4 years ago

Turns out that one can play “Font Mikado” using FontForge too, by selecting a point and then pressing Ctrl-M (“Merge”):

mikado

https://github.com/fontforge/fontforge/issues/4337

probonopd commented 4 years ago

Implemented