Problem with stemhist belonging to the AFDKO / Big differences between the output of AFDKO 2.5 and 2.0 / Bug or bugfix?

Arno Enslin's picture

The results of stemhist is very different in AFDKO version 25_21898 and AFDKO version 20_26. In the new version stemhist does not check most of the glyphs. I am using the option "-all". I darkly remember, that there was a change, but I cannot remember, where I have read about it. Actually it looks more than a bug than a bug fix.

This is, what the actual version of stemhist reports for the horizontal stems – as you can see, it does not recognize the basis alphabet:

25 80 ['Acircumflex', 'Acircumflex.smcp', 'Ecircumflex', 'Ecircumflex.smcp', 'Icircumflex', 'Icircumflex.smcp', 'Ocircumflex', 'Ocircumflex.smcp', 'Scaron', 'Scaron.smcp', 'Ucircumflex', 'Ucircumflex.smcp', 'Zcaron', 'Zcaron.smcp', 'acircumflex', 'caron', 'caron.caps', 'circumflex', 'circumflex.caps', 'ecircumflex', 'icircumflex', 'ocircumflex', 'scaron', 'ucircumflex', 'zcaron']

12 48 ['divide', 'equal', 'greaterequal', 'lessequal', 'logicalnot', 'minus', 'notequal', 'plus', 'plusminus']

7 31 ['A.smcp', 'Aacute.smcp', 'Acircumflex.smcp', 'Adieresis.smcp', 'Agrave.smcp', 'Aring.smcp', 'Atilde.smcp']

6 30 ['four.dnom', 'four.numr', 'four.sinf', 'four.sups', 'onequarter', 'threequarters']

5 35 ['Euro', 'c_t', 's_t', 'yen']

5 39 ['Euro', 'yen', 'yen.smcp']

3 21 ['longs_longs', 'longs_longs_i', 'longs_longs_j']

3 33 ['AE.smcp', 'bracketleft', 'bracketright']

3 47 ['longs_longs', 'longs_longs_i', 'longs_longs_j']

3 51 ['Eth', 'numbersign']

3 115 ['four.dnom', 'onequarter', 'threequarters']

2 34 ['bracketleft', 'bracketright']

2 37 ['Euro.smcp', 'sterling.smcp']

2 44 ['numbersign']

2 49 ['longs_longs_t', 'numbersign']

1 150 ['yen.smcp']

1 36 ['Eth.smcp']

1 38 ['sterling']

1 40 ['product']

1 41 ['Delta']

1 45 ['Eth.smcp']

1 46 ['emdash']

1 55 ['asciicircum']

1 209 ['yen']

========================================

And this is, what the older version reports with the same option:

80 31 ['A.smcp', 'AE', 'AE.smcp', 'Aacute.smcp', 'Acircumflex.smcp', 'Adieresis.smcp', 'Agrave.smcp', 'Aring.smcp', 'Atilde.smcp', 'B', 'B.smcp', 'E', 'E.smcp', 'Eacute', 'Eacute.smcp', 'Ecircumflex', 'Ecircumflex.smcp', 'Edieresis', 'Edieresis.smcp', 'Egrave', 'Egrave.smcp', 'F.smcp', 'O.smcp', 'OE', 'OE.smcp', 'Oacute.smcp', 'Ocircumflex.smcp', 'Odieresis.smcp', 'Ograve.smcp', 'Oslash.smcp', 'Otilde.smcp', 'P.smcp', 'Q.alt', 'R.smcp', 'S.smcp', 'Scaron.smcp', 'Thorn.smcp', 'ampersand', 'currency', 'currency.smcp', 'dollar.smcp', 'e', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'f_f_k', 'f_k', 'fi.smcp', 'fl.smcp', 'germandbls.smcp', 'k', 'longs_k', 'longs_longs_k', 'nine.lnum', 'nine.pnum_lnum', 'nine.smcp', 'o', 'oacute', 'ocircumflex', 'odieresis', 'oe', 'ograve', 'oslash', 'otilde', 'six.lnum', 'six.pnum_lnum', 'six.smcp', 'uni1E9E.smcp', 'v', 'w', 'x', 'y', 'yacute', 'ydieresis', 'z', 'zcaron', 'zero.smcp']

46 30 ['C.smcp', 'Ccedilla', 'Ccedilla.smcp', 'D.smcp', 'Eth.smcp', 'G.smcp', 'O.smcp', 'OE.smcp', 'Oacute.smcp', 'Ocircumflex.smcp', 'Odieresis.smcp', 'Ograve.smcp', 'Oslash.smcp', 'Otilde.smcp', 'Q.smcp', 'R.smcp', 'ccedilla', 'cedilla', 'cedilla.caps', 'daggerdbl', 'e', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'eight.smcp', 'four.dnom', 'four.numr', 'four.sinf', 'four.sups', 'germandbls', 'k', 'onequarter', 'registered', 's', 's_p', 's_t', 'scaron', 'six', 'six.pnum_onum', 'threequarters', 'zero.smcp']

41 32 ['Euro.smcp', 'K', 'P.smcp', 'Q', 'S', 'Scaron', 'T.smcp', 'Thorn.smcp', 'copyright', 'currency', 'eight', 'eight.lnum', 'eight.pnum_lnum', 'eight.pnum_onum', 'eth', 'nine', 'nine.pnum_onum', 'o', 'oacute', 'ocircumflex', 'odieresis', 'oe', 'ograve', 'oslash', 'otilde', 'partialdiff', 's', 's_p', 's_t', 'scaron', 'three.dnom', 'three.numr', 'three.sinf', 'threequarters', 'threesuperior', 'uni1E9E', 'zero.lnum', 'zero.pnum_lnum']

41 41 ['Delta', 'T', 'at', 'copyright', 'f', 'f_b', 'f_f', 'f_f_b', 'f_f_h', 'f_f_i', 'f_f_j', 'f_f_k', 'f_f_l', 'f_f_t', 'f_h', 'f_i', 'f_j', 'f_k', 'f_l', 'f_longs', 'f_t', 'fi', 'fl', 'florin.smcp', 'longs', 'longs_b', 'longs_f', 'longs_h', 'longs_i', 'longs_j', 'longs_k', 'longs_l', 'longs_longs', 'longs_longs_b', 'longs_longs_h', 'longs_longs_i', 'longs_longs_j', 'longs_longs_k', 'longs_longs_l', 'registered', 'sterling.smcp']

41 42 ['U.smcp', 'Uacute.smcp', 'Ucircumflex.smcp', 'Udieresis.smcp', 'Ugrave.smcp', 'c', 'c_h', 'c_t', 'ccedilla', 'f_f', 'f_f_b', 'f_f_h', 'f_f_i', 'f_f_j', 'f_f_k', 'f_f_l', 'f_f_t', 'f_longs', 'longs_f', 'longs_longs', 'longs_longs_b', 'longs_longs_h', 'longs_longs_i', 'longs_longs_j', 'longs_longs_k', 'longs_longs_l', 'longs_longs_t', 'longs_p', 'longs_t', 'radical', 'section']

35 26 ['K.smcp', 'M.smcp', 'Malt.smcp', 'Q.smcp', 'Y.smcp', 'Yacute.smcp', 'Ydieresis.smcp', 'dollar', 'eight.dnom', 'eight.numr', 'eight.sinf', 'eight.sups', 'g', 'n', 'ntilde', 'ordmasculine', 'percent', 'perthousand', 'three.dnom', 'three.numr', 'three.sinf', 'threequarters', 'threesuperior', 'zero.dnom', 'zero.numr', 'zero.sinf', 'zero.sups']

35 35 ['AE', 'B', 'D', 'E', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Eth', 'Euro', 'F', 'OE', 'Z', 'Zcaron', 'b', 'c_t', 'd', 'dagger', 'daggerdbl', 'eth', 'f_b', 'f_f_b', 'longs_b', 'longs_longs_b', 'longs_p', 'p', 'q', 's_p', 's_t', 'thorn', 'yen']

35 39 ['D', 'E', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Eth', 'Euro', 'degree', 'f_f', 'f_f_b', 'f_f_h', 'f_f_i', 'f_f_j', 'f_f_k', 'f_f_l', 'f_f_t', 'f_i', 'f_longs', 'fi', 'florin.smcp', 'nine.smcp', 'onehalf', 'six.smcp', 'two.dnom', 'two.numr', 'two.sinf', 'twosuperior', 'yen', 'yen.smcp']

32 29 ['AE.smcp', 'B.smcp', 'E.smcp', 'Eacute.smcp', 'Ecircumflex.smcp', 'Edieresis.smcp', 'Egrave.smcp', 'Euro.smcp', 'L.smcp', 'Lslash.smcp', 'OE.smcp', 'S.smcp', 'Scaron.smcp', 'X', 'Z.smcp', 'Zcaron.smcp', 'currency.smcp', 'dollar', 'dollar.smcp', 'eight.smcp', 'fl.smcp', 'germandbls.smcp', 'nine.dnom', 'nine.numr', 'nine.sinf', 'nine.sups', 'six.dnom', 'six.numr', 'six.sinf', 'six.sups', 'z', 'zcaron']

30 53 ['c_t', 'f', 'f_b', 'f_f', 'f_f_b', 'f_f_h', 'f_f_k', 'f_f_l', 'f_f_t', 'f_h', 'f_k', 'f_l', 'f_t', 'five.dnom', 'five.numr', 'five.sinf', 'five.sups', 'fl', 'florin', 'infinity', 'longs_f', 'longs_longs_t', 'longs_t', 's_t', 'seven.dnom', 'seven.numr', 'seven.sinf', 'seven.sups', 't', 'three.smcp']

27 33 ['AE', 'AE.smcp', 'Aring', 'Aring.smcp', 'D.smcp', 'E.smcp', 'Eacute.smcp', 'Ecircumflex.smcp', 'Edieresis.smcp', 'Egrave.smcp', 'Eth.smcp', 'Euro', 'F.smcp', 'OE.smcp', 'ampersand', 'aring', 'bracketleft', 'bracketright', 'fi.smcp', 'fl.smcp', 'ring', 'ring.caps']

27 72 ['Atilde', 'Atilde.smcp', 'Ntilde', 'Ntilde.smcp', 'Otilde', 'Otilde.smcp', 'ampersand', 'atilde', 'm', 'n', 'ntilde', 'otilde', 'sterling.smcp', 'tilde', 'tilde.caps']

25 80 ['Acircumflex', 'Acircumflex.smcp', 'Ecircumflex', 'Ecircumflex.smcp', 'Icircumflex', 'Icircumflex.smcp', 'Ocircumflex', 'Ocircumflex.smcp', 'Scaron', 'Scaron.smcp', 'Ucircumflex', 'Ucircumflex.smcp', 'Zcaron', 'Zcaron.smcp', 'acircumflex', 'caron', 'caron.caps', 'circumflex', 'circumflex.caps', 'ecircumflex', 'icircumflex', 'ocircumflex', 'scaron', 'ucircumflex', 'zcaron']

20 34 ['B', 'C', 'Ccedilla', 'H.smcp', 'O', 'OE', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Omega', 'Oslash', 'Otilde', 'Q.alt', 'bracketleft', 'bracketright', 'eight', 'eight.lnum', 'eight.pnum_lnum', 'eight.pnum_onum']

20 103 ['Adieresis', 'Adieresis.smcp', 'Edieresis', 'Edieresis.smcp', 'Idieresis', 'Idieresis.smcp', 'Odieresis', 'Odieresis.smcp', 'Udieresis', 'Udieresis.smcp', 'Ydieresis', 'Ydieresis.smcp', 'adieresis', 'dieresis', 'dieresis.caps', 'edieresis', 'idieresis', 'odieresis', 'udieresis', 'ydieresis']

20 106 ['Adieresis', 'Adieresis.smcp', 'Edieresis', 'Edieresis.smcp', 'Idieresis', 'Idieresis.smcp', 'Odieresis', 'Odieresis.smcp', 'Udieresis', 'Udieresis.smcp', 'Ydieresis', 'Ydieresis.smcp', 'adieresis', 'dieresis', 'dieresis.caps', 'edieresis', 'idieresis', 'odieresis', 'udieresis', 'ydieresis']

19 25 ['V.smcp', 'W.smcp', 'X.smcp', 'Y.smcp', 'Yacute.smcp', 'Ydieresis.smcp', 'c_h', 'eight.dnom', 'eight.numr', 'eight.sinf', 'eight.sups', 'f_f_h', 'f_h', 'h', 'longs_h', 'longs_longs_h', 'm', 'registered', 'yen.smcp']

19 37 ['C', 'Ccedilla', 'Euro.smcp', 'G', 'K.smcp', 'O', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Oslash', 'Otilde', 'Z', 'Zcaron', 'nine.lnum', 'nine.pnum_lnum', 'six.lnum', 'six.pnum_lnum', 'sterling.smcp']

18 27 ['D.smcp', 'Eth.smcp', 'K.smcp', 'ampersand.smcp', 'nine.dnom', 'nine.numr', 'nine.sinf', 'nine.sups', 'six.dnom', 'six.numr', 'six.sinf', 'six.sups', 'uni1E9E.smcp', 'zero.dnom', 'zero.numr', 'zero.sinf', 'zero.sups']

18 44 ['E', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'K', 'OE', 'at', 'c_h', 'endash', 'hyphen', 'numbersign', 's_p', 'three', 'three.lnum', 'three.pnum_lnum', 'three.pnum_onum']

18 64 ['a', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'c', 'c_h', 'c_t', 'ccedilla', 'd', 'macron', 'macron.caps', 'three', 'three.pnum_onum', 'two', 'two.pnum_onum']

17 47 ['U', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'ampersand.smcp', 'four.smcp', 'germandbls', 'longs_longs', 'longs_longs_i', 'longs_longs_j', 'onehalf', 'ordfeminine', 'two.dnom', 'two.numr', 'two.sinf', 'twosuperior']

16 36 ['B', 'Eth.smcp', 'L', 'Lslash', 'P', 'R', 'S', 'Scaron', 'T.smcp', 'Thorn', 'nine', 'nine.pnum_onum', 'partialdiff', 'six', 'six.pnum_onum']

13 28 ['AE.smcp', 'B.smcp', 'M', 'M.alt', 'OE.smcp', 'Z.smcp', 'Zcaron.smcp', 'trademark', 'v', 'w', 'y', 'yacute', 'ydieresis']

13 40 ['A', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'H', 'ae', 'c_t', 'product', 'summation', 'three.smcp']

13 54 ['a', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'four', 'four.lnum', 'four.pnum_lnum', 'four.pnum_onum', 'infinity', 'three.smcp']

12 14 ['comma', 'quotedblbase', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'quotesinglbase', 'semicolon', 'trademark']

12 38 ['Euro', 'Euro.smcp', 'F', 'G', 'P', 'T', 'Thorn', 'c_h', 'f_j', 'florin', 'ordfeminine', 'sterling']

12 48 ['divide', 'equal', 'greaterequal', 'lessequal', 'logicalnot', 'minus', 'notequal', 'plus', 'plusminus']

11 21 ['braceleft', 'braceright', 'longs_longs', 'longs_longs_i', 'longs_longs_j', 'nine.lnum', 'nine.pnum_lnum', 'six.lnum', 'six.pnum_lnum']

11 63 ['a', 'aacute', 'acircumflex', 'adieresis', 'ae', 'agrave', 'aring', 'atilde', 'cent.smcp', 'integral']

10 52 ['Q.alt', 'c_t', 'f_f_t', 'f_t', 'longs_longs_t', 'longs_t', 's_t', 't']

9 20 ['eth', 'notequal', 'one.dnom', 'one.numr', 'one.sinf', 'onehalf', 'onequarter', 'onesuperior', 'seven.smcp']

8 19 ['nine.dnom', 'nine.numr', 'nine.sinf', 'nine.sups', 'six.dnom', 'six.numr', 'six.sinf', 'six.sups']

8 49 ['five.dnom', 'five.numr', 'five.sinf', 'five.sups', 'infinity', 'longs_longs_t', 'numbersign', 'underscore']

8 55 ['approxequal', 'asciicircum', 'asciitilde', 'sterling.smcp']

7 43 ['AE', 'copyright', 'four.smcp', 'product', 'registered', 'uni1E9E']

7 46 ['Q.smcp', 'at', 'emdash', 'paragraph', 'partialdiff', 'sterling']

7 61 ['g', 'mu', 'u', 'uacute', 'ucircumflex', 'udieresis', 'ugrave']

7 65 ['b', 'f_b', 'f_f_b', 'longs_b', 'longs_longs_b', 'three', 'three.pnum_onum']

7 67 ['longs_p', 'p', 'q', 's_p', 'thorn', 'three.lnum', 'three.pnum_lnum']

7 76 ['c_h', 'f_f_h', 'f_h', 'h', 'longs_h', 'longs_longs_h', 'two.smcp']

6 12 ['f_f_k', 'f_k', 'k', 'longs_k', 'longs_longs_k', 'trademark']

6 24 ['N.smcp', 'Ntilde.smcp', 'X.smcp', 'one.lnum', 'one.pnum_lnum', 'q']

6 56 ['e', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'oe']

6 69 ['breve', 'breve.caps', 'five.lnum', 'five.pnum_lnum', 'three.lnum', 'three.pnum_lnum']

5 51 ['Eth', 'florin.smcp', 'g', 'numbersign']

5 60 ['apple', 'cent', 'sterling', 'zero', 'zero.pnum_onum']

5 75 ['Omega', 'two', 'two.lnum', 'two.pnum_lnum', 'two.pnum_onum']

4 15 ['cent', 'cent.smcp', 'dollar.smcp', 'trademark']

4 58 ['ampersand', 'infinity', 'ogonek', 'ogonek.caps']

4 59 ['mu', 'two.smcp', 'zero', 'zero.pnum_onum']

4 83 ['sterling', 'y', 'yacute', 'ydieresis']

4 115 ['four.dnom', 'onequarter', 'semicolon', 'threequarters']

4 116 ['colon', 'ellipsis', 'period']

3 23 ['four.lnum', 'four.pnum_lnum', 'registered']

3 68 ['florin', 'two.lnum', 'two.pnum_lnum']

3 74 ['braceleft', 'braceright', 'five.smcp']

3 92 ['y', 'yacute', 'ydieresis']

3 105 ['dotaccent', 'dotaccent.caps', 'i']

2 13 ['question', 'questiondown']

2 17 ['six', 'six.pnum_onum']

2 18 ['K', 'K.smcp']

2 22 ['nine.smcp', 'six.smcp']

2 45 ['Eth.smcp', 'ordfeminine']

2 50 ['c_t', 's_t']

2 79 ['seven.lnum', 'seven.pnum_lnum']

2 84 ['divide']

2 85 ['seven', 'seven.pnum_onum']

2 89 ['r', 'summation']

2 90 ['pi']

2 99 ['j', 'pi']

2 101 ['question', 'questiondown']

2 108 ['exclam', 'exclamdown']

2 110 ['question', 'questiondown']

1 7 ['T']

1 11 ['trademark']

1 57 ['ae']

1 71 ['g']

1 73 ['Q']

1 78 ['five.smcp']

1 82 ['seven.smcp']

1 94 ['pi']

1 117 ['r']

1 118 ['periodcentered']

1 143 ['Thorn.smcp']

1 150 ['yen.smcp']

1 193 ['G.smcp']

1 197 ['four.smcp']

1 209 ['yen']

1 243 ['H.smcp']

Arno Enslin's picture

Except from the problem described above, there is at least one bug in the FLS macro StemAndAlignHist.py:

Not

haveAC = setFDKToolsPath("autohintexe")

but

if os.name == "nt":
haveAC = setFDKToolsPath("autohintexe.exe")
else:
haveAC = setFDKToolsPath("autohintexe")

Otherwise it may run (but not work correctly – because of the problem, that I have reported in the first message) on Mac, but not on PC.

By the way, the board software is unbelievable poor! It even does not recognize the tabs in front of "haveAC", although they belong to the code! This is really nerving!

And there are more bugs in the outline macros of the AFDKO, namely in "Proof in CharPlot style", "Proof in HintPlot style" and "Proof in FontPlot style".

There I got those errors on Windows:

Starting proof of font TestFont-Regular. Start time: Tue Nov 02 17:09:04 2010.
Traceback (most recent call last):
File "", line 113, in ?
File "", line 95, in run
File "C:\FLStudio\macros\system\modules\ProofPDFFL.py", line 76, in proofFont
pdfFont = txPDFFont(flFont, params)
File "C:\FLStudio\macros\system\modules\fontPDF.py", line 461, in __init__
self.AscentDescent()
File "C:\FLStudio\macros\system\modules\fontPDF.py", line 499, in AscentDescent
self.ascent, self.descent = self.clientGetAscentDescent()
File "C:\FLStudio\macros\system\modules\fontPDF.py", line 536, in clientGetAscentDescent
raise NotImplementedError
NotImplementedError

Syndicate content Syndicate content