Update TODO.
[ttfautohint.git] / TODO
blob9544847863de1cdcb593d4807cac662dac79c001
2 important improvements
3 ----------------------
5 add features to the GUI
6   -> direct control over `actions'
7   -> preview similar to ftgrid
8   -> drag and drop to the application itself
9   -> autocompletion of file names with tab key
11 handle OT features
12   -> use HarfBuzz?
14 control `gasp' table; Adam Twardoch suggest the following:
16   1. Calculate "gaspstem", i.e. the most common thickness of horizontal
17      stems (y direction distances) for lowercase Latin letters.
18   2. If gaspstem <= 0.03 * upm, apply gasp symmetric smoothing across the
19      entire range (rangeMaxPPEM 0xFFFF, value 15)
20   3. Else, calculate gaspthreshold as follows:
21        ceil(1.33 * upm / gaspstem) - 1
22   4. Apply no symmetric smoothing up to the gaspthreshold ppem (rangeMaxPPEM
23      gaspthreshold, value 7), and apply symmetric smoothing above.
25   In addition, ttfautohint should provide a commandline parameter that
26   allows the user to override the automatic logic.  If that parameter = 0,
27   then gasp value 15 should be applied across the entire range.  If the
28   parameter > 0, then up to that parameter value the gasp value 7 should be
29   applied, and gasp value 15 should be applied above.
31 create a separate blue zone class for `i' and `j':
32   . if the values differ more than a given threshold, handle them
33     separately
34   . otherwise, unify them with `f' and friends.
36 control the characters used for blue zones
37   -> non-latin scripts
39 user-defined blue zones?
40   -> old-style digits
42 control the width of blue zones
44 add control over character ranges which define a script; in particular, add
45   support for the PUA
47 handle normal and bold fonts differently; cf. Infinality patches;
48   this should help avoid filling of bowls (like in `e') for bold shapes.
50 control the minimum stem width
52 try to `embolden' fonts at small sizes to avoid drop-outs; cf. Infinality
53   patches
55 implement `x-height-snapping-exceptions'
57 improve `pre-hinting' by making the used PPEM value configurable
59 allow hinting of single glyphs, using a config file which holds the global
60   settings
62 better handling of `incomplete' fonts (this is, fonts which lack the minimum
63   set of glyphs necessary to determine the blue zones)
66 minor improvements
67 ------------------
69 make ttfautohint a filter
71 reject fonts which are `hopeless' (for example, `Lipstick')
73 reduce memory consumption by using 16bit data types in large arrays if 32bit
74   are not necessary
76 correctly set `lowestRecPPEM' field in `head'
78 control dropout mode
80 apply hinting in x direction also?
81   -> warper: shifting with and without scaling
82   -> `standard' autofit hinting
84 add a config and/or command file for batch handling
86 warn against overwrite of output file?
88 reduce output size of option -p:
89   1. compare outline rendered at EM value with unhinted outline
90   2. pre-hint only if 1. differs more than given threshold (default 0.5%?)
92 make it possible to hint fonts which aren't alphabetic at all, for example,
93   icons; to do so, provide means to skip the global feature analysis
95 better control -i output
97 allow processing of multiple files by using globs as in the Midnight
98   Commander
100 allow composite fonts already processed by ttfautohint to be processed
101   again
103 make ttfautohint remember options:
104   1. collect md5 checksums in a `~/.ttfautohint_history' file so that fonts
105      can be re-processed easily, using the same parameters
106   2. if fonts already processed by ttfautohint can be re-processed (which
107      isn't possible yet), parse the `version' string for parameters
110 later enhancements
111 ------------------
113 add CJK autohinting module
114 add Hebrew autohinting module
116 instead of emitting bytecode, write the hints as a VTT or FontLab script
118 Windows/Mac installer
121 various
122 -------
124 testing with Windows and Apple font checkers
126 man page for ttfautohint library
128 install library
130 add help2man script so that parallel builds always work