The history of luaTEX 2006–2009 / v 0.50 - Pragma ADE
The history of luaTEX 2006–2009 / v 0.50 - Pragma ADE The history of luaTEX 2006–2009 / v 0.50 - Pragma ADE
his or her font). As said, it also takes some effort to run into the situation described here so the likelihood of running into this rule is small. This also brings to our attention the fact that fonts can now contain bugs and updating them makes sense but can break existing documents. Since such fonts are copyrighted and not available on line, font vendors need to nd ways to communicate these xes to their customers. Can we add some additional checks for problems like this? For a while I thought that it was possible by assuming that ligatures have names like h.2_z.4 but alas, sequences of glyphs are mapped onto ligatures using mappings like the following: three fraction four.2 threequarters three fraction four threequarters ¾ d r d_r dr e period e_period e. f i fi fi f l fl fl f f i f_f_i ffi f t f_t ft Some ligature have no _ in their names and there are also some inconsistencies, compare the fl and f_f_i. Here font history is painfully reected in inconsistency and no solution can be found here. So, in order to get rid of this problem, MkIV implements a method to ignore certain rules but then, this only makes sense if one knows how the rules are tagged internally. So, in practice this is no solution. However, you can imagine that at some point ConTEXt ships with a database of xes that are applied to known fonts with certain version numbers. We also found out that the font table that we used was not good enough for our purpose because the exact order in what rules have to be applies was not available. Then we noticed that in the meantime FontForge had moved on to version 2 and after consulting the author we quickly came to the conclusion that it made sense to use the updated representation. In version 2 the snippet with the previously mentioned rule looks as follows: ["ks_latn_l_66_c_19"]={ ["format"]="coverage", ["rules"]={ [1]={ ["coverage"]={ ["current"]={ [1]="h.2", [2]="z.4", 92 Zapng fonts
} }, ["lookups"]={ [1]={ ["lookup"]="ls_l_84", ["seq"]=0, } } } }, ["type"]="chainsub", }, The main rule table is now indexed by name which is possible because the order of rules is specied somewhere else. The key ncovers has been replaced by current. As long as LuaTEX is in beta stage, we have the freedom to change such labels as some of them are rather FontForge specic. This rule is mentioned in a feature specication table. Here specic features are associated with languages and scripts. This is just one of the entries concerning calt. You can imagine that it took a while to gure out how best to deal with this, but eventually the MkIV code could do the trick. The cryptic names are replacements for pointers in the FontForge datastructure. In order to be able to use FontForge for font development and analysis, the decision was made to stick closely to its idiom. ["gsub"]={ ... [67]={ ["features"]={ [1]={ ["scripts"]={ [1]={ ["langs"]={ [1]="AFK ", [2]="DEU ", [3]="NLD ", [4]="ROM ", [5]="TRK ", [6]="dflt", }, ["script"]="latn", } }, Zapng fonts 93
- Page 44 and 45: OPENTYPE 144 17.571.732 ENC 268 782
- Page 46 and 47: The font denition callback intercep
- Page 48 and 49: When processing a not so large le b
- Page 50 and 51: letter 105 i spacer 32 letter 116 t
- Page 52 and 53: egister 2 3190 dimen other_char 50
- Page 54 and 55: This example uses an active charact
- Page 56 and 57: function tex.printlist(data) callba
- Page 58 and 59: 56 Token speak
- Page 60 and 61: Interesting is that upto now I didn
- Page 62 and 63: do end local function nextbyte(f) r
- Page 64 and 65: \ctxlua{collectgarbage("setstepmul"
- Page 66 and 67: Collecting tokens can take place in
- Page 68 and 69: where TEX has to convert to and fro
- Page 70 and 71: When experimenting with the new imp
- Page 72 and 73: It will be clear that here we colle
- Page 74 and 75: 72 Nodes and attributes t={ attr={
- Page 76 and 77: Let's end with an observation. Attr
- Page 78 and 79: end end tex.sprint("\\setbox0=\\hbo
- Page 80 and 81: 78 Dirty tricks
- Page 82 and 83: Those who read the previous chapter
- Page 84 and 85: In a similar way support for xml wi
- Page 86 and 87: Undoubtely this will have a huge im
- Page 88 and 89: 86 Going beta
- Page 90 and 91: We like testing LuaTEX's open type
- Page 92 and 93: k a el--rie am, ld p n th re, l ak
- Page 96 and 97: ["tag"]="calt", } }, ["name"]="ks_l
- Page 98 and 99: When testing the implementation we
- Page 100 and 101: Mr. rmn p Of course we have to test
- Page 102 and 103: ه مَ ه لِ دْ
- Page 104 and 105: لاۤئِهٰٖا لاۤئِه
- Page 106 and 107: َ غْتَرِفٌُم عْتَر
- Page 108 and 109: وَْر وةَ، ٰ ي كَ
- Page 110 and 111: white black t-green a=1.000 t=0.500
- Page 112 and 113: Palets work with names: \definepale
- Page 114 and 115: • support mechanism are under con
- Page 116 and 117: So, effectively we set a box, and e
- Page 118 and 119: 116 Colors redone
- Page 120 and 121: • Spaces at the end of the line (
- Page 122 and 123: 兡 也 包 因 沘 氓 侷 柵 苗
- Page 124 and 125: 〉 + 々 = 〉々 〉々 〉々
- Page 126 and 127: 124 Chinese, Japanese and Korean, a
- Page 128 and 129: for k, v in pairs(_G) do print(k, v
- Page 130 and 131: } [4] = 200 I mistakingly assumed t
- Page 132 and 133: 130 Optimization
- Page 134 and 135: xetex metapost We can also
- Page 136 and 137: \startluacode xml.sprint(xml.first(
- Page 138 and 139: a[position()=5] maybe a[first()] ma
- Page 140 and 141: Now we have: okay okay okay Repla
- Page 142 and 143: \startxmlsetups xml:mysetups \xmlse
his or her font). As said, it also takes some effort to run into the situation described here<br />
so the likelihood <strong>of</strong> running into this rule is small. This also brings to our attention the<br />
fact that fonts can now contain bugs and updating them makes sense but can break existing<br />
documents. Since such fonts are copyrighted and not available on line, font vendors<br />
need to nd ways to communicate these xes to their customers.<br />
Can we add some additional checks for problems like this? For a while I thought that it<br />
was possible by assuming that ligatures have names like h.2_z.4 but alas, sequences <strong>of</strong><br />
glyphs are mapped onto ligatures using mappings like the following:<br />
three fraction four.2 threequarters three fraction four threequarters ¾<br />
d r d_r dr<br />
e period e_period e.<br />
f i fi fi<br />
f l fl fl<br />
f f i f_f_i ffi<br />
f t f_t ft<br />
Some ligature have no _ in their names and there are also some inconsistencies, compare<br />
the fl and f_f_i. Here font <strong>history</strong> is painfully reected in inconsistency and no solution<br />
can be found here.<br />
So, in order to get rid <strong>of</strong> this problem, MkIV implements a method to ignore certain rules<br />
but then, this only makes sense if one knows how the rules are tagged internally. So, in<br />
practice this is no solution. However, you can imagine that at some point ConTEXt ships<br />
with a database <strong>of</strong> xes that are applied to known fonts with certain version numbers.<br />
We also found out that the font table that we used was not good enough for our purpose<br />
because the exact order in what rules have to be applies was not available. <strong>The</strong>n we<br />
noticed that in the meantime FontForge had moved on to version 2 and after consulting<br />
the author we quickly came to the conclusion that it made sense to use the updated<br />
representation.<br />
In version 2 the snippet with the previously mentioned rule looks as follows:<br />
["ks_latn_l_66_c_19"]={<br />
["format"]="coverage",<br />
["rules"]={<br />
[1]={<br />
["coverage"]={<br />
["current"]={<br />
[1]="h.2",<br />
[2]="z.4",<br />
92 Zapng fonts