ConT EXt meeting 2011 - Bassenge
1/14
C 1/14 ConT EXt meeting 2011 - Bassenge MFLUA - - PowerPoint PPT Presentation
C 1/14 ConT EXt meeting 2011 - Bassenge MFLUA instrumenting the METAFONT source code with Lua functions completely compatible with METAFONT 2.718281 original outlines of a glyph (no {po/auto}trace of the bitmap)
ConT EXt meeting 2011 - Bassenge
1/14
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
2/14
code with Lua functions
METAFONT 2.718281
(no {po/auto}trace of the bitmap)
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
3/14
Basically, MFLUA runs a METAFONT source with a particular mode:
mode_def otcff = mode_param (pixels_per_inch, 4000); mode_param (blacker, 0); mode_param (fillin, 0); mode_param (o_correction, 1); mode_common_setup_; enddef;
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
4/14
During the run, the ‘sensors’ collect the data. Sensors are callback functions and they are
begin_program.lua mfluaini.lua do_add_to.lua
end_program.lua parse-log.lua envelope.lua print_edges.lua fill_envelope.lua print_path.lua fill_spec.lua scan_direction.lua final_cleanup.lua skew_line_edges.lua main_control.lua start_of_MF.lua
(the names come from the METAFONT source code)
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
5/14
When the run finishes, end_program() ‘clean’ the data from this
i1=1, i=1 i1=1, i=1 i1=1, i=2 i1=1, i=3 i1=1, i=3 i1=1, i=4 i1=1, i=5 i1=1, i=5 i1=1, i=5 i1=1, i=6 i1=1, i=7 i1=1, i=7 i1=1, i=8 i1=1, i=8 i1=1, i=8 i1=1, i=9 i1=1, i=10 i1=1, i=11 i1=1, i=11 i1=1, i=12 i1=1, i=12 i1=2, i=1 i1=2, i=2 i1=2, i=3 i1=2, i=4 i1=3, i=1 i1=3, i=2 i1=3, i=3 i1=3, i=4 i1=3, i=4 i1=3, i=4 i1=4, i=1 i1=4, i=2 i1=4, i=3 i1=4, i=4 i1=4, i=4 i1=4, i=4 i1=5, i=1 i1=5, i=2 i1=5, i=3 i1=5, i=4 i1=5, i=4 i1=5, i=4 i1=6, i=1 i1=6, i=2 i1=6, i=3 i1=6, i=4 i1=6, i=4 i1=6, i=4ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
6/14
to this
BEG 1 END 1 BEG 2 END 2 BEG 6 END 6 BEG 7 END 7 BEG 8 END 8 BEG 9 END 9 BEG 10 END 10 BEG 11 END 11 BEG 12 END 12 BEG 16 END 16 BEG 17 END 17 BEG 18 END 18 BEG 19 END 19 BEG 20 END 20 BEG 22 END 22 BEG 23 END 23 BEG 24 END 24 BEG 25 END 25 BEG 26 END 26 BEG 27 END 27 BEG 28 END 28 BEG 30 END 30 BEG 31 END 31 BEG 32 END 32 BEG 33 END 33ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
7/14
i1=1, i=1 i1=1, i=1 i1=1, i=2 i1=1, i=3 i1=1, i=3 i1=1, i=4 i1=1, i=5 i1=1, i=5 i1=1, i=5 i1=1, i=6 i1=1, i=7 i1=1, i=7 i1=1, i=8 i1=1, i=8 i1=1, i=8 i1=1, i=9 i1=1, i=10 i1=1, i=11 i1=1, i=11 i1=1, i=12 i1=1, i=12 i1=2, i=1 i1=2, i=2 i1=2, i=3 i1=2, i=4 i1=3, i=1 i1=3, i=2 i1=3, i=3 i1=3, i=4 i1=3, i=4 i1=3, i=4 i1=4, i=1 i1=4, i=2 i1=4, i=3 i1=4, i=4 i1=4, i=4 i1=4, i=4 i1=5, i=1 i1=5, i=2 i1=5, i=3 i1=5, i=4 i1=5, i=4 i1=5, i=4 i1=6, i=1 i1=6, i=2 i1=6, i=3 i1=6, i=4 i1=6, i=4 i1=6, i=4ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
8/14
Of course there are problems...and some of them I believe that cannot be solved in an automatic way
i1=1, i=1 i1=1, i=2 i1=1, i=3 i1=1, i=4 i1=1, i=4 i1=1, i=4 i1=2, i=1 i1=2, i=2 i1=2, i=3 i1=2, i=4 i1=2, i=4 i1=2, i=4but I still like to investigate
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
9/14
As of today, the ‘data’ is just a set of Bezier curves 𝑞𝑗,𝑑1𝑗,𝑑2𝑗,𝑟𝑗 so it’s natural to translate them into a SVG picture (a closed path need a bit more attention)
uni0041-raw.svg uni004e-raw.svg uni0042-raw.svg uni004f-raw.svg uni0043-raw.svg uni0050-raw.svg uni0044-raw.svg uni0051-raw.svg uni0045-raw.svg uni0052-raw.svg uni0046-raw.svg uni0053-raw.svg uni0047-raw.svg uni0054-raw.svg uni0048-raw.svg uni0055-raw.svg uni0049-raw.svg uni0056-raw.svg uni004a-raw.svg uni0057-raw.svg uni004b-raw.svg uni0058-raw.svg uni004c-raw.svg uni0059-raw.svg uni004d-raw.svg uni005a-raw.svg
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
10/14 The next step is to use Fontforge (the program, or a custom Lua binding) to ‘learn’ how to produce an OpenType CFF font: simplify the paths, integral coor- dinates, dimensions... and much more. The strategy is to use Fontforge to see how to divide the responsibility: for example path simplification, in- tegral coordinates and kerning probably should be done in end_program — to produce the best set of outlines. Fontforge can be scripted, but I believe that at the end a ‘visual’ interaction cannot be avoided. Maybe ConT EXt-MkIV?
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
11/14
Concrete10OT is the temporary name of the OpenType version of ccr10. The first and only glyph is C
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
12/14
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
13/14
ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge ConT EXt meeting 2011 - Bassenge
14/14