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


haveAC = setFDKToolsPath("autohintexe")


if == "nt":
haveAC = setFDKToolsPath("autohintexe.exe")
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\", line 76, in proofFont
pdfFont = txPDFFont(flFont, params)
File "C:\FLStudio\macros\system\modules\", line 461, in __init__
File "C:\FLStudio\macros\system\modules\", line 499, in AscentDescent
self.ascent, self.descent = self.clientGetAscentDescent()
File "C:\FLStudio\macros\system\modules\", line 536, in clientGetAscentDescent
raise NotImplementedError

Syndicate content Syndicate content