From 0aa93a6d31a45d8df2d8516567b98967ce04f183 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 14 Oct 2022 10:56:48 +0200 Subject: 2022-10-14 10:15:00 --- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/char-def.lua | 2301 +++++++++++++++++++- tex/context/base/mkiv/char-ini.lua | 24 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-cff.lua | 23 +- tex/context/base/mkiv/font-dsp.lua | 20 +- tex/context/base/mkiv/font-imp-italics.lua | 8 +- tex/context/base/mkiv/font-mis.lua | 2 +- tex/context/base/mkiv/font-osd.lua | 103 +- tex/context/base/mkiv/font-otc.lua | 6 + tex/context/base/mkiv/font-otl.lua | 2 +- tex/context/base/mkiv/font-ots.lua | 423 ++-- tex/context/base/mkiv/font-shp.lua | 2 +- tex/context/base/mkiv/math-dir.lua | 1 + tex/context/base/mkiv/mult-low.lua | 10 +- tex/context/base/mkiv/mult-prm.lua | 6 + tex/context/base/mkiv/pack-cut.mkiv | 8 +- tex/context/base/mkiv/status-files.pdf | Bin 24641 -> 24594 bytes tex/context/base/mkiv/status-lua.pdf | Bin 260468 -> 261499 bytes tex/context/base/mkiv/strc-doc.lua | 6 +- tex/context/base/mkiv/strc-lst.lua | 9 + tex/context/base/mkiv/type-set.mkiv | 1 + tex/context/base/mkxl/anch-pgr.lmt | 7 +- tex/context/base/mkxl/anch-pos.lmt | 52 +- tex/context/base/mkxl/anch-pos.mkxl | 27 +- tex/context/base/mkxl/buff-ini.lmt | 2 +- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/core-env.lmt | 48 +- tex/context/base/mkxl/core-uti.lmt | 4 +- tex/context/base/mkxl/font-con.lmt | 30 +- tex/context/base/mkxl/font-ctx.lmt | 36 +- tex/context/base/mkxl/font-imp-effects.lmt | 20 +- tex/context/base/mkxl/font-imp-math.lmt | 105 +- tex/context/base/mkxl/font-ini.mklx | 6 +- tex/context/base/mkxl/font-mat.mklx | 275 ++- tex/context/base/mkxl/font-mps.lmt | 8 + tex/context/base/mkxl/font-otl.lmt | 24 +- tex/context/base/mkxl/font-ots.lmt | 246 ++- tex/context/base/mkxl/font-pre.mkxl | 4 - tex/context/base/mkxl/grph-trf.mkxl | 2 +- tex/context/base/mkxl/lpdf-ano.lmt | 6 +- tex/context/base/mkxl/lpdf-emb.lmt | 132 +- tex/context/base/mkxl/lpdf-lmt.lmt | 12 +- tex/context/base/mkxl/lpdf-rul.lmt | 2 - tex/context/base/mkxl/math-act.lmt | 1083 +++++++-- tex/context/base/mkxl/math-ali.mkxl | 184 +- tex/context/base/mkxl/math-del.mklx | 7 + tex/context/base/mkxl/math-fbk.lmt | 4 +- tex/context/base/mkxl/math-fen.mkxl | 72 +- tex/context/base/mkxl/math-fnt.lmt | 5 +- tex/context/base/mkxl/math-frc.mkxl | 30 +- tex/context/base/mkxl/math-ini.mkxl | 659 +++--- tex/context/base/mkxl/math-map.lmt | 160 +- tex/context/base/mkxl/math-noa.lmt | 11 +- tex/context/base/mkxl/math-rad.mklx | 8 +- tex/context/base/mkxl/math-stc.mklx | 11 +- tex/context/base/mkxl/math-vfu.lmt | 11 +- tex/context/base/mkxl/mult-sys.mkxl | 1 + tex/context/base/mkxl/node-ali.lmt | 64 +- tex/context/base/mkxl/node-ini.lmt | 2 + tex/context/base/mkxl/pack-box.mkxl | 2 +- tex/context/base/mkxl/pack-cut.mkxl | 9 +- tex/context/base/mkxl/pack-mrl.mkxl | 6 +- tex/context/base/mkxl/pack-pos.mkxl | 4 +- tex/context/base/mkxl/pack-rul.lmt | 31 +- tex/context/base/mkxl/pack-rul.mkxl | 21 +- tex/context/base/mkxl/page-box.mklx | 17 +- tex/context/base/mkxl/spac-ver.lmt | 47 +- tex/context/base/mkxl/spac-ver.mkxl | 20 +- tex/context/base/mkxl/strc-lst.mklx | 2 +- tex/context/base/mkxl/strc-ref.lmt | 28 +- tex/context/base/mkxl/strc-ref.mklx | 20 +- tex/context/base/mkxl/strc-reg.lmt | 10 +- tex/context/base/mkxl/strc-reg.mkxl | 3 + tex/context/base/mkxl/syst-ini.mkxl | 7 +- tex/context/base/mkxl/tabl-tbl.mkxl | 6 +- tex/context/base/mkxl/task-ini.lmt | 2 +- tex/context/base/mkxl/type-set.mkxl | 1 + tex/context/fonts/mkiv/asana-math.lfg | 15 +- tex/context/fonts/mkiv/bonum-math.lfg | 741 ++++--- tex/context/fonts/mkiv/cambria-math.lfg | 84 +- tex/context/fonts/mkiv/common-math.lfg | 106 + tex/context/fonts/mkiv/concrete-math.lfg | 36 +- tex/context/fonts/mkiv/dejavu-math.lfg | 144 +- tex/context/fonts/mkiv/erewhon-math.lfg | 83 +- tex/context/fonts/mkiv/garamond-math.lfg | 353 +-- tex/context/fonts/mkiv/generic-math.lfg | 27 + tex/context/fonts/mkiv/kpfonts-math.lfg | 95 +- tex/context/fonts/mkiv/libertinus-math.lfg | 201 +- tex/context/fonts/mkiv/lm.lfg | 25 +- tex/context/fonts/mkiv/lucida-opentype-math.lfg | 180 +- tex/context/fonts/mkiv/minion-math.lfg | 99 +- tex/context/fonts/mkiv/pagella-math.lfg | 259 +-- tex/context/fonts/mkiv/schola-math.lfg | 132 +- tex/context/fonts/mkiv/stix-two-math.lfg | 184 +- tex/context/fonts/mkiv/termes-math.lfg | 173 +- tex/context/fonts/mkiv/type-imp-concrete.mkiv | 58 +- tex/context/fonts/mkiv/type-imp-erewhon.mkiv | 46 +- tex/context/fonts/mkiv/type-imp-euler.mkiv | 8 +- tex/context/fonts/mkiv/type-imp-latinmodern.mkiv | 4 +- .../fonts/mkiv/type-imp-newcomputermodern.mkiv | 2 +- tex/context/fonts/mkiv/type-imp-stix.mkiv | 31 +- tex/context/fonts/mkiv/type-imp-texgyre.mkiv | 25 +- tex/context/fonts/mkiv/type-imp-xits.mkiv | 4 +- tex/context/fonts/mkiv/xits-math.lfg | 27 + tex/context/modules/mkiv/s-fonts-charts.mkiv | 6 +- tex/context/modules/mkiv/s-fonts-coverage.mkiv | 12 +- tex/context/modules/mkiv/s-fonts-shapes.lua | 139 +- tex/context/modules/mkiv/s-fonts-shapes.mkiv | 16 +- tex/context/modules/mkiv/s-math-characters.lua | 2 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 395 ++-- 114 files changed, 7134 insertions(+), 3141 deletions(-) create mode 100644 tex/context/fonts/mkiv/common-math.lfg (limited to 'tex') diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 545627d07..6bcff2af2 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 90eea4118..e02334f8d 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2022.09.16 14:39} +\edef\contextversion{2022.10.14 10:13} %D For those who want to use this: diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index 57061735b..a5a21687b 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -45,6 +45,43 @@ local variants_dotted={ [0xFE00]="dotted form", } +local variants_90={ + [0xFE00]="rotated 90 degrees", +} + +local variants_180={ + [0xFE01]="rotated 180 degrees", +} + +local variants_270={ + [0xFE02]="rotated 270 degrees", +} + +local variants_expanded={ + [0xFE00]="expanded", +} + +local variants_90_180={ + [0xFE00]="rotated 90 degrees", + [0xFE01]="rotated 180 degrees", +} + +local variants_90_180_270={ + [0xFE00]="rotated 90 degrees", + [0xFE01]="rotated 180 degrees", + [0xFE02]="rotated 270 degrees", +} + +local variants_180_270={ + [0xFE01]="rotated 180 degrees", + [0xFE02]="rotated 270 degrees", +} + +local variants_90_270={ + [0xFE00]="rotated 90 degrees", + [0xFE02]="rotated 270 degrees", +} + characters = characters or { } characters.data={ @@ -480,9 +517,9 @@ characters.data={ direction="es", linebreak="hy", mathclass="ordinary", - mathgroup="binary arithmetic", mathextensible="h", mathfiller="relfill", + mathgroup="binary arithmetic", mathname="mathhyphen", mathsymbol=0x2212, synonyms={ "hyphen or minus sign", "hyphus" }, @@ -701,8 +738,8 @@ characters.data={ }, { class="relation", - name="Relbar", comment="useless", + name="Relbar", }, }, unicodeslot=0x3D, @@ -1048,8 +1085,8 @@ characters.data={ { adobename="asciicircum", category="sk", - comment="the Hat looks rediculous in most fonts", cjkwd="na", + comment="the Hat looks rediculous in most fonts", contextname="textasciicircum", description="CIRCUMFLEX ACCENT", direction="on", @@ -23219,6 +23256,7 @@ characters.data={ direction="l", indic="c", linebreak="al", + synonyms={ "bangla khanda ta" }, unicodeslot=0x9CE, }, [0x9D7]={ @@ -28096,6 +28134,13 @@ characters.data={ linebreak="al", unicodeslot=0xCF2, }, + [0xCF3]={ + category="mc", + description="KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT", + direction="l", + linebreak="cm", + unicodeslot=0xCF3, + }, [0xD00]={ category="mn", description="MALAYALAM SIGN COMBINING ANUSVARA ABOVE", @@ -30909,6 +30954,13 @@ characters.data={ linebreak="sa", unicodeslot=0xECD, }, + [0xECE]={ + category="mn", + description="LAO YAMAKKAN", + direction="nsm", + linebreak="sa", + unicodeslot=0xECE, + }, [0xED0]={ category="nd", description="LAO DIGIT ZERO", @@ -56408,7 +56460,7 @@ characters.data={ combining=0xEA, description="COMBINING DOUBLE CIRCUMFLEX ABOVE", direction="nsm", - linebreak="cm", + linebreak="gl", unicodeslot=0x1DCD, }, [0x1DCE]={ @@ -56784,7 +56836,7 @@ characters.data={ combining=0xE9, description="COMBINING DOUBLE INVERTED BREVE BELOW", direction="nsm", - linebreak="cm", + linebreak="gl", unicodeslot=0x1DFC, }, [0x1DFD]={ @@ -63092,7 +63144,7 @@ characters.data={ category="po", description="QUADRUPLE PRIME", direction="on", - linebreak="al", + linebreak="po", mathclass="prime", mathname="quadrupleprime", specials={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 }, @@ -63195,6 +63247,7 @@ characters.data={ linebreak="al", mathclass="ghost", mathname="invisiblecomma", + synonyms={ "invisible comma" }, unicodeslot=0x2063, }, [0x2064]={ @@ -66926,8 +66979,8 @@ characters.data={ description="EMPTY SET", direction="on", linebreak="al", - mathgroup="constant set", mathclass="ordinary", + mathgroup="constant set", mathname="emptyset", synonyms={ "null set" }, unicodeslot=0x2205, @@ -67102,8 +67155,8 @@ characters.data={ }, { class="relation", - name="relbar", comment="useless", + name="relbar", }, }, unicodeslot=0x2212, @@ -159588,6 +159641,30 @@ characters.data={ linebreak="al", unicodeslot=0x10EB1, }, + [0x10EFD]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD SAKTA", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFD, + }, + [0x10EFE]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD QASR", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFE, + }, + [0x10EFF]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD MADDA", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFF, + }, [0x10F00]={ category="lo", description="OLD SOGDIAN LETTER ALEPH", @@ -164352,6 +164429,27 @@ characters.data={ linebreak="cm", unicodeslot=0x1123E, }, + [0x1123F]={ + category="lo", + description="KHOJKI LETTER QA", + direction="l", + linebreak="al", + unicodeslot=0x1123F, + }, + [0x11240]={ + category="lo", + description="KHOJKI LETTER SHORT I", + direction="l", + linebreak="al", + unicodeslot=0x11240, + }, + [0x11241]={ + category="mn", + description="KHOJKI VOWEL SIGN VOCALIC R", + direction="nsm", + linebreak="cm", + unicodeslot=0x11241, + }, [0x11280]={ category="lo", description="MULTANI LETTER A", @@ -172828,6 +172926,76 @@ characters.data={ linebreak="al", unicodeslot=0x11AF8, }, + [0x11B00]={ + category="po", + description="DEVANAGARI HEAD MARK", + direction="l", + linebreak="bb", + unicodeslot=0x11B00, + }, + [0x11B01]={ + category="po", + description="DEVANAGARI HEAD MARK WITH HEADSTROKE", + direction="l", + linebreak="bb", + unicodeslot=0x11B01, + }, + [0x11B02]={ + category="po", + description="DEVANAGARI SIGN BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B02, + }, + [0x11B03]={ + category="po", + description="DEVANAGARI SIGN BHALE WITH HOOK", + direction="l", + linebreak="bb", + unicodeslot=0x11B03, + }, + [0x11B04]={ + category="po", + description="DEVANAGARI SIGN EXTENDED BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B04, + }, + [0x11B05]={ + category="po", + description="DEVANAGARI SIGN EXTENDED BHALE WITH HOOK", + direction="l", + linebreak="bb", + unicodeslot=0x11B05, + }, + [0x11B06]={ + category="po", + description="DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B06, + }, + [0x11B07]={ + category="po", + description="DEVANAGARI SIGN WESTERN NINE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B07, + }, + [0x11B08]={ + category="po", + description="DEVANAGARI SIGN REVERSED NINE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B08, + }, + [0x11B09]={ + category="po", + description="DEVANAGARI SIGN MINDU", + direction="l", + linebreak="bb", + unicodeslot=0x11B09, + }, [0x11C00]={ category="lo", description="BHAIKSUKI LETTER A", @@ -175129,6 +175297,610 @@ characters.data={ linebreak="al", unicodeslot=0x11EF8, }, + [0x11F00]={ + category="mn", + description="KAWI SIGN CANDRABINDU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F00, + }, + [0x11F01]={ + category="mn", + description="KAWI SIGN ANUSVARA", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F01, + }, + [0x11F02]={ + category="lo", + description="KAWI SIGN REPHA", + direction="l", + linebreak="al", + unicodeslot=0x11F02, + }, + [0x11F03]={ + category="mc", + description="KAWI SIGN VISARGA", + direction="l", + linebreak="cm", + unicodeslot=0x11F03, + }, + [0x11F04]={ + category="lo", + description="KAWI LETTER A", + direction="l", + linebreak="al", + unicodeslot=0x11F04, + }, + [0x11F05]={ + category="lo", + description="KAWI LETTER AA", + direction="l", + linebreak="al", + unicodeslot=0x11F05, + }, + [0x11F06]={ + category="lo", + description="KAWI LETTER I", + direction="l", + linebreak="al", + unicodeslot=0x11F06, + }, + [0x11F07]={ + category="lo", + description="KAWI LETTER II", + direction="l", + linebreak="al", + unicodeslot=0x11F07, + }, + [0x11F08]={ + category="lo", + description="KAWI LETTER U", + direction="l", + linebreak="al", + unicodeslot=0x11F08, + }, + [0x11F09]={ + category="lo", + description="KAWI LETTER UU", + direction="l", + linebreak="al", + unicodeslot=0x11F09, + }, + [0x11F0A]={ + category="lo", + description="KAWI LETTER VOCALIC R", + direction="l", + linebreak="al", + unicodeslot=0x11F0A, + }, + [0x11F0B]={ + category="lo", + description="KAWI LETTER VOCALIC RR", + direction="l", + linebreak="al", + unicodeslot=0x11F0B, + }, + [0x11F0C]={ + category="lo", + description="KAWI LETTER VOCALIC L", + direction="l", + linebreak="al", + unicodeslot=0x11F0C, + }, + [0x11F0D]={ + category="lo", + description="KAWI LETTER VOCALIC LL", + direction="l", + linebreak="al", + unicodeslot=0x11F0D, + }, + [0x11F0E]={ + category="lo", + description="KAWI LETTER E", + direction="l", + linebreak="al", + unicodeslot=0x11F0E, + }, + [0x11F0F]={ + category="lo", + description="KAWI LETTER AI", + direction="l", + linebreak="al", + unicodeslot=0x11F0F, + }, + [0x11F10]={ + category="lo", + description="KAWI LETTER O", + direction="l", + linebreak="al", + unicodeslot=0x11F10, + }, + [0x11F12]={ + category="lo", + description="KAWI LETTER KA", + direction="l", + linebreak="al", + unicodeslot=0x11F12, + }, + [0x11F13]={ + category="lo", + description="KAWI LETTER KHA", + direction="l", + linebreak="al", + unicodeslot=0x11F13, + }, + [0x11F14]={ + category="lo", + description="KAWI LETTER GA", + direction="l", + linebreak="al", + unicodeslot=0x11F14, + }, + [0x11F15]={ + category="lo", + description="KAWI LETTER GHA", + direction="l", + linebreak="al", + unicodeslot=0x11F15, + }, + [0x11F16]={ + category="lo", + description="KAWI LETTER NGA", + direction="l", + linebreak="al", + unicodeslot=0x11F16, + }, + [0x11F17]={ + category="lo", + description="KAWI LETTER CA", + direction="l", + linebreak="al", + unicodeslot=0x11F17, + }, + [0x11F18]={ + category="lo", + description="KAWI LETTER CHA", + direction="l", + linebreak="al", + unicodeslot=0x11F18, + }, + [0x11F19]={ + category="lo", + description="KAWI LETTER JA", + direction="l", + linebreak="al", + unicodeslot=0x11F19, + }, + [0x11F1A]={ + category="lo", + description="KAWI LETTER JHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1A, + }, + [0x11F1B]={ + category="lo", + description="KAWI LETTER NYA", + direction="l", + linebreak="al", + unicodeslot=0x11F1B, + }, + [0x11F1C]={ + category="lo", + description="KAWI LETTER TTA", + direction="l", + linebreak="al", + unicodeslot=0x11F1C, + }, + [0x11F1D]={ + category="lo", + description="KAWI LETTER TTHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1D, + }, + [0x11F1E]={ + category="lo", + description="KAWI LETTER DDA", + direction="l", + linebreak="al", + unicodeslot=0x11F1E, + }, + [0x11F1F]={ + category="lo", + description="KAWI LETTER DDHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1F, + }, + [0x11F20]={ + category="lo", + description="KAWI LETTER NNA", + direction="l", + linebreak="al", + unicodeslot=0x11F20, + }, + [0x11F21]={ + category="lo", + description="KAWI LETTER TA", + direction="l", + linebreak="al", + unicodeslot=0x11F21, + }, + [0x11F22]={ + category="lo", + description="KAWI LETTER THA", + direction="l", + linebreak="al", + unicodeslot=0x11F22, + }, + [0x11F23]={ + category="lo", + description="KAWI LETTER DA", + direction="l", + linebreak="al", + unicodeslot=0x11F23, + }, + [0x11F24]={ + category="lo", + description="KAWI LETTER DHA", + direction="l", + linebreak="al", + unicodeslot=0x11F24, + }, + [0x11F25]={ + category="lo", + description="KAWI LETTER NA", + direction="l", + linebreak="al", + unicodeslot=0x11F25, + }, + [0x11F26]={ + category="lo", + description="KAWI LETTER PA", + direction="l", + linebreak="al", + unicodeslot=0x11F26, + }, + [0x11F27]={ + category="lo", + description="KAWI LETTER PHA", + direction="l", + linebreak="al", + unicodeslot=0x11F27, + }, + [0x11F28]={ + category="lo", + description="KAWI LETTER BA", + direction="l", + linebreak="al", + unicodeslot=0x11F28, + }, + [0x11F29]={ + category="lo", + description="KAWI LETTER BHA", + direction="l", + linebreak="al", + unicodeslot=0x11F29, + }, + [0x11F2A]={ + category="lo", + description="KAWI LETTER MA", + direction="l", + linebreak="al", + unicodeslot=0x11F2A, + }, + [0x11F2B]={ + category="lo", + description="KAWI LETTER YA", + direction="l", + linebreak="al", + unicodeslot=0x11F2B, + }, + [0x11F2C]={ + category="lo", + description="KAWI LETTER RA", + direction="l", + linebreak="al", + unicodeslot=0x11F2C, + }, + [0x11F2D]={ + category="lo", + description="KAWI LETTER LA", + direction="l", + linebreak="al", + unicodeslot=0x11F2D, + }, + [0x11F2E]={ + category="lo", + description="KAWI LETTER WA", + direction="l", + linebreak="al", + unicodeslot=0x11F2E, + }, + [0x11F2F]={ + category="lo", + description="KAWI LETTER SHA", + direction="l", + linebreak="al", + unicodeslot=0x11F2F, + }, + [0x11F30]={ + category="lo", + description="KAWI LETTER SSA", + direction="l", + linebreak="al", + unicodeslot=0x11F30, + }, + [0x11F31]={ + category="lo", + description="KAWI LETTER SA", + direction="l", + linebreak="al", + unicodeslot=0x11F31, + }, + [0x11F32]={ + category="lo", + description="KAWI LETTER HA", + direction="l", + linebreak="al", + unicodeslot=0x11F32, + }, + [0x11F33]={ + category="lo", + description="KAWI LETTER JNYA", + direction="l", + linebreak="al", + unicodeslot=0x11F33, + }, + [0x11F34]={ + category="mc", + description="KAWI VOWEL SIGN AA", + direction="l", + linebreak="cm", + unicodeslot=0x11F34, + }, + [0x11F35]={ + category="mc", + description="KAWI VOWEL SIGN ALTERNATE AA", + direction="l", + linebreak="cm", + unicodeslot=0x11F35, + }, + [0x11F36]={ + category="mn", + description="KAWI VOWEL SIGN I", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F36, + }, + [0x11F37]={ + category="mn", + description="KAWI VOWEL SIGN II", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F37, + }, + [0x11F38]={ + category="mn", + description="KAWI VOWEL SIGN U", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F38, + }, + [0x11F39]={ + category="mn", + description="KAWI VOWEL SIGN UU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F39, + }, + [0x11F3A]={ + category="mn", + description="KAWI VOWEL SIGN VOCALIC R", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F3A, + }, + [0x11F3E]={ + category="mc", + description="KAWI VOWEL SIGN E", + direction="l", + linebreak="cm", + unicodeslot=0x11F3E, + }, + [0x11F3F]={ + category="mc", + description="KAWI VOWEL SIGN AI", + direction="l", + linebreak="cm", + unicodeslot=0x11F3F, + }, + [0x11F40]={ + category="mn", + description="KAWI VOWEL SIGN EU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F40, + }, + [0x11F41]={ + category="mc", + combining=0x9, + description="KAWI SIGN KILLER", + direction="l", + linebreak="cm", + unicodeslot=0x11F41, + }, + [0x11F42]={ + category="mn", + combining=0x9, + description="KAWI CONJOINER", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F42, + }, + [0x11F43]={ + category="po", + description="KAWI DANDA", + direction="l", + linebreak="ba", + unicodeslot=0x11F43, + }, + [0x11F44]={ + category="po", + description="KAWI DOUBLE DANDA", + direction="l", + linebreak="ba", + unicodeslot=0x11F44, + }, + [0x11F45]={ + category="po", + description="KAWI PUNCTUATION SECTION MARKER", + direction="l", + linebreak="id", + unicodeslot=0x11F45, + }, + [0x11F46]={ + category="po", + description="KAWI PUNCTUATION ALTERNATE SECTION MARKER", + direction="l", + linebreak="id", + unicodeslot=0x11F46, + }, + [0x11F47]={ + category="po", + description="KAWI PUNCTUATION FLOWER", + direction="l", + linebreak="id", + unicodeslot=0x11F47, + }, + [0x11F48]={ + category="po", + description="KAWI PUNCTUATION SPACE FILLER", + direction="l", + linebreak="id", + unicodeslot=0x11F48, + }, + [0x11F49]={ + category="po", + description="KAWI PUNCTUATION DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F49, + }, + [0x11F4A]={ + category="po", + description="KAWI PUNCTUATION DOUBLE DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F4A, + }, + [0x11F4B]={ + category="po", + description="KAWI PUNCTUATION TRIPLE DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F4B, + }, + [0x11F4C]={ + category="po", + description="KAWI PUNCTUATION CIRCLE", + direction="l", + linebreak="id", + unicodeslot=0x11F4C, + }, + [0x11F4D]={ + category="po", + description="KAWI PUNCTUATION FILLED CIRCLE", + direction="l", + linebreak="id", + unicodeslot=0x11F4D, + }, + [0x11F4E]={ + category="po", + description="KAWI PUNCTUATION SPIRAL", + direction="l", + linebreak="id", + unicodeslot=0x11F4E, + }, + [0x11F4F]={ + category="po", + description="KAWI PUNCTUATION CLOSING SPIRAL", + direction="l", + linebreak="id", + unicodeslot=0x11F4F, + }, + [0x11F50]={ + category="nd", + description="KAWI DIGIT ZERO", + direction="l", + linebreak="nu", + unicodeslot=0x11F50, + }, + [0x11F51]={ + category="nd", + description="KAWI DIGIT ONE", + direction="l", + linebreak="nu", + unicodeslot=0x11F51, + }, + [0x11F52]={ + category="nd", + description="KAWI DIGIT TWO", + direction="l", + linebreak="nu", + unicodeslot=0x11F52, + }, + [0x11F53]={ + category="nd", + description="KAWI DIGIT THREE", + direction="l", + linebreak="nu", + unicodeslot=0x11F53, + }, + [0x11F54]={ + category="nd", + description="KAWI DIGIT FOUR", + direction="l", + linebreak="nu", + unicodeslot=0x11F54, + }, + [0x11F55]={ + category="nd", + description="KAWI DIGIT FIVE", + direction="l", + linebreak="nu", + unicodeslot=0x11F55, + }, + [0x11F56]={ + category="nd", + description="KAWI DIGIT SIX", + direction="l", + linebreak="nu", + unicodeslot=0x11F56, + }, + [0x11F57]={ + category="nd", + description="KAWI DIGIT SEVEN", + direction="l", + linebreak="nu", + unicodeslot=0x11F57, + }, + [0x11F58]={ + category="nd", + description="KAWI DIGIT EIGHT", + direction="l", + linebreak="nu", + unicodeslot=0x11F58, + }, + [0x11F59]={ + category="nd", + description="KAWI DIGIT NINE", + direction="l", + linebreak="nu", + unicodeslot=0x11F59, + }, [0x11FB0]={ category="lo", description="LISU LETTER YHA", @@ -185847,6 +186619,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13091, + variants=variants_90, }, [0x13092]={ category="lo", @@ -185854,6 +186627,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13092, + variants=variants_90, }, [0x13093]={ category="lo", @@ -185861,6 +186635,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13093, + variants=variants_180, }, [0x13094]={ category="lo", @@ -186015,6 +186790,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x130A9, + variants=variants_180, }, [0x130AA]={ category="lo", @@ -186729,6 +187505,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1310F, + variants=variants_90, }, [0x13110]={ category="lo", @@ -186785,6 +187562,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13117, + variants=variants_270, }, [0x13118]={ category="lo", @@ -186820,6 +187598,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1311C, + variants=variants_90, }, [0x1311D]={ category="lo", @@ -186855,6 +187634,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13121, + variants=variants_90, }, [0x13122]={ category="lo", @@ -186897,6 +187677,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13127, + variants=variants_90, }, [0x13128]={ category="lo", @@ -187023,6 +187804,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13139, + variants=variants_90_270, }, [0x1313A]={ category="lo", @@ -187541,6 +188323,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13183, + variants=variants_270, }, [0x13184]={ category="lo", @@ -187569,6 +188352,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13187, + variants=variants_180, }, [0x13188]={ category="lo", @@ -187744,6 +188528,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131A0, + variants=variants_90_270, }, [0x131A1]={ category="lo", @@ -187863,6 +188648,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B1, + variants=variants_90_180, }, [0x131B2]={ category="lo", @@ -187912,6 +188698,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B8, + variants=variants_90, }, [0x131B9]={ category="lo", @@ -187919,6 +188706,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B9, + variants=variants_90, }, [0x131BA]={ category="lo", @@ -187926,6 +188714,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131BA, + variants=variants_270, }, [0x131BB]={ category="lo", @@ -188045,6 +188834,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131CB, + variants=variants_90, }, [0x131CC]={ category="lo", @@ -188290,6 +189080,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131EE, + variants=variants_180_270, }, [0x131EF]={ category="lo", @@ -188360,6 +189151,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131F8, + variants=variants_180, }, [0x131F9]={ category="lo", @@ -188367,6 +189159,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131F9, + variants=variants_90_180, }, [0x131FA]={ category="lo", @@ -188374,6 +189167,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131FA, + variants=variants_90_180, }, [0x131FB]={ category="lo", @@ -188570,6 +189364,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13216, + variants=variants_270, }, [0x13217]={ category="lo", @@ -189025,6 +189820,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13257, + variants=variants_180, }, [0x13258]={ category="lo", @@ -189277,6 +190073,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1327B, + variants=variants_270, }, [0x1327C]={ category="lo", @@ -189305,6 +190102,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1327F, + variants=variants_90_180, }, [0x13280]={ category="lo", @@ -189347,6 +190145,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13285, + variants=variants_90, }, [0x13286]={ category="lo", @@ -189396,6 +190195,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1328C, + variants=variants_90, }, [0x1328D]={ category="lo", @@ -189564,6 +190364,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132A4, + variants=variants_180_270, }, [0x132A5]={ category="lo", @@ -189606,6 +190407,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132AA, + variants=variants_90, }, [0x132AB]={ category="lo", @@ -189837,6 +190639,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132CB, + variants=variants_90, }, [0x132CC]={ category="lo", @@ -189956,6 +190759,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132DC, + variants=variants_90, }, [0x132DD]={ category="lo", @@ -190033,6 +190837,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132E7, + variants=variants_90_270, }, [0x132E8]={ category="lo", @@ -190047,6 +190852,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132E9, + variants=variants_270, }, [0x132EA]={ category="lo", @@ -190152,6 +190958,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132F8, + variants=variants_270, }, [0x132F9]={ category="lo", @@ -190187,6 +190994,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132FD, + variants=variants_270, }, [0x132FE]={ category="lo", @@ -190222,6 +191030,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13302, + variants=variants_270, }, [0x13303]={ category="lo", @@ -190229,6 +191038,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13303, + variants=variants_270, }, [0x13304]={ category="lo", @@ -190257,6 +191067,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13307, + variants=variants_90, }, [0x13308]={ category="lo", @@ -190264,6 +191075,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13308, + variants=variants_180, }, [0x13309]={ category="lo", @@ -190320,6 +191132,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13310, + variants=variants_270, }, [0x13311]={ category="lo", @@ -190327,6 +191140,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13311, + variants=variants_270, }, [0x13312]={ category="lo", @@ -190334,6 +191148,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13312, + variants=variants_180_270, }, [0x13313]={ category="lo", @@ -190341,6 +191156,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13313, + variants=variants_180_270, }, [0x13314]={ category="lo", @@ -190348,6 +191164,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13314, + variants=variants_180_270, }, [0x13315]={ category="lo", @@ -190397,6 +191214,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1331B, + variants=variants_90_180, }, [0x1331C]={ category="lo", @@ -190404,6 +191222,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1331C, + variants=variants_270, }, [0x1331D]={ category="lo", @@ -190439,6 +191258,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13321, + variants=variants_180_270, }, [0x13322]={ category="lo", @@ -190446,6 +191266,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13322, + variants=variants_90_180, }, [0x13323]={ category="lo", @@ -190551,6 +191372,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13331, + variants=variants_180_270, }, [0x13332]={ category="lo", @@ -190621,6 +191443,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1333B, + variants=variants_90, }, [0x1333C]={ category="lo", @@ -190628,6 +191451,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1333C, + variants=variants_90, }, [0x1333D]={ category="lo", @@ -190726,6 +191550,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1334A, + variants=variants_270, }, [0x1334B]={ category="lo", @@ -190887,6 +191712,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13361, + variants=variants_270, }, [0x13362]={ category="lo", @@ -191013,6 +191839,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13373, + variants=variants_270, }, [0x13374]={ category="lo", @@ -191041,6 +191868,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13377, + variants=variants_90, }, [0x13378]={ category="lo", @@ -191048,6 +191876,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13378, + variants=variants_90, }, [0x13379]={ category="lo", @@ -191083,6 +191912,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1337D, + variants=variants_270, }, [0x1337E]={ category="lo", @@ -191139,6 +191969,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13385, + variants=variants_270, }, [0x13386]={ category="lo", @@ -191279,6 +192110,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13399, + variants=variants_90, }, [0x1339A]={ category="lo", @@ -191286,6 +192118,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1339A, + variants=variants_90, }, [0x1339B]={ category="lo", @@ -191433,6 +192266,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133AF, + variants=variants_270, }, [0x133B0]={ category="lo", @@ -191440,6 +192274,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133B0, + variants=variants_270, }, [0x133B1]={ category="lo", @@ -191545,6 +192380,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133BF, + variants=variants_270, }, [0x133C0]={ category="lo", @@ -191685,6 +192521,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133D3, + variants=variants_90, }, [0x133D4]={ category="lo", @@ -191755,6 +192592,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133DD, + variants=variants_270, }, [0x133DE]={ category="lo", @@ -191902,6 +192740,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F2, + variants=variants_90, }, [0x133F3]={ category="lo", @@ -191923,6 +192762,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F5, + variants=variants_90, }, [0x133F6]={ category="lo", @@ -191930,6 +192770,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F6, + variants=variants_90, }, [0x133F7]={ category="lo", @@ -192021,6 +192862,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13403, + variants=variants_90, }, [0x13404]={ category="lo", @@ -192154,6 +192996,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13416, + variants=variants_90, }, [0x13417]={ category="lo", @@ -192175,6 +193018,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13419, + variants=variants_90_180_270, }, [0x1341A]={ category="lo", @@ -192182,6 +193026,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1341A, + variants=variants_90, }, [0x1341B]={ category="lo", @@ -192245,6 +193090,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13423, + variants=variants_90, }, [0x13424]={ category="lo", @@ -192308,6 +193154,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1342C, + variants=variants_270, }, [0x1342D]={ category="lo", @@ -192322,6 +193169,14 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1342E, + variants=variants_270, + }, + [0x1342F]={ + category="lo", + description="EGYPTIAN HIEROGLYPH V011D", + direction="l", + linebreak="al", + unicodeslot=0x1342F, }, [0x13430]={ category="cf", @@ -192386,6 +193241,213 @@ characters.data={ linebreak="cl", unicodeslot=0x13438, }, + [0x13439]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT MIDDLE", + direction="l", + linebreak="gl", + unicodeslot=0x13439, + }, + [0x1343A]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT TOP", + direction="l", + linebreak="gl", + unicodeslot=0x1343A, + }, + [0x1343B]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT BOTTOM", + direction="l", + linebreak="gl", + unicodeslot=0x1343B, + }, + [0x1343C]={ + category="cf", + description="EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE", + direction="l", + linebreak="op", + unicodeslot=0x1343C, + }, + [0x1343D]={ + category="cf", + description="EGYPTIAN HIEROGLYPH END ENCLOSURE", + direction="l", + linebreak="cl", + unicodeslot=0x1343D, + }, + [0x1343E]={ + category="cf", + description="EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE", + direction="l", + linebreak="op", + unicodeslot=0x1343E, + }, + [0x1343F]={ + category="cf", + description="EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE", + direction="l", + linebreak="cl", + unicodeslot=0x1343F, + }, + [0x13440]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY", + direction="nsm", + linebreak="cm", + unicodeslot=0x13440, + }, + [0x13441]={ + category="lo", + description="EGYPTIAN HIEROGLYPH FULL BLANK", + direction="l", + linebreak="al", + unicodeslot=0x13441, + }, + [0x13442]={ + category="lo", + description="EGYPTIAN HIEROGLYPH HALF BLANK", + direction="l", + linebreak="al", + unicodeslot=0x13442, + }, + [0x13443]={ + category="lo", + description="EGYPTIAN HIEROGLYPH LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13443, + variants=variants_expanded, + }, + [0x13444]={ + category="lo", + description="EGYPTIAN HIEROGLYPH HALF LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13444, + variants=variants_expanded, + }, + [0x13445]={ + category="lo", + description="EGYPTIAN HIEROGLYPH TALL LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13445, + variants=variants_expanded, + }, + [0x13446]={ + category="lo", + description="EGYPTIAN HIEROGLYPH WIDE LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13446, + variants=variants_expanded, + }, + [0x13447]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13447, + }, + [0x13448]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13448, + }, + [0x13449]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13449, + }, + [0x1344A]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344A, + }, + [0x1344B]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344B, + }, + [0x1344C]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344C, + }, + [0x1344D]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344D, + }, + [0x1344E]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344E, + }, + [0x1344F]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344F, + }, + [0x13450]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM", + direction="nsm", + linebreak="cm", + unicodeslot=0x13450, + }, + [0x13451]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM", + direction="nsm", + linebreak="cm", + unicodeslot=0x13451, + }, + [0x13452]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13452, + }, + [0x13453]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13453, + }, + [0x13454]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13454, + }, + [0x13455]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED", + direction="nsm", + linebreak="cm", + unicodeslot=0x13455, + }, [0x14400]={ category="lo", description="ANATOLIAN HIEROGLYPH A001", @@ -216633,6 +217695,14 @@ characters.data={ linebreak="id", unicodeslot=0x1B122, }, + [0x1B132]={ + category="lo", + cjkwd="w", + description="HIRAGANA LETTER SMALL KO", + direction="l", + linebreak="cj", + unicodeslot=0x1B132, + }, [0x1B150]={ category="lo", cjkwd="w", @@ -216657,6 +217727,14 @@ characters.data={ linebreak="cj", unicodeslot=0x1B152, }, + [0x1B155]={ + category="lo", + cjkwd="w", + description="KATAKANA LETTER SMALL KO", + direction="l", + linebreak="cj", + unicodeslot=0x1B155, + }, [0x1B164]={ category="lo", cjkwd="w", @@ -226073,6 +227151,146 @@ characters.data={ linebreak="al", unicodeslot=0x1D245, }, + [0x1D2C0]={ + category="no", + description="KAKTOVIK NUMERAL ZERO", + direction="l", + linebreak="al", + unicodeslot=0x1D2C0, + }, + [0x1D2C1]={ + category="no", + description="KAKTOVIK NUMERAL ONE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C1, + }, + [0x1D2C2]={ + category="no", + description="KAKTOVIK NUMERAL TWO", + direction="l", + linebreak="al", + unicodeslot=0x1D2C2, + }, + [0x1D2C3]={ + category="no", + description="KAKTOVIK NUMERAL THREE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C3, + }, + [0x1D2C4]={ + category="no", + description="KAKTOVIK NUMERAL FOUR", + direction="l", + linebreak="al", + unicodeslot=0x1D2C4, + }, + [0x1D2C5]={ + category="no", + description="KAKTOVIK NUMERAL FIVE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C5, + }, + [0x1D2C6]={ + category="no", + description="KAKTOVIK NUMERAL SIX", + direction="l", + linebreak="al", + unicodeslot=0x1D2C6, + }, + [0x1D2C7]={ + category="no", + description="KAKTOVIK NUMERAL SEVEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2C7, + }, + [0x1D2C8]={ + category="no", + description="KAKTOVIK NUMERAL EIGHT", + direction="l", + linebreak="al", + unicodeslot=0x1D2C8, + }, + [0x1D2C9]={ + category="no", + description="KAKTOVIK NUMERAL NINE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C9, + }, + [0x1D2CA]={ + category="no", + description="KAKTOVIK NUMERAL TEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CA, + }, + [0x1D2CB]={ + category="no", + description="KAKTOVIK NUMERAL ELEVEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CB, + }, + [0x1D2CC]={ + category="no", + description="KAKTOVIK NUMERAL TWELVE", + direction="l", + linebreak="al", + unicodeslot=0x1D2CC, + }, + [0x1D2CD]={ + category="no", + description="KAKTOVIK NUMERAL THIRTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CD, + }, + [0x1D2CE]={ + category="no", + description="KAKTOVIK NUMERAL FOURTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CE, + }, + [0x1D2CF]={ + category="no", + description="KAKTOVIK NUMERAL FIFTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CF, + }, + [0x1D2D0]={ + category="no", + description="KAKTOVIK NUMERAL SIXTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D0, + }, + [0x1D2D1]={ + category="no", + description="KAKTOVIK NUMERAL SEVENTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D1, + }, + [0x1D2D2]={ + category="no", + description="KAKTOVIK NUMERAL EIGHTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D2, + }, + [0x1D2D3]={ + category="no", + description="KAKTOVIK NUMERAL NINETEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D3, + }, [0x1D2E0]={ category="no", description="MAYAN NUMERAL ZERO", @@ -240727,6 +241945,48 @@ characters.data={ linebreak="al", unicodeslot=0x1DF1E, }, + [0x1DF25]={ + category="ll", + description="LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF25, + }, + [0x1DF26]={ + category="ll", + description="LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF26, + }, + [0x1DF27]={ + category="ll", + description="LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF27, + }, + [0x1DF28]={ + category="ll", + description="LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF28, + }, + [0x1DF29]={ + category="ll", + description="LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF29, + }, + [0x1DF2A]={ + category="ll", + description="LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF2A, + }, [0x1E000]={ category="mn", combining=0xE6, @@ -241031,6 +242291,510 @@ characters.data={ linebreak="cm", unicodeslot=0x1E02A, }, + [0x1E030]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL A", + direction="l", + linebreak="al", + specials={ "super", 0x430 }, + unicodeslot=0x1E030, + }, + [0x1E031]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BE", + direction="l", + linebreak="al", + specials={ "super", 0x431 }, + unicodeslot=0x1E031, + }, + [0x1E032]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL VE", + direction="l", + linebreak="al", + specials={ "super", 0x432 }, + unicodeslot=0x1E032, + }, + [0x1E033]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL GHE", + direction="l", + linebreak="al", + specials={ "super", 0x433 }, + unicodeslot=0x1E033, + }, + [0x1E034]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL DE", + direction="l", + linebreak="al", + specials={ "super", 0x434 }, + unicodeslot=0x1E034, + }, + [0x1E035]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL IE", + direction="l", + linebreak="al", + specials={ "super", 0x435 }, + unicodeslot=0x1E035, + }, + [0x1E036]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ZHE", + direction="l", + linebreak="al", + specials={ "super", 0x436 }, + unicodeslot=0x1E036, + }, + [0x1E037]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ZE", + direction="l", + linebreak="al", + specials={ "super", 0x437 }, + unicodeslot=0x1E037, + }, + [0x1E038]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL I", + direction="l", + linebreak="al", + specials={ "super", 0x438 }, + unicodeslot=0x1E038, + }, + [0x1E039]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL KA", + direction="l", + linebreak="al", + specials={ "super", 0x43A }, + unicodeslot=0x1E039, + }, + [0x1E03A]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EL", + direction="l", + linebreak="al", + specials={ "super", 0x43B }, + unicodeslot=0x1E03A, + }, + [0x1E03B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EM", + direction="l", + linebreak="al", + specials={ "super", 0x43C }, + unicodeslot=0x1E03B, + }, + [0x1E03C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL O", + direction="l", + linebreak="al", + specials={ "super", 0x43E }, + unicodeslot=0x1E03C, + }, + [0x1E03D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL PE", + direction="l", + linebreak="al", + specials={ "super", 0x43F }, + unicodeslot=0x1E03D, + }, + [0x1E03E]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ER", + direction="l", + linebreak="al", + specials={ "super", 0x440 }, + unicodeslot=0x1E03E, + }, + [0x1E03F]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ES", + direction="l", + linebreak="al", + specials={ "super", 0x441 }, + unicodeslot=0x1E03F, + }, + [0x1E040]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL TE", + direction="l", + linebreak="al", + specials={ "super", 0x442 }, + unicodeslot=0x1E040, + }, + [0x1E041]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL U", + direction="l", + linebreak="al", + specials={ "super", 0x443 }, + unicodeslot=0x1E041, + }, + [0x1E042]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EF", + direction="l", + linebreak="al", + specials={ "super", 0x444 }, + unicodeslot=0x1E042, + }, + [0x1E043]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL HA", + direction="l", + linebreak="al", + specials={ "super", 0x445 }, + unicodeslot=0x1E043, + }, + [0x1E044]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL TSE", + direction="l", + linebreak="al", + specials={ "super", 0x446 }, + unicodeslot=0x1E044, + }, + [0x1E045]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL CHE", + direction="l", + linebreak="al", + specials={ "super", 0x447 }, + unicodeslot=0x1E045, + }, + [0x1E046]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL SHA", + direction="l", + linebreak="al", + specials={ "super", 0x448 }, + unicodeslot=0x1E046, + }, + [0x1E047]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YERU", + direction="l", + linebreak="al", + specials={ "super", 0x44B }, + unicodeslot=0x1E047, + }, + [0x1E048]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL E", + direction="l", + linebreak="al", + specials={ "super", 0x44D }, + unicodeslot=0x1E048, + }, + [0x1E049]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YU", + direction="l", + linebreak="al", + specials={ "super", 0x44E }, + unicodeslot=0x1E049, + }, + [0x1E04A]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL DZZE", + direction="l", + linebreak="al", + specials={ "super", 0xA689 }, + unicodeslot=0x1E04A, + }, + [0x1E04B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL SCHWA", + direction="l", + linebreak="al", + specials={ "super", 0x4D9 }, + unicodeslot=0x1E04B, + }, + [0x1E04C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I", + direction="l", + linebreak="al", + specials={ "super", 0x456 }, + unicodeslot=0x1E04C, + }, + [0x1E04D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL JE", + direction="l", + linebreak="al", + specials={ "super", 0x458 }, + unicodeslot=0x1E04D, + }, + [0x1E04E]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BARRED O", + direction="l", + linebreak="al", + specials={ "super", 0x4E9 }, + unicodeslot=0x1E04E, + }, + [0x1E04F]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U", + direction="l", + linebreak="al", + specials={ "super", 0x4AF }, + unicodeslot=0x1E04F, + }, + [0x1E050]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL PALOCHKA", + direction="l", + linebreak="al", + specials={ "super", 0x4CF }, + unicodeslot=0x1E050, + }, + [0x1E051]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER A", + direction="l", + linebreak="al", + specials={ "sub", 0x430 }, + unicodeslot=0x1E051, + }, + [0x1E052]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER BE", + direction="l", + linebreak="al", + specials={ "sub", 0x431 }, + unicodeslot=0x1E052, + }, + [0x1E053]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER VE", + direction="l", + linebreak="al", + specials={ "sub", 0x432 }, + unicodeslot=0x1E053, + }, + [0x1E054]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER GHE", + direction="l", + linebreak="al", + specials={ "sub", 0x433 }, + unicodeslot=0x1E054, + }, + [0x1E055]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DE", + direction="l", + linebreak="al", + specials={ "sub", 0x434 }, + unicodeslot=0x1E055, + }, + [0x1E056]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER IE", + direction="l", + linebreak="al", + specials={ "sub", 0x435 }, + unicodeslot=0x1E056, + }, + [0x1E057]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ZHE", + direction="l", + linebreak="al", + specials={ "sub", 0x436 }, + unicodeslot=0x1E057, + }, + [0x1E058]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ZE", + direction="l", + linebreak="al", + specials={ "sub", 0x437 }, + unicodeslot=0x1E058, + }, + [0x1E059]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER I", + direction="l", + linebreak="al", + specials={ "sub", 0x438 }, + unicodeslot=0x1E059, + }, + [0x1E05A]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER KA", + direction="l", + linebreak="al", + specials={ "sub", 0x43A }, + unicodeslot=0x1E05A, + }, + [0x1E05B]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER EL", + direction="l", + linebreak="al", + specials={ "sub", 0x43B }, + unicodeslot=0x1E05B, + }, + [0x1E05C]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER O", + direction="l", + linebreak="al", + specials={ "sub", 0x43E }, + unicodeslot=0x1E05C, + }, + [0x1E05D]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER PE", + direction="l", + linebreak="al", + specials={ "sub", 0x43F }, + unicodeslot=0x1E05D, + }, + [0x1E05E]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ES", + direction="l", + linebreak="al", + specials={ "sub", 0x441 }, + unicodeslot=0x1E05E, + }, + [0x1E05F]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER U", + direction="l", + linebreak="al", + specials={ "sub", 0x443 }, + unicodeslot=0x1E05F, + }, + [0x1E060]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER EF", + direction="l", + linebreak="al", + specials={ "sub", 0x444 }, + unicodeslot=0x1E060, + }, + [0x1E061]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER HA", + direction="l", + linebreak="al", + specials={ "sub", 0x445 }, + unicodeslot=0x1E061, + }, + [0x1E062]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER TSE", + direction="l", + linebreak="al", + specials={ "sub", 0x446 }, + unicodeslot=0x1E062, + }, + [0x1E063]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER CHE", + direction="l", + linebreak="al", + specials={ "sub", 0x447 }, + unicodeslot=0x1E063, + }, + [0x1E064]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER SHA", + direction="l", + linebreak="al", + specials={ "sub", 0x448 }, + unicodeslot=0x1E064, + }, + [0x1E065]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN", + direction="l", + linebreak="al", + specials={ "sub", 0x44A }, + unicodeslot=0x1E065, + }, + [0x1E066]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER YERU", + direction="l", + linebreak="al", + specials={ "sub", 0x44B }, + unicodeslot=0x1E066, + }, + [0x1E067]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN", + direction="l", + linebreak="al", + specials={ "sub", 0x491 }, + unicodeslot=0x1E067, + }, + [0x1E068]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I", + direction="l", + linebreak="al", + specials={ "sub", 0x456 }, + unicodeslot=0x1E068, + }, + [0x1E069]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DZE", + direction="l", + linebreak="al", + specials={ "sub", 0x455 }, + unicodeslot=0x1E069, + }, + [0x1E06A]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DZHE", + direction="l", + linebreak="al", + specials={ "sub", 0x45F }, + unicodeslot=0x1E06A, + }, + [0x1E06B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER", + direction="l", + linebreak="al", + specials={ "super", 0x4AB }, + unicodeslot=0x1E06B, + }, + [0x1E06C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER", + direction="l", + linebreak="al", + specials={ "super", 0xA651 }, + unicodeslot=0x1E06C, + }, + [0x1E06D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE", + direction="l", + linebreak="al", + specials={ "super", 0x4B1 }, + unicodeslot=0x1E06D, + }, + [0x1E08F]={ + category="mn", + combining=0xE6, + description="COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E08F, + }, [0x1E100]={ category="lo", description="NYIAKENG PUACHUE HMONG LETTER MA", @@ -242170,6 +243934,304 @@ characters.data={ linebreak="pr", unicodeslot=0x1E2FF, }, + [0x1E4D0]={ + category="lo", + description="NAG MUNDARI LETTER O", + direction="l", + linebreak="al", + unicodeslot=0x1E4D0, + }, + [0x1E4D1]={ + category="lo", + description="NAG MUNDARI LETTER OP", + direction="l", + linebreak="al", + unicodeslot=0x1E4D1, + }, + [0x1E4D2]={ + category="lo", + description="NAG MUNDARI LETTER OL", + direction="l", + linebreak="al", + unicodeslot=0x1E4D2, + }, + [0x1E4D3]={ + category="lo", + description="NAG MUNDARI LETTER OY", + direction="l", + linebreak="al", + unicodeslot=0x1E4D3, + }, + [0x1E4D4]={ + category="lo", + description="NAG MUNDARI LETTER ONG", + direction="l", + linebreak="al", + unicodeslot=0x1E4D4, + }, + [0x1E4D5]={ + category="lo", + description="NAG MUNDARI LETTER A", + direction="l", + linebreak="al", + unicodeslot=0x1E4D5, + }, + [0x1E4D6]={ + category="lo", + description="NAG MUNDARI LETTER AJ", + direction="l", + linebreak="al", + unicodeslot=0x1E4D6, + }, + [0x1E4D7]={ + category="lo", + description="NAG MUNDARI LETTER AB", + direction="l", + linebreak="al", + unicodeslot=0x1E4D7, + }, + [0x1E4D8]={ + category="lo", + description="NAG MUNDARI LETTER ANY", + direction="l", + linebreak="al", + unicodeslot=0x1E4D8, + }, + [0x1E4D9]={ + category="lo", + description="NAG MUNDARI LETTER AH", + direction="l", + linebreak="al", + unicodeslot=0x1E4D9, + }, + [0x1E4DA]={ + category="lo", + description="NAG MUNDARI LETTER I", + direction="l", + linebreak="al", + unicodeslot=0x1E4DA, + }, + [0x1E4DB]={ + category="lo", + description="NAG MUNDARI LETTER IS", + direction="l", + linebreak="al", + unicodeslot=0x1E4DB, + }, + [0x1E4DC]={ + category="lo", + description="NAG MUNDARI LETTER IDD", + direction="l", + linebreak="al", + unicodeslot=0x1E4DC, + }, + [0x1E4DD]={ + category="lo", + description="NAG MUNDARI LETTER IT", + direction="l", + linebreak="al", + unicodeslot=0x1E4DD, + }, + [0x1E4DE]={ + category="lo", + description="NAG MUNDARI LETTER IH", + direction="l", + linebreak="al", + unicodeslot=0x1E4DE, + }, + [0x1E4DF]={ + category="lo", + description="NAG MUNDARI LETTER U", + direction="l", + linebreak="al", + unicodeslot=0x1E4DF, + }, + [0x1E4E0]={ + category="lo", + description="NAG MUNDARI LETTER UC", + direction="l", + linebreak="al", + unicodeslot=0x1E4E0, + }, + [0x1E4E1]={ + category="lo", + description="NAG MUNDARI LETTER UD", + direction="l", + linebreak="al", + unicodeslot=0x1E4E1, + }, + [0x1E4E2]={ + category="lo", + description="NAG MUNDARI LETTER UK", + direction="l", + linebreak="al", + unicodeslot=0x1E4E2, + }, + [0x1E4E3]={ + category="lo", + description="NAG MUNDARI LETTER UR", + direction="l", + linebreak="al", + unicodeslot=0x1E4E3, + }, + [0x1E4E4]={ + category="lo", + description="NAG MUNDARI LETTER E", + direction="l", + linebreak="al", + unicodeslot=0x1E4E4, + }, + [0x1E4E5]={ + category="lo", + description="NAG MUNDARI LETTER ENN", + direction="l", + linebreak="al", + unicodeslot=0x1E4E5, + }, + [0x1E4E6]={ + category="lo", + description="NAG MUNDARI LETTER EG", + direction="l", + linebreak="al", + unicodeslot=0x1E4E6, + }, + [0x1E4E7]={ + category="lo", + description="NAG MUNDARI LETTER EM", + direction="l", + linebreak="al", + unicodeslot=0x1E4E7, + }, + [0x1E4E8]={ + category="lo", + description="NAG MUNDARI LETTER EN", + direction="l", + linebreak="al", + unicodeslot=0x1E4E8, + }, + [0x1E4E9]={ + category="lo", + description="NAG MUNDARI LETTER ETT", + direction="l", + linebreak="al", + unicodeslot=0x1E4E9, + }, + [0x1E4EA]={ + category="lo", + description="NAG MUNDARI LETTER ELL", + direction="l", + linebreak="al", + unicodeslot=0x1E4EA, + }, + [0x1E4EB]={ + category="lm", + description="NAG MUNDARI SIGN OJOD", + direction="l", + linebreak="al", + unicodeslot=0x1E4EB, + }, + [0x1E4EC]={ + category="mn", + combining=0xE8, + description="NAG MUNDARI SIGN MUHOR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EC, + }, + [0x1E4ED]={ + category="mn", + combining=0xE8, + description="NAG MUNDARI SIGN TOYOR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4ED, + }, + [0x1E4EE]={ + category="mn", + combining=0xDC, + description="NAG MUNDARI SIGN IKIR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EE, + }, + [0x1E4EF]={ + category="mn", + combining=0xE6, + description="NAG MUNDARI SIGN SUTUH", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EF, + }, + [0x1E4F0]={ + category="nd", + description="NAG MUNDARI DIGIT ZERO", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F0, + }, + [0x1E4F1]={ + category="nd", + description="NAG MUNDARI DIGIT ONE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F1, + }, + [0x1E4F2]={ + category="nd", + description="NAG MUNDARI DIGIT TWO", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F2, + }, + [0x1E4F3]={ + category="nd", + description="NAG MUNDARI DIGIT THREE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F3, + }, + [0x1E4F4]={ + category="nd", + description="NAG MUNDARI DIGIT FOUR", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F4, + }, + [0x1E4F5]={ + category="nd", + description="NAG MUNDARI DIGIT FIVE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F5, + }, + [0x1E4F6]={ + category="nd", + description="NAG MUNDARI DIGIT SIX", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F6, + }, + [0x1E4F7]={ + category="nd", + description="NAG MUNDARI DIGIT SEVEN", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F7, + }, + [0x1E4F8]={ + category="nd", + description="NAG MUNDARI DIGIT EIGHT", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F8, + }, + [0x1E4F9]={ + category="nd", + description="NAG MUNDARI DIGIT NINE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F9, + }, [0x1E7E0]={ category="lo", description="ETHIOPIC SYLLABLE HHYA", @@ -258294,6 +260356,14 @@ characters.data={ linebreak="id", unicodeslot=0x1F6D7, }, + [0x1F6DC]={ + category="so", + cjkwd="w", + description="WIRELESS", + direction="on", + linebreak="id", + unicodeslot=0x1F6DC, + }, [0x1F6DD]={ category="so", cjkwd="w", @@ -259332,6 +261402,62 @@ characters.data={ linebreak="al", unicodeslot=0x1F773, }, + [0x1F774]={ + category="so", + description="LOT OF FORTUNE", + direction="on", + linebreak="id", + unicodeslot=0x1F774, + }, + [0x1F775]={ + category="so", + description="OCCULTATION", + direction="on", + linebreak="id", + unicodeslot=0x1F775, + }, + [0x1F776]={ + category="so", + description="LUNAR ECLIPSE", + direction="on", + linebreak="id", + unicodeslot=0x1F776, + }, + [0x1F77B]={ + category="so", + description="HAUMEA", + direction="on", + linebreak="id", + unicodeslot=0x1F77B, + }, + [0x1F77C]={ + category="so", + description="MAKEMAKE", + direction="on", + linebreak="id", + unicodeslot=0x1F77C, + }, + [0x1F77D]={ + category="so", + description="GONGGONG", + direction="on", + linebreak="id", + unicodeslot=0x1F77D, + }, + [0x1F77E]={ + category="so", + description="QUAOAR", + direction="on", + linebreak="id", + unicodeslot=0x1F77E, + }, + [0x1F77F]={ + category="so", + description="ORCUS", + direction="on", + linebreak="id", + unicodeslot=0x1F77F, + }, [0x1F780]={ category="so", description="BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE", @@ -259956,6 +262082,13 @@ characters.data={ linebreak="id", unicodeslot=0x1F7D8, }, + [0x1F7D9]={ + category="so", + description="NINE POINTED WHITE STAR", + direction="on", + linebreak="id", + unicodeslot=0x1F7D9, + }, [0x1F7E0]={ category="so", cjkwd="w", @@ -263879,6 +266012,30 @@ characters.data={ linebreak="id", unicodeslot=0x1FA74, }, + [0x1FA75]={ + category="so", + cjkwd="w", + description="LIGHT BLUE HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA75, + }, + [0x1FA76]={ + category="so", + cjkwd="w", + description="GREY HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA76, + }, + [0x1FA77]={ + category="so", + cjkwd="w", + description="PINK HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA77, + }, [0x1FA78]={ category="so", cjkwd="w", @@ -263975,6 +266132,22 @@ characters.data={ linebreak="id", unicodeslot=0x1FA86, }, + [0x1FA87]={ + category="so", + cjkwd="w", + description="MARACAS", + direction="on", + linebreak="id", + unicodeslot=0x1FA87, + }, + [0x1FA88]={ + category="so", + cjkwd="w", + description="FLUTE", + direction="on", + linebreak="id", + unicodeslot=0x1FA88, + }, [0x1FA90]={ category="so", cjkwd="w", @@ -264207,6 +266380,30 @@ characters.data={ linebreak="id", unicodeslot=0x1FAAC, }, + [0x1FAAD]={ + category="so", + cjkwd="w", + description="FOLDING HAND FAN", + direction="on", + linebreak="id", + unicodeslot=0x1FAAD, + }, + [0x1FAAE]={ + category="so", + cjkwd="w", + description="HAIR PICK", + direction="on", + linebreak="id", + unicodeslot=0x1FAAE, + }, + [0x1FAAF]={ + category="so", + cjkwd="w", + description="KHANDA", + direction="on", + linebreak="id", + unicodeslot=0x1FAAF, + }, [0x1FAB0]={ category="so", cjkwd="w", @@ -264295,6 +266492,38 @@ characters.data={ linebreak="id", unicodeslot=0x1FABA, }, + [0x1FABB]={ + category="so", + cjkwd="w", + description="HYACINTH", + direction="on", + linebreak="id", + unicodeslot=0x1FABB, + }, + [0x1FABC]={ + category="so", + cjkwd="w", + description="JELLYFISH", + direction="on", + linebreak="id", + unicodeslot=0x1FABC, + }, + [0x1FABD]={ + category="so", + cjkwd="w", + description="WING", + direction="on", + linebreak="id", + unicodeslot=0x1FABD, + }, + [0x1FABF]={ + category="so", + cjkwd="w", + description="GOOSE", + direction="on", + linebreak="id", + unicodeslot=0x1FABF, + }, [0x1FAC0]={ category="so", cjkwd="w", @@ -264343,6 +266572,22 @@ characters.data={ linebreak="eb", unicodeslot=0x1FAC5, }, + [0x1FACE]={ + category="so", + cjkwd="w", + description="MOOSE", + direction="on", + linebreak="id", + unicodeslot=0x1FACE, + }, + [0x1FACF]={ + category="so", + cjkwd="w", + description="DONKEY", + direction="on", + linebreak="id", + unicodeslot=0x1FACF, + }, [0x1FAD0]={ category="so", cjkwd="w", @@ -264423,6 +266668,22 @@ characters.data={ linebreak="id", unicodeslot=0x1FAD9, }, + [0x1FADA]={ + category="so", + cjkwd="w", + description="GINGER ROOT", + direction="on", + linebreak="id", + unicodeslot=0x1FADA, + }, + [0x1FADB]={ + category="so", + cjkwd="w", + description="PEA POD", + direction="on", + linebreak="id", + unicodeslot=0x1FADB, + }, [0x1FAE0]={ category="so", cjkwd="w", @@ -264487,6 +266748,14 @@ characters.data={ linebreak="id", unicodeslot=0x1FAE7, }, + [0x1FAE8]={ + category="so", + cjkwd="w", + description="SHAKING FACE", + direction="on", + linebreak="id", + unicodeslot=0x1FAE8, + }, [0x1FAF0]={ category="so", cjkwd="w", @@ -264543,6 +266812,22 @@ characters.data={ linebreak="eb", unicodeslot=0x1FAF6, }, + [0x1FAF7]={ + category="so", + cjkwd="w", + description="LEFTWARDS PUSHING HAND", + direction="on", + linebreak="eb", + unicodeslot=0x1FAF7, + }, + [0x1FAF8]={ + category="so", + cjkwd="w", + description="RIGHTWARDS PUSHING HAND", + direction="on", + linebreak="eb", + unicodeslot=0x1FAF8, + }, [0x1FB00]={ category="so", description="BLOCK SEXTANT-1", diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua index 9dcac8033..4deb21401 100644 --- a/tex/context/base/mkiv/char-ini.lua +++ b/tex/context/base/mkiv/char-ini.lua @@ -213,6 +213,7 @@ local blocks = allocate { ["arabic"] = { first = 0x00600, last = 0x006FF, otf="arab", description = "Arabic" }, ["arabicextendeda"] = { first = 0x008A0, last = 0x008FF, description = "Arabic Extended-A" }, ["arabicextendedb"] = { first = 0x00870, last = 0x0089F, description = "Arabic Extended-B" }, + ["arabicextendedc"] = { first = 0x10EC0, last = 0x10EFF, description = "Arabic Extended-C" }, ["arabicmathematicalalphabeticsymbols"] = { first = 0x1EE00, last = 0x1EEFF, description = "Arabic Mathematical Alphabetic Symbols" }, ["arabicpresentationformsa"] = { first = 0x0FB50, last = 0x0FDFF, otf="arab", description = "Arabic Presentation Forms-A" }, ["arabicpresentationformsb"] = { first = 0x0FE70, last = 0x0FEFF, otf="arab", description = "Arabic Presentation Forms-B" }, @@ -260,6 +261,7 @@ local blocks = allocate { ["cjkunifiedideographsextensione"] = { first = 0x2B820, last = 0x2CEAF, description = "CJK Unified Ideographs Extension E" }, ["cjkunifiedideographsextensionf"] = { first = 0x2CEB0, last = 0x2EBEF, description = "CJK Unified Ideographs Extension F" }, ["cjkunifiedideographsextensiong"] = { first = 0x30000, last = 0x3134F, description = "CJK Unified Ideographs Extension G" }, + ["cjkunifiedideographsextensionh"] = { first = 0x31350, last = 0x323AF, description = "CJK Unified Ideographs Extension H" }, ["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" }, ["combiningdiacriticalmarksextended"] = { first = 0x01AB0, last = 0x01AFF, description = "Combining Diacritical Marks Extended" }, ["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" }, @@ -279,10 +281,12 @@ local blocks = allocate { ["cyrillicextendeda"] = { first = 0x02DE0, last = 0x02DFF, otf="cyrl", description = "Cyrillic Extended-A" }, ["cyrillicextendedb"] = { first = 0x0A640, last = 0x0A69F, otf="cyrl", description = "Cyrillic Extended-B" }, ["cyrillicextendedc"] = { first = 0x01C80, last = 0x01C8F, description = "Cyrillic Extended-C" }, + ["cyrillicextendedd"] = { first = 0x1E030, last = 0x1E08F, description = "Cyrillic Extended-D" }, ["cyrillicsupplement"] = { first = 0x00500, last = 0x0052F, otf="cyrl", description = "Cyrillic Supplement" }, ["deseret"] = { first = 0x10400, last = 0x1044F, otf="dsrt", description = "Deseret" }, ["devanagari"] = { first = 0x00900, last = 0x0097F, otf="deva", description = "Devanagari" }, ["devanagariextended"] = { first = 0x0A8E0, last = 0x0A8FF, description = "Devanagari Extended" }, + ["devanagariextendeda"] = { first = 0x11B00, last = 0x11B5F, description = "Devanagari Extended-A" }, ["digitsarabicindic"] = { first = 0x00660, last = 0x00669, math = true }, -- ["digitsbengali"] = { first = 0x009E6, last = 0x009EF, math = true }, ["digitsbold"] = { first = 0x1D7CE, last = 0x1D7D7, math = true }, @@ -314,7 +318,7 @@ local blocks = allocate { ["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" }, ["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" }, ["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" }, - ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1343F, description = "Egyptian Hieroglyph Format Controls" }, + ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1345F, description = "Egyptian Hieroglyph Format Controls" }, ["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" }, ["elbasan"] = { first = 0x10500, last = 0x1052F, description = "Elbasan" }, ["elymaic"] = { first = 0x10FE0, last = 0x10FFF, description = "Elymaic" }, @@ -365,6 +369,7 @@ local blocks = allocate { ["ipaextensions"] = { first = 0x00250, last = 0x002AF, description = "IPA Extensions" }, ["javanese"] = { first = 0x0A980, last = 0x0A9DF, description = "Javanese" }, ["kaithi"] = { first = 0x11080, last = 0x110CF, description = "Kaithi" }, + ["kaktoviknumerals"] = { first = 0x1D2C0, last = 0x1D2DF, description = "Kaktovik Numerals" }, ["kanaextendeda"] = { first = 0x1B100, last = 0x1B12F, description = "Kana Extended-A" }, ["kanaextendedb"] = { first = 0x1AFF0, last = 0x1AFFF, description = "Kana Extended-B" }, ["kanasupplement"] = { first = 0x1B000, last = 0x1B0FF, description = "Kana Supplement" }, @@ -374,6 +379,7 @@ local blocks = allocate { ["katakana"] = { first = 0x030A0, last = 0x030FF, otf="kana", description = "Katakana" }, ["katakanaphoneticextensions"] = { first = 0x031F0, last = 0x031FF, otf="kana", description = "Katakana Phonetic Extensions" }, ["kayahli"] = { first = 0x0A900, last = 0x0A92F, description = "Kayah Li" }, + ["kawi"] = { first = 0x11F00, last = 0x11F5F, description = "Kawi" }, ["kharoshthi"] = { first = 0x10A00, last = 0x10A5F, otf="khar", description = "Kharoshthi" }, ["khitansmallscript"] = { first = 0x18B00, last = 0x18CFF, description = "Khitan Small Script" }, ["khmer"] = { first = 0x01780, last = 0x017FF, otf="khmr", description = "Khmer" }, @@ -456,6 +462,7 @@ local blocks = allocate { ["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" }, ["myanmarextendedb"] = { first = 0x0A9E0, last = 0x0A9FF, description = "Myanmar Extended-B" }, ["nabataean"] = { first = 0x10880, last = 0x108AF, description = "Nabataean" }, + ["nagmundari"] = { first = 0x1E4D0, last = 0x1E4FF, description = "Nag Mundari" }, ["nandinagari"] = { first = 0x119A0, last = 0x119FF, description = "Nandinagari" }, ["newa"] = { first = 0x11400, last = 0x1147F, description = "Newa" }, ["newtailue"] = { first = 0x01980, last = 0x019DF, description = "New Tai Lue" }, @@ -585,7 +592,20 @@ local blocks = allocate { ["yiradicals"] = { first = 0x0A490, last = 0x0A4CF, otf="yi", description = "Yi Radicals" }, ["yisyllables"] = { first = 0x0A000, last = 0x0A48F, otf="yi", description = "Yi Syllables" }, ["zanabazarsquare"] = { first = 0x11A00, last = 0x11A4F, description = "Zanabazar Square" }, - ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" } + ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" }, + + -- we need this early on: + + ["lowercasecalligraphic"] = { first = 0x100000, last = 0x100019, math = true }, + ["uppercasecalligraphic"] = { first = 0x100020, last = 0x100039, math = true }, + ["lowercaseboldcalligraphic"] = { first = 0x100040, last = 0x100059, math = true }, + ["uppercaseboldcalligraphic"] = { first = 0x100060, last = 0x100079, math = true }, + -- ["lowercasesansgreek"] = { first = 0x100040, last = 0x100059, math = true }, -- reserved for future use + -- ["uppercasesansgreek"] = { first = 0x100060, last = 0x100079, math = true }, -- reserved for future use + -- ["lowercaseitalicsansgreek"] = { first = 0x100080, last = 0x100099, math = true }, -- reserved for future use + -- ["uppercaseitalicsansgreek"] = { first = 0x1000A0, last = 0x1000B9, math = true }, -- reserved for future use + -- ["lowercaseblackboarditalic"] = { first = 0x1000C0, last = 0x1000D9, math = true }, -- reserved for future use + -- ["uppercaseblackboarditalic"] = { first = 0x1000E0, last = 0x1000F9, math = true }, -- reserved for future use } -- moved from math-act.lua to here: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 40594ad05..688232bf2 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 1de2ec104..7b5df628c 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2022.09.16 14:39} +\edef\contextversion{2022.10.14 10:13} %D Kind of special: diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua index 114d7dd07..4b60cd6c0 100644 --- a/tex/context/base/mkiv/font-cff.lua +++ b/tex/context/base/mkiv/font-cff.lua @@ -348,11 +348,11 @@ do top = 0 end + P("\10") / function() - result.strhw = stack[top] + result.stdhw = stack[top] top = 0 end + P("\11") / function() - result.strvw = stack[top] + result.stdvw = stack[top] top = 0 end + P("\13") / function() @@ -453,7 +453,7 @@ do top = 0 end + P("\10") / function() - result.bluesnap = stack[top] + result.blueshift = stack[top] top = 0 end + P("\11") / function() @@ -528,7 +528,7 @@ do -- the second variant is much faster. Not that it matters much as we don't see -- such numbers often. - local remap = { + local remap_1 = { ["\x00"] = "00", ["\x01"] = "01", ["\x02"] = "02", ["\x03"] = "03", ["\x04"] = "04", ["\x05"] = "05", ["\x06"] = "06", ["\x07"] = "07", ["\x08"] = "08", ["\x09"] = "09", ["\x0A"] = "0.", ["\x0B"] = "0E", ["\x0C"] = "0E-", ["\x0D"] = "0", ["\x0E"] = "0-", ["\x0F"] = "0", ["\x10"] = "10", ["\x11"] = "11", ["\x12"] = "12", ["\x13"] = "13", ["\x14"] = "14", ["\x15"] = "15", ["\x16"] = "16", ["\x17"] = "17", ["\x18"] = "18", ["\x19"] = "19", ["\x1A"] = "1.", ["\x1B"] = "1E", ["\x1C"] = "1E-", ["\x1D"] = "1", ["\x1E"] = "1-", ["\x1F"] = "1", ["\x20"] = "20", ["\x21"] = "21", ["\x22"] = "22", ["\x23"] = "23", ["\x24"] = "24", ["\x25"] = "25", ["\x26"] = "26", ["\x27"] = "27", ["\x28"] = "28", ["\x29"] = "29", ["\x2A"] = "2.", ["\x2B"] = "2E", ["\x2C"] = "2E-", ["\x2D"] = "2", ["\x2E"] = "2-", ["\x2F"] = "2", @@ -544,11 +544,18 @@ do ["\xC0"] = "E-0", ["\xC1"] = "E-1", ["\xC2"] = "E-2", ["\xC3"] = "E-3", ["\xC4"] = "E-4", ["\xC5"] = "E-5", ["\xC6"] = "E-6", ["\xC7"] = "E-7", ["\xC8"] = "E-8", ["\xC9"] = "E-9", ["\xCA"] = "E-.", ["\xCB"] = "E-E", ["\xCC"] = "E-E-", ["\xCD"] = "E-", ["\xCE"] = "E--", ["\xCF"] = "E-", ["\xD0"] = "-0", ["\xD1"] = "-1", ["\xD2"] = "-2", ["\xD3"] = "-3", ["\xD4"] = "-4", ["\xD5"] = "-5", ["\xD6"] = "-6", ["\xD7"] = "-7", ["\xD8"] = "-8", ["\xD9"] = "-9", ["\xDA"] = "-.", ["\xDB"] = "-E", ["\xDC"] = "-E-", ["\xDD"] = "-", ["\xDE"] = "--", ["\xDF"] = "-", } + local remap_2 = { + ["\x0F"] = "0", ["\x1F"] = "1", ["\x2F"] = "2", ["\x3F"] = "3", ["\x4F"] = "4", + ["\x5F"] = "5", ["\x6F"] = "6", ["\x7F"] = "7", ["\x8F"] = "8", ["\x9F"] = "9", + } + + local p_last_1 = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") + local p_last_2 = R("\xF0\xFF") - local p_last = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") - + R("\xF0\xFF") + -- tricky, we don't want to append last - local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n) + -- local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n) + local p_nibbles = P("\30") * Cs(((1-(p_last_1+p_last_2))/remap_1)^0 * (p_last_1/remap_2 + p_last_2/"")) / function(n) -- 0-9=digit a=. b=E c=E- d=reserved e=- f=finish top = top + 1 stack[top] = tonumber(n) or 0 @@ -2715,6 +2722,8 @@ function readers.cff(f,fontdata,specification) cffinfo.bluefuzz = data.bluefuzz cffinfo.stdhw = data.stdhw cffinfo.stdvw = data.stdvw + cffinfo.stemsnaph = data.stemsnaph + cffinfo.stemsnapv = data.stemsnapv end end cleanup(data,dictionaries) diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua index 8f65ed9d9..1735b4cdc 100644 --- a/tex/context/base/mkiv/font-dsp.lua +++ b/tex/context/base/mkiv/font-dsp.lua @@ -2177,6 +2177,8 @@ do -- local usedlookups = false -- setmetatableindex("number") -- + local allsteps = { } -- new per 2022-09-25 + for lookupid=1,noflookups do local lookup = lookups[lookupid] local lookuptype = lookup.type @@ -2214,6 +2216,7 @@ do steps[nofsteps] = step local rules = step.rules if rules then + allsteps[#allsteps+1] = step -- new per 2022-09-25 for i=1,#rules do local rule = rules[i] local before = rule.before @@ -2337,11 +2340,14 @@ do end end - for i=lastsequence+1,nofsequences do - local sequence = sequences[i] - local steps = sequence.steps - for i=1,#steps do - local step = steps[i] + -- for i=lastsequence+1,nofsequences do + -- local sequence = sequences[i] + -- local steps = sequence.steps + -- for i=1,#steps do + -- local step = steps[i] + + for i=1,#allsteps do -- new per 2022-09-25 + local step = allsteps[i] -- new per 2022-09-25 local rules = step.rules if rules then for i=1,#rules do @@ -2419,7 +2425,7 @@ do end end end - end + -- end -- new per 2022-09-25 for i, n in sortedhash(sublookupcheck) do local l = lookups[i] @@ -2881,7 +2887,7 @@ local function readmathglyphinfo(f,fontdata,offset) if not math then glyph.math = { accent = accent } else - math.accent = accent + math.accent = accent -- will become math.topanchor end end end diff --git a/tex/context/base/mkiv/font-imp-italics.lua b/tex/context/base/mkiv/font-imp-italics.lua index 6c432d7cf..10a419daf 100644 --- a/tex/context/base/mkiv/font-imp-italics.lua +++ b/tex/context/base/mkiv/font-imp-italics.lua @@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['font-imp-italics'] = { license = "see context related readme files" } -local next = next +local next, tonumber = next, tonumber local fonts = fonts local handlers = fonts.handlers @@ -14,11 +14,13 @@ local registerotffeature = handlers.otf.features.register local registerafmfeature = handlers.afm.features.register local function initialize(tfmdata,key,value) + local factor = tonumber(value) or 1 for unicode, character in next, tfmdata.characters do local olditalic = character.italic if olditalic and olditalic ~= 0 then - character.width = character.width + olditalic - character.italic = 0 + character.width = character.width + olditalic + character.italic = 0 + character.bottomright = -factor * olditalic end end end diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua index c294bd638..5ae6659c5 100644 --- a/tex/context/base/mkiv/font-mis.lua +++ b/tex/context/base/mkiv/font-mis.lua @@ -21,7 +21,7 @@ local readers = otf.readers if readers then - otf.version = otf.version or 3.120 + otf.version = otf.version or 3.121 otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true) function fonts.helpers.getfeatures(name,save) diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua index ecf8009f9..f35be2cd1 100644 --- a/tex/context/base/mkiv/font-osd.lua +++ b/tex/context/base/mkiv/font-osd.lua @@ -6,16 +6,6 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag license = "see context related readme files" } --- local experiment1 = false --- local experiment2 = false --- local experiment2b1 = false --- local experiment2b2 = false - --- experiments.register("fonts.indic.experiment1", function(v) experiment1 = v end) --- experiments.register("fonts.indic.experiment2", function(v) experiment2 = v end) --- experiments.register("fonts.indic.experiment2b1", function(v) experiment2b1 = v end) --- experiments.register("fonts.indic.experiment2b2", function(v) experiment2b2 = v end) - -- we need to check nbsphash (context only) -- A few remarks: @@ -1392,16 +1382,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end if reph or vattu then --- print(">>> has reph or vattu") local current = start local cns = nil local done = false while current ~= stop do --- print("\t>>> current ~= stop yet") local c = current local n = getnext(current) if ra[getchar(current)] and halant[getchar(n)] then --- print("\t\t>>> current ra; next halant") c = n n = getnext(n) local b, bn = base, base @@ -1415,7 +1402,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) if getstate(current,s_rphf) then -- position Reph (Ra + H) after post-base 'matra' (if any) since these -- become marks on the 'matra', not on the base glyph --- print("\t\t\t>>> ra + halant form → reph") if b ~= current then if current == start then if head == start then @@ -1435,7 +1421,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end elseif cns and getnext(cns) ~= current then -- todo: optimize next -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants) --- print("\t\t\t>>> ra below base (vattu) → rkrf") local cp = getprev(current) local cnsn = getnext(cns) setlink(cp,n) @@ -1449,17 +1434,14 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) current = getprev(n) end else --- print("\t\t>>> NOT! current ra; next halant") local char = getchar(current) if consonant[char] then --- print("\t\t\t>>> is consonant") cns = current local next = getnext(cns) if halant[getchar(next)] then cns = next end if not vatucache[char] then --- print("\t\t\t\t>>> is in vatucache") next = getnext(cns) while dependent_vowel[getchar(next)] do cns = next @@ -1467,7 +1449,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end end elseif char == c_nbsp then --- print("\t\t\t>>> is nbsp") nbspaces = nbspaces + 1 cns = current local next = getnext(cns) @@ -1936,8 +1917,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas reorderreph.coverage = { } -- use local rephbase[font] = { } -- use local --- print("!!!!!! reorder two ") - for i=1,#seqsubset do -- this can be done more efficient, the last test and less getnext @@ -2064,7 +2043,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end - local current, base, firstcons = start, nil, nil + local current, base, firstcons, subnotafterbase, postnotafterbase = start, nil, nil, nil, nil if getstate(start,s_rphf) then -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants @@ -2125,10 +2104,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end else -- not Stand Alone cluster --- print("!!!! not standalone cluster") local last = getnext(stop) while current ~= last do -- find base consonant local next = getnext(current) +-- IF PATCHED THEN +-- if current == subpos then +-- subnotafterbase = current +-- end +-- if current == postpos then +-- postnotafterbase = current +-- end +-- END if consonant[getchar(current)] then if not (current ~= stop and next ~= stop and halant[getchar(next)] and getchar(getnext(next)) == c_zwj) then if not firstcons then @@ -2138,6 +2124,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas local a = getstate(current) if not (a == s_blwf or a == s_pstf or (a ~= s_rphf and a ~= s_blwf and ra[getchar(current)])) then base = current +-- IF PATCHED THEN +-- if subnotafterbase then +-- subpos = base +-- end +-- if postnotafterbase then +-- postpos = base +-- end +-- END end end end @@ -2195,12 +2189,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end -- --- print("char: " .. char) --- if not moved[current] and dependent_vowel[char] then - if dependent_vowel[char] then --- print(">>!! dependent vowel") +-- IF PATCHED THEN +-- if dependent_vowel[char] then +-- ELSE + if not moved[current] and dependent_vowel[char] then +-- END if pre_mark[char] then -- or: if before_main or before_half +-- IF PATCHED THEN +-- -- nothing +-- ELSE moved[current] = true +-- END -- can be helper to remove one node local prev, next = getboth(current) setlink(prev,next) @@ -2251,6 +2250,13 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end elseif above_mark[char] then -- after main consonant +-- IF PATCHED +-- target = subpos +-- if postpos == subpos then +-- postpos = current +-- end +-- subpos = current +-- ELSE target = basepos if subpos == basepos then subpos = current @@ -2259,6 +2265,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas postpos = current end basepos = current +-- END elseif below_mark[char] then -- after subjoined consonants target = subpos @@ -2502,12 +2509,16 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe if pre_mark[v] and not already_pre_mark then already_pre_mark = true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts == "mixed" then - -- for messy fonts - return c - else - already_post_mark = true - end +-- IF PATCHED THEN +-- already_post_mark = true +-- ELSE + if devanagarihash[font].conjuncts == "mixed" then + -- for messy fonts + return c + else + already_post_mark = true + end +-- END elseif below_mark[v] and not already_below_mark then already_below_mark = true elseif above_mark[v] and not already_above_mark then @@ -2710,10 +2721,6 @@ local function analyze_next_chars_two(c,font) for k=1,#vowels do local v = vowels[k] if pre_mark[v] and not already_pre_mark then --- print(">>> pre_mark") --- if dependent_vowel[v] then --- print(">>>> dependent vowel") --- end already_pre_mark = true elseif above_mark[v] and not already_above_mark then already_above_mark = true @@ -2731,12 +2738,16 @@ local function analyze_next_chars_two(c,font) if pre_mark[v] and not already_pre_mark then already_pre_mark = true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts == "mixed" then - -- for messy fonts - return c - else - already_post_mark = true - end +-- IF PATCHED THEN +-- already_post_mark = true +-- ELSE + if devanagarihash[font].conjuncts == "mixed" then + -- for messy fonts + return c + else + already_post_mark = true + end +-- END elseif below_mark[v] and not already_below_mark then already_below_mark = true elseif above_mark[v] and not already_above_mark then @@ -3068,15 +3079,12 @@ local function method_two(head,font,attr) end end if independent_vowel[char] then --- print("!!>>> independent_vowel") -- vowel-based syllable: [Ra+H]+V+[N]+[<[]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,1) syllableend = current else --- print("!!>>> dependent vowel") local standalone = char == c_nbsp if standalone then --- print("!!>>> standalone") nbspaces = nbspaces + 1 local p = getprev(current) if not p then @@ -3090,12 +3098,10 @@ local function method_two(head,font,attr) end end if standalone then --- print("!!>>>>>>> next standalone") -- Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,2) syllableend = current elseif consonant[getchar(current)] then --- print("!!>>>>>>> a consonant") -- WHY current INSTEAD OF c ? -- Consonant syllable: {C+[N]+]|+H>} + C+[N]+[A] + [< H+[] | {M}+[N]+[H]>]+[SM]+[(VD)] current = analyze_next_chars_two(current,font) -- not c ! @@ -3104,7 +3110,6 @@ local function method_two(head,font,attr) end end if syllableend then --- print("!!!>>> syllable end") syllabe = syllabe + 1 local c = syllablestart local n = getnext(syllableend) diff --git a/tex/context/base/mkiv/font-otc.lua b/tex/context/base/mkiv/font-otc.lua index 67b77b111..f83c3e8ec 100644 --- a/tex/context/base/mkiv/font-otc.lua +++ b/tex/context/base/mkiv/font-otc.lua @@ -142,6 +142,12 @@ local function addfeature(data,feature,specifications,prepareonly) local descriptions = data.descriptions local resources = data.resources + + if not descriptions or not resources then + report_otf("missing specification") + return + end + local features = resources.features local sequences = resources.sequences diff --git a/tex/context/base/mkiv/font-otl.lua b/tex/context/base/mkiv/font-otl.lua index f36e533ca..9493bd03c 100644 --- a/tex/context/base/mkiv/font-otl.lua +++ b/tex/context/base/mkiv/font-otl.lua @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua index 7de108d4c..b3055976a 100644 --- a/tex/context/base/mkiv/font-ots.lua +++ b/tex/context/base/mkiv/font-ots.lua @@ -8,6 +8,11 @@ if not modules then modules = { } end modules ['font-ots'] = { -- sequences } --[[ldx-- +

I need to check the description at the microsoft site ... it has been improved +so maybe there are some interesting details there. Most below is based on old and +incomplete documentation and involved quite a bit of guesswork (checking with the +abstract uniscribe of those days. But changing things is tricky!

+

This module is a bit more split up that I'd like but since we also want to test with plain it has to be so. This module is part of and discussion about improvements and functionality mostly happens on the @@ -165,13 +170,8 @@ local forcepairadvance = false -- for testing local repeatablemultiples = context or false -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries = v -end) - -directives.register("otf.forcepairadvance",function(v) - forcepairadvance = v -end) +directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end) +directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end) local report_direct = logs.reporter("fonts","otf direct") local report_subchain = logs.reporter("fonts","otf subchain") @@ -197,7 +197,6 @@ local setboth = nuts.setboth local getid = nuts.getid local getstate = nuts.getstate local getsubtype = nuts.getsubtype -local setsubtype = nuts.setsubtype local getchar = nuts.getchar local setchar = nuts.setchar local getdisc = nuts.getdisc @@ -229,10 +228,10 @@ local ischar = nuts.ischar local usesfont = nuts.usesfont local insertnodeafter = nuts.insertafter -local copy_node = nuts.copy -local copy_node_list = nuts.copylist -local remove_node = nuts.remove -local find_node_tail = nuts.tail +local copynode = nuts.copy +local copynodelist = nuts.copylist +local removenode = nuts.remove +local findnodetail = nuts.tail local flushnodelist = nuts.flushlist local flushnode = nuts.flushnode local endofmath = nuts.endofmath @@ -244,12 +243,8 @@ local setmetatableindex = table.setmetatableindex local nextnode = nuts.traversers.node ------ zwnj = 0x200C ------ zwj = 0x200D - local nodecodes = nodes.nodecodes local glyphcodes = nodes.glyphcodes -local disccodes = nodes.disccodes local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue @@ -261,8 +256,7 @@ local par_code = nodecodes.par local lefttoright_code = nodes.dirvalues.lefttoright local righttoleft_code = nodes.dirvalues.righttoleft -local discretionarydisc_code = disccodes.discretionary -local ligatureglyph_code = glyphcodes.ligature +local discretionarydisc_code = nodes.disccodes.discretionary local a_noligature = attributes.private("noligature") @@ -377,7 +371,7 @@ local function cref(dataset,sequence,index) return "no valid dataset" end local merged = sequence.merged and "merged " or "" - if index then + if index and index > 1 then return formatters["feature %a, type %a, %schain lookup %a, index %a"]( dataset[4],sequence.type,merged,sequence.name,index) else @@ -455,7 +449,7 @@ end local function appenddisc(disc,list) local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true) local posthead = list - local replacehead = copy_node_list(list) + local replacehead = copynodelist(list) if post then setlink(posttail,posthead) else @@ -483,7 +477,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -536,7 +529,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -560,7 +552,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if trace_marks then logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start)) end - local n = copy_node(start) + local n = copynode(start) copyinjection(n,start) -- is this ok ? we position later anyway head, current = insertnodeafter(head,current,n) -- unlikely that mark has components elseif trace_marks then @@ -634,67 +626,68 @@ end local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what to do with skiphash matches here local nofmultiples = #multiple if nofmultiples > 0 then + local first = start resetinjection(start) setchar(start,multiple[1]) if nofmultiples > 1 then - local sn = getnext(start) - for k=2,nofmultiples do + -- local sn = getnext(start) + for i=2,nofmultiples do -- untested: -- -- while ignoremarks and marks[getchar(sn)] then -- local sn = getnext(sn) -- end - local n = copy_node(start) -- ignore components + local n = copynode(start) -- ignore components resetinjection(n) - setchar(n,multiple[k]) + setchar(n,multiple[i]) insertnodeafter(head,start,n) start = n end - if what ~= true and repeatablemultiples then - -- This is just some experimental code; we might introduce gsub_extensible - -- some day instead. Beware: when we have a feature that mixes alternates and - -- multiples we need to make sure we don't handle the alternate string values - -- here. This might eventually become an lmtx only feature. - local kind = type(what) - local m, f, l - if kind == "string" then - local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") - if what == "middle" then - m = tonumber(n) - elseif what == "first" then - f = tonumber(n) - elseif what == "last" then - l = tonumber(n) - end - elseif kind == "table" then - -- won't happen because currently we don't split these values - m = what.middle - f = what.first - l = what.last + end + if what ~= true and repeatablemultiples then + -- This is just some experimental code; we might introduce gsub_extensible + -- some day instead. Beware: when we have a feature that mixes alternates and + -- multiples we need to make sure we don't handle the alternate string values + -- here. + local kind = type(what) + local m, f, l + if kind == "string" then + local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") + if what == "middle" then + m = tonumber(n) + elseif what == "first" then + f = tonumber(n) + elseif what == "last" then + l = tonumber(n) end - if f or m or l then - if m and m > 1 and nofmultiples == 3 then - local middle = getnext(first) - for i=2,m do - local n = copynode(middle) -- ignore components - resetinjection(n) - insertnodeafter(head,first,n) - end + elseif kind == "table" then + -- won't happen because currently we don't split these values + m = what.middle + f = what.first + l = what.last + end + if f or m or l then + if m and m > 1 and nofmultiples == 3 then + local middle = getnext(first) + for i=2,m do + local n = copynode(middle) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) end - if f and f > 1 then - for i=2,f do - local n = copynode(first) -- ignore components - resetinjection(n) - insertnodeafter(head,first,n) - end + end + if f and f > 1 then + for i=2,f do + local n = copynode(first) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) end - if l and l > 1 then - for i=2,l do - local n = copynode(start) -- ignore components - resetinjection(n) - insertnodeafter(head,start,n) - start = n - end + end + if l and l > 1 then + for i=2,l do + local n = copynode(start) -- ignore components + resetinjection(n) + insertnodeafter(head,start,n) + start = n end end end @@ -894,9 +887,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local prev = getprev(start) if stop then setnext(stop) - local copy = copy_node_list(start) + local copy = copynodelist(start) local tail = stop -- was: getprev(stop) -- Kai: needs checking on your samples - local liat = find_node_tail(copy) + local liat = findnodetail(copy) if pre then setlink(liat,pre) end @@ -907,7 +900,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip replace = start else setnext(start) - local copy = copy_node(start) + local copy = copynode(start) if pre then setlink(copy,pre) end @@ -1321,7 +1314,7 @@ as less as needed but that would also make the code even more messy.

-- To be done (example needed): what if > 1 steps --- this is messy: do we need this disc checking also in alternaties? +-- this is messy: do we need this disc checking also in alternates? local function reportzerosteps(dataset,sequence) logwarning("%s: no steps",cref(dataset,sequence)) @@ -1357,7 +1350,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r if trace_chains then logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start))) end - head, start = remove_node(head,start,true) + head, start = removenode(head,start,true) return head, getprev(start), true end @@ -1952,7 +1945,7 @@ do if not userkern then -- generic local setkern = nuts.setkern -- not injections.setkern userkern = function(k) - local n = copy_node(thekern) + local n = copynode(thekern) setkern(n,k) return n end @@ -1994,12 +1987,11 @@ end local noflags = { false, false, false, false } -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size = ck[5] - ck[4] + 1 local chainlookups = ck[6] local done = false - -- current match if chainlookups then -- Lookups can be like { 1, false, 3 } or { false, 2 } or basically anything and @@ -2010,23 +2002,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) -- if nofchainlookups > size then -- -- bad rules -- end - local chainlookup = chainlookups[1] - for j=1,#chainlookup do - local chainstep = chainlookup[j] - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok - -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. - -- char + mark -> char where mark has to disappear - head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - if ok then - done = true + if chainlookup then + for j=1,#chainlookup do + local chainstep = chainlookup[j] + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok + -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. + -- char + mark -> char where mark has to disappear + head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + if ok then + done = true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + end + else + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end + else + -- whatever end else @@ -2067,23 +2066,28 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) if chainlookup then for j=1,#chainlookup do local chainstep = chainlookup[j] - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok, n - head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) - -- messy since last can be changed ! - if ok then - done = true - if n and n > 1 and i + n > nofchainlookups then - -- this is a safeguard, we just ignore the rest of the lookups - i = size -- prevents an advance - break + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok, n + head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) + -- messy since last can be changed ! + if ok then + done = true + if n and n > 1 and i + n > nofchainlookups then + -- this is a safeguard, we just ignore the rest of the lookups + i = size -- prevents an advance + break + end end + else + -- actually an error + logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) end else -- actually an error - logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (2)",cref(dataset,sequence)) end end else @@ -2111,7 +2115,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done = true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -2141,6 +2145,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last = start local prev = getprev(start) local hasglue = false + local useddisc = nil -- new 2022-09-25 + local usedstart = start -- new 2022-09-25 -- fishy: so we can overflow and then go on in the sweep? -- todo : id can also be glue_code as we checked spaces @@ -2211,7 +2217,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) tail = prev setprev(current,sweepnode) else - tail = find_node_tail(head) + tail = findnodetail(head) end setnext(sweepnode,current) setprev(head) @@ -2302,15 +2308,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end end end + local done = false if lookaheaddisc then - local cf = start local cl = getprev(lookaheaddisc) local cprev = getprev(start) local insertedmarks = 0 - while cprev do local char = ischar(cf,currentfont) if char and marks[char] then @@ -2329,13 +2334,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) head = lookaheaddisc end local pre, post, replace = getdisc(lookaheaddisc) - local new = copy_node_list(cf) -- br, how often does that happen + local new = copynodelist(cf) -- br, how often does that happen local cnew = new if pre then - setlink(find_node_tail(cf),pre) + setlink(findnodetail(cf),pre) end if replace then - local tail = find_node_tail(new) + local tail = findnodetail(new) setlink(tail,replace) end for i=1,insertedmarks do @@ -2349,14 +2354,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok = false - cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done = true end end if not notmatchreplace[lookaheaddisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done = true end @@ -2367,16 +2372,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start = getprev(lookaheaddisc) + useddisc = lookaheaddisc -- new 2022-09-25 sweephead[cf] = getnext(clast) or false sweephead[new] = getnext(cl) or false - elseif backtrackdisc then - local cf = getnext(backtrackdisc) local cl = start local cnext = getnext(start) local insertedmarks = 0 - while cnext do local char = ischar(cnext,currentfont) if char and marks[char] then @@ -2391,8 +2394,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setprev(cf) setnext(cl) local pre, post, replace, pretail, posttail, replacetail = getdisc(backtrackdisc,true) - local new = copy_node_list(cf) - local cnew = find_node_tail(new) + local new = copynodelist(cf) + local cnew = findnodetail(new) for i=1,insertedmarks do cnew = getprev(cnew) end @@ -2402,14 +2405,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok = false - cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done = true end end if not notmatchreplace[backtrackdisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done = true end @@ -2430,33 +2433,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start = getprev(backtrackdisc) + useddisc = backtrackdisc -- new 2022-09-25 sweephead[post] = getnext(clast) or false sweephead[replace] = getnext(last) or false - else local ok = false - head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done = true end end - - return head, start, done + if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25 + start = getnext(start) -- new 2022-09-25 + end -- new 2022-09-25 + return head, start, done, useddisc -- new 2022-09-25 end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule = ck[1] - local lookuptype = ck[8] or ck[2] - local nofseq = #ck[3] - local first = ck[4] - local last = ck[5] - local char = getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ", sweepnode and "" or "not ") +local chaintrac do + + local level = 0 + local last = { } + + chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level = level + 1 + last[level] = start + local rule = ck[1] + local lookuptype = ck[8] or ck[2] + local nofseq = #ck[3] -- ck[3].n + local first = ck[4] + local last = ck[5] + local char = getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ", sweepnode and "" or "not ") + else + -- (start,done) + local what = start and "done" or "continue" + local where = head == last[level] and "same" or "different" + local char = getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level = level - 1 + end + end + end -- The next one is quite optimized but still somewhat slow, fonts like ebgaramond @@ -2470,6 +2497,9 @@ end -- the previous disc .. such be it ( with only f done) local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head, start, false + end -- optimizing for rlmode gains nothing local sweepnode = sweepnode local sweeptype = sweeptype @@ -2510,10 +2540,10 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s for k=1,nofcontexts do -- does this disc mess work well with n > 1 - local ck = contexts[k] - local seq = ck[3] - local f = ck[4] -- first current -local last = start + local ck = contexts[k] + local seq = ck[3] + local f = ck[4] -- first current + local last = start if not startchar or not seq[f][startchar] then -- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts) goto next @@ -2524,7 +2554,7 @@ local last = start else local l = ck[5] -- last current local current = start --- local last = start + -- local last = start -- current match @@ -2638,7 +2668,7 @@ local last = start -- before if f > 1 then - if startprev then + -- if startprev then -- new 2022-09-25 local prev = startprev if prereplace and prev == checkdisc then prev = getprev(sweepnode) @@ -2762,9 +2792,9 @@ local last = start else goto next end - else - goto next - end + -- else -- new 2022-09-25 + -- goto next -- new 2022-09-25 + -- end -- new 2022-09-25 end -- after @@ -2888,24 +2918,25 @@ local last = start end end end - if trace_contexts then chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode) end if discseen or sweepnode then + -- When we process a disc we can collapse and therefore we backtrack one node (start) and + -- reprocess. This is needed because there might be more in the collapsed list. head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break -- else -- next context end - ::next:: - -- if trace_chains then - -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode) - -- end + ::next:: end if discseen then notmatchpre = { } @@ -2924,21 +2955,46 @@ handlers.gsub_reversecontextchain = handle_contextchain handlers.gpos_contextchain = handle_contextchain handlers.gpos_context = handle_contextchain --- this needs testing +-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) +-- local steps = currentlookup.steps +-- local nofsteps = currentlookup.nofsteps +-- if nofsteps > 1 then +-- reportmoresteps(dataset,sequence) +-- end +-- -- probably wrong +-- local l = steps[1].coverage[getchar(start)] +-- if l then +-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) +-- else +-- return head, start, false +-- end +-- end +-- new 2022-09-25 + local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps = currentlookup.steps local nofsteps = currentlookup.nofsteps - if nofsteps > 1 then - reportmoresteps(dataset,sequence) - end - -- probably wrong - local l = steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char = getchar(start) + if nofsteps == 1 then + local s = steps[1] + local l = s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head, start, false + for i=1,nofsteps do + local s = steps[i] + local l = s.coverage[char] + if l then + local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h, s, d + end + end + end end + return head, start, false end chainprocs.gsub_context = chained_contextchain @@ -3077,7 +3133,7 @@ do -- overcome local limit end -- Functions like kernrun, comprun etc evolved over time and in the end look rather --- complex. It's a bit of a compromis between extensive copying and creating subruns. +-- complex. It's a bit of a compromise between extensive copying and creating subruns. -- The logic has been improved a lot by Kai and Ivo who use complex fonts which -- really helped to identify border cases on the one hand and get insight in the diverse -- ways fonts implement features (not always that consistent and efficient). At the same @@ -3184,7 +3240,8 @@ local function kernrun(disc,k_run,font,attr,...) if done and trace_testruns then report_disc("done",disc) end - return nextstart, done + -- return nextstart, done + return nextstart end -- fonts like ebgaramond do ligatures this way (less efficient than e.g. dejavu which @@ -3237,12 +3294,19 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list setdisc(disc,pre,post,replace) end -- - return getnext(disc), renewed + -- return getnext(disc), renewed + return getnext(disc) end -- if we can hyphenate in a lig then unlikely a lig so we -- could have a option here to ignore lig +local test_flatten_start = 2 -- must start at 2 according to Kai + +directives.register("otf.testrun.forceflatten", function(v) + test_flatten_start = v and 1 or 2 +end) + local function testrun(disc,t_run,c_run,...) if trace_testruns then report_disc("test",disc) @@ -3271,7 +3335,7 @@ local function testrun(disc,t_run,c_run,...) local d = d_replace > d_post and d_replace or d_post local head = getnext(disc) -- is: next local tail = head - for i=2,d do -- must start at 2 according to Kai + for i=test_flatten_start,d do local nx = getnext(tail) local id = getid(nx) if id == disc_code then @@ -3286,7 +3350,7 @@ local function testrun(disc,t_run,c_run,...) next = getnext(tail) setnext(tail) setprev(head) - local new = copy_node_list(head) + local new = copynodelist(head) if posttail then setlink(posttail,head) else @@ -3359,7 +3423,8 @@ local function testrun(disc,t_run,c_run,...) end end -- next can have changed (copied list) - return getnext(disc), renewed + -- return getnext(disc), renewed + return getnext(disc) end -- 1{2{\oldstyle\discretionary{3}{4}{5}}6}7\par @@ -3882,7 +3947,7 @@ do -- the before and after lists in the loader. But first I need to see a font that uses multiple -- matches. -- - local start = find_node_tail(head) + local start = findnodetail(head) local rlmode = 0 -- how important is this .. do we need to check for dir? local merged = steps.merged while start do @@ -3968,17 +4033,13 @@ do start = getnext(start) elseif id == disc_code then if not discs or discs[start] == true then - local ok if gpossing then - start, ok = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start, ok = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else - start, ok = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = getnext(start) end @@ -4052,17 +4113,13 @@ do start = getnext(start) elseif id == disc_code then if not discs or discs[start] == true then - local ok if gpossing then - start, ok = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start, ok = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else - start, ok = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = getnext(start) end @@ -4184,7 +4241,7 @@ do start = getnext(start) -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = getnext(start) + -- start = nxt else start = getnext(start) end @@ -4274,8 +4331,8 @@ registerotffeature { } } --- Moved here (up) a bit. This doesn't really belong in generic so it will --- move to a context module some day. +-- Moved here (up) a bit. This doesn't really belong in generic so it will move to a +-- context module some day. local function markinitializer(tfmdata,value) local properties = tfmdata.properties diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua index 2ca3011a5..cab4b7540 100644 --- a/tex/context/base/mkiv/font-shp.lua +++ b/tex/context/base/mkiv/font-shp.lua @@ -17,7 +17,7 @@ local pfb = fonts.handlers.pfb local hashes = fonts.hashes local identifiers = hashes.identifiers -local version = otf.version or 0.011 +local version = otf.version or 0.013 local shapescache = containers.define("fonts", "shapes", version, true) local streamscache = containers.define("fonts", "streams", version, true) diff --git a/tex/context/base/mkiv/math-dir.lua b/tex/context/base/mkiv/math-dir.lua index f26324ed9..f0298d243 100644 --- a/tex/context/base/mkiv/math-dir.lua +++ b/tex/context/base/mkiv/math-dir.lua @@ -142,6 +142,7 @@ function directions.processmath(head) -- style, penalties return processmath(head) end end + return head end function directions.setmath(n) diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index e8ce240f0..e4566b7e4 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -101,9 +101,9 @@ return { "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", -- - "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", - "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", - "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", + -- "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", + -- "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", + -- "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", -- "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "applyordinarykernpairmathcontrolcode", @@ -112,10 +112,11 @@ return { "applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode", "checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode", "analyzescriptnucleuscharmathcontrolcode", "analyzescriptnucleuslistmathcontrolcode", "analyzescriptnucleusboxmathcontrolcode", + "accenttopskewwithoffsetmathcontrolcode", "ignorekerndimensionsmathcontrolcode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", - "noitaliccorrectionglyphoptioncode", + "noitaliccorrectionglyphoptioncode", "islargeoperatorglyphoptioncode", "hasitalicshapeglyphoptioncode", -- "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", @@ -217,6 +218,7 @@ return { "flattenclassoptioncode", "omitpenaltyclassoptioncode", "unpackclassoptioncode", "raiseprimeclassoptioncode", "carryoverlefttopkernclassoptioncode", "carryoverleftbottomkernclassoptioncode", "carryoverrighttopkernclassoptioncode", "carryoverrightbottomkernclassoptioncode", "preferdelimiterdimensionsclassoptioncode", "autoinjectclassoptioncode", "removeitaliccorrectionclassoptioncode", + "operatoritaliccorrectionclassoptioncode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 546b93af3..60fb704d4 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -164,6 +164,8 @@ return { "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", + "Umathradicalextensibleafter", + "Umathradicalextensiblebefore", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", @@ -256,12 +258,14 @@ return { "aligntab", "allcrampedstyles", "alldisplaystyles", + "allmainstyles", "allmathstyles", "allscriptscriptstyles", "allscriptstyles", "allsplitstyles", "alltextstyles", "alluncrampedstyles", + "allunsplitstyles", "atendofgroup", "atendofgrouped", "attribute", @@ -411,6 +415,8 @@ return { "ifparameters", "ifrelax", "iftok", + "ifzerodim", + "ifzeronum", "ignorearguments", "ignorepars", "immediate", diff --git a/tex/context/base/mkiv/pack-cut.mkiv b/tex/context/base/mkiv/pack-cut.mkiv index 84c14d648..533440efd 100644 --- a/tex/context/base/mkiv/pack-cut.mkiv +++ b/tex/context/base/mkiv/pack-cut.mkiv @@ -102,9 +102,8 @@ \vss}% \hss}} -\unexpanded\def\makecutbox#1% - {\bgroup - \d_pack_cutmarks_height\ht#1% +\unexpanded\def\makecutbox#1% not grouped ! + {\d_pack_cutmarks_height\ht#1% \d_pack_cutmarks_depth \dp#1% \d_pack_cutmarks_width \wd#1% \setbox#1\hpack @@ -155,8 +154,7 @@ \box#1}% \wd#1\d_pack_cutmarks_width \ht#1\d_pack_cutmarks_height - \dp#1\d_pack_cutmarks_depth - \egroup} + \dp#1\d_pack_cutmarks_depth} \unexpanded\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox} \unexpanded\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox} diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index fb4443218..982b677cd 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index d75e37cee..9469ffdf0 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/strc-doc.lua b/tex/context/base/mkiv/strc-doc.lua index d613d1aa7..7a79a7121 100644 --- a/tex/context/base/mkiv/strc-doc.lua +++ b/tex/context/base/mkiv/strc-doc.lua @@ -168,9 +168,9 @@ end local lastsaved = 0 function sections.save(sectiondata) -local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier - local numberdata = sectiondata.numberdata - local ntobesaved = #tobesaved + local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier + local numberdata = sectiondata.numberdata + local ntobesaved = #tobesaved if not numberdata or sectiondata.metadata.nolist then -- stay else diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua index 865c44624..4a190132b 100644 --- a/tex/context/base/mkiv/strc-lst.lua +++ b/tex/context/base/mkiv/strc-lst.lua @@ -263,6 +263,14 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end) if r and not r.section then r.section = structures.sections.currentid() end + local b = r and t.block + if r and not b then + local s = r.section + if s then + s = structures.sections.tobesaved[s] + r.block = s and s.block or nil + end + end local i = r and r.internal or 0 -- brrr if r and kind and name then local tag = tags.getid(kind,name) @@ -834,6 +842,7 @@ filters[v_default] = function(specification) -- is named for i=1,#collected do local v = collected[i] local r = v.references +-- inspect(v) if r and (not block or not r.block or pblock == r.block) then local sectionnumber = sections[r.section] if sectionnumber then diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv index 3447c4e6e..269d41966 100644 --- a/tex/context/base/mkiv/type-set.mkiv +++ b/tex/context/base/mkiv/type-set.mkiv @@ -132,6 +132,7 @@ \definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv] \definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv] +%definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv] diff --git a/tex/context/base/mkxl/anch-pgr.lmt b/tex/context/base/mkxl/anch-pgr.lmt index 5ef6ecacb..575d4e906 100644 --- a/tex/context/base/mkxl/anch-pgr.lmt +++ b/tex/context/base/mkxl/anch-pgr.lmt @@ -34,6 +34,7 @@ local context = context local implement = interfaces.implement local texgetcount = tex.getcount +local texiscount = tex.iscount local getmacro = tokens.getters.macro local expandasvalue = tex.expandasvalue @@ -61,6 +62,8 @@ local f_pair = formatters["(%p,%p)"] local f_path = formatters["%--t--cycle"] local f_pair_i = formatters["(%r,%r)"] -- rounded +local c_realpageno = texiscount("realpageno") + graphics = graphics or { } local backgrounds = { } graphics.backgrounds = backgrounds @@ -254,7 +257,7 @@ end nodes.handlers.textbackgrounds = function(head,where,parent) -- we have hlistdir and local dir -- todo enable action in register index = index + 1 - realpage = texgetcount("realpageno") + realpage = texgetcount(c_realpageno) return processranges(a_textbackground,flush,head,parent) end @@ -1214,7 +1217,7 @@ backgrounds.fetchmultipar = fetchmultipar local function getwhatever(action) local tags = scanmpstring() local anchor = scanmpstring() - local page = texgetcount("realpageno") + local page = texgetcount(c_realpageno) if tags == "self" then tags = expandasvalue(string_value,"mpcategoryparameter",true,"self") elseif type(tags) == "string" then diff --git a/tex/context/base/mkxl/anch-pos.lmt b/tex/context/base/mkxl/anch-pos.lmt index fc668f699..6488a2fd7 100644 --- a/tex/context/base/mkxl/anch-pos.lmt +++ b/tex/context/base/mkxl/anch-pos.lmt @@ -65,6 +65,8 @@ local tex = tex local texgetdimen = tex.getdimen local texgetcount = tex.getcount local texgetinteger = tex.getintegervalue or tex.getcount +local texiscount = tex.iscount +local texisdimen = tex.isdimen local texsetcount = tex.setcount local texget = tex.get local texsp = tex.sp @@ -133,15 +135,19 @@ local default = { -- not r and paragraphs etc } } -local f_b_tag = formatters["b:%s"] -local f_e_tag = formatters["e:%s"] -local f_p_tag = formatters["p:%s"] ------ f_w_tag = formatters["w:%s"] +local f_b_tag = formatters["b:%s"] +local f_e_tag = formatters["e:%s"] +local f_p_tag = formatters["p:%s"] +----- f_w_tag = formatters["w:%s"] -local f_region = formatters["region:%s"] +local f_region = formatters["region:%s"] -local f_tag_three = formatters["%s:%s:%s"] -local f_tag_two = formatters["%s:%s"] +local f_tag_three = formatters["%s:%s:%s"] +local f_tag_two = formatters["%s:%s"] + +local c_realpageno = texiscount("realpageno") +local d_strutht = texisdimen("strutht") +local d_strutdp = texisdimen("strutdp") -- Because positions are set with a delay we cannot yet make the tree -- so that -- is a finalizer step. But, we already have a dual split. @@ -902,7 +908,7 @@ local function enhance(data) data.y = y ~= 0 and y or nil end if data.p == true then - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) -- we should use a variable set in otr end if data.c == true then data.c = column @@ -1075,7 +1081,7 @@ local function b_region(specification) local x, y = getpos() last.x = x ~= 0 and x or nil last.y = y ~= 0 and y or nil - last.p = texgetcount("realpageno") + last.p = texgetcount(c_realpageno) insert(regions,tag) -- todo: fast stack region = tag end @@ -1117,7 +1123,7 @@ local function setregionbox(n,tag,index,k,lo,ro,to,bo,column) -- kind -- these auto regions (comning from framed). Too messy and the split in the -- setter is fast enough. tobesaved[tag] = { - -- p = texgetcount("realpageno"), -- we copy them + -- p = texgetcount(c_realpageno), -- we copy them x = 0, y = 0, w = w ~= 0 and w or nil, @@ -1191,6 +1197,8 @@ end do + local c_anch_positions_paragraph = texiscount("c_anch_positions_paragraph") + local nofparagraphs = 0 local function enhancepar_1(data) @@ -1205,7 +1213,7 @@ do if y ~= 0 then data.y = y end - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) -- we should use a variable set in otr if column then data.c = column end @@ -1253,7 +1261,7 @@ do if y ~= 0 then data.y = y end - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) if column then data.c = column end @@ -1268,10 +1276,10 @@ do name = "parpos", actions = function() nofparagraphs = nofparagraphs + 1 - texsetcount("global","c_anch_positions_paragraph",nofparagraphs) + texsetcount("global",c_anch_positions_paragraph,nofparagraphs) local name = f_p_tag(nofparagraphs) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) -- local top = texgetnest("top","head") local nxt = top.next @@ -1429,8 +1437,8 @@ do public = true, protected = true, actions = function(name) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) local spec = { p = true, c = column, @@ -1453,8 +1461,8 @@ do public = true, protected = true, actions = function(name,kind) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) local spec = { k = kind, p = true, @@ -1476,7 +1484,7 @@ end function jobpositions.getreserved(tag,n) if tag == v_column then - local fulltag = f_tag_three(tag,texgetcount("realpageno"),n or 1) + local fulltag = f_tag_three(tag,texgetcount(c_realpageno),n or 1) local data = collected[fulltag] if data then return data, fulltag @@ -1484,7 +1492,7 @@ function jobpositions.getreserved(tag,n) tag = v_text end if tag == v_text then - local fulltag = f_tag_two(tag,texgetcount("realpageno")) + local fulltag = f_tag_two(tag,texgetcount(c_realpageno)) return collected[fulltag] or false, fulltag end return collected[tag] or false, tag @@ -2257,7 +2265,7 @@ implement { public = true, protected = true, actions = function(list) - doifelse(onsamepage(list,tostring(texgetcount("realpageno")))) + doifelse(onsamepage(list,tostring(texgetcount(c_realpageno)))) end } diff --git a/tex/context/base/mkxl/anch-pos.mkxl b/tex/context/base/mkxl/anch-pos.mkxl index fef8e54f6..f8891eb33 100644 --- a/tex/context/base/mkxl/anch-pos.mkxl +++ b/tex/context/base/mkxl/anch-pos.mkxl @@ -17,10 +17,19 @@ %D early, but starting in 2012 more dramatic changes started to happen, especially %D in relation to background graphics. It will probably take some time to settle. -\registerctxluafile{anch-pos}{autosuffix} - \unprotect +\newcount\c_anch_column % will be delegated to lua +\newcount\c_anch_text % will be delegated to lua +\newcount\c_anch_free +\newtoks \t_anch_positions_tracers +\newcount\c_anch_positions_paragraph + +\newbox \b_anch_position +\newif \ifpositioning % sort of public + +\registerctxluafile{anch-pos}{autosuffix} + %D The first application of positional information was embedded graphics. Since we %D are interacting with text, it made sense to take the current line height and %D depth into account too. This is why we have position macros for simple positions @@ -43,8 +52,8 @@ % \dosetpositionstrut #1 % defined at lua end % \dosetpositionstrutkind #1#2 % defined at lua end -\newbox\b_anch_position -\newif \ifpositioning % sort of public +% see top: \newbox\b_anch_position +% see top: \newif \ifpositioning % sort of public \mutable\let\currentposition \empty \mutable\let\currentpositionaction\empty @@ -282,8 +291,8 @@ \permanent\def\textanchor {text:\the\realpageno} \permanent\def\regionanchor{region:0} -\newcount\c_anch_column % will be delegated to lua -\newcount\c_anch_text % will be delegated to lua +% see top: \newcount\c_anch_column % will be delegated to lua +% see top: \newcount\c_anch_text % will be delegated to lua % beware we need to pass \somethingexpanded or { } @@ -336,7 +345,7 @@ \expandafter\gobblesixarguments \fi} -\newcount\c_anch_free +% see top: \newcount\c_anch_free \protected\def\anch_mark_tagged_box_free_yes#1#2#3#4#5#6% only needed when positions {\global\advance\c_anch_free\plusone % could be done at the lua end @@ -408,8 +417,8 @@ %D can keep track of them. This mechanism is activated automatically based on %D information collected in the previous pass. -\newtoks \t_anch_positions_tracers -\newcount\c_anch_positions_paragraph +% see top: \newtoks \t_anch_positions_tracers +% see top: \newcount\c_anch_positions_paragraph \permanent\protected\def\tracepositions {\the\t_anch_positions_tracers} diff --git a/tex/context/base/mkxl/buff-ini.lmt b/tex/context/base/mkxl/buff-ini.lmt index 985c834ff..1d4722531 100644 --- a/tex/context/base/mkxl/buff-ini.lmt +++ b/tex/context/base/mkxl/buff-ini.lmt @@ -573,7 +573,7 @@ local function savebuffer(list,name,prefix,option,directory) -- name is optional if directory ~= "" and dir.makedirs(directory) then name = file.join(directory,name) end - io.savedata(name,replacenewlines(content),"\n",option == v_append) + savedata(name,replacenewlines(content),"\n",option == v_append) end implement { diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 5fb6ae5b6..e8f8e5e2e 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index cd7075d5e..bf5dd9a07 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2022.09.16 14:39} +\immutable\edef\contextversion{2022.10.14 10:13} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/core-env.lmt b/tex/context/base/mkxl/core-env.lmt index 486beeec4..f5b382f12 100644 --- a/tex/context/base/mkxl/core-env.lmt +++ b/tex/context/base/mkxl/core-env.lmt @@ -135,30 +135,30 @@ end) tex.isdefined = isdefined -function tex.isdimen(name) - local hit = cache[name] - return hit.command == dimencode and hit.index or true -end - -function tex.iscount(name) - local hit = cache[name] - return hit.command == countcode and hit.index or true -end - -function tex.istoken(name) - local hit = cache[name] - return hit.command == tokencode and hit.index or true -end - -function tex.isskip(name) - local hit = cache[name] - return hit.command == skipcode and hit.index or true -end - -function tex.ismuskip(name) - local hit = cache[name] - return hit.command == muskipcode and hit.index or true -end +-- function tex.isdimen(name) +-- local hit = cache[name] +-- return hit.command == dimencode and hit.index or true +-- end +-- +-- function tex.iscount(name) +-- local hit = cache[name] +-- return hit.command == countcode and hit.index or true +-- end +-- +-- function tex.istoken(name) +-- local hit = cache[name] +-- return hit.command == tokencode and hit.index or true +-- end +-- +-- function tex.isskip(name) +-- local hit = cache[name] +-- return hit.command == skipcode and hit.index or true +-- end +-- +-- function tex.ismuskip(name) +-- local hit = cache[name] +-- return hit.command == muskipcode and hit.index or true +-- end function tex.type(name) return types[cache[name].command] or "macro" diff --git a/tex/context/base/mkxl/core-uti.lmt b/tex/context/base/mkxl/core-uti.lmt index 2266119de..d533de5f3 100644 --- a/tex/context/base/mkxl/core-uti.lmt +++ b/tex/context/base/mkxl/core-uti.lmt @@ -448,8 +448,8 @@ end) function statistics.formatruntime(runtime) if not environment.initex then -- else error when testing as not counters yet -- stoptiming(statistics) -- to be sure - local shipped = texgetcount('nofshipouts') - local pages = texgetcount('realpageno') + local shipped = texgetcount("nofshipouts") + local pages = texgetcount("realpageno") if pages > shipped then pages = shipped end diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt index ddaf8afb1..319d5fe48 100644 --- a/tex/context/base/mkxl/font-con.lmt +++ b/tex/context/base/mkxl/font-con.lmt @@ -533,12 +533,6 @@ function constructors.scale(tfmdata,specification) targetparameters.scriptscale = scriptscale targetparameters.scriptscriptscale = scriptscriptscale - -- todo: maybe retrofit to font-con.lua - - local oldmath = properties.oldmath - targetproperties.oldmath = oldmath - target.oldmath = oldmath - local mathcontrol = properties.mathcontrol targetproperties.mathcontrol = mathcontrol target.mathcontrol = mathcontrol @@ -706,10 +700,26 @@ function constructors.scale(tfmdata,specification) if vi and vi ~= 0 then chr.vitalic = vi*hdelta end - local va = character.accent +-- local va = character.accent +-- if va and not chr.topanchor then +-- chr.topanchor = va +-- end + local va = character.topanchor + if va then + chr.topanchor = va*vdelta + end + va = character.bottomanchor if va then - chr.topaccent = va*vdelta + chr.bottomanchor = va*vdelta end + local vo = character.topovershoot + if vo then + chr.topovershoot = vo*hdelta + end + -- vo = character.bottomovershoot + -- if vo then + -- chr.bottomovershoot = vo*hdelta + -- end if stackmath then -- not ok yet local mk = character.mathkerns if mk then @@ -755,6 +765,10 @@ function constructors.scale(tfmdata,specification) if sm then chr.smaller = sm end + local mi = character.mirror + if mi then + chr.mirror = mi + end local fa = character.flataccent if fa then chr.flataccent = fa diff --git a/tex/context/base/mkxl/font-ctx.lmt b/tex/context/base/mkxl/font-ctx.lmt index 585547cbf..75572e089 100644 --- a/tex/context/base/mkxl/font-ctx.lmt +++ b/tex/context/base/mkxl/font-ctx.lmt @@ -1221,23 +1221,23 @@ do -- else too many locals "integer", }, actions = function ( - global, -- \ifx\fontclass\empty\s!false\else\s!true\fi - cs, -- {#csname}% - str, -- \somefontfile - size, -- \d_font_scaled_font_size - inheritancemode, -- \c_font_feature_inheritance_mode - classfeatures, -- \m_font_class_features - fontfeatures, -- \m_font_features - classfallbacks, -- \m_font_class_fallbacks - fontfallbacks, -- \m_font_fallbacks - mathsize, -- \fontface - textsize, -- \d_font_scaled_text_face - classgoodies, -- \m_font_class_goodies - goodies, -- \m_font_goodies - classdesignsize, -- \m_font_class_designsize - fontdesignsize, -- \m_font_designsize - scaledfontmode -- \scaledfontmode - ) + global, -- \ifx\fontclass\empty\s!false\else\s!true\fi + cs, -- {#csname}% + str, -- \somefontfile + size, -- \d_font_scaled_font_size + inheritancemode, -- \c_font_feature_inheritance_mode + classfeatures, -- \m_font_class_features + fontfeatures, -- \m_font_features + classfallbacks, -- \m_font_class_fallbacks + fontfallbacks, -- \m_font_fallbacks + mathsize, -- \fontface + textsize, -- \d_font_scaled_text_face + classgoodies, -- \m_font_class_goodies + goodies, -- \m_font_goodies + classdesignsize, -- \m_font_class_designsize + fontdesignsize, -- \m_font_designsize + scaledfontmode -- \scaledfontmode + ) if trace_defining then report_defining("start stage two: %s, size %s, features %a & %a, mode %a",str,size,classfeatures,fontfeatures,inheritancemode) end @@ -1397,7 +1397,7 @@ do -- else too many locals busy = false mathematics.finishfallbacks(tfmdata,specification,fallbacks) tfmdata.original = specification.specification -constructors.beforepassingfonttotex(tfmdata) + constructors.beforepassingfonttotex(tfmdata) local id = definefont(tfmdata,properties.id) csnames[id] = specification.cs properties.id = id -- already set diff --git a/tex/context/base/mkxl/font-imp-effects.lmt b/tex/context/base/mkxl/font-imp-effects.lmt index 38d86498a..8dce81087 100644 --- a/tex/context/base/mkxl/font-imp-effects.lmt +++ b/tex/context/base/mkxl/font-imp-effects.lmt @@ -238,11 +238,12 @@ local function manipulateeffect(tfmdata) parameters.hshift = hshift parameters.vshift = vshift for unicode, character in next, characters do - local oldwidth = character.width - local oldheight = character.height - local olddepth = character.depth - local olditalic = character.italic - local oldtopaccent = character.topaccent + local oldwidth = character.width + local oldheight = character.height + local olddepth = character.depth + local olditalic = character.italic + local oldtopanchor = character.topanchor + local oldbottomanchor = character.bottomanchor if oldwidth and oldwidth > 0 then character.width = oldwidth + wdelta end @@ -252,13 +253,16 @@ local function manipulateeffect(tfmdata) if olddepth and olddepth > 0 then character.depth = olddepth + ddelta end - if olditalic or oldtopaccent then + if olditalic or oldtopaccent or oldbottomaccent then local factor = character.width / oldwidth if olditalic and olditalic > 0 then character.italic = olditalic * factor end - if oldtopaccent and oldtopaccent > 0 then - character.topaccent = oldtopaccent * factor + if oldtopanchor and oldtopanchor > 0 then + character.topanchor = oldtopanchor * factor + end + if oldbottomanchor and oldbottomanchor > 0 then + character.bottomanchor = oldbottomanchor * factor end end end diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt index 9811cb7c8..04fe5c04c 100644 --- a/tex/context/base/mkxl/font-imp-math.lmt +++ b/tex/context/base/mkxl/font-imp-math.lmt @@ -224,30 +224,6 @@ registerotffeature { -- end -- end -local function initialize(tfmdata,value) - if value then - local rawdata = tfmdata.shared.rawdata - local rawresources = rawdata and rawdata.resources - local mathconstants = rawresources.mathconstants - if mathconstants then - tfmdata.properties.oldmath = true - end - end -end - -registerotffeature { - name = "oldmath", - description = "deal with fake opentype fonts", - -- manipulators = { - -- base = manipulate, - -- node = manipulate, - -- }, - initializers = { - base = initialize, - node = initialize, - } -} - local function initialize(tfmdata,value) if type(value) == "string" then local rawdata = tfmdata.shared.rawdata @@ -318,46 +294,45 @@ registerotffeature { -- is. So the quick and dirty solution is: -- -- add copies in private slots --- use a pseudo feature to acess those +-- use a pseudo feature to access those -- and optionally afterwards replace the original slots -local coverage = { } - -local function initialize(tfmdata,value) - if value then - if not next(coverage) then - for k, char in next, mathematics.alphabets.sr.tf.lcletters do - coverage[char] = 0xFE800 + k - end - for k, char in next, mathematics.alphabets.sr.tf.ucletters do - coverage[char] = 0xFE800 + k - end - fonts.handlers.otf.addfeature { - name = "savemathscripts", - type = "substitution", - data = coverage, - } - end - local characters = tfmdata.characters - local descriptions = tfmdata.descriptions - for char, private in next, coverage do - local data = characters[char] - if data and not characters[private] then - -- otherwise we need a virtual - characters [private] = copytable(data) - descriptions[private] = copytable(descriptions[char]) - end - end - end -end - -registerotffeature { - name = "copymathscripts", - description = "copy math script", - prepend = 1, - initializers = { - base = initialize, - node = initialize, - } -} - +-- local coverage = { } +-- +-- local function initialize(tfmdata,value) +-- if value then +-- if not next(coverage) then +-- for k, char in next, mathematics.alphabets.sr.tf.lcletters do +-- coverage[char] = 0xFE800 + k +-- end +-- for k, char in next, mathematics.alphabets.sr.tf.ucletters do +-- coverage[char] = 0xFE800 + k +-- end +-- fonts.handlers.otf.addfeature { +-- name = "savemathscripts", +-- type = "substitution", +-- data = coverage, +-- } +-- end +-- local characters = tfmdata.characters +-- local descriptions = tfmdata.descriptions +-- for char, private in next, coverage do +-- local data = characters[char] +-- if data and not characters[private] then +-- -- otherwise we need a virtual +-- characters [private] = copytable(data) +-- descriptions[private] = copytable(descriptions[char]) +-- end +-- end +-- end +-- end +-- +-- registerotffeature { +-- name = "copymathscripts", +-- description = "copy math script", +-- prepend = 1, +-- initializers = { +-- base = initialize, +-- node = initialize, +-- } +-- } diff --git a/tex/context/base/mkxl/font-ini.mklx b/tex/context/base/mkxl/font-ini.mklx index 473f37da2..67663b7db 100644 --- a/tex/context/base/mkxl/font-ini.mklx +++ b/tex/context/base/mkxl/font-ini.mklx @@ -657,8 +657,8 @@ % 4:x{\definedfont[Serif sa 4]x}\par % 5:x{\definedfont[Serif sa 5]x}\par -\permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax} -\permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax} +% \permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax} +% \permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax} \mutable\let\somefontname \s!unknown \mutable\let\somefontspec \s!unknown @@ -991,7 +991,7 @@ \newif\ifskipfontcharacteristics \skipfontcharacteristicstrue -\tracingfonts\plussix % +% \tracingfonts\plussix % %D When fontclasses are used, we define the font global, since namespaces are %D used. Otherwise we parse the specs each time. diff --git a/tex/context/base/mkxl/font-mat.mklx b/tex/context/base/mkxl/font-mat.mklx index 20925157b..0f3a2a222 100644 --- a/tex/context/base/mkxl/font-mat.mklx +++ b/tex/context/base/mkxl/font-mat.mklx @@ -15,6 +15,26 @@ \unprotect +%D The original (\MKIV) approach to bidi is that we have two extra families for +%D regular, bold and pseudobold: +%D +%D regular normal=0 l2r=1 r2l=2 +%D bold normal=3 l2r=4 r2l=5 +%D pseudobold normal=6 l2r=7 r2l=8 +%D +%D where l2r is just an alias. Because we're now using the mirror lookup (like +%D we do a smaller lookup) in the engine we not just have: +%D +%D regular normal=0 +%D bold normal=3 +%D pseudobold normal=6 +%D +%D And when one can wonder if pseudobold is needed (just bolden); we can then +%D actually go down to only two families. It is one of these cases when it hurts +%D to throw away a nice old mechanism that worked quite well so here we keep it +%D commented. For what it's worth: this variant switches a bit faster too and +%D produces less logging but I doubt if anyone will notice that. + %D Be nice: \ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi @@ -55,16 +75,16 @@ % todo: \c_font_fam_mr \aliased\let\c_font_fam_mr \zerocount % math regular -\aliased\let\c_font_fam_mr_lr\plusone % math regular l2r -\aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l +%aliased\let\c_font_fam_mr_lr\plusone % math regular l2r +%aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l \aliased\let\c_font_fam_mb \plusthree % math bold -\aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r -\aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l +%aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r +%aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l \definesystemattribute[mathfamily][public] -\newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy +%newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy \newconditional\c_font_complete_bold_mathstrategy \settrue\c_font_complete_bold_mathstrategy % \frozen ... @@ -106,9 +126,12 @@ \mutable\let\fontfamily\relax % for now public but it is a helper +\newconditional\c_math_last_family_set + \def\font_helpers_set_math_family_indeed_normal#mrtag#family% \fontface etc are also used later on {\let\savedfontbody\fontbody \let\fontfamily#family% + \settrue\c_math_last_family_set % the order is important as we depend on known id's when completing fonts % enabling is needed when we have fallbacks which spoils the families \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree @@ -139,6 +162,7 @@ \def\font_helpers_set_math_family_indeed_compact#mrtag#family% \fontface etc are also used later on {\let\savedfontbody\fontbody \let\fontfamily#family% + \settrue\c_math_last_family_set \font_helpers_set_math_family_set_scales_compact % the order is important as we depend on known id's when completing fonts % enabling is needed when we have fallbacks which spoils the families @@ -163,6 +187,7 @@ \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% + \settrue\c_math_last_family_set \font_helpers_set_math_family_set_scales_normal \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree \font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% defines @@ -183,6 +208,7 @@ \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% + \settrue\c_math_last_family_set \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% defines \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% enables @@ -309,77 +335,114 @@ \let\m_font_fallbacks\empty \let\m_font_goodies \empty -\appendtoks % can be analyzed once - % why here .. - %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% - \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}% - % ... - \ifx\m_font_class_direction\v!both - \settrue\c_font_bidirectional_mathstrategy - \else - \setfalse\c_font_bidirectional_mathstrategy - \fi -\to \t_font_math_strategies - -\def\font_helpers_bidirectional_mathstrategy_yes - {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr - \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl - \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else - \font_helpers_bidirectional_mathstrategy_yes_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_yes_changed - {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} - -\def\font_helpers_bidirectional_mathstrategy_nop - {\font_helpers_set_math_family\c_font_fam_mr\s!mr - \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else - \font_helpers_bidirectional_mathstrategy_nop_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_nop_changed - {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr} +% \appendtoks % can be analyzed once +% % why here .. +% %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% +% \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}% +% % ... +% \ifx\m_font_class_direction\v!both +% \settrue\c_font_bidirectional_mathstrategy +% \else +% \setfalse\c_font_bidirectional_mathstrategy +% \fi +% \to \t_font_math_strategies +% +% \def\font_helpers_bidirectional_mathstrategy_yes +% {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr +% \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl +% \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else +% \font_helpers_bidirectional_mathstrategy_yes_changed +% \fi} +% +% \def\font_helpers_bidirectional_mathstrategy_yes_changed +% {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr +% \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr +% \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} +% +% \def\font_helpers_bidirectional_mathstrategy_nop +% {\font_helpers_set_math_family\c_font_fam_mr\s!mr +% \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else +% \font_helpers_bidirectional_mathstrategy_nop_changed +% \fi} +% +% \def\font_helpers_bidirectional_mathstrategy_nop +% {\font_helpers_set_math_family\c_font_fam_mr\s!mr} +% +% \def\font_helpers_bidirectional_mathstrategy_nop_changed +% {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr +% \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr} +% +% \appendtoks +% \ifconditional\c_font_bidirectional_mathstrategy +% \font_helpers_bidirectional_mathstrategy_yes +% \else +% \font_helpers_bidirectional_mathstrategy_nop +% \fi +% \to \t_font_math_strategies \appendtoks - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_bidirectional_mathstrategy_yes - \else - \font_helpers_bidirectional_mathstrategy_nop - \fi + \font_helpers_set_math_family\c_font_fam_mr\s!mr \to \t_font_math_strategies -\def\font_helpers_complete_bold_mathstrategy_yes_bidi - {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr - \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl - \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else - \font_helpers_complete_bold_mathstrategy_yes_bidi_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed - {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr - \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr - \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} +% \def\font_helpers_complete_bold_mathstrategy_yes_bidi +% {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr +% \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl +% \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else +% \font_helpers_complete_bold_mathstrategy_yes_bidi_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed +% {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr +% \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr +% \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} +% +% \def\font_helpers_complete_bold_mathstrategy_yes +% {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax +% \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else +% \font_helpers_complete_bold_mathstrategy_yes_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_yes_changed +% {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb +% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb +% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb +% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb +% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb +% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} +% +% \def\font_helpers_complete_bold_mathstrategy_nop +% {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else +% \font_helpers_complete_bold_mathstrategy_nop_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_nop_changed +% {\textfont \c_font_fam_mb \textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr +% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr +% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr +% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr +% \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl +% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl +% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl} +% +% \def\font_helpers_apply_complete_bold_mathstrategy +% {\ifconditional\c_font_complete_bold_mathstrategy +% \ifconditional\c_font_bidirectional_mathstrategy +% \font_helpers_complete_bold_mathstrategy_yes_bidi +% \else +% \font_helpers_complete_bold_mathstrategy_yes +% \fi +% \else +% \font_helpers_complete_bold_mathstrategy_nop +% \fi} \def\font_helpers_complete_bold_mathstrategy_yes - {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax - \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else - \font_helpers_complete_bold_mathstrategy_yes_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_changed - {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} + {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax} \def\font_helpers_complete_bold_mathstrategy_nop {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else @@ -389,21 +452,11 @@ \def\font_helpers_complete_bold_mathstrategy_nop_changed {\textfont \c_font_fam_mb \textfont \c_font_fam_mr \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr - \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl} + \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr} \def\font_helpers_apply_complete_bold_mathstrategy {\ifconditional\c_font_complete_bold_mathstrategy - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_complete_bold_mathstrategy_yes_bidi - \else - \font_helpers_complete_bold_mathstrategy_yes - \fi + \font_helpers_complete_bold_mathstrategy_yes \else \font_helpers_complete_bold_mathstrategy_nop \fi} @@ -420,27 +473,33 @@ \fam\zerocount % all characters and symbols are in this family \to \everymathematics +% \protected\def\font_helpers_synchronize_math_family_mr +% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy +% \ifconditional\c_math_right_to_left +% \plustwo +% \else +% \plusone +% \fi +% \else +% \zerocount +% \fi} +% +% \protected\def\font_helpers_synchronize_math_family_mb +% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy +% \ifconditional\c_math_right_to_left +% \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi +% \else +% \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi +% \fi +% \else +% \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi +% \fi} + \protected\def\font_helpers_synchronize_math_family_mr - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \plustwo - \else - \plusone - \fi - \else - \zerocount - \fi} + {\c_attr_mathfamily\zerocount} \protected\def\font_helpers_synchronize_math_family_mb - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi - \fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi - \fi} + {\c_attr_mathfamily\ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi} \installcorenamespace{fontmathsynchronizer} \installcorenamespace{fontmathstoredstrategy} @@ -471,7 +530,6 @@ \fi \to \t_font_math_strategies -%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname} \def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname} \newconditional\c_font_pseudo_bold_math_state @@ -569,4 +627,19 @@ \permanent\protected\def\setmscale#1{\ifmmode\scaledmathstyle\numericscale#1\relax\fi} +%D This is nasty, as the engine only stores the last set family parameters (per style) which +%D in our case can be bold. + +\def\font_helpers_synchronize_math_parameters + {\textfont \zerocount\textfont \zerocount + \scriptfont \zerocount\scriptfont \zerocount + \scriptscriptfont\zerocount\scriptscriptfont\zerocount + \setfalse\c_math_last_family_set} + +\appendtoks + \ifconditional\c_math_last_family_set + \font_helpers_synchronize_math_parameters + \fi +\to\everybodyfont + \protect \endinput diff --git a/tex/context/base/mkxl/font-mps.lmt b/tex/context/base/mkxl/font-mps.lmt index 9a123a25e..7afc48d0f 100644 --- a/tex/context/base/mkxl/font-mps.lmt +++ b/tex/context/base/mkxl/font-mps.lmt @@ -46,6 +46,14 @@ function metapost.boundingbox(d,factor) return f_boundingbox(llx,lly,urx,lly,urx,ury,llx,ury) end +function metapost.baseline(d,factor) + local bounds = d.boundingbox + local factor = factor or 1 + local llx = factor*bounds[1] + local urx = factor*bounds[3] + return f_vertical(llx,0,urx,0) +end + function metapost.widthline(d,factor) local bounds = d.boundingbox local factor = factor or 1 diff --git a/tex/context/base/mkxl/font-otl.lmt b/tex/context/base/mkxl/font-otl.lmt index 85b32470b..b7889fc05 100644 --- a/tex/context/base/mkxl/font-otl.lmt +++ b/tex/context/base/mkxl/font-otl.lmt @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) @@ -426,9 +426,9 @@ local function copytotfm(data,cache_id) character.vitalic = vitalic end -- - local accent = m.accent -- taccent? - if accent then - character.accent = accent + local topanchor = m.topanchor or m.accent -- for now + if topanchor then + character.topanchor = topanchor end -- local kerns = m.kerns @@ -766,14 +766,14 @@ end -- moved from font-oth.lua, todo: also afm -local function getgsub(tfmdata,k,kind,value) +local function getgsub(tfmdata,k,kind,value,script,language) local shared = tfmdata.shared local rawdata = shared and shared.rawdata if rawdata then local sequences = rawdata.resources.sequences if sequences then local properties = tfmdata.properties - local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language) + local validlookups, lookuplist = otf.collectlookups(rawdata,kind,script or properties.script,language or properties.language) if validlookups then -- local choice = tonumber(value) or 1 -- no random here (yet) for i=1,#lookuplist do @@ -797,8 +797,8 @@ end otf.getgsub = getgsub -- returns value, gsub_kind -function otf.getsubstitution(tfmdata,k,kind,value) - local found, kind = getgsub(tfmdata,k,kind,value) +function otf.getsubstitution(tfmdata,k,kind,value,script,language) + local found, kind = getgsub(tfmdata,k,kind,value,script,language) if not found then -- elseif kind == "gsub_single" then @@ -812,16 +812,16 @@ end otf.getalternate = otf.getsubstitution -function otf.getmultiple(tfmdata,k,kind) - local found, kind = getgsub(tfmdata,k,kind) +function otf.getmultiple(tfmdata,k,kind,value,script,language) + local found, kind = getgsub(tfmdata,k,kind,value,script,language) if found and kind == "gsub_multiple" then return found end return { k } end -function otf.getkern(tfmdata,left,right,kind) - local kerns = getgsub(tfmdata,left,kind or "kern",true) -- for now we use getsub +function otf.getkern(tfmdata,left,right,kind,value,script,language) + local kerns = getgsub(tfmdata,left,kind or "kern",true,script,language) -- for now we use getsub if kerns then local found = kerns[right] local kind = type(found) diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index 2ab52a35a..73c9b7c56 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -169,13 +169,8 @@ local forcepairadvance = false -- for testing local repeatlastmultiple = context and true -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries = v -end) - -directives.register("otf.forcepairadvance",function(v) - forcepairadvance = v -end) +directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end) +directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end) local report_direct = logs.reporter("fonts","otf direct") local report_subchain = logs.reporter("fonts","otf subchain") @@ -200,7 +195,6 @@ local getboth = nuts.getboth local setboth = nuts.setboth local getid = nuts.getid local getstate = nuts.getstate -local setsubtype = nuts.setsubtype local getchar = nuts.getchar local setchar = nuts.setchar local getdisc = nuts.getdisc @@ -264,7 +258,6 @@ local lefttoright_code = nodes.dirvalues.lefttoright local righttoleft_code = nodes.dirvalues.righttoleft local discretionarydisc_code = nodes.disccodes.discretionary ------ ligatureglyph_code = glyphcodes.ligature local injections = nodes.injections local setmark = injections.setmark @@ -299,9 +292,9 @@ local marks = false local classes = false local currentfont = false local currentdynamic = false -local currentscale = 1000 -- false -local currentxscale = 1000 -- false -local currentyscale = 1000 -- false +local currentscale = 1000 +local currentxscale = 1000 +local currentyscale = 1000 local factor = 0 local threshold = 0 local checkmarks = false @@ -503,7 +496,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - -- setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -525,7 +517,7 @@ local glyphoptioncodes = tex.glyphoptioncodes local no_left_ligature_code = glyphoptioncodes.noleftligature local no_right_ligature_code = glyphoptioncodes.norightligature -local no_left_kern_code = glyphoptioncodes.noleftkern +----- no_left_kern_code = glyphoptioncodes.noleftkern local no_right_kern_code = glyphoptioncodes.norightkern local hasglyphoption = nuts.hasglyphoption @@ -558,7 +550,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if start == stop and getchar(start) == char and not hasmarks then resetinjection(start) setchar(start,char) --- fonts.collections.direct(start) + -- fonts.collections.direct(start) return head, start end if inhibited(start,stop) then @@ -575,9 +567,8 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) --- fonts.collections.direct(base) + -- fonts.collections.direct(base) setoptions(base,getoptions(start) | getoptions(stop)) -- maybe only lig options - -- setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -1379,7 +1370,7 @@ as less as needed but that would also make the code even more messy.

-- To be done (example needed): what if > 1 steps --- this is messy: do we need this disc checking also in alternaties? +-- this is messy: do we need this disc checking also in alternates? local function reportzerosteps(dataset,sequence) logwarning("%s: no steps",cref(dataset,sequence)) @@ -2058,9 +2049,7 @@ local function setdiscchecked(d,pre,post,replace) setdisc(d,pre,post,replace) end -local noflags = { false, false, false, false } - -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size = ck[5] - ck[4] + 1 local chainlookups = ck[6] @@ -2076,26 +2065,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) -- -- bad rules -- end local chainlookup = chainlookups[1] - for j=1,#chainlookup do - local chainstep = chainlookup[j] - if chainstep then - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok - -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. - -- char + mark -> char where mark has to disappear - -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash) - if ok then - done = true + if chainlookup then + for j=1,#chainlookup do + local chainstep = chainlookup[j] + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok + -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. + -- char + mark -> char where mark has to disappear + -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash) + if ok then + done = true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: has an issue (1)",cref(dataset,sequence)) end + else + -- whatever end else @@ -2185,7 +2178,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done = true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -2215,6 +2208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last = start local prev = getprev(start) local hasglue = false + local useddisc = nil -- new 2022-09-25 + local usedstart = start -- new 2022-09-25 -- fishy: so we can overflow and then go on in the sweep? -- todo : id can also be glue_code as we checked spaces @@ -2376,15 +2371,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end end end + local done = false if lookaheaddisc then - local cf = start local cl = getprev(lookaheaddisc) local cprev = getprev(start) local insertedmarks = 0 - while cprev do local nxt, char = isnextchar(cf,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char and marks[char] then @@ -2423,14 +2417,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok = false - cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done = true end end if not notmatchreplace[lookaheaddisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done = true end @@ -2441,16 +2435,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start = getprev(lookaheaddisc) + useddisc = lookaheaddisc -- new 2022-09-25 sweephead[cf] = getnext(clast) or false sweephead[new] = getnext(cl) or false - elseif backtrackdisc then - local cf = getnext(backtrackdisc) local cl = start local cnext = getnext(start) local insertedmarks = 0 - while cnext do local nxt, char = isnextchar(cnext,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char and marks[char] then @@ -2476,14 +2468,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok = false - cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done = true end end if not notmatchreplace[backtrackdisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done = true end @@ -2504,33 +2496,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start = getprev(backtrackdisc) + useddisc = backtrackdisc -- new 2022-09-25 sweephead[post] = getnext(clast) or false sweephead[replace] = getnext(last) or false - else local ok = false - head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done = true end end - - return head, start, done + if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25 + start = getnext(start) -- new 2022-09-25 + end -- new 2022-09-25 + return head, start, done, useddisc -- new 2022-09-25 end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule = ck[1] - local lookuptype = ck[8] or ck[2] - local nofseq = #ck[3] - local first = ck[4] - local last = ck[5] - local char = getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ", sweepnode and "" or "not ") +local chaintrac do + + local level = 0 + local last = { } + + chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level = level + 1 + last[level] = start + local rule = ck[1] + local lookuptype = ck[8] or ck[2] + local nofseq = #ck[3] -- ck[3].n + local first = ck[4] + local last = ck[5] + local char = getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ", sweepnode and "" or "not ") + else + -- (start,done) + local what = start and "done" or "continue" + local where = head == last[level] and "same" or "different" + local char = getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level = level - 1 + end + end + end -- The next one is quite optimized but still somewhat slow, fonts like ebgaramond @@ -2544,6 +2560,9 @@ end -- the previous disc .. such be it ( with only f done) local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head, start, false + end -- optimizing for rlmode gains nothing local sweepnode = sweepnode local sweeptype = sweeptype @@ -2579,17 +2598,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s -- fonts can have many steps (each doing one check) or many contexts -- todo: make a per-char cache so that we have small contexts (when we have a context - -- n == 1 and otherwise it can be more so we can even distingish n == 1 or more) + -- n == 1 and otherwise it can be more so we can even distinguish n == 1 or more) local nofcontexts = contexts.n -- #contexts local startchar = nofcontext == 1 or ischar(start,currentfont) -- already checked for k=1,nofcontexts do -- does this disc mess work well with n > 1 - local ck = contexts[k] - local seq = ck[3] - local f = ck[4] -- first current -local last = start + local ck = contexts[k] + local seq = ck[3] + local f = ck[4] -- first current + local last = start if not startchar or not seq[f][startchar] then -- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts) goto next @@ -2600,7 +2619,9 @@ local last = start else local l = ck[5] -- last current local current = start --- local last = start + -- local last = start + + -- current match if l > f then -- before/current/after | before/current | current/after @@ -2712,7 +2733,7 @@ local last = start -- before if f > 1 then - if startprev then + -- if startprev then -- new 2022-09-25 local prev = startprev if prereplace and prev == checkdisc then prev = getprev(sweepnode) @@ -2837,9 +2858,9 @@ local last = start else goto next end - else - goto next - end + -- else -- new 2022-09-25 + -- goto next -- new 2022-09-25 + -- end -- new 2022-09-25 end -- after @@ -2968,19 +2989,21 @@ local last = start chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode) end if discseen or sweepnode then + -- When we process a disc we can collapse and therefore we backtrack one node (start) and + -- reprocess. This is needed because there might be more in the collapsed list. head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break -- else -- next context end - ::next:: - -- if trace_chains then - -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode) - -- end + ::next:: end if discseen then notmatchpre = { } @@ -2999,21 +3022,46 @@ handlers.gsub_reversecontextchain = handle_contextchain handlers.gpos_contextchain = handle_contextchain handlers.gpos_context = handle_contextchain --- this needs testing +-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) +-- local steps = currentlookup.steps +-- local nofsteps = currentlookup.nofsteps +-- if nofsteps > 1 then +-- reportmoresteps(dataset,sequence) +-- end +-- -- probably wrong +-- local l = steps[1].coverage[getchar(start)] +-- if l then +-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) +-- else +-- return head, start, false +-- end +-- end +-- new 2022-09-25 + local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps = currentlookup.steps local nofsteps = currentlookup.nofsteps - if nofsteps > 1 then - reportmoresteps(dataset,sequence) - end - -- probably wrong - local l = steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char = getchar(start) + if nofsteps == 1 then + local s = steps[1] + local l = s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head, start, false + for i=1,nofsteps do + local s = steps[i] + local l = s.coverage[char] + if l then + local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h, s, d + end + end + end end + return head, start, false end chainprocs.gsub_context = chained_contextchain @@ -3152,7 +3200,7 @@ do -- overcome local limit end -- Functions like kernrun, comprun etc evolved over time and in the end look rather --- complex. It's a bit of a compromis between extensive copying and creating subruns. +-- complex. It's a bit of a compromise between extensive copying and creating subruns. -- The logic has been improved a lot by Kai and Ivo who use complex fonts which -- really helped to identify border cases on the one hand and get insight in the diverse -- ways fonts implement features (not always that consistent and efficient). At the same @@ -3259,7 +3307,7 @@ local function kernrun(disc,k_run,...) if done and trace_testruns then report_disc("done",disc) end --- return nextstart, done + -- return nextstart, done return nextstart end @@ -3313,7 +3361,7 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list setdisc(disc,pre,post,replace) end -- --- return getnext(disc), renewed + -- return getnext(disc), renewed return getnext(disc) end @@ -3442,7 +3490,7 @@ local function testrun(disc,t_run,c_run,...) end end -- next can have changed (copied list) --- return getnext(disc), renewed + -- return getnext(disc), renewed return getnext(disc) end @@ -3978,20 +4026,13 @@ do start = nxt elseif id == disc_code then if not discs or discs[start] == true then --- local ok if gpossing then --- start, ok = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then --- start, ok = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else --- start, ok = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = nxt end @@ -4002,7 +4043,7 @@ do start = nxt -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = nxt + -- start = nxt else start = nxt end @@ -4051,15 +4092,11 @@ do start = nxt elseif id == disc_code then if not discs or discs[start] == true then --- local ok if gpossing then --- start, ok = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then --- start, ok = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else --- start, ok = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end else @@ -4098,9 +4135,6 @@ do currentfont = font currentdynamic = false --- currentscale = false --- currentxscale = false --- currentyscale = false currentscale = 1000 currentxscale = 1000 currentyscale = 1000 @@ -4191,7 +4225,7 @@ do start = nxt -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = nxt + -- start = nxt else start = nxt end diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl index 3c7a01857..8cb0b5b6c 100644 --- a/tex/context/base/mkxl/font-pre.mkxl +++ b/tex/context/base/mkxl/font-pre.mkxl @@ -427,10 +427,6 @@ language=dflt, script=math] -\definefontfeature - [oldmath] - [oldmath=yes] - \ifdefined\mathnolimitsmode \mathnolimitsmode\plusone % font driven (only opentype) \fi diff --git a/tex/context/base/mkxl/grph-trf.mkxl b/tex/context/base/mkxl/grph-trf.mkxl index a08cec904..0f1458873 100644 --- a/tex/context/base/mkxl/grph-trf.mkxl +++ b/tex/context/base/mkxl/grph-trf.mkxl @@ -117,7 +117,7 @@ \setupcurrentscale[#2]% \fi % - \dowithnextboxcs\grph_scale_finish\hbox} + \dowithnextboxcs\grph_scale_finish\naturalhbox} % intercept direction \def\grph_scale_finish {% todo: p_scale_ diff --git a/tex/context/base/mkxl/lpdf-ano.lmt b/tex/context/base/mkxl/lpdf-ano.lmt index 85fe050a2..b0d398457 100644 --- a/tex/context/base/mkxl/lpdf-ano.lmt +++ b/tex/context/base/mkxl/lpdf-ano.lmt @@ -386,6 +386,8 @@ local v_minheight = variables.minheight local v_fit = variables.fit local v_tight = variables.tight +local c_realpageno = tex.iscount("realpageno") + -- nicer is to create dictionaries and set properties but it's a bit overkill -- The problem with the following settings is that they are guesses: we never know @@ -466,7 +468,7 @@ end) local function flushdestination(specification) local names = specification.names local view = specification.view - local r = pdfpagereference(texgetcount("realpageno")) + local r = pdfpagereference(c_realpageno) if (references.innermethod ~= v_name) and (view == defaultview or not view or view == "") then r = pagedestinations[r] else @@ -1079,7 +1081,7 @@ end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then - p = references.checkedrealpage(p + texgetcount("realpageno")) + p = references.checkedrealpage(p + texgetcount(c_realpageno)) return pdflinkpage(p) end end diff --git a/tex/context/base/mkxl/lpdf-emb.lmt b/tex/context/base/mkxl/lpdf-emb.lmt index 6932879e7..3ce288b48 100644 --- a/tex/context/base/mkxl/lpdf-emb.lmt +++ b/tex/context/base/mkxl/lpdf-emb.lmt @@ -872,6 +872,7 @@ do FontName = basefont, Flags = 4, FontBBox = fontbbox, +-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 }, Ascent = scale(ascender), Descent = scale(descender), ItalicAngle = round(italicangle or 0), @@ -971,7 +972,6 @@ do return int4tag .. tointeger4(n) end - local e = false local z = byte("0") local dp = 10 local ep = 11 @@ -985,6 +985,7 @@ do local s = fg(v) local t = { [0] = realtag } local n = 0 + local e = false for s in gmatch(s,".") do if s == "e" or s == "E" then e = true @@ -1027,6 +1028,73 @@ do return t end + -- -- An alternative + -- + -- local fg = formatters["%0.14gE%i"] + -- + -- todictreal = function(v) + -- local E = 0 + -- if v >= 10.0 then + -- while v >= 10.0 do + -- v = v / 10.0 + -- E = E + 1 + -- end + -- elseif v < 1.0 then + -- while v < 1.0 do + -- v = v * 10.0 + -- E = E - 1 + -- end + -- end + -- local s = fg(v,E) + -- local t = { [0] = realtag } + -- local n = 0 + -- local e = false + -- for s in gmatch(s,".") do + -- if s == "e" or s == "E" then + -- e = true + -- elseif s == "+" then + -- -- skip + -- elseif s == "-" then + -- n = n + 1 + -- if e then + -- t[n] = em + -- e = false + -- else + -- t[n] = mn + -- end + -- else + -- if e then + -- n = n + 1 + -- t[n] = ep + -- e = false + -- end + -- n = n + 1 + -- if s == "." then + -- t[n] = dp + -- else + -- t[n] = byte(s) - z + -- end + -- end + -- end + -- n = n + 1 + -- t[n] = es + -- if (n % 2) ~= 0 then + -- n = n + 1 + -- t[n] = es + -- end + -- local j = 0 + -- for i=1,n,2 do + -- j = j + 1 + -- t[j] = char(t[i]*0x10+t[i+1]) + -- end + -- -- print(v,s) + -- -- for i=0,j do + -- -- print(string.format("%02X",utf.byte(t[i]))) + -- -- end + -- t = concat(t,"",0,j) + -- return t + -- end + todictnumber = function(n) if not n or n == 0 then return todictinteger(0) @@ -1063,7 +1131,8 @@ do local function todictdeltas(t) local r = { } for i=1,#t do - r[i] = todictnumber(t[i]-(t[i-1] or 0)) +-- r[i] = todictnumber(t[i]-(t[i-1] or 0)) + r[i] = todictnumber(t[i]+(t[i-1] or 0)) end return concat(r) end @@ -1140,7 +1209,7 @@ do -- local charstrings = fontfile.charstrings local nofglyphs = #charstrings + 1 - local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo +-- local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo local fontbbox = fontfile.fontbbox local defaultwidth = cffinfo.defaultwidth or 0 local nominalwidth = cffinfo.nominalwidth or 0 @@ -1153,6 +1222,8 @@ do local bluefuzz = cffinfo.bluefuzz local stdhw = cffinfo.stdhw local stdvw = cffinfo.stdvw + local stemsnaph = cffinfo.stemsnaph + local stemsnapv = cffinfo.stemsnapv -- if defaultwidth == 0 then defaultwidth = nil end if nomimalwidth == 0 then nominalwidth = nil end @@ -1163,8 +1234,10 @@ do if bluescale then bluescale = todictnumber(bluescale) end if blueshift then blueshift = todictnumber(blueshift) end if bluefuzz then bluefuzz = todictnumber(bluefuzz) end - if stdhw then stdhw = todictdeltas(stdhw) end - if stdvw then stdvw = todictdeltas(stdvw) end + if stemsnaph then stemsnaph = todictarray(stemsnaph) end + if stemsnapv then stemsnapv = todictarray(stemsnapv) end + if stdhw then stdhw = todictnumber(stdhw) end + if stdvw then stdvw = todictnumber(stdvw) end -- local fontversion = todictstring(fontfile,fontheader.fontversion or "uknown version") local familyname = todictstring(fontfile,cffinfo.familyname or names.family or basefontname) @@ -1177,7 +1250,7 @@ do local underlineposition = todictnumber(cffinfo.underlineposition) local underlinethickness = todictnumber(cffinfo.underlinethickness) local charstringtype = todictnumber(2) - local fontmatrix = todictarray(fontmatrix) +-- local fontmatrix = todictarray(fontmatrix) local ros = todictstring(fontfile,"Adobe") -- registry .. todictstring(fontfile,"Identity") -- identity .. todictnumber(0) -- supplement @@ -1191,18 +1264,21 @@ do -- local defaultwidthx = todictnumber(defaultwidth) local nominalwidthx = todictnumber(nominalwidth) + -- the order of the blues is important! local private = "" - .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "") - .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "") - .. (bluevalues and (bluevalues .. todictkey(6)) or "") - .. (otherblues and (otherblues .. todictkey(7)) or "") - .. (familyblues and (familyblues .. todictkey(8)) or "") - .. (familyotherblues and (familyotherblues .. todictkey(9)) or "") - .. (bluescale and (bluescale .. todictkey(12,9)) or "") - .. (blueshift and (blueshift .. todictkey(12,10)) or "") - .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "") - .. (stdhw and (stdhw .. todictkey(12,12)) or "") - .. (stdvw and (stdvw .. todictkey(12,13)) or "") + .. (bluevalues and (bluevalues .. todictkey( 6)) or "") + .. (otherblues and (otherblues .. todictkey( 7)) or "") + .. (familyblues and (familyblues .. todictkey( 8)) or "") + .. (familyotherblues and (familyotherblues .. todictkey( 9)) or "") + .. (bluescale and (bluescale .. todictkey(12, 9)) or "") + .. (blueshift and (blueshift .. todictkey(12,10)) or "") + .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "") + .. (stdhw and (stdhw .. todictkey(10)) or "") + .. (stdvw and (stdvw .. todictkey(11)) or "") + .. (stemsnaph and (stemsnaph .. todictkey(12,12)) or "") + .. (stemsnapv and (stemsnapv .. todictkey(12,13)) or "") + .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "") + .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "") local privatesize = todictnumber(#private) local privatespec = privatesize .. privateoffset -- @@ -1245,7 +1321,7 @@ do .. underlineposition .. todictkey(12, 3) .. underlinethickness .. todictkey(12, 4) .. charstringtype .. todictkey(12, 6) - .. fontmatrix .. todictkey(12, 7) +-- .. fontmatrix .. todictkey(12, 7) .. strokewidth .. todictkey(12, 8) .. topvars } @@ -1272,6 +1348,10 @@ do -- -- fdselect -- + -- see printer mail thread / experiments with Leah Neukirchen: some printers + -- (probaby with an old GS on board) need this matrix because oitherwise they + -- accumulate the top one (resulting in very tiny invisible results) + -- local fdselect = tocardinal1(3) -- format .. tocardinal2(1) -- n of ranges @@ -1301,8 +1381,8 @@ do offset = writestring(target,private,offset,"private") -- local fdarray = { - fontname .. todictkey(12,38) - .. privatespec .. todictkey(18) + fontname .. todictkey(12,38) + .. privatespec .. todictkey(18) -- case 1 } fdarrayoffset = todictoffset(offset) offset = writeindex(target,fdarray,offset,"fdarray") @@ -1314,19 +1394,18 @@ do .. charsetoffset .. todictkey(15) .. fdarrayoffset .. todictkey(12,36) .. fdselectoffset .. todictkey(12,37) - .. privatespec .. todictkey(18) + .. privatespec .. todictkey(18) -- case 2 target[dictof] = topdict .. topvars -- target = concat(target) -- if trace_details then - -- local name = "temp.cff" - -- report_fonts("saving %a",name) - -- io.savedata(name,target) - -- inspect(fonts.handlers.otf.readers.cffcheck(name)) + -- local name = "temp.cff" + -- report_fonts("saving %a",name) + -- io.savedata(name,target) + -- inspect(fonts.handlers.otf.readers.cffcheck(name)) -- end return target end - end -- todo: check widths (missing a decimal) @@ -1468,6 +1547,7 @@ do FontName = basefont, Flags = 4, FontBBox = fontbbox, +-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 }, Ascent = scale(ascender), Descent = scale(descender), ItalicAngle = round(italicangle or 0), diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index bf1142119..d937e3dea 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -202,6 +202,7 @@ local usedfontstreams = { } local usedindices = setmetatableindex(function(t,k) local n = 0 +-- n = 31 local v = setmetatableindex(function(tt,kk) if n >= 0xFFFF then report_fonts("registering character index: overflow in hash %a, todo: use overflow font") @@ -2488,11 +2489,12 @@ end do - local names = { } - local cache = { } - local nofpages = 0 + local names = { } + local cache = { } + local nofpages = 0 - local texgetcount = tex.getcount + local texgetcount = tex.getcount + local c_realpageno = tex.iscount("realpageno") pdfreserveobject = function(name) nofobjects = nofobjects + 1 @@ -2511,7 +2513,7 @@ do pdfpagereference = function(n,complete) -- true | false | nil | n [true,false] if n == true or not n then complete = n - n = texgetcount("realpageno") + n = texgetcount(c_realpageno) end if n > nofpages then nofpages = n diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt index ca38dcaa8..2c8227be9 100644 --- a/tex/context/base/mkxl/lpdf-rul.lmt +++ b/tex/context/base/mkxl/lpdf-rul.lmt @@ -146,9 +146,7 @@ FakeRule(RuleWidth,RuleHeight,RuleDepth,RuleThickness,RuleColor); setdimen("d_rule_h", h) setdimen("d_rule_v", v) setdimen("d_rule_line", p.line or 65536) --- setdimen("d_rule_offset", p.offset or 0) setdimen("d_rule_offset", (p.offset or 0) * 65536) --- setmacro("m_rule_factor", (p.factor or 0) * bpfactor) -- needs checking setdimen("d_rule_factor", (p.factor or 0)) -- needs checking setmacro("m_rule_option", p.option or "") setmacro("m_rule_direction", p.direction or lefttoright_code) diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt index f0b132d66..7fb4f9b9f 100644 --- a/tex/context/base/mkxl/math-act.lmt +++ b/tex/context/base/mkxl/math-act.lmt @@ -23,6 +23,11 @@ local trace_tweaking = false trackers.register("math.tweaks", function(v) local report_math = logs.reporter("mathematics","initializing") local report_mathtweak = logs.reporter("mathematics","tweak") +local getfontoffamily = tex.getfontoffamily +local fontcharacters = fonts.hashes.characters +local chardata = characters.data +local extensibles = mathematics.extensibles + local context = context local commands = commands local mathematics = mathematics @@ -166,28 +171,6 @@ function mathematics.checkaccentbaseheight(target,original) end end --- function mathematics.checkprivateparameters(target,original) --- local mathparameters = target.mathparameters --- if mathparameters then --- local parameters = target.parameters --- local properties = target.properties --- if parameters then --- local size = parameters.size --- if size then --- -- gone --- elseif properties then --- report_math("invalid parameters in font %a",properties.fullname or "?") --- else --- report_math("invalid parameters in font") --- end --- elseif properties then --- report_math("no parameters in font %a",properties.fullname or "?") --- else --- report_math("no parameters and properties in font") --- end --- end --- end - function mathematics.overloadparameters(target,original) if use_math_goodies then local mathparameters = target.mathparameters @@ -200,6 +183,8 @@ function mathematics.overloadparameters(target,original) if mathematics then local parameters = mathematics.parameters local bigslots = mathematics.bigslots or mathematics.bigs +-- inspect(parameters) +-- print("before",mathparameters.AxisHeight) if parameters then if trace_defining then report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) @@ -222,6 +207,7 @@ function mathematics.overloadparameters(target,original) end mathparameters[name] = newvalue end +-- print("after ",mathparameters.AxisHeight) for name, value in next, parameters do local tvalue = type(value) if tvalue == "string" then @@ -265,7 +251,7 @@ local function report_tweak(fmt,target,original,...) (target and target .shared.rawdata.metadata) local parameters = target.parameters report_mathtweak( - "%a, size %p, math size %i, %s", + "%a, size %P, math size %i, %s", metadata and metadata.fontname or "unknown", parameters.size or 655360, parameters.mathsize or 1, @@ -276,6 +262,39 @@ local function report_tweak(fmt,target,original,...) end end +mathtweaks.subsets = { + acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 }, + bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 }, + d = { 0x1D451 }, + f = { 0x1D453 }, + gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 }, + i = { 0x1D456 }, + mw = { 0x1D45A, 0x1D464 }, + p = { 0x1D45D }, + dotless = { 0x00049, 0x0004A, 0x00131, 0x00237, 0x1D6A4, 0x1D6A5 }, + integrals = { 0x0222B, 0x0222C, 0x0222D, 0x0222E, 0x0222F, 0x02230, 0x02231, 0x02232, 0x02233, 0x02A0B, 0x02A0C, 0x02A0D, 0x02A0E, 0x02A0F, 0x02A10, 0x02A11, 0x02A12, 0x02A13, 0x02A14, 0x02A15, 0x02A16, 0x02A17, 0x02A18, 0x02A19, 0x02A1A, 0x02A1B, 0x02A1C }, +} + +local function getalso(target,original) + local also = target.tweakalso -- maybe + if not also then + also = { } + for k, v in sortedhash(target.characters) do + local u = v.unicode + if u and k ~= u then + local a = also[u] + if a then + a[#a+1] = k + else + also[u] = { k } + end + end + end + target.tweakalso = also + end + return also +end + -- { -- tweak = "dimensions", -- list = { @@ -398,32 +417,33 @@ do extend = factor, }, v) end - local original = v.original - if not original then + local originalslot = v.original + if not originalslot then local delta = v.delta if delta then - original = k + delta + originalslot = k + delta end end - if original then - original = mathgaps[original] or original - local data = targetcharacters[original] + if originalslot then + originalslot = mathgaps[originalslot] or originalslot + local data = targetcharacters[originalslot] if data then data = copytable(data) - data.unicode = original + data.unicode = originalslot targetcharacters[k] = data character = data else - report_mathtweak("no slot %U",original) + report_mathtweak("no slot %U",originalslot) return end end -- - local width = character.width - local height = character.height - local depth = character.depth - local italic = character.italic - local topaccent = character.topaccent + local width = character.width + local height = character.height + local depth = character.depth + local italic = character.italic + local topanchor = character.topanchor + local bottomanchor = character.bottomanchor -- local widthfactor = v.width local heightfactor = v.height @@ -442,7 +462,7 @@ do if advancefactor then character.advance = advancefactor * width else - character.advance = width -- so advance is oldwidth + character.advance = character.advance or width -- so advance is oldwidth end if widthfactor then character.width = widthfactor * width @@ -470,8 +490,11 @@ do end end if anchorfactor then - character.topaccent = anchorfactor * (topaccent or width) + character.topanchor = anchorfactor * (topanchor or width) end +-- if anchorfactor then +-- character.bottomaccent = anchorfactor * (bottomanchor or width) +-- end -- begin experiment local line = v.wline if line then @@ -573,6 +596,18 @@ do end +do + + function mathtweaks.showinfo(target,original,parameters) + local mathparameters = target.mathparameters + for k, v in sortedhash(mathparameters) do + report_mathtweak("%s : %s",k,v) + end + end + +end + + do function mathtweaks.wipevariants(target,original,parameters) @@ -581,6 +616,8 @@ do local targetcharacters = target.characters -- local originalcharacters = original.characters local count = 0 + -- local also = getalso(target,original) + -- local done = { } for k, v in sortedhash(list) do local ori = targetcharacters[k] local nxt = ori.next @@ -675,17 +712,6 @@ do -- maybe we'll have a different name - mathtweaks.subsets = { - acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 }, - bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 }, - d = { 0x1D451 }, - f = { 0x1D453 }, - gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 }, - i = { 0x1D456 }, - mw = { 0x1D45A, 0x1D464}, - p = { 0x1D45D }, - } - function mathtweaks.kernpairs(target,original,parameters) local list = parameters.list if list then @@ -749,37 +775,11 @@ end do - -- What a mess ... should be a different alphabet. - - local function expand(target,original,list,selector,feature) - if feature then - local getsubstitution = fonts.handlers.otf.getsubstitution - for _, char in next, list do - local variant = getsubstitution(original,char,feature,true) - if variant then - mathematics.addvariant(target,char,variant,selector) - end - end - else - for i, char in next, list do - mathematics.addvariant(target,char,0xFE800+i,selector) - end - end - end - function mathtweaks.variants(target,original,parameters) - local feature = parameters.feature - local selector = parameters.selector - local kind = parameters.kind - if kind == "script" then - if selector then - expand(target,original,mathematics.alphabets.sr.tf.lcletters,selector,feature) - expand(target,original,mathematics.alphabets.sr.tf.ucletters,selector,feature) - end - end + report_mathtweak("todo: remove 'variants' tweak from goodie file") end - mathtweaks.variant = mathtweaks.variants + mathtweaks.variant = mathtweaks.variants end @@ -1052,86 +1052,307 @@ do local factor = tonumber(parameters.factor) or 0 if factor ~= 0 then for k, v in next, targetcharacters do - local a = v.topaccent + local a = v.topanchor if a and a > 0 then - v.topaccent = a * factor + v.topanchor = a * factor end end end end - -- local default = { - -- "digitsnormal", - -- "lowercasedoublestruck", - -- "uppercasedoublestruck", - -- } + mathtweaks.fixaccents = mathtweaks.fixanchors + +end + +do + + -- actually this should be a an engine feature driven by category because we don't + -- want this in display mode .. only a test for MS and HH + + local issymbol = characters.is_symbol + + function mathtweaks.oldstylemath(target,original,parameters) + local characters = target.characters + local axis = target.mathparameters.AxisHeight + local delta = (parameters.factor or .1) * axis + target.mathparameters.AxisHeight = (axis - delta) + for k, v in sortedhash(characters) do + if issymbol[k] then -- quick hack, engine knows + v.yoffset = -delta + v.height = (v.height or 0) - delta + v.depth = (v.depth or 0) - delta + end + end + end - local function wipe(target,original,parameters,field) - local targetcharacters = target.characters +end + +do + + function mathtweaks.simplifykerns(target,original,parameters) + local characters = target.characters + local simplified = 0 + for k, v in sortedhash(characters) do + local mathkerns = v.mathkerns + if mathkerns then + local k = mathkerns.topleft + if k then + k = k[#k].kern + if k then + v.topleft = k + end + end + local k = mathkerns.topright + if k then + k = k[#k].kern + if k then + v.topright = k + end + end + local k = mathkerns.bottomleft + if k then + k = k[1].kern -- todo get value at baseline + if k then + v.bottomleft = k + end + end + local k = mathkerns.bottomright + if k then + k = k[1].kern -- todo get value at baseline + if k then + v.bottomright = k + end + end + v.mathkerns = nil + simplified = simplified + 1 + end + end + if simplified == 0 then + report_tweak("no need to simplify mathkerns",target,original) + elseif trace_tweaking then + report_tweak("%i mathkerns simplified",target,original,simplified) + end + end + +end + +do + + local function wipe(target,original,parameters,field,move,integrals) + local targetcharacters = target.characters + local targetdescriptions = target.descriptions + local factor = target.parameters.factor + local correct = parameters.correct + local function getllx(u) + local d = targetdescriptions[u] + if d then + local b = d.boundingbox + if b then + local llx = b[1] + if llx < 0 then + return - llx + end + end + end + return false + end local function step(s,l) - local done = false while s do - local c = targetcharacters[mathgaps[s] or s] + local u = mathgaps[s] or s + local c = targetcharacters[u] if c then - local v = c[field] - if v then - if trace_tweaking then - if l then - report_tweak("removing %a in range %a from %C",target,original,field,l,s) + if field == "topanchor" then + if c.topanchor then + c.topanchor = nil + else + goto smaller + end + else + local done = false + local italic = c.italic + if move then + local width = c.width or 0 + c.advance = width + if correct then + local llx = getllx(u) + if llx then + local topanchor = c.topanchor + llx = llx * factor + width = width + llx + c.xoffset = llx + if topanchor then + c.topanchor = topanchor + llx + end +-- if c.bottomleft or c.topleft then +-- print("BEFORE",c.bottomleft,c.topleft,llx) +-- c.bottomleft = (c.bottomleft or 0) - llx +-- c.topleft = (c.topleft or 0) - llx +-- print("AFTER",c.bottomleft,c.topleft,llx) +-- else + c.bottomleft = (c.bottomleft or 0) - llx + c.topleft = (c.topleft or 0) - llx +-- end + done = true + end + end + if italic and italic ~= 0 then + c.width = width + italic +-- print(">>>",bottomright) + c.bottomright = - italic +-- c.bottomright = c.bottomright - italic + done = true else - report_tweak("removing %a from %C",target,original,field,s) + c.width = width end end - c[field] = nil - done = true + if italic then + c.italic = nil + done = true + end + if not done then + goto smaller + end end + if trace_tweaking then + if l then + report_tweak("%s %a in range %a from %C","removing",target,original,field,l,s) + else + report_tweak("%s %a from %C","removing",target,original,field,s) + end + end + goto smaller + ::smaller:: s = c.smaller else break end end - return done end local list = parameters.list -- todo: ranges - -- if list == "default" then - -- list = default - -- else if type(list) == "string" then list = { list } end for i=1,#list do local l = list[i] - local r = blocks[l] - if r then - local done = false - for i=r.first,r.last do - if step(i,l) then - done = true - end - end - if not done and trace_tweaking then - report_mathtweak("there is no need to remove %a range %a",field,l) + if type(l) == "table" then + for i=1,#l do + step(i,l[i]) end else - stepper(l,step) + local r = blocks[l] + if r then + for i=r.first,r.last do + step(i,l) + end + else + stepper(l,step) + end end end end function mathtweaks.wipeanchors(target,original,parameters) - wipe(target,original,parameters,"topaccent") + wipe(target,original,parameters,"topanchor") end + mathtweaks.wipeaccents = mathtweaks.wipeanchors + function mathtweaks.wipeitalics(target,original,parameters) wipe(target,original,parameters,"italic") end + function mathtweaks.moveitalics(target,original,parameters) + wipe(target,original,parameters,"italic",true) + end + -- function mathtweaks.fixdigits(target,original,parameters) -- mathtweaks.fixanchors(target,original,{ list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }) -- end end +do + + function mathtweaks.topanchors(target,original,parameters) + local characters = target.characters + local list = parameters.list + if list then + for k, v in sortedhash(list) do + local c = characters[k] + if c then + local w = c.width + if w and w ~= 0 then + c.topanchor = v * w + if trace_tweaking then + -- todo + end + end + end + end + -- todo: small + end + end + + mathtweaks.topaccents = mathtweaks.topanchors + + function mathtweaks.limits(target,original,parameters) + local characters = target.characters + local list = parameters.list + if list then + local factor = parameters.factor or 1 + local also = getalso(target,original) + local done = { } + local function relocate(u,factor) + if done[u] then + return + end + done[u] = true + local c = characters[u] + if c then + local italic = c.italic + if italic and italic ~= 0 then + local width = c.width or 0 + local half = (italic/2) * factor + c.topanchor = width + half + c.bottomanchor = width - half + c.bottomright = - italic + c.italic = nil + if trace_tweaking then + -- todo + end + end + local s = c.smaller + if s then + relocate(s,factor) + end + local n = c.next + if n then + relocate(n,factor) + end + if also then + local a = also[u] + if a then + for i=1,#a do + relocate(a[i],factor) + end + end + end + end + end + if #list > 0 then + for i=1,#list do + relocate(list[i],factor) + end + else + for k, v in sortedhash(list) do + relocate(k,tonumber(v) or factor) + end + end + end + end + +end + do -- musical timestamp: March 2022, Antonio Sanches (Bad Hombre), live performance in NL @@ -1178,12 +1399,14 @@ do local characters = target.characters local function setone(unicode,data) local chardata = characters[mathgaps[unicode] or unicode] - local width = chardata.width or 0 - local total = (chardata.height or 0) + (chardata.depth or 0) - local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end - local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end - local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end - local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end + if chardata then + local width = chardata.width or 0 + local total = (chardata.height or 0) + (chardata.depth or 0) + local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end + local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end + local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end + local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end + end end for unicode, data in next, margins do setone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone) @@ -1398,39 +1621,39 @@ end do - local addprivate = fonts.helpers.addprivate - local privateslot = fonts.helpers.privateslot - - -- function mathtweaks.addrules(target,original,parameters) - -- local characters = target.characters - -- local height = target.mathparameters.OverbarRuleThickness - -- local depth = target.mathparameters.UnderbarRuleThickness - -- local width = target.parameters.emwidth/2 - -- local step = 0.8 * width - -- characters[0x203E] = { -- over - -- width = width, - -- height = height, - -- depth = 0, - -- unicode = 0x203E, - -- commands = { { "rule", height, width } }, - -- hparts = { - -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 }, - -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 }, - -- } - -- } - -- characters[0x0332] = { -- under - -- width = width, - -- height = 0, - -- depth = depth, - -- yoffset = -depth, - -- unicode = 0x0332, - -- commands = { { "rule", height, width } }, - -- hparts = { - -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 }, - -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 }, - -- } - -- } - -- end + local addprivate = fonts.helpers.addprivate + local privateslot = fonts.helpers.privateslot + + -- function mathtweaks.addrules(target,original,parameters) + -- local characters = target.characters + -- local height = target.mathparameters.OverbarRuleThickness + -- local depth = target.mathparameters.UnderbarRuleThickness + -- local width = target.parameters.emwidth/2 + -- local step = 0.8 * width + -- characters[0x203E] = { -- over + -- width = width, + -- height = height, + -- depth = 0, + -- unicode = 0x203E, + -- commands = { { "rule", height, width } }, + -- hparts = { + -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 }, + -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 }, + -- } + -- } + -- characters[0x0332] = { -- under + -- width = width, + -- height = 0, + -- depth = depth, + -- yoffset = -depth, + -- unicode = 0x0332, + -- commands = { { "rule", height, width } }, + -- hparts = { + -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 }, + -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 }, + -- } + -- } + -- end function mathtweaks.addrules(target,original,parameters) local characters = target.characters @@ -1787,6 +2010,9 @@ end do + -- mirror + -- smaller + local list = { 0x221A, } @@ -1802,11 +2028,19 @@ do end data.height = depth data.depth = height +if data.rorrim then + -- the original does the magic +else data.yoffset = depth - height +end + end + local smaller = data.smaller + if smaller then + fix(target,original,characters,smaller) end - local small = data.smaller - if small then - fix(target,original,characters,small) + local mirror = data.mirror + if mirror then + fix(target,original,characters,mirror) end end end @@ -1821,6 +2055,70 @@ do end +do + + local done = nil + + local function fix(target,original,characters,unicode,axis) + if done[unicode] then + return + end + done[unicode] = true + local data = characters[unicode] + if data then + local height = data.height or 0 + local depth = data.depth or 0 + if trace_tweaking then + report_tweak("swapping height and depth of %U",target,original,unicode) + end + local half = (height + depth)/2 + if data.rorrim then + -- the original does the magic + else + data.yoffset = depth - (half - axis) + end + height = half + axis + depth = half - axis + data.height = height + data.depth = depth + local smaller = data.smaller + if smaller then + fix(target,original,characters,smaller,axis) + end + local mirror = data.mirror + if mirror then + fix(target,original,characters,mirror,axis) + end + local next = data.next + if next then + fix(target,original,characters,next,axis) + end + end + end + + function mathtweaks.fixoldschool(target,original,parameters) + local characters = target.characters + local list = mathtweaks.subsets.integrals + local also = getalso(target,original) + local axis = target.mathparameters.AxisHeight + done = { } + for i=1,#list do + local unicode = list[i] + fix(target,original,characters,unicode,axis) + end + if also then + local a = also[u] + if a then + for i=1,#a do + fix(target,original,characters,a[i],axis) + end + end + end + done = nil + end + +end + do local list = { 0x2061, 0x2062, 0x2063, 0x2064 } @@ -1896,12 +2194,12 @@ characters[hat] = copytable(characters[0x0302]) -- TODO local alias = entry[1] local stretchingdata = characters[stretching] if stretchingdata and stretchingdata.width == 0 then - local topaccent = stretchingdata.topaccent or 0 - local width = -topaccent - topaccent = width/2 + local topanchor = stretchingdata.topanchor or 0 + local width = -topanchor + topanchor = width/2 stretchingdata.width = width - stretchingdata.topaccent = topaccent - stretchingdata.commands = { rightcommand[width + topaccent], charcommand[stretching] } + stretchingdata.topanchor = topanchor + stretchingdata.commands = { rightcommand[width + topanchor], charcommand[stretching] } if trace_tweaking then report_tweak("width of initial extensible accent %U set",target,original,stretching) end @@ -1925,7 +2223,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO local flataccent = last.flataccent if flataccent then characters[flataccent].extensible = true - end + end break end end @@ -1947,7 +2245,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO depth = stretchingdata.depth, next = stretchingdata.next, commands = { charcommand[stretching] }, - topaccent = stretchingdata.topaccent, + topanchor = stretchingdata.topanchor, -- unicode = stretching, -- when we aliasize to combiners unicode = alias, -- when we keep the original } @@ -2018,7 +2316,9 @@ do local linewidth = target.MathConstants.RadicalRuleThickness -- make option local basechar = characters[radical] local baseheight = basechar.height +/2 local basedepth = basechar.depth +/2 local basetotal = baseheight + basedepth local used = baseheight -- @@ -2188,7 +2488,7 @@ do } } if trace_tweaking then - report_tweak("fourier %U added using %U",target,original,basecode,fourier) + report_tweak("fourier %U added using %U",target,original,basecode,fouriercode) end end end @@ -2284,17 +2584,17 @@ do function mathtweaks.fixellipses(target,original,parameters) local characters = target.characters local function fix(normal,raised) - local normalone = characters[normal] - if normalone then - local raisedone = copytable(normalone) - characters[raised] = raisedone - raisedone.unicode = weird - local height = raisedone.height + local normaldata = characters[normal] + if normaldata then + local raiseddata = copytable(normaldata) + characters[raised] = raiseddata + raiseddata.unicode = raised + local height = raiseddata.height local yoffset = (parameters.yoffset or 2) * height - raisedone.yoffset = yoffset - raisedone.height = height + yoffset + raiseddata.yoffset = yoffset + raiseddata.height = height + yoffset if trace_tweaking then - report_tweak("taking %U from %U",target,original,weird,normal) + report_tweak("taking %U from %U",target,original,raised,normal) end end end @@ -2356,6 +2656,163 @@ do end +do + + -- We started with the list that xits has in rtlm but most of them can be derived from + -- the database, and others need to be added. + + -- Checked while watching/listening to Dave Matthews Band: The Central Park Concert + -- (with superb solos by Warren Haynes), a DVD I bought around when we started with the + -- LUATEX advanture. + + local mirrors = { + + [0x0002F] = true, -- slashes + [0x0005C] = true, + [0x000F7] = true, + + [0x02032] = true, -- primes + [0x02033] = true, + [0x02034] = true, + [0x02057] = true, + [0x02035] = true, + [0x02036] = true, + [0x02037] = true, + + [0x0221A] = true, -- radicals + [0x0221B] = true, + [0x0221C] = true, + [0x0221D] = true, + + [0x0222B] = true, -- integrals + [0x0222C] = true, + [0x0222D] = true, + [0x0222E] = true, + [0x0222F] = true, + [0x02230] = true, + [0x02231] = true, + [0x02232] = true, + [0x02233] = true, + + [0x02A0A] = true, -- seen in xits (to be checked) + [0x02A0B] = true, + [0x02A0C] = true, + [0x02A0D] = true, + [0x02A0E] = true, + + [0x02140] = true, + [0x02201] = true, + [0x02202] = true, + [0x02203] = true, + [0x02204] = true, + [0x02211] = true, + + [0x02239] = true, + [0x0225F] = true, + [0x0228C] = true, + [0x022A7] = true, + [0x022AA] = true, + [0x022AC] = true, + [0x022AD] = true, + [0x022AE] = true, + [0x022AF] = true, + [0x022F5] = true, + [0x022F8] = true, + [0x022F9] = true, + [0x022FF] = true, + [0x02320] = true, + [0x02321] = true, + [0x027C0] = true, + [0x029DC] = true, + [0x029F4] = true, + + [0x02A0F] = true, + [0x02A10] = true, + [0x02A11] = true, + [0x02A12] = true, + [0x02A13] = true, + [0x02A14] = true, + [0x02A15] = true, + [0x02A16] = true, + [0x02A17] = true, + [0x02A18] = true, + [0x02A19] = true, + [0x02A1A] = true, + [0x02A1B] = true, + [0x02A1C] = true, + [0x02A20] = true, + + [0x02A74] = true, + [0x02AA3] = true, + [0x02AE2] = true, + [0x02AE6] = true, + [0x1D715] = true, + } + + local new = fonts.helpers.newprivateslot + + local function add(target,original,characters,unicode,what) + local data = characters[unicode] + if data then + if not data.mirror then + local slot = new("mirror."..unicode) + local mirror = copytable(data) + data.mirror = slot + mirror.rorrim = unicode -- so we can check later + mirror.commands = { + { "offset", data.width, 0, unicode, -1, 1 } + } + if trace_tweaking then + report_tweak("adding mirror %U (%s)",target,original,unicode,what) + end + characters[slot] = mirror + elseif trace_tweaking then + report_tweak("skipping mirror %U (%s)",target,original,unicode,what) + end + local hparts = data.hparts + if hparts then + for i=1,#hparts do + add(target,original,characters,hparts[i],"hpart") + end + end + local vparts = data.vparts + if vparts then + for i=1,#vparts do + add(target,original,characters,vparts[i],"vpart") + end + end + local smaller = data.smaller + if smaller then + add(target,original,characters,"smaller") + end + local next = data.next + if next then + add(target,original,characters,next,"next") + end + end + end + + -- todo: also check the rtlm table if present + + function mathtweaks.addmirrors(target,original,parameters) + local characters = target.characters + for unicode, detail in sortedhash(characters) do + local data = chardata[unicode] + if data and data.mirror then + add(target,original,characters,unicode,"mirror") + end + end + for unicode, detail in sortedhash(mirrors) do + if characters[unicode] then + add(target,original,characters,unicode,"character") + elseif trace_tweaking then + report_tweak("ignoring mirror %U (%s)",target,original,unicode,what) + end + end + end + +end + do local reported = { } @@ -2380,6 +2837,215 @@ do report_tweak() end reported[fontname] = true + target.tweakversion = version + end + end + end + +end + +do + + function mathtweaks.diagnose(target,original,parameters) + local characters = target.characters + for k, v in sortedhash(characters) do + local italic = v.italic + if italic then + report_tweak("italics: %U %p",target,original,k,italic) + end + end +-- inspect(characters[0xF0929]) + end + +end + +do + + function mathtweaks.setoptions(target,original,parameters) + local setlist = parameters.set or parameters.list + local resetlist = parameters.reset + if setlist or resetlist then + local properties = target.properties + local codes = tex.mathcontrolcodes + local oldcontrol = tex.get("mathfontcontrol") + local newcontrol = oldcontrol + -- todo: reset + if resetlist then + for i=1,#resetlist do + local v = tonumber(codes[resetlist[i]]) + if v then + newcontrol = newcontrol & (not v) + end + end + end + if setlist then + for i=1,#setlist do + local v = tonumber(codes[setlist[i]]) + if v then + newcontrol = newcontrol | v + end + end + end + newcontrol = newcontrol | codes.usefontcontrol + properties.mathcontrol = newcontrol + target.mathcontrol = newcontrol + if trace_tweaking then + report_tweak("forcing math font options 0x%08X instead of 0x08X",target,original,newcontrol,oldcontrol) + end + end + end + +end + +do + + function mathtweaks.setovershoots(target,original,parameters) + local list = parameters.list + if list then + local characters = target.characters + local emwidth = target.parameters.quad + for i=1,#list do + local entry = list[i] + local target = entry.target + local top = entry.topovershoot + local quad = entry.quad + if target and top then + local range = blocks[target] + if range then + if quad then + quad = emwidth + end + for r = range.first, range.last do + local unicode = mathgaps[r] or r + local data = characters[unicode] + if data then + data.topovershoot = top * (quad or data.width or 0) + end + end + if trace_tweaking then + report_mathtweak("setting overshoots for %a",target) + end + end + end + end + end + end + + -- there is no real need for thios but let's play nice with memory anyway + + local efindex = 0 + local effects = setmetatableindex (function (t,k) + efindex = efindex + 1 + local v = "tweakreplacealphabets" .. efindex + local e = fonts.specifiers.presetcontext(v,"",k) + -- print(k,v,e) + t[k] = v + return v + end) + + function mathtweaks.replacealphabets(target,original,parameters) + local feature = parameters.feature + local features = target.specification.features.normal + if not feature or features[feature] == true then + local list = parameters.list + if list then + local definedfont = fonts.definers.internal + local copiedglyph = fonts.handlers.vf.math.copy_glyph +-- does a deep copy, including parts and so + local getsubstitution = fonts.handlers.otf.getsubstitution + local fontdata = fonts.hashes.identifiers + -- + local fonts = target.fonts + local size = target.size + local characters = target.characters + -- compact: size = 655360 + if not fonts then + fonts = { } + target.fonts = fonts + end + if #fonts == 0 then + fonts[1] = { id = 0, size = size } -- self, will be resolved later + end + for i=1,#list do + local entry = list[i] + local filename = entry.filename + local feature = entry.feature + local thesource = entry.source + local thetarget = entry.target or thesource + if thesource and thetarget then + local sourcerange = type(thesource) == "table" and thesource or blocks[thesource] -- .gaps + local targetrange = type(thetarget) == "table" and thetarget or blocks[thetarget] -- .gaps + if sourcerange and targetrange then + local firsttarget = targetrange.first + local firstsource = sourcerange.first + local lastsource = sourcerange.last or firstsource + if firstsource and firsttarget then + local offset = firsttarget - firstsource + local topovershoot = entry.topovershoot + if filename then + local rscale = entry.rscale or 1 -- todo + size = size * rscale -- maybe use scale in vf command + -- load font, todo: set language and script, the effect hack is ugly + local fullname = filename + local effect = features.effect + if effect then + fullname = fullname .. "*" .. effects["effect={"..effect.."}"] + end + local id = definedfont { + name = fullname, + size = size, + } + local chars = fontchars[id] + local dropin = fontdata[id] + local index = #fonts + 1 + fonts[index] = { id = id, size = size } + -- copy characters + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + if feature then + sourceunicode = getsubstitution(dropin,sourceunicode,feature,true,"math","dflt") or sourceunicode + end + if trace_tweaking then + report_mathtweak("copying %s %U from file %a to %s %U",thesource,sourceunicode,filename,thetarget,targetunicode) + end + characters[targetunicode] = copiedglyph(target,characters,chars,sourceunicode,index) + end + elseif feature then + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + local variant = getsubstitution(original,sourceunicode,feature,true,"math","dflt") + local data = characters[variant] + if data then + if trace_tweaking then + report_mathtweak("copying %s %U from feature %a to %s %U",thesource,sourceunicode,feature,thetarget,targetunicode) + end + characters[targetunicode] = copytable(data) + end + end + else + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + local data = characters[sourceunicode] + if data then + if trace_tweaking then + report_mathtweak("copying %s %U to %s %U",thesource,sourceunicode,thetarget,targetunicode) + end + characters[targetunicode] = copytable(data) + end + end + end + else + -- error + end + end + end + end end end end @@ -2418,7 +3084,10 @@ local function applytweaks(when,target,original) if type(tweak) == "table" then local action = mathtweaks[tweak.tweak or ""] if action then - if original then + local version = tweak.version + if version and version ~= target.tweakversion then + report_math("skipping tweak %a version %a",tweak.tweak,version) + elseif original then action(target,original,tweak) else action(target,tweak) @@ -2456,6 +3125,65 @@ function mathematics.tweakaftercopyingfont(target,original) end end +do + + local defaults = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = "lowercasescript", + target = "lowercasecalligraphic", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + }, + { + source = "lowercaseboldscript", + target = "lowercaseboldcalligraphic", + }, + } + + function mathematics.checkaftercopyingfont(target,original) + local mathparameters = target.mathparameters -- why not hasmath + if mathparameters then + local characters = target.characters + -- + for i=1,#defaults do + -- we assume no ssty here yet .. todo + local default = defaults[i] + local block = blocks[default.target] + local first = block.first + local last = block.last + if not characters[mathgaps[first] or last] then + mathtweaks.replacealphabets(target,original,{ + tweak = "replacealphabets", + list = { default } + }) + end + end + -- + local addvariant = mathematics.addvariant + local function register(old,new) + for i, cold in next, old do + local cnew = new[i] + addvariant(target,cold,cold,0xFE00) + addvariant(target,cnew,cnew,0xFE01) + addvariant(target,cnew,cold,0xFE00) + addvariant(target,cold,cnew,0xFE01) + end + end + local sr = mathematics.alphabets.sr.tf + local ca = mathematics.alphabets.ca.tf + register(sr.ucletters,ca.ucletters) + register(sr.lcletters,ca.lcletters) + end + end + +end + function mathematics.beforepassingfonttotex(target) if use_math_goodies then local mathparameters = target.mathparameters -- why not hasmath @@ -2472,20 +3200,13 @@ sequencers.appendaction("mathparameters","system","mathematics.checkaccentbasehe sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont") sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont") +sequencers.appendaction("aftercopyingcharacters", "system","mathematics.checkaftercopyingfont") sequencers.appendaction("beforepassingfonttotex", "system","mathematics.beforepassingfonttotex") -- no, it's a feature now (see good-mth): -- -- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions") --- helpers - -local getfontoffamily = tex.getfontoffamily - -local fontcharacters = fonts.hashes.characters -local chardata = characters.data -local extensibles = mathematics.extensibles - -- we use numbers at the tex end (otherwise we could stick to chars) local e_left = extensibles.left @@ -2657,7 +3378,7 @@ function mathematics.finishfallbacks(target,specification,fallbacks) if trace_collecting then report_math("adding fallback characters to font %a",specification.hash) end - local definedfont = fonts.definers.internal + ----- definedfont = fonts.definers.internal local copiedglyph = fonts.handlers.vf.math.copy_glyph local fonts = target.fonts local size = specification.size -- target.size diff --git a/tex/context/base/mkxl/math-ali.mkxl b/tex/context/base/mkxl/math-ali.mkxl index b6b037117..af6b48cee 100644 --- a/tex/context/base/mkxl/math-ali.mkxl +++ b/tex/context/base/mkxl/math-ali.mkxl @@ -1011,12 +1011,12 @@ \ifmmode\stopimath\fi \hfil \aligntab - \hskip\mathcasesparameter\c!distance\relax + \kern\mathcasesparameter\c!distance\relax % hskip \math_cases_strut % looks better \aligncontent \hfil \aligntab - \hskip\mathcasesparameter\c!numberdistance\relax + \kern\mathcasesparameter\c!numberdistance\relax % hskip \span\math_text_in_eqalign{\aligncontent}% \crcr} % todo: number @@ -1286,7 +1286,7 @@ \math_matrix_anchor % \ifdim\d_math_eqalign_distance>\zeropoint % \ifbitwiseand\c_math_matrix_anchor_mode\plustwo - % \hskip.5\d_math_eqalign_distance + % \kern.5\d_math_eqalign_distance % \fi % \fi \fi} @@ -1296,7 +1296,7 @@ \ifcase\c_math_matrix_anchor_mode\else % \ifdim\d_math_eqalign_distance>\zeropoint % \ifbitwiseand\c_math_matrix_anchor_mode\plusfour - % \hskip.5\d_math_eqalign_distance + % \kern.5\d_math_eqalign_distance % \fi % \fi \math_matrix_anchor @@ -1312,7 +1312,7 @@ \aligntab \aligntab \math_matrix_anchor - \hskip.5\d_math_eqalign_distance % kern + \kern.5\d_math_eqalign_distance % hskip \aligncontent \aligntab \global\advance\c_math_eqalign_column\plusone @@ -1358,27 +1358,40 @@ \dousecolorparameter\p_rulecolor \fi} -% \noaligned\permanent\tolerant\protected\def\math_matrix_HL[#1]#*% -% {\noalign\bgroup -% \math_matrix_check_rule[#1]% -% \divide\scratchdimen\plustwo -% \autorule\s!height\scratchdimen\s!depth\scratchdimen\relax -% \egroup} -% -% \permanent\tolerant\protected\def\math_matrix_VL[#1]#*% -% {\NC -% \math_matrix_check_rule[#1]% -% \divide\d_math_eqalign_distance\plustwo -% \hskip-\d_math_eqalign_distance -% \autorule\s!width\scratchdimen\relax -% \hskip-\d_math_eqalign_distance -% \NC} - % These offset are an experiment so we abuse some existing keys or we have to % cook up new ones. Maybe we then should provide small medium big halfline etc. % but all depends on actual demand for this feature. +% Musical timestamp VL, NL, SL: Bad Hombre II by Antonio Sanches +% +% \startformula +% \startmatrix[left=\left(,right=\right)] +% \NC 0 \NL 0 \NC 0 \NC 2x \NC 1 \NC 0 \NC 0 \NL \NR +% \NC 0 \VL 0 \NC 0 \NC 0 \NC 2x \NC 0 \NC 0 \NL \NR +% \NC 0 \VL 0 \NC 0 \NC 0 \NC 0 \NC 3x \NC 0 \NL \NR +% \NC 0 \NL 0 \NC 0 \NC 0 \NC 0 \NC 0 \NC 4x \VL \NR +% \stopmatrix +% \stopformula +% +% \startformula +% \startmatrix[left=\left(,right=\right)] +% \SL[3] \NL \NL \NL \NL \NL \NR +% \VL 2x \NL 1 \NL 0 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \VL 0 \NL 2x \NL 1 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \VL 0 \NL 0 \NL 2x \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \SL[5] \NL \NL \NL \NR +% \NL 0 \NL 0 \NL 0 \VL 2x \NL 1 \VL 0 \NL 0 \NL \NR +% \NL 0 \NL 0 \NL 0 \VL 0 \NL 2x \VL 0 \NL 0 \NL \NR +% \NL \NL \NL \SL[3] \NL \NL \NR +% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL 0 \NL \NR +% \NL \NL \NL \NL \NL \SL[2] \NL \NR +% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL \NR +% \NL \NL \NL \NL \NL \NL \SL[1] \NL \NR +% \stopmatrix +% \stopformula + \definesystemattribute[mathalignmentvrule][public] +\definesystemattribute[mathalignmenthrule][public] \setupmathmatrix [%c!toffset=\zeropoint, @@ -1417,32 +1430,136 @@ \fi \egroup} -\protected\def\math_matrix_vertical_rule#1% - {\math_matrix_check_rule[#1]% +\protected\def\math_matrix_vertical_rule_indeed#1#2% + {\math_matrix_check_rule[#2]% \enablematrixrules - \vrule + #1 \s!attr \mathalignmentvruleattribute\plusone \s!width \scratchdimen \s!top -\dimexpr\mathmatrixparameter\c!toffset\relax \s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax \relax} +\protected\def\math_matrix_vertical_rule_yes{\math_matrix_vertical_rule_indeed\vrule } +\protected\def\math_matrix_vertical_rule_nop{\math_matrix_vertical_rule_indeed\novrule} + +\installcorenamespace{mathmatrixrulealternative} + +\newboundary\c_math_matrix_vl_boundary +%newboundary\c_math_matrix_sl_boundary + +\protected\def\math_matrix_horizontal_rule_indeed#1#2% + {\math_matrix_check_rule[#2]% + \global\setfalse\c_math_matrix_first + \global\settrue\c_math_matrix_sl_seen + \enablematrixrules + \leaders#1% + \s!attr \mathalignmenthruleattribute\plusone + \s!height .5\scratchdimen + \s!depth .5\scratchdimen + % \s!top -\dimexpr\mathmatrixparameter\c!toffset\relax + % \s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax + \hfilll + \kern\dimexpr.5\d_math_eqalign_distance\relax + \aligntab} + +\protected\def\math_matrix_horizontal_rule_yes{\math_matrix_horizontal_rule_indeed\hrule } +\protected\def\math_matrix_horizontal_rule_nop{\math_matrix_horizontal_rule_indeed\nohrule} + +\def\math_matrix_hrule_progress_rest#1% + {\expandedloop + \plusone + \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi)*\plustwo+\minusone\relax + \plusone + {\span\omit}}% + +\def\math_matrix_hrule_progress_first#1% + {\expandedloop + \plusone + \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi+\minusone)*\plustwo+\plusone\relax + \plusone + {\span\omit}}% + +\def\math_matrix_hrule_progress + {\NL + \ifconditional\c_math_matrix_first + \expandafter\math_matrix_hrule_progress_first + \else + \expandafter\math_matrix_hrule_progress_rest + \fi} + +\tolerant\permanent\protected\def\SL[#1]#*[#2]#*% [n] [name] | [name] | [n] + {\ifcsname\??mathmatrixrulealternative#2\endcsname + \lastnamedcs{#1}{#2}% + \orelse\ifcsname\??mathmatrixrulealternative#1\endcsname + \lastnamedcs{#2}{#1}% + \else + \csname\??mathmatrixrulealternative\v!auto\endcsname{#1}{#2}% + \fi} + +\defcsname\??mathmatrixrulealternative\v!auto\endcsname#1#2% + {\math_matrix_hrule_progress{#1}% + \ifnum\c_math_matrix_first=\zerocount + \kern-\dimexpr\linewidth\relax + \else + \kern-\dimexpr.5\d_math_eqalign_distance+\linewidth\relax + \fi + \math_matrix_horizontal_rule_yes{#2}% + %boundary\c_math_matrix_sl_boundary + \enforced\let\NR\math_matrix_NL_NR} \permanent\tolerant\protected\def\math_matrix_VL[#1]#*% {\span\omit - \hskip.5\d_math_eqalign_distance - \math_matrix_vertical_rule{#1}% - \hskip.5\d_math_eqalign_distance - \aligntab} + \ifconditional\c_math_matrix_first\else + \kern.5\d_math_eqalign_distance % hskip + \fi + \math_matrix_vertical_rule_yes{#1}% + \kern.5\d_math_eqalign_distance % hskip + \global\setfalse\c_math_matrix_first + \aligntab + \boundary\c_math_matrix_vl_boundary + \enforced\let\NR\math_matrix_NL_NR + } + +\permanent\tolerant\protected\def\math_matrix_NL[#1]#*% + {\span\omit + \ifconditional\c_math_matrix_first\else + \kern.5\d_math_eqalign_distance % hskip + \fi + \math_matrix_vertical_rule_nop{#1}% + \kern.5\d_math_eqalign_distance % hskip + \global\setfalse\c_math_matrix_first + \aligntab + \boundary\c_math_matrix_vl_boundary + \enforced\let\NR\math_matrix_NL_NR} + +\permanent\protected\def\math_matrix_NL_NR + {\ifnum\lastboundary=\c_math_matrix_vl_boundary + \ifconditional \c_math_matrix_sl_seen + \kern-1.5\d_math_eqalign_distance % hskip + \else + \kern-.5\d_math_eqalign_distance % hskip + \fi + \fi + \math_matrix_anchor_last + \math_matrix_stop_row + \math_matrix_pickup + \crcr + \math_matrix_start_row} + +\appendtoks + \enforced\let\NL\math_matrix_NL + \global\setfalse\c_math_matrix_sl_seen +\to \everymathmatrix \permanent\tolerant\protected\def\math_matrix_VC[#1]#*% {\NC - \math_matrix_vertical_rule{#1}% + \math_matrix_vertical_rule_yes{#1}% \NC} \permanent\tolerant\protected\def\math_matrix_VT[#1]#*% {\span\omit - \math_matrix_vertical_rule{#1}% + \math_matrix_vertical_rule_yes{#1}% \aligntab} \def\math_matrix_start_row @@ -1531,6 +1648,7 @@ callback \s!attr \mathmatrixornamentattribute "10 \s!attr \mathalignmentvruleattribute \plusone + \s!attr \mathalignmenthruleattribute \plusone \bgroup % preamble \span\math_matrix_preamble @@ -2300,7 +2418,7 @@ \hpack to \displaywidth\bgroup \hss \strc_math_flush_number_box - \hskip\d_framed_locator_ro + \kern\d_framed_locator_ro \egroup \egroup \strc_math_flush_box_framed_fit_inline} @@ -2308,7 +2426,7 @@ \def\strc_math_number_left_overflow_inside {\setbox\b_strc_math_display\vpack\bgroup \hpack to \displaywidth\bgroup - % \hskip\d_framed_locator_lo + % \kern\d_framed_locator_lo \strc_math_flush_number_box \hss \egroup @@ -2722,7 +2840,7 @@ \ifzeropt\scratchdimen\else\kern\scratchdimen\fi \setbox\scratchbox\hbox{\mathsimplealignparameter\c!text}% \ifvoid\scratchbox\else - \hskip\mathsimplealignparameter\c!textdistance + \kern\mathsimplealignparameter\c!textdistance % hskip \vcenter{\box\scratchbox}% \fi \egroup diff --git a/tex/context/base/mkxl/math-del.mklx b/tex/context/base/mkxl/math-del.mklx index edfd77de2..cfb8dc5d2 100644 --- a/tex/context/base/mkxl/math-del.mklx +++ b/tex/context/base/mkxl/math-del.mklx @@ -105,6 +105,13 @@ [fourier] [\c!right=\delimitedrighttildeuc] +% \definemathdelimited +% [bannuity] +% [%topoffset=.2\exheight, +% \c!strut=no, +% \c!rightmargin=.05\emwidth, +% \c!right=\delimitedrightanutityuc] + % $ \autofences \fourier{(z+\frac12)} + \courier{(z+\frac12)} + \xourier{(z+\frac12)} $ \protect \endinput diff --git a/tex/context/base/mkxl/math-fbk.lmt b/tex/context/base/mkxl/math-fbk.lmt index 185bb0d55..052f15f50 100644 --- a/tex/context/base/mkxl/math-fbk.lmt +++ b/tex/context/base/mkxl/math-fbk.lmt @@ -168,7 +168,7 @@ end -- a few examples: -local addextra = mathematics.extras.add +-- local addextra = mathematics.extras.add -- addextra(0xFE350) -- MATHEMATICAL DOUBLE ARROW LEFT END -- addextra(0xFE351) -- MATHEMATICAL DOUBLE ARROW MIDDLE PART @@ -395,7 +395,7 @@ local addextra = mathematics.extras.add -- local height = target.parameters.xheight / 2 -- local c, done = accent_to_extensible(target,private,data.original,unicode,height,0,nil,-height,unicode) -- if done then --- c.topaccent = nil -- or maybe also all the others +-- c.topanchor = nil -- or maybe also all the others -- end -- return c -- end diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index 7cb775294..b3c85070f 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -53,6 +53,7 @@ \c!source=\zerocount, \c!height=\zeropoint, \c!depth=\zeropoint, + \c!distance=\zerocount, \c!factor=\v!auto] \appendtoks @@ -314,7 +315,66 @@ \installlocalcurrenthandler \??mathfences {mathfence} -\tolerant\protected\def\math_fenced_fenced#1#*[#2]% +%D The horizontal text variant was introduced for Alan Braslau. Because this is not +%D used that often we only support double text arguments. +%D +%D Musical timestamp: I am The Moon by Tedeschi Trucks Band + +% \definemathfence [tupdownarrows] [text] [\c!left="2191,\c!right="2193] + +\protected\def\math_fenced_horizontal_common#1#2#3#4% \Uwhatever class symbol source + {\c_math_fenced_class\mathfenceparameter#2\relax + \edef\p_fence{#3}% + #1% \Uleft \Umiddle \Uleft + \usedcolorparameterattributes{\mathfenceparameter\c!color}% + \s!leftclass \mathunspacedcode + \s!rightclass \mathunspacedcode + \s!class \mathunspacedcode + \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax + \Udelimiter\mathghostcode\fam\p_fence} + +\tolerant\protected\def\math_fenced_horizontal#1#*[#2]#:#*#3#4% + {% \csname math\mathfenceparameter\c!mathclass\endcsname + \mathord \bgroup % class here + \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}% + \setupcurrentmathfence[#2]% + % \usemathstyleparameter\mathfenceparameter\c!mathstyle + \setmathsmalltextbox\scratchboxone\hbox{\usemathfencestyleandcolor\c!leftstyle \c!leftcolor #3}% + \setmathsmalltextbox\scratchboxtwo\hbox{\usemathfencestyleandcolor\c!rightstyle\c!rightcolor#4}% + \let\math_fenced_common\math_fenced_horizontal_common + \edef\p_fenced_middle{\mathfenceparameter\c!middle}% + \ifempty\p_fenced_middle\else + \letmathfenceparameter\c!left \p_fenced_middle + \letmathfenceparameter\c!right\zerocount + \fi + \scratchdistance\mathfenceparameter\c!distance + \box\scratchboxone + \kern\scratchdistance + \math_fenced_fenced_start\currentmathfence + \math_fenced_fenced_stop \currentmathfence + \kern\scratchdistance + \box\scratchboxtwo + \egroup} + +\tolerant\protected\def\math_fenced_fenced#1% + {\ifcstok{\namedmathfenceparameter{#1}\c!text}\v!yes % not the best keyword + \expandafter\math_fenced_horizontal + \else + \expandafter\math_fenced_vertical + \fi{#1}} + +% two step because we don't want to define text itself as command + +\definemathfence + [\v!text] + +\setupmathfence + [\v!text] + [\c!text=\v!yes, + \c!command=\v!yes, + \c!distance=.125\emwidth] + +\tolerant\protected\def\math_fenced_vertical#1#*[#2]% {\begingroup %{\beginmathgroup \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}% @@ -1129,4 +1189,14 @@ \setmathoptions\mathmiddlecode bor \autoinjectclassoptioncode \relax} +%D New (to be completed): + +% $x + \tupdownarrows{left}{right} + x$ +% $x + \tdownuparrows{left}{right} + x$ +% $x + \tupanddownarrows[color=red,leftcolor=green,rightcolor=blue]{left}{right} + x$ + +\definemathfence [tupanddownarrows] [\v!text] [\c!left="2191,\c!right="2193] +\definemathfence [tupdownarrows] [\v!text] [\c!left="21C5,\c!right=0] +\definemathfence [tdownuparrows] [\v!text] [\c!middle="21F5] + \protect diff --git a/tex/context/base/mkxl/math-fnt.lmt b/tex/context/base/mkxl/math-fnt.lmt index 1901d79ae..cd4976900 100644 --- a/tex/context/base/mkxl/math-fnt.lmt +++ b/tex/context/base/mkxl/math-fnt.lmt @@ -50,13 +50,15 @@ local function register_extensible(font,char,style,box) local private = fonts.helpers.setboxdirectly(font,unicode,box) -- we saved a scaled glyph stream so we now use an unscaled one ... local g = new_glyph(font,private,al) + if fonts.hashes.properties[font].compactmath then + nuts.setscales(g,1000,1000,1000) + end local n = new_hlist(g) -- if newcommands then oldchar.commands = newcommands end -- - -- local newchar = { -- unicode = unicode, -- width = wd, @@ -77,7 +79,6 @@ local function register_extensible(font,char,style,box) -- end -- end -- addcharacters(font, { [private] = newchar }) - -- so the dimensions of the box don't match the glyph scale! setwhd(n,wd,ht,dp) setattrlst(n,al) diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl index c0ef58c27..42e665f75 100644 --- a/tex/context/base/mkxl/math-frc.mkxl +++ b/tex/context/base/mkxl/math-frc.mkxl @@ -269,8 +269,8 @@ \Udelimiter\zerocount\fam\scratchcountertwo} \defcsname\??fractionmethods\v!vertical \v!auto \v!none\endcsname{\Uover} \defcsname\??fractionmethods\v!vertical \v!auto \endcsname{\Uoverwithdelims - \Udelimiter\zerocount\fam\scratchcounterone - \Udelimiter\zerocount\fam\scratchcountertwo} + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo} \defcsname\??fractionmethods\v!vertical \v!symbol \v!none\endcsname{\Ustretched \Udelimiter\zerocount\fam\scratchcounterthree} \defcsname\??fractionmethods\v!vertical \v!symbol \endcsname{\Ustretchedwithdelims @@ -452,34 +452,20 @@ \to \everysetupmathfraction \def\math_fraction_set_threshold_inline_auto - {\Umathfractiondelsize\textstyle \maxdimen - \Umathfractiondelsize\scriptstyle \maxdimen - \Umathfractiondelsize\scriptscriptstyle\maxdimen -\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle -\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle -\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle - } + {\Umathfractiondelsize\allmathstyles\maxdimen} \def\math_fraction_set_threshold_display_auto - {\Umathfractiondelsize\displaystyle \maxdimen -\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle - } + {\Umathfractiondelsize\alldisplaystyles\maxdimen} \def\math_fraction_set_threshold_inline_ratio {\edef\p_threshold{\mathfractionparameter\c!inlinethreshold}% - \Umathfractiondelsize\textstyle \p_threshold\dimexpr\textface\relax - \Umathfractiondelsize\scriptstyle \p_threshold\dimexpr\scriptface\relax - \Umathfractiondelsize\scriptscriptstyle\p_threshold\dimexpr\scriptscriptface\relax -\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle -\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle -\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle - } + \Umathfractiondelsize\alltextstyles \p_threshold\dimexpr\textface\relax + \Umathfractiondelsize\allscriptstyles \p_threshold\dimexpr\scriptface\relax + \Umathfractiondelsize\allscriptscriptstyles\p_threshold\dimexpr\scriptscriptface\relax} \def\math_fraction_set_threshold_display_ratio {\edef\p_threshold{\mathfractionparameter\c!displaythreshold}% - \Umathfractiondelsize\displaystyle \p_threshold\dimexpr\textface\relax -\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle - } + \Umathfractiondelsize\alldisplaystyles\p_threshold\dimexpr\textface\relax} \setupmathfractions [\c!inlinethreshold=.25, % no unit but fraction diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl index bf674068a..d13c2447c 100644 --- a/tex/context/base/mkxl/math-ini.mkxl +++ b/tex/context/base/mkxl/math-ini.mkxl @@ -55,7 +55,7 @@ \registerctxluafile{math-ini}{autosuffix} \registerctxluafile{math-dim}{autosuffix} -% \registerctxluafile{math-act}{autosuffix} +%registerctxluafile{math-act}{autosuffix} \registerctxluafile{math-ext}{} \registerctxluafile{math-vfu}{autosuffix} \registerctxluafile{math-ttv}{} @@ -65,7 +65,7 @@ \registerctxluafile{math-noa}{autosuffix} \registerctxluafile{math-tag}{autosuffix} \registerctxluafile{math-fbk}{autosuffix} -\registerctxluafile{math-dir}{} +%registerctxluafile{math-dir}{} \registerctxluafile{math-spa}{autosuffix} \registerctxluafile{math-fnt}{autosuffix} \registerctxluafile{math-pre}{autosuffix} @@ -107,6 +107,8 @@ +\analyzescriptnucleuscharmathcontrolcode +\analyzescriptnucleuslistmathcontrolcode +\analyzescriptnucleusboxmathcontrolcode + +\accenttopskewwithoffsetmathcontrolcode + % +\ignorekerndimensionsmathcontrolcode % xits needs this (bad depth of fences) \relax % \mathpenaltiesmode\plusone @@ -513,8 +515,22 @@ \defaultmathclassoptions % +\checkligatureclassoptioncode +\checkkernpairclassoptioncode + % up to Mikael to decide, ok with italic chars, maybe less so with raw ints: + % +\operatoritaliccorrectionclassoptioncode \relax +% we tweak away weird italics so only special cases see this: +% +% \def\IntOr{\Umathchar\mathordinarycode"00"00222B } +% \def\IntOp{\Umathchar\mathoperatorcode"00"00222B } +% +% \showglyphs \showfontitalics +% $\IntOp\limits x \quad \IntOp\limits^1_2 x \quad \IntOp\nolimits^1_2 x $\blank +% $\IntOr\limits x \quad \IntOr\limits^1_2 x \quad \IntOr\nolimits^1_2 x $\blank +% +% $\mathop{f} (x) \quad \mathop{f}\limits (x) \quad \mathop{f}\nolimits (x)$\blank +% $\mathop{f}^a_b (x) \quad \mathop{f}\limits^a_b (x) \quad \mathop{f}\nolimits^a_b (x)$\blank + \setmathoptions\mathbinarycode\numexpr \defaultmathclassoptions +\lookaheadforendclassoptioncode @@ -1099,318 +1115,317 @@ \startsetups math:spacing:presets \resetmathspacing % - % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathordinarycode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathordinarycode \mathfractioncode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space - % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allscriptstyles \pettymuskip % 220705 Results in an unwanted space - % - \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip - % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \ zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip + % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathordinarycode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathordinarycode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allunsplitstyles \pettymuskip % 220705 Results in an unwanted space % - \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip - %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip + % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip % - \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allscriptstyles \thinmuskip - % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip + %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathradicalcode \allunsplitstyles \pettymuskip % - % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip - % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allunsplitstyles \thinmuskip + % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathclosecode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathclosecode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles\thinmuskip - \inherited\setmathspacing \mathclosecode \mathopencode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathfractioncode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip + % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allscriptstyles \thinmuskip - % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathopencode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allscriptstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathclosecode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathclosecode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathopencode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathfractioncode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathconstructcode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathconstructcode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allunsplitstyles \thinmuskip + % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathopencode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allunsplitstyles \thinmuskip % - \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allunsplitstyles \pettymuskip % + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathfractioncode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfractioncode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathfractioncode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathradicalcode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathradicalcode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathradicalcode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathradicalcode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allunsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathclosecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathclosecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip % - \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip % - \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allunsplitstyles \pettymuskip % % \im{1\unit{hour} 20 \unit{minute} 56 \unit{second}} % - \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip + \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip + % + \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip % - \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip % - \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip - - \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip \stopsetups \directsetup{math:spacing:default} @@ -1506,10 +1521,12 @@ \permanent\protected\def\math_upright {\setmathattribute\s!regular\s!tf\setmathfontstylealternate\s!tf} \permanent\protected\def\math_italic {\setmathattribute\s!regular\s!it\setmathfontstylealternate\s!it} -\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting} -\permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy} -\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} -\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard\setmathfontstylealternate\s!blackboard} +%permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting} +%permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy} +\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script} +\permanent\protected\def\math_calligraphic{\setmathalphabet \s!calligraphic\setmathfontstylealternate\s!calligraphic} +\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} +\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard \setmathfontstylealternate\s!blackboard} \permanent\protected\def\mathupright {\mathgroupedcommandcs\math_upright } \permanent\protected\def\mathitalic {\mathgroupedcommandcs\math_italic } @@ -1804,14 +1821,12 @@ % using \s!font \mathstylefontid\mathstyle\fam would needs expansion and guesswork \appendtoks - \Umathruleheight\alltextstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount - \Umathruledepth \alltextstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount + \Umathruleheight\allmainstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount + \Umathruledepth \allmainstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount \Umathruleheight\allscriptstyles \strutheightfactor\fontspecifiedsize\scriptfont \zerocount \Umathruledepth \allscriptstyles \strutdepthfactor \fontspecifiedsize\scriptfont \zerocount \Umathruleheight\allscriptscriptstyles\strutheightfactor\fontspecifiedsize\scriptscriptfont\zerocount \Umathruledepth \allscriptscriptstyles\strutdepthfactor \fontspecifiedsize\scriptscriptfont\zerocount - \Umathruleheight\alldisplaystyles \Umathruleheight\textstyle - \Umathruledepth \alldisplaystyles \Umathruledepth \textstyle \to \everybodyfont \protected\def\math_strut @@ -2364,26 +2379,26 @@ \math_basics_synchronize_direction \to \everyswitchmathematics -% experimental (needed for an article) - -\installcorenamespace {mathbidi} - -\newcount\c_math_bidi - -\def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone} -\def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue} - -\letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable -\letcsname\??mathbidi\v!no \endcsname\math_bidi_disable - -\appendtoks - \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ? - \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi -\to \everysetupmathematics +% experimental (needed for an article) .. this is is no longer neded -\appendtoks - \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi -\to \everyswitchmathematics +% \installcorenamespace {mathbidi} +% +% \newcount\c_math_bidi +% +% \def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone} +% \def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue} +% +% \letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable +% \letcsname\??mathbidi\v!no \endcsname\math_bidi_disable +% +% \appendtoks +% \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ? +% \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi +% \to \everysetupmathematics +% +% \appendtoks +% \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi +% \to \everyswitchmathematics %D Delayed: greek. %D diff --git a/tex/context/base/mkxl/math-map.lmt b/tex/context/base/mkxl/math-map.lmt index f411505f2..d0a1410a1 100644 --- a/tex/context/base/mkxl/math-map.lmt +++ b/tex/context/base/mkxl/math-map.lmt @@ -66,7 +66,7 @@ local context = context -- todo: allocate -mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "blackboard" } +mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "calligraphic", "blackboard" } mathematics.alternatives = allocate { "normal", "bold", "italic", "bolditalic" } mathematics.sets = allocate { "ucletters", "lcletters", "digits", "ucgreek", "lcgreek", "symbols" } @@ -520,58 +520,95 @@ local script = { bi = script_bf, } +local calligraphic_tf = { + digits = tovector(regular_tf.digits), + ucletters = toupper(0x100020), + lcletters = tolower(0x100000), + lcgreek = tovector(regular_tf.lcgreek), + ucgreek = tovector(regular_tf.ucgreek), + symbols = tovector(regular_tf.symbols), +} + +local calligraphic_bf = { + digits = tovector(regular_bf.digits), + ucletters = toupper(0x100060), + lcletters = tolower(0x100040), + lcgreek = tovector(regular_bf.lcgreek), + ucgreek = tovector(regular_bf.ucgreek), + symbols = tovector(regular_bf.symbols), +} + +local calligraphic = { + tf = calligraphic_tf, + bf = calligraphic_bf, + it = calligraphic_tf, + bi = calligraphic_bf, +} + local alphabets = allocate { - regular = regular, - sansserif = sansserif, - monospaced = monospaced, - blackboard = blackboard, - fraktur = fraktur, - script = script, -} - -alphabets.tt = tovector(monospaced) -alphabets.ss = tovector(sansserif) -alphabets.rm = tovector(regular) -alphabets.bb = tovector(blackboard) -alphabets.fr = tovector(fraktur) -alphabets.sr = tovector(script) - -monospaced.normal = tovector(monospaced_tf) -monospaced.italic = tovector(monospaced_it) -monospaced.bold = tovector(monospaced_bf) -monospaced.bolditalic = tovector(monospaced_bi) - -sansserif.normal = tovector(sansserif_tf) -sansserif.italic = tovector(sansserif_it) -sansserif.bold = tovector(sansserif_bf) -sansserif.bolditalic = tovector(sansserif_bi) - -regular.normal = tovector(regular_tf) -regular.italic = tovector(regular_it) -regular.bold = tovector(regular_bf) -regular.bolditalic = tovector(regular_bi) - -blackboard.normal = tovector(blackboard_tf) -blackboard.italic = tovector(blackboard_tf) -blackboard.bold = tovector(blackboard_tf) -blackboard.bolditalic = tovector(blackboard_tf) - -fraktur.normal = tovector(fraktur_tf) -fraktur.italic = tovector(fraktur_bf) -fraktur.bold = tovector(fraktur_tf) -fraktur.bolditalic = tovector(fraktur_bf) - -alphabets.serif = tovector(regular) -alphabets.type = tovector(monospaced) -alphabets.teletype = tovector(monospaced) - -mathematics.alphabets = alphabets - -local mathremap = allocate { } -mathematics.mapremap = mathremap - -local boldmap = allocate { } -mathematics.boldmap = boldmap + regular = regular, + sansserif = sansserif, + monospaced = monospaced, + blackboard = blackboard, + fraktur = fraktur, + script = script, + calligraphic = calligraphic, +} + +alphabets.tt = tovector(monospaced) +alphabets.ss = tovector(sansserif) +alphabets.rm = tovector(regular) +alphabets.bb = tovector(blackboard) +alphabets.fr = tovector(fraktur) +alphabets.sr = tovector(script) +alphabets.ca = tovector(calligraphic) + +monospaced.normal = tovector(monospaced_tf) +monospaced.italic = tovector(monospaced_it) +monospaced.bold = tovector(monospaced_bf) +monospaced.bolditalic = tovector(monospaced_bi) + +sansserif.normal = tovector(sansserif_tf) +sansserif.italic = tovector(sansserif_it) +sansserif.bold = tovector(sansserif_bf) +sansserif.bolditalic = tovector(sansserif_bi) + +regular.normal = tovector(regular_tf) +regular.italic = tovector(regular_it) +regular.bold = tovector(regular_bf) +regular.bolditalic = tovector(regular_bi) + +blackboard.normal = tovector(blackboard_tf) +blackboard.italic = tovector(blackboard_tf) +blackboard.bold = tovector(blackboard_tf) +blackboard.bolditalic = tovector(blackboard_tf) + +fraktur.normal = tovector(fraktur_tf) +fraktur.italic = tovector(fraktur_bf) +fraktur.bold = tovector(fraktur_tf) +fraktur.bolditalic = tovector(fraktur_bf) + +script.normal = tovector(script_tf) +script.italic = tovector(script_bf) +script.bold = tovector(script_tf) +script.bolditalic = tovector(script_bf) + +calligraphic.normal = tovector(calligraphic_tf) +calligraphic.italic = tovector(calligraphic_bf) +calligraphic.bold = tovector(calligraphic_tf) +calligraphic.bolditalic = tovector(calligraphic_bf) + +alphabets.serif = tovector(regular) +alphabets.type = tovector(monospaced) +alphabets.teletype = tovector(monospaced) + +mathematics.alphabets = alphabets + +local mathremap = allocate { } +mathematics.mapremap = mathremap + +local boldmap = allocate { } +mathematics.boldmap = boldmap -- all math (a bit of redundancy here) (sorted for tracing) @@ -704,10 +741,11 @@ implement { actions = function(alphabet) if texgetmode() == mathmode_code then -- local r = mathremap[mathalphabet] - local r = mathremap[texgetattribute(mathalphabet)] + local a = texgetattribute(mathalphabet) + local r = mathremap[a] local style = r and r.style or "tf" local data = alphabets[alphabet][style] - texsetattribute(mathalphabet,data and data.attribute or texattribute[mathalphabet]) + texsetattribute(mathalphabet,data and data.attribute or a) end end } @@ -805,7 +843,7 @@ end -- begin of experiment -local fallback = { +local stylefallbacks = { tf = "bf", it = "bi", bf = "tf", @@ -813,12 +851,12 @@ local fallback = { } function mathematics.fallbackstyleattr(attribute) - local r = mathremap[attribute] - local alphabet = r.alphabet or "regular" - local style = r.style or "tf" - local fback = fallback[style] - if fback then - local data = alphabets[alphabet][fback] + local redirect = mathremap[attribute] + local alphabet = redirect.alphabet or "regular" + local style = redirect.style or "tf" + local fallback = stylefallbacks[style] + if fallback then + local data = alphabets[alphabet][fallback] if data then local attr = data.attribute return attribute ~= attr and attr diff --git a/tex/context/base/mkxl/math-noa.lmt b/tex/context/base/mkxl/math-noa.lmt index a754f6f39..30b7b0448 100644 --- a/tex/context/base/mkxl/math-noa.lmt +++ b/tex/context/base/mkxl/math-noa.lmt @@ -683,13 +683,14 @@ end do - local a_mathalphabet = privateattribute("mathalphabet") - local a_mathgreek = privateattribute("mathgreek") + local a_mathalphabet = privateattribute("mathalphabet") + local a_mathgreek = privateattribute("mathgreek") - local relocate = { } + local relocate = { } - local remapalphabets = mathematics.remapalphabets - local fallbackstyleattr = mathematics.fallbackstyleattr + local remapalphabets = mathematics.remapalphabets + local fallbackstyleattr = mathematics.fallbackstyleattr + local fallbackalphabetattr = mathematics.fallbackalphabetattr local function report_remap(tag,id,old,new,extra) if new then diff --git a/tex/context/base/mkxl/math-rad.mklx b/tex/context/base/mkxl/math-rad.mklx index 04d6bfbba..9dfc80d13 100644 --- a/tex/context/base/mkxl/math-rad.mklx +++ b/tex/context/base/mkxl/math-rad.mklx @@ -242,13 +242,13 @@ \scratchdimen \wd\scratchbox \scratchtopoffset \dimexpr\scratchoffset+\dp\nextbox\relax \scratchbottomoffset\dimexpr\scratchoffset+\ht\nextbox/2\relax - \hpack to \scratchdimen{\hss\box\nextbox\hskip\scratchoffset}% - \hskip-\scratchdimen + \hpack to \scratchdimen{\hss\box\nextbox\kern\scratchoffset}% + \kern-\scratchdimen \lower\dimexpr\scratchtopoffset\box\scratchbox% \ifx\currentmathradicaldegree\empty \else \setbox\scratchbox\mathstylehbox{\scriptscriptstyle\currentmathradicaldegree\hss}% \wd\scratchbox\scratchdimen - \hskip-\scratchdimen + \kern-\scratchdimen \raise\dimexpr\scratchbottomoffset\box\scratchbox \fi \endgroup} @@ -296,7 +296,7 @@ % the width of the graphic determines the width of the final result \setbox\scratchbox\hpack{\uniqueMPgraphic{\p_mp}}% todo: add code key + tag \hpack to \wd\scratchbox{\hss\box\nextbox\hss}% - \hskip-\wd\scratchbox + \kern-\wd\scratchbox \box\scratchbox \endgroup} diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx index 2ddfa24fd..828115f83 100644 --- a/tex/context/base/mkxl/math-stc.mklx +++ b/tex/context/base/mkxl/math-stc.mklx @@ -75,6 +75,9 @@ % at the lua end and some checking: use \mathhorizontalcode or \mathextensiblecode % but in practice arrows etc are not used that often +% At some point we can consider to use the more natural \LUAMETATEX\ features but the +% problem is that we lack proper support in fonts and we also have less control. + \installcorenamespace {mathextensiblefallbacks} % currently no italic correction ... problem is that we don't know yet if we have an italic @@ -1059,6 +1062,7 @@ \definemathextensible [\v!reverse] [xrightharpoondown] ["21C1] \definemathextensible [\v!reverse] [xrightharpoonup] ["21C0] \definemathextensible [\v!reverse] [xrightoverleftarrow] ["21C4] +\definemathextensible [\v!reverse] [xleftoverrightarrow] ["21C6] \definemathextensible [\v!reverse] [xleftrightharpoons] ["21CB] \definemathextensible [\v!reverse] [xrightleftharpoons] ["21CC] \definemathextensible [\v!reverse] [xtriplerel] ["2261] @@ -1081,6 +1085,7 @@ \definemathextensible [\v!mathematics] [mrightharpoondown] ["21C1] \definemathextensible [\v!mathematics] [mrightharpoonup] ["21C0] \definemathextensible [\v!mathematics] [mrightoverleftarrow] ["21C4] +\definemathextensible [\v!mathematics] [mleftoverrightarrow] ["21C6] \definemathextensible [\v!mathematics] [mleftrightharpoons] ["21CB] \definemathextensible [\v!mathematics] [mrightleftharpoons] ["21CC] \definemathextensible [\v!mathematics] [mtriplerel] ["2261] @@ -1103,6 +1108,7 @@ \definemathextensible [\v!text] [trightharpoondown] ["21C1] \definemathextensible [\v!text] [trightharpoonup] ["21C0] \definemathextensible [\v!text] [trightoverleftarrow] ["21C4] +\definemathextensible [\v!text] [tleftoverrightarrow] ["21C6] \definemathextensible [\v!text] [tleftrightharpoons] ["21CB] \definemathextensible [\v!text] [trightleftharpoons] ["21CC] \definemathextensible [\v!text] [ttriplerel] ["2261] @@ -1184,6 +1190,7 @@ \definemathextensible [\v!chemistry] [cleftarrow] ["2190] \definemathextensible [\v!chemistry] [crightarrow] ["2192] \definemathextensible [\v!chemistry] [crightoverleftarrow] ["21C4] +\definemathextensible [\v!chemistry] [cleftoverrightarrow] ["21C6] % for the moment: @@ -1208,6 +1215,7 @@ \immutable\protected\def\rightarrowfill {\math_stackers_hacked_fill \relbar \relbar \rightarrow} \immutable\protected\def\leftarrowfill {\math_stackers_hacked_fill \leftarrow \relbar \relbar } \immutable\protected\def\rightoverleftarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillleftend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillrightend} +\immutable\protected\def\leftoverrightarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillrightend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillleftend} \immutable\protected\def\equalfill {\math_stackers_hacked_fill \Relbar \Relbar \Relbar} \immutable\protected\def\Rightarrowfill {\math_stackers_hacked_fill \Relbar \Relbar \Rightarrow} \immutable\protected\def\Leftarrowfill {\math_stackers_hacked_fill \Leftarrow \Relbar \Relbar} @@ -1247,6 +1255,7 @@ \defineextensiblefiller [rightharpoondownfill] ["21C1] \defineextensiblefiller [rightharpoonupfill] ["21C0] \defineextensiblefiller [rightoverleftarrowfill] ["21C4] +\defineextensiblefiller [leftoverrightarrowfill] ["21C6] %defineextensiblefiller [leftrightharpoonsfill] ["21CB] % yet undefined %defineextensiblefiller [rightleftharpoonsfill] ["21CC] % yet undefined \defineextensiblefiller [triplerelfill] ["2261] @@ -1303,7 +1312,7 @@ [\v!symbol] [\c!voffset=-.3\mathexheight, \c!hoffset=\zeropoint, - \c!mathclass=ord, + \c!mathclass=\s!ordinary, \c!topoffset=.4\mathemwidth, % poor man's italic correction \c!middlecommand=\mathematics] diff --git a/tex/context/base/mkxl/math-vfu.lmt b/tex/context/base/mkxl/math-vfu.lmt index c58906a10..906c9ccf6 100644 --- a/tex/context/base/mkxl/math-vfu.lmt +++ b/tex/context/base/mkxl/math-vfu.lmt @@ -631,8 +631,9 @@ local function copy_glyph(main,target,original,unicode,slot) height = olddata.height, depth = olddata.depth, italic = olddata.italic, - topaccent = olddata.topaccent, + topanchor = olddata.topanchor, kerns = olddata.kerns, + mathkerns = olddata.mathkerns, tounicode = olddata.tounicode, commands = { { "slot", slot, unicode } }, } @@ -646,7 +647,9 @@ local function copy_glyph(main,target,original,unicode,slot) height = oldnextdata.height, depth = oldnextdata.depth, italic = oldnextdata.italic, - topaccent = oldnextdata.topaccent, + topanchor = oldnextdata.topanchor, + kerns = olddata.kerns, + mathkerns = olddata.mathkerns, tounicode = olddata.tounicode, commands = { { "slot", slot, nextglyph } }, } @@ -982,7 +985,7 @@ function vfmath.define(specification,set,goodies) if skewchar then local k = kerns[skewchar] if k then - t.topaccent = width/2 + k + t.topanchor = width/2 + k end end characters[unicode] = t @@ -1131,8 +1134,6 @@ function vfmath.define(specification,set,goodies) report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start) end -- - -- main.oldmath = true - -- -- We bypass the scaler so ... -- main.MathConstants = main.mathconstants diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 38d2c0633..636c15363 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -160,6 +160,7 @@ \definesystemconstant {class} \definesystemconstant {leftclass} \definesystemconstant {rightclass} +\definesystemconstant {calligraphic} \definesystemconstant {clone} \definesystemconstant {close} \definesystemconstant {cmyk} diff --git a/tex/context/base/mkxl/node-ali.lmt b/tex/context/base/mkxl/node-ali.lmt index 9209a520b..4b52f2d4b 100644 --- a/tex/context/base/mkxl/node-ali.lmt +++ b/tex/context/base/mkxl/node-ali.lmt @@ -30,6 +30,7 @@ local getlist = nuts.getlist local setlist = nuts.setlist local setattrlist = nuts.setattrlist local setprop = nuts.setprop +local getprop = nuts.getprop local getfont = nuts.getfont local getchar = nuts.getchar local addmargins = nuts.addmargins @@ -626,16 +627,24 @@ deltas = { } do local a_mathalignmentvrule = attributes.private("mathalignmentvrule") + local a_mathalignmenthrule = attributes.private("mathalignmenthrule") - local function first_pass(head,attr,preamble) + -- these loops will be combined + + local dp = { } + local ht = { } + + local function vrule_pass(head,attr,preamble) + local i = 0 for row, id, subtype, list in nextlist, head do if id == hlist_code and subtype == row_code then + i = i + 1 + local prv, nxt = getboth(row) for cell, id, subtype, list in nextlist, list do if list then for n, id, subtype in nextrule, list do local signal = getattr(n,a_mathalignmentvrule) if signal then - local prv, nxt = getboth(row) if prv then if getid(prv) ~= rule_code or not getattr(prv,a_mathalignmentvrule) then prv = nil @@ -646,20 +655,65 @@ do nxt = nil end end - setoffsets(n,nil,nil,not prv and 0 or nil,not nxt and 0 or nil) + local top = not prv and 0 or nil + local bot = not nxt and 0 or nil + setoffsets(n,nil,nil,d and -d or top,h and -h or bot) + end + end + end + end + end + end + end + + local function hrule_pass(head,attr,preamble) + local i = 0 + for row, id, subtype, list in nextlist, head do + if id == hlist_code and subtype == row_code then + i = i + 1 + local height = 0 + local depth = 0 + local done = false + for cell, id, subtype, list in nextlist, list do + if list then + for n, id, subtype in nextglue, list do + local signal = getattr(n,a_mathalignmenthrule) + if signal then + local w, h, d = getwhd(n) + if h and d then + if h > height then + height = h + end + if d > depth then + depth = d + end + done = true + end end end end end + if done then + setheight(row,height) + setdepth(row,depth) + dp[i] = height + ht[i] = depth + end end end end function nodes.handlers.mathmatrixrules(head,where,attr,preamble) if where == "wrapup" then + dp = { } + ht = { } + local signal = getattr(attr,a_mathalignmenthrule) + if signal == 0x01 then -- matrix + hrule_pass(head,attr,preamble) + end local signal = getattr(attr,a_mathalignmentvrule) - if signal == 1 then -- matrix - first_pass(head,attr,preamble) + if signal == 0x01 then -- matrix + vrule_pass(head,attr,preamble) end end end diff --git a/tex/context/base/mkxl/node-ini.lmt b/tex/context/base/mkxl/node-ini.lmt index 53bd082af..34028fa2e 100644 --- a/tex/context/base/mkxl/node-ini.lmt +++ b/tex/context/base/mkxl/node-ini.lmt @@ -226,6 +226,8 @@ local texsetintegervalue = tex.setintegervalue for i=0,nodecodes.glyph do texsetintegervalue(nodecodes[i] .. "nodecode",i,"immutable") end +texsetintegervalue("tempnodecode",nodecodes.temp,"immutable") -- can happen in tables + for i=0,#gluecodes do texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable") end diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl index 28c1a42f0..ecd793056 100644 --- a/tex/context/base/mkxl/pack-box.mkxl +++ b/tex/context/base/mkxl/pack-box.mkxl @@ -1199,7 +1199,7 @@ \fi \global\setbox\scratchcounterone\hpack\bgroup \unhbox\scratchcounterone - \hskip-\wd\nextbox + \kern-\wd\nextbox \box\nextbox \egroup \endgroup}} diff --git a/tex/context/base/mkxl/pack-cut.mkxl b/tex/context/base/mkxl/pack-cut.mkxl index 0cd06ed43..1e23a97e3 100644 --- a/tex/context/base/mkxl/pack-cut.mkxl +++ b/tex/context/base/mkxl/pack-cut.mkxl @@ -13,6 +13,8 @@ \unprotect +% to be redone in a more modern way + %D \macros %D {makecutbox, cuthbox, cutvbox, cutvtop} %D @@ -101,9 +103,8 @@ \vss}% \hss}} -\permanent\protected\def\makecutbox#1% - {\bgroup - \d_pack_cutmarks_height\ht#1% +\permanent\protected\def\makecutbox#1% not grouped ! + {\d_pack_cutmarks_height\ht#1% \d_pack_cutmarks_depth \dp#1% \d_pack_cutmarks_width \wd#1% \setbox#1\hpack @@ -155,7 +156,7 @@ \wd#1\d_pack_cutmarks_width \ht#1\d_pack_cutmarks_height \dp#1\d_pack_cutmarks_depth - \egroup} + \box#1} \permanent\protected\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox} \permanent\protected\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox} diff --git a/tex/context/base/mkxl/pack-mrl.mkxl b/tex/context/base/mkxl/pack-mrl.mkxl index 7a04f3904..b4339b0b2 100644 --- a/tex/context/base/mkxl/pack-mrl.mkxl +++ b/tex/context/base/mkxl/pack-mrl.mkxl @@ -181,7 +181,7 @@ \s!depth \scratchdepth \relax \ifzeropt\scratchdistance\else - \hskip\scratchdistance + \kern\scratchdistance % hskip \fi} \installcorenamespace{blackruletype} @@ -648,7 +648,7 @@ {\llap {\usetextrulesstyleandcolor\c!style\c!color #1% - \hskip\leftmargindistance}} + \kern\leftmargindistance}} % hskip {\color[\directtextrulesparameter\c!rulecolor] {\vrule \s!height\scratchheight @@ -794,7 +794,7 @@ \strut #2% \hfill\directfillinrulesparameter\c!separator - \hskip\scratchdistance + \kern\scratchdistance % hskip \egroup \fi \setupwhitespace[\v!big]% diff --git a/tex/context/base/mkxl/pack-pos.mkxl b/tex/context/base/mkxl/pack-pos.mkxl index aee22081f..e2fd1c8f8 100644 --- a/tex/context/base/mkxl/pack-pos.mkxl +++ b/tex/context/base/mkxl/pack-pos.mkxl @@ -90,7 +90,7 @@ \vbox to \d_pack_positioning_y_dimension {\vskip\d_pack_positioning_y_offset \hbox to \d_pack_positioning_x_dimension - {\hskip\d_pack_positioning_x_offset + {\kern\d_pack_positioning_x_offset \box\b_pack_positioning \hfill} \vfill}% @@ -145,7 +145,7 @@ {\offinterlineskip % else we get an empty line \vskip\d_pack_positioning_y_position \hbox to \zeropoint - {\hskip\d_pack_positioning_x_position + {\kern\d_pack_positioning_x_position \box\nextbox \hss} \vss}% diff --git a/tex/context/base/mkxl/pack-rul.lmt b/tex/context/base/mkxl/pack-rul.lmt index f81a672d2..c2183c1ad 100644 --- a/tex/context/base/mkxl/pack-rul.lmt +++ b/tex/context/base/mkxl/pack-rul.lmt @@ -35,6 +35,8 @@ local equationlist_code = listcodes.equation local texsetdimen = tex.setdimen local texsetcount = tex.setcount +local texisdimen = tex.isdimen +local texiscount = tex.iscount local implement = interfaces.implement @@ -52,8 +54,6 @@ local getdirection = nuts.getdirection local setshift = nuts.setshift local setwidth = nuts.setwidth local getwidth = nuts.getwidth --- local setboxglue = nuts.setboxglue --- local getboxglue = nuts.getboxglue local setboxglue = nuts.setglue local getboxglue = nuts.getglue @@ -73,6 +73,13 @@ directives.register("framed.checkmath",function(v) checkformath = v end) -- expe -- beware: dir nodes and pseudostruts can end up on lines of their own +local c_framednoflines = texiscount("framednoflines") +local d_framedfirstheight = texisdimen("framedfirstheight") +local d_framedlastdepth = texisdimen("framedlastdepth") +local d_framedminwidth = texisdimen("framedminwidth") +local d_framedmaxwidth = texisdimen("framedmaxwidth") +local d_framedaveragewidth = texisdimen("framedaveragewidth") + local function doreshapeframedbox(n,resync) if resync then resync = drivers.converters.resyncbox @@ -148,7 +155,7 @@ local function doreshapeframedbox(n,resync) setlist(p) flushnode(p) elseif checkformath and subtype == equationlist_code then - -- display formulas use a shift + -- display formulas use a shift .. actually we never have display mode if nofnonzero == 1 then setshift(h,0) end @@ -172,12 +179,12 @@ local function doreshapeframedbox(n,resync) end end end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) -- also signal - texsetdimen("global","framedlastdepth",lastdepth or 0) - texsetdimen("global","framedminwidth",minwidth) - texsetdimen("global","framedmaxwidth",maxwidth) - texsetdimen("global","framedaveragewidth",averagewidth) + texsetcount("global",c_framednoflines,noflines) + texsetdimen("global",d_framedfirstheight,firstheight or 0) -- also signal + texsetdimen("global",d_framedlastdepth,lastdepth or 0) + texsetdimen("global",d_framedminwidth,minwidth) + texsetdimen("global",d_framedmaxwidth,maxwidth) + texsetdimen("global",d_framedaveragewidth,averagewidth) end local function doanalyzeframedbox(n) @@ -206,9 +213,9 @@ local function doanalyzeframedbox(n) end end end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) - texsetdimen("global","framedlastdepth",lastdepth or 0) + texsetcount("global",c_framednoflines,noflines) + texsetdimen("global",d_framedfirstheight,firstheight or 0) + texsetdimen("global",d_framedlastdepth,lastdepth or 0) end implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments = "integer" } diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl index 803d83bf3..b06e8f57c 100644 --- a/tex/context/base/mkxl/pack-rul.mkxl +++ b/tex/context/base/mkxl/pack-rul.mkxl @@ -18,6 +18,13 @@ %D packaging and expansion we also keep tracing reasonable. For instance, multiple %D stacked backgrounds can slow down a run if not optimized this way. +\newcount\framednoflines +\newdimen\framedfirstheight +\newdimen\framedlastdepth +\newdimen\framedminwidth +\newdimen\framedmaxwidth +\newdimen\framedaveragewidth + \registerctxluafile{pack-rul}{autosuffix,optimize} \unprotect @@ -703,7 +710,7 @@ \def\pack_framed_stroked_box_normal_closed {\hpack\bgroup \scratchdimen.5\d_framed_linewidth - \hskip\scratchdimen + \kern\scratchdimen \clf_framedoutline \dimexpr\d_framed_target_wd-\d_framed_linewidth\relax \dimexpr\d_framed_target_ht-\scratchdimen\relax @@ -2323,12 +2330,12 @@ %D It is possible to let the frame macro calculate the width of a centered box %D automatically (\type {fit}). When doing so, we need to reshape the box: -\newcount\framednoflines -\newdimen\framedfirstheight -\newdimen\framedlastdepth -\newdimen\framedminwidth -\newdimen\framedmaxwidth -\newdimen\framedaveragewidth +% \newcount\framednoflines +% \newdimen\framedfirstheight +% \newdimen\framedlastdepth +% \newdimen\framedminwidth +% \newdimen\framedmaxwidth +% \newdimen\framedaveragewidth \def\pack_framed_reshape_reset {\framednoflines \zerocount diff --git a/tex/context/base/mkxl/page-box.mklx b/tex/context/base/mkxl/page-box.mklx index 56cb73f7a..a65989222 100644 --- a/tex/context/base/mkxl/page-box.mklx +++ b/tex/context/base/mkxl/page-box.mklx @@ -79,10 +79,19 @@ % {\boxxoffset#box\dimexpr\boxxoffset#box\doifbothsides++-\backoffset\relax % \boxyoffset#box\dimexpr\boxyoffset#box-\topoffset\relax} +% \def\page_boxes_apply_offset % #box +% {\unless\ifzeropt\topoffset % we can't do an unless here +% \expandafter\page_boxes_apply_offset_indeed +% \orunless\ifzeropt\backoffset +% \expandafter\page_boxes_apply_offset_indeed +% \else +% \expandafter\gobbleoneargument +% \fi} + \def\page_boxes_apply_offset % #box - {\unless\ifzeropt\topoffset + {\unless\ifdim\topoffset=\zeropoint \expandafter\page_boxes_apply_offset_indeed - \orunless\ifzeropt\backoffset + \orunless\ifdim\backoffset=\zeropoint \expandafter\page_boxes_apply_offset_indeed \else \expandafter\gobbleoneargument @@ -100,9 +109,9 @@ \def\page_boxes_apply_replicate_indeed#box% {\setbox#box\vpack {\offinterlineskip - \dorecurse{\layoutparameter\c!ny} + \dorecurse{\layoutparameter\c!ny}% {\hpack{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}% - \vskip\layoutparameter\c!dy} + \vskip\layoutparameter\c!dy}% \unskip}} \def\page_boxes_apply_orientate_paper#box% diff --git a/tex/context/base/mkxl/spac-ver.lmt b/tex/context/base/mkxl/spac-ver.lmt index 7884a111c..283109f03 100644 --- a/tex/context/base/mkxl/spac-ver.lmt +++ b/tex/context/base/mkxl/spac-ver.lmt @@ -56,6 +56,8 @@ local texsetcount = tex.setcount local texnest = tex.nest local texgetbox = tex.getbox +local tg = texgetdimen + local buildpage = tex.triggerbuildpage local variables = interfaces.variables @@ -69,13 +71,6 @@ local v_split = variables.split local v_min = variables.min local v_max = variables.max local v_none = variables.none -local v_line = variables.line -local v_noheight = variables.noheight -local v_nodepth = variables.nodepth -local v_line = variables.line -local v_halfline = variables.halfline -local v_line_m = "-" .. v_line -local v_halfline_m = "-" .. v_halfline local v_first = variables.first local v_last = variables.last local v_top = variables.top @@ -115,6 +110,11 @@ local a_skiporder = attributes.private('skiporder') local a_snapmethod = attributes.private('snapmethod') local a_snapvbox = attributes.private('snapvbox') +local d_bodyfontstrutheight = tex.isdimen("bodyfontstrutheight") +local d_bodyfontstrutdepth = tex.isdimen("bodyfontstrutdepth") +local d_globalbodyfontstrutheight = tex.isdimen("globalbodyfontstrutheight") +local d_globalbodyfontstrutdepth = tex.isdimen("globalbodyfontstrutdepth") + local nuts = nodes.nuts local tonut = nuts.tonut @@ -357,6 +357,13 @@ end local snap_hlist do + local v_noheight = variables.noheight + local v_nodepth = variables.nodepth + local v_line = variables.line + local v_halfline = variables.halfline + local v_line_m = "-" .. v_line + local v_halfline_m = "-" .. v_halfline + local floor = math.floor local ceil = math.ceil @@ -397,24 +404,24 @@ local snap_hlist do local snapht, snapdp if method[v_local] then -- snapping is done immediately here - snapht = texgetdimen("bodyfontstrutheight") - snapdp = texgetdimen("bodyfontstrutdepth") + snapht = texgetdimen(d_bodyfontstrutheight) + snapdp = texgetdimen(d_bodyfontstrutdepth) if t then t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp) end elseif method[v_global] then - snapht = texgetdimen("globalbodyfontstrutheight") - snapdp = texgetdimen("globalbodyfontstrutdepth") + snapht = texgetdimen(d_globalbodyfontstrutheight) + snapdp = texgetdimen(d_globalbodyfontstrutdepth) if t then t[#t+1] = formatters["global: snapht %p snapdp %p"](snapht,snapdp) end else -- maybe autolocal -- snapping might happen later in the otr - snapht = texgetdimen("globalbodyfontstrutheight") - snapdp = texgetdimen("globalbodyfontstrutdepth") - local lsnapht = texgetdimen("bodyfontstrutheight") - local lsnapdp = texgetdimen("bodyfontstrutdepth") + snapht = texgetdimen(d_globalbodyfontstrutheight) + snapdp = texgetdimen(d_globalbodyfontstrutdepth) + local lsnapht = texgetdimen(d_bodyfontstrutheight) + local lsnapdp = texgetdimen(d_bodyfontstrutdepth) if snapht ~= lsnapht and snapdp ~= lsnapdp then snapht, snapdp = lsnapht, lsnapdp end @@ -672,7 +679,7 @@ local snap_hlist do local lines = (ch+cd)/snaphtdp if t then local original = (h+d)/snaphtdp - local whatever = (ch+cd)/(texgetdimen("globalbodyfontstrutheight") + texgetdimen("globalbodyfontstrutdepth")) + local whatever = (ch+cd)/(texgetdimen(d_globalbodyfontstrutheight) + texgetdimen(d_globalbodyfontstrutdepth)) t[#t+1] = formatters["final lines : %p -> %p (%p)"](original,lines,whatever) t[#t+1] = formatters["final height: %p -> %p"](h,ch) t[#t+1] = formatters["final depth : %p -> %p"](d,cd) @@ -1699,10 +1706,10 @@ do -- if trace_vsnapping then report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p", - texgetdimen("globalbodyfontstrutheight"), - texgetdimen("globalbodyfontstrutdepth"), - texgetdimen("bodyfontstrutheight"), - texgetdimen("bodyfontstrutdepth") + texgetdimen(d_globalbodyfontstrutheight), + texgetdimen(d_globalbodyfontstrutdepth), + texgetdimen(d_bodyfontstrutheight), + texgetdimen(d_bodyfontstrutdepth) ) end if trace then diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index 28a1151fb..7ab80d6a9 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -15,6 +15,14 @@ \unprotect +\newskip \bodyfontlineheight % why a skip +\newdimen \bodyfontstrutheight +\newdimen \bodyfontstrutdepth + +\newskip \globalbodyfontlineheight % why a skip +\newdimen \globalbodyfontstrutheight +\newdimen \globalbodyfontstrutdepth + \registerctxluafile{spac-ver}{autosuffix,optimize} % todo: use usernodes ? @@ -1396,13 +1404,13 @@ \installcorenamespace{gridsnapperattributes} \installcorenamespace{gridsnappersets} -\newskip \bodyfontlineheight -\newdimen \bodyfontstrutheight -\newdimen \bodyfontstrutdepth +% \newskip \bodyfontlineheight % see top +% \newdimen \bodyfontstrutheight % see top +% \newdimen \bodyfontstrutdepth % see top -\newskip \globalbodyfontlineheight % why a skip -\newdimen \globalbodyfontstrutheight -\newdimen \globalbodyfontstrutdepth +% \newskip \globalbodyfontlineheight % see top +% \newdimen \globalbodyfontstrutheight % see top +% \newdimen \globalbodyfontstrutdepth % see top \permanent\def\snappedvboxattribute{\ifgridsnapping attr\snapvboxattribute\c_attr_snapmethod\fi} \permanent\def\setlocalgridsnapping{\ifgridsnapping \c_attr_snapvbox \c_attr_snapmethod\fi} diff --git a/tex/context/base/mkxl/strc-lst.mklx b/tex/context/base/mkxl/strc-lst.mklx index 785d566cf..c04d68fa7 100644 --- a/tex/context/base/mkxl/strc-lst.mklx +++ b/tex/context/base/mkxl/strc-lst.mklx @@ -146,7 +146,7 @@ \scratchcounter\clf_addtolist references { internal \locationcount - % block {\currentsectionblock} + % block {\currentsectionblock} % needed for publications (can be get from section) % section structures.sections.currentid() % location {\p_location} } diff --git a/tex/context/base/mkxl/strc-ref.lmt b/tex/context/base/mkxl/strc-ref.lmt index 7ad20fa34..32c2a5429 100644 --- a/tex/context/base/mkxl/strc-ref.lmt +++ b/tex/context/base/mkxl/strc-ref.lmt @@ -54,6 +54,7 @@ local implement = interfaces.implement local ctx_latelua = context.latelua +local texiscount = tex.iscount local texgetcount = tex.getcount local texsetcount = tex.setcount local texconditionals = tex.conditionals @@ -124,6 +125,11 @@ local currentreference = nil local txtcatcodes = catcodes.numbers.txtcatcodes -- or just use "txtcatcodes" +local c_realpageno = texiscount("realpageno") +local c_locationcount = texiscount("locationcount") +local c_locationorder = texiscount("locationorder") +local c_lastdestinationattribute = texiscount("lastdestinationattribute") + local context = context local ctx_pushcatcodes = context.pushcatcodes @@ -294,7 +300,7 @@ local function referredpage(n) end end -- fallback - return texgetcount("realpageno") + return texgetcount(c_realpageno) end references.referredpage = referredpage @@ -304,7 +310,7 @@ function references.registerpage(n) -- called in the backend code if n > maxreferred then maxreferred = n end - tobereferred[n] = texgetcount("realpageno") + tobereferred[n] = texgetcount(c_realpageno) end end @@ -323,14 +329,14 @@ local function setnextorder(kind,name) lastorder = (ok[name] or 0) + 1 ok[name] = lastorder end - texsetcount("global","locationorder",lastorder) + texsetcount("global",c_locationorder,lastorder) end local function setnextinternal(kind,name) setnextorder(kind,name) -- always incremented with internal - local n = texgetcount("locationcount") + 1 - texsetcount("global","locationcount",n) + local n = texgetcount(c_locationcount) + 1 + texsetcount("global",c_locationcount,n) return n end @@ -433,12 +439,12 @@ end -- function references.enhance(prefix,tag) -- local l = tobesaved[prefix][tag] -- if l then --- l.references.realpage = texgetcount("realpageno") +-- l.references.realpage = texgetcount(c_realpageno) -- end -- end local function synchronizepage(reference) -- non public helper - reference.realpage = texgetcount("realpageno") + reference.realpage = texgetcount(c_realpageno) if jobpositions.used() then reference.x, reference.y = getpos() end @@ -2040,7 +2046,7 @@ local function setinternalreference(specification) if internal then -- new destinationattributes[internal] = destination end - texsetcount("lastdestinationattribute",destination) + texsetcount(c_lastdestinationattribute,destination) return destination end @@ -2107,7 +2113,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically } or unsetvalue end end - texsetcount("lastdestinationattribute",attr) + texsetcount(c_lastdestinationattribute,attr) return attr end @@ -2685,7 +2691,7 @@ function references.checkedrealpage(r) realpageofpage(r) -- just initialize end if not r then - return texgetcount("realpageno") + return texgetcount(c_realpageno) elseif r < 1 then return 1 elseif r > nofrealpages then @@ -2780,7 +2786,7 @@ end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then - p = references.checkedrealpage(p + texgetcount("realpageno")) + p = references.checkedrealpage(p + texgetcount(c_realpageno)) var.r = p actions.realpage = actions.realpage or p -- first wins end diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx index 07c8c2c1b..012d9d92d 100644 --- a/tex/context/base/mkxl/strc-ref.mklx +++ b/tex/context/base/mkxl/strc-ref.mklx @@ -27,6 +27,14 @@ \writestatus{loading}{ConTeXt Structure Macros / Cross Referencing} +\newif \iflocation +\newcount\locationcount +\newcount\locationorder +\newbox \locationbox + +\newcount\lastreferenceattribute +\newcount\lastdestinationattribute + \registerctxluafile{strc-rsc}{autosuffix} \registerctxluafile{strc-ref}{autosuffix} \registerctxluafile{node-ref}{autosuffix,optimize} @@ -137,8 +145,8 @@ %D Actually there is not much difference between a text and a full reference, but %D it's the concept that counts. The low level implementation is: -\newcount\lastreferenceattribute -\newcount\lastdestinationattribute +% sett top : \newcount\lastreferenceattribute +% sett top : \newcount\lastdestinationattribute \def\strc_references_finish#prefix#reference#internal% gets expanded anyway {\normalexpanded{\clf_deferredenhancereference{#prefix}{#reference}}} @@ -803,10 +811,10 @@ %D %D We could do this in \LUA\ \unknown -\newif \iflocation -\newcount\locationcount -\newcount\locationorder -\newbox \locationbox +% seet top: \newif \iflocation +% seet top: \newcount\locationcount +% seet top: \newcount\locationorder +% seet top: \newbox \locationbox \appendtoks \locationfalse diff --git a/tex/context/base/mkxl/strc-reg.lmt b/tex/context/base/mkxl/strc-reg.lmt index a45f23bf0..85198a151 100644 --- a/tex/context/base/mkxl/strc-reg.lmt +++ b/tex/context/base/mkxl/strc-reg.lmt @@ -34,6 +34,7 @@ local processors = typesetters.processors local splitprocessor = processors.split local texgetcount = tex.getcount +local texiscount = tex.iscount local variables = interfaces.variables local v_forward = variables.forward @@ -67,6 +68,9 @@ local setmetatableindex = table.setmetatableindex local absmaxlevel = 5 -- \c_strc_registers_maxlevel +local c_realpageno = texiscount("realpageno") +local c_locationcount = texiscount("locationcount") + local h_prefixpage = helpers.prefixpage local h_prefixlastpage = helpers.prefixlastpage local h_title = helpers.title @@ -564,7 +568,7 @@ local function storeregister(rawdata) -- metadata, references, entries -- local internal = references.internal if not internal then - internal = texgetcount("locationcount") -- we assume that it has been set + internal = texgetcount(c_locationcount) -- we assume that it has been set references.internal = internal end -- @@ -606,7 +610,7 @@ local function enhanceregister(specification) local data = saved.metadata.notsaved and collected[name] or saved local entry = data.entries[n] if entry then - entry.references.realpage = texgetcount("realpageno") + entry.references.realpage = texgetcount(c_realpageno) end end @@ -621,7 +625,7 @@ local function extendregister(name,tag,rawdata) -- maybe do lastsection internal local entry = data.entries[tag] if entry then local references = entry.references - references.lastrealpage = texgetcount("realpageno") + references.lastrealpage = texgetcount(c_realpageno) references.lastsection = currentid() if rawdata then local userdata = rawdata.userdata diff --git a/tex/context/base/mkxl/strc-reg.mkxl b/tex/context/base/mkxl/strc-reg.mkxl index 22b1202db..b0f50ecfd 100644 --- a/tex/context/base/mkxl/strc-reg.mkxl +++ b/tex/context/base/mkxl/strc-reg.mkxl @@ -1068,11 +1068,14 @@ % \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}% % \fi} +\let\currentregisterrealpage\!!zerocount % todo: more general accessor + \permanent\protected\def\withregisterpagecommand#1#2#3#4% {\ifcase#3\relax {\tt [entry\space not\space flushed]}% \else \def\currentregisterpageindex{#2}% + \def\currentregisterrealpage{#3}% \iflocation \strc_references_goto_internal{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]% \else diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index 0c5251373..96bdde764 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -990,7 +990,8 @@ %D \ifzeropt \somedimen ... \else ... \fi %D \stoptyping -\aliased\let\ifzeropt\ifcase +\aliased\let\ifzeropt\ifzerodim % was \let\ifzeropt\ifcase +\aliased\let\ifzero \ifzeronum % was \let\ifzeropt\ifcase % these token list helpers might move to syst-aux.mkiv % @@ -1254,8 +1255,8 @@ %D For a while we will keep these useless numbers as for instance tikz checks for them: -\immutable\integerdef\eTeXversion 2 -\immutable\def \eTeXrevision {2} +\immutable\integerdef\eTeXversion 2 +\immutable\def \eTeXrevision {.2} % there is a funny period here % %D Just in case users use this (or some styles still have it): diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl index 4d4037ff6..851984bea 100644 --- a/tex/context/base/mkxl/tabl-tbl.mkxl +++ b/tex/context/base/mkxl/tabl-tbl.mkxl @@ -407,11 +407,11 @@ % \protected % we can expand this one \def\tabl_tabulate_inject_pre_skip#1% {\ifdim#1>\zeropoint - \kern#1\relax % was \hskip + \kern#1\relax % hskip \orelse\ifnum\c_tabl_tabulate_column=\zerocount \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_first\else - \kern\s_tabl_tabulate_first\relax % was \hskip + \kern\s_tabl_tabulate_first\relax % hskip \fi \fi \fi} @@ -423,7 +423,7 @@ \orelse\ifnum\c_tabl_tabulate_columns=\c_tabl_tabulate_nofcolumns \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_last\else - \kern\s_tabl_tabulate_last\relax % was \hskip + \kern\s_tabl_tabulate_last\relax % hskip \fi \fi \fi} diff --git a/tex/context/base/mkxl/task-ini.lmt b/tex/context/base/mkxl/task-ini.lmt index 9c90aba02..17555d7e2 100644 --- a/tex/context/base/mkxl/task-ini.lmt +++ b/tex/context/base/mkxl/task-ini.lmt @@ -122,7 +122,7 @@ appendaction("math", "normalizers", "noads.handlers.dictionaries", appendaction("math", "normalizers", "noads.handlers.suspicious", nil, "nonut", "enabled" ) appendaction("math", "builders", "builders.kernel.mlisttohlist", nil, "nut", "enabled" ) -- mandate -appendaction("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" ) +------------("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" ) appendaction("math", "builders", "noads.handlers.makeup", nil, "nonut", "disabled" ) ------------("math", "builders", "noads.handlers.align", nil, "nonut", "enabled" ) diff --git a/tex/context/base/mkxl/type-set.mkxl b/tex/context/base/mkxl/type-set.mkxl index a14a99630..ae07bd914 100644 --- a/tex/context/base/mkxl/type-set.mkxl +++ b/tex/context/base/mkxl/type-set.mkxl @@ -134,6 +134,7 @@ \definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv] \definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv] +\definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv] diff --git a/tex/context/fonts/mkiv/asana-math.lfg b/tex/context/fonts/mkiv/asana-math.lfg index 934f9e0f0..379dd014f 100644 --- a/tex/context/fonts/mkiv/asana-math.lfg +++ b/tex/context/fonts/mkiv/asana-math.lfg @@ -30,6 +30,8 @@ -- local integral_top = { topright = 0.05 } -- local integral_bottom = { bottomright = -0.25 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "asana-math", @@ -49,7 +51,7 @@ return { -- StretchStackGapAboveMin = less, -- StretchStackGapBelowMin = less, -- StretchStackTopShiftUp = less, - NoLimitSupFactor = -200, + NoLimitSupFactor = 200, NoLimitSubFactor = 1200, AccentBaseDepth = 300, RadicalDegreeBottomRaisePercent = 70, @@ -65,6 +67,12 @@ return { expected = "Version 000.958", message = "this font is not supported", }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.95 }, { tweak = "dimensions", list = { @@ -103,7 +111,10 @@ return { { tweak = "fixellipses", }, - + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg index c09b55c20..508293f19 100644 --- a/tex/context/fonts/mkiv/bonum-math.lfg +++ b/tex/context/fonts/mkiv/bonum-math.lfg @@ -17,10 +17,12 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! -local integral_variants = { bottomright = -0.20 } -local integral_top = { topright = 0.05 } -local integral_bottom = { bottomright = -0.30 } +local integral_variants = { bottomright = -0.20 } +local integral_top = { topright = 0.05 } +local integral_bottom = { bottomright = -0.30 } + +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "bonum-math", @@ -34,19 +36,19 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, AccentBaseDepth = 50, RadicalDegreeBottomRaisePercent = 60, - RadicalRuleThickness = 66, -- 72 in font + RadicalRuleThickness = 66, -- 72 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1900, -- 1250 in font -- AccentSuperscriptDrop = 100, - -- AccentSuperscriptPercent = 20, - -- PrimeRaisePercent = 50, - PrimeRaiseComposedPercent = 0, - -- PrimeShiftUp = 0, - -- PrimeBaselineDropMax = 0, + -- AccentSuperscriptPercent = 20, + -- PrimeRaisePercent = 50, + PrimeRaiseComposedPercent = 0, + -- PrimeShiftUp = 0, + -- PrimeBaselineDropMax = 0, }, tweaks = { aftercopying = { @@ -55,125 +57,79 @@ return { expected = "Version 1.005", }, { + tweak = "fixprimes", + -- scale = 0.8, + -- smaller = true, + factor = 1,--1.1 + }, + { + tweak = "addmirrors", + }, + { + tweak = "replacealphabets", + -- feature = "mathbeta", -- we always replace + list = { + { + source = { first = 0x003B1 }, + filename = "texgyrebonummath-companion.otf", + }, + { + source = { first = 0x1D6FC }, + filename = "texgyrebonummath-companion.otf", + }, + }, + }, + presets.matheulercalligraphic { rscale = 0.98 }, + presets.mathrsfscript { rscale = 0.98 }, + presets.mathxitsarabic { rscale = 1 }, + presets.moveitalics { correct = true }, + { + -- For some alphabets we remove italic correction. + -- tweak = "wipeitalics", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasemonospace", + -- "lowercasenormal", + "lowercasesansserifbold", + -- "lowercasesansserifnormal", + "lowercasegreeknormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", -- some remain + }, + }, + { + -- tweak = "topaccents", + list = { + [0x1D453] = 0.7, -- f + }, + }, + { + tweak = "limits", + list = { + [0x0222B] = 1.5, + }, + }, + { + -- We need to check these, are the tweaks necessary or not? tweak = "dimensions", list = { - [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma - [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta - [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta - [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda - [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi - [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi - [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma - [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon - [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi - [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi - [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega - [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial - [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G - [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O - [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q - [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a - [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b - [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c - [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d - [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e - [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f - [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g - [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h - [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i - [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j - [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k - [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l - [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m - [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n - [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o - [0x1D45D] = { xoffset = 0, width = 1.05, italic = 0 }, -- p - [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q - [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r - [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s - [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t - [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u - [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v - [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w - [0x1D465] = { xoffset = 0, width = 1.175, italic = 0, anchor = 0.9 }, -- x - [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y - [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z - [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha - [0x1D6FD] = { xoffset = 0, width = 0.9, italic = 0, anchor = 1.05 }, -- \beta - [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma - [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta - [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon - [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon - [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta - [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta - [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta - [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta - [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota - [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa - [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu - [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu - [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi - [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron - [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi - [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi - [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho - [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho - [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma - [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma - [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau - [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon - [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi - [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi - [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi - [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi - [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega - -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa - [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi - [0x1D41B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b - [0x1D41D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d - [0x1D41F] = { xoffset = 0, width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f - [0x1D420] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g - [0x1D421] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h - [0x1D424] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k - [0x1D425] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l - [0x1D42A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q - [0x1D42B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r - [0x1D42C] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s - -- [0x1D482] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a - -- [0x1D483] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b - -- [0x1D484] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c - -- [0x1D485] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d - -- [0x1D486] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e - -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f - -- [0x1D488] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g - -- [0x1D489] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h - -- [0x1D48A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i - -- [0x1D48B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j - -- [0x1D48C] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k - -- [0x1D48D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l - -- [0x1D492] = { xoffset = 0, width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q - -- [0x1D493] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r - -- [0x1D497] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v - -- [0x1D499] = { xoffset = 0, width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x - -- [0x1D49A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y - -- [0x1D49B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z - [0x1D743] = { xoffset = 0, width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi - [0x1D435] = { anchor = 1.05 }, -- italic B - [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C - [0x1D437] = { anchor = 1.25 }, -- italic D - [0x1D43A] = { anchor = 0.8 }, -- italic G - [0x1D442] = { anchor = 0.85 }, -- italic O - [0x1D443] = { anchor = 1.1 }, -- italic P - [0x1D444] = { anchor = 0.85 }, -- italic Q - [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R - [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S - [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T - [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U - [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V - [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W - [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y - ["lowercasefraktur"] = { width = 1.25, extend = 1.25, @@ -195,71 +151,28 @@ return { { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - bottomright = -0.2, - }, - ["0x2F.variants.*"] = { - topleft = -0.2, - bottomright = -0.2, - }, - -- [0x28] = { -- left parenthesis. No! - -- topleft = -0.1, - -- bottomleft = -0.1, - -- }, - -- [0x29] = { -- right parenthesis. No! - -- topright = -0.1, - -- bottomright = -0.1, - -- all = true, - -- }, - [0x7D] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - [0x29] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - -- radical - [0x221A] = { - topright = 0.2, - bottomright = 0.2, - }, - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, - ["0x221A.parts.top"] = { - topright = 0.2, - }, - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x002F.variants.*"] = { topleft = -0.2, bottomright = -0.2 }, + -- No! + -- [0x0028] = { topleft = -0.1, bottomleft = -0.1 }, -- left parenthesis + -- [0x0029] = { topright = -0.1, bottomright = -0.1, all = true }, -- right parenthesis + -- + [0x007D] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + [0x0029] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom -- radical + [0x221A] = { topright = 0.2, bottomright = 0.2 }, + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, + ["0x221A.parts.top"] = { topright = 0.2, }, + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- [0x222B] = integral_variants, ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, [0x222C] = integral_variants, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, @@ -270,10 +183,8 @@ return { [0x2231] = integral_variants, ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, [0x2232] = integral_variants, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, [0x2233] = integral_variants, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - }, }, - -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large -- accent anchor offset). First we copy and fix. @@ -321,183 +232,143 @@ return { tweak = "copyaccents", }, -- So far for the accents. - { - -- For upright alphabets, we unset the anchor. - -- This means that accents are placed - -- centered over the character. - -- Should be on top - tweak = "wipeanchors", - list = { - "digitsbold", - "digitsdoublestruck", - "digitsmonospace", - "digitsnormal", - "digitssansserifbold", - "digitssansserifnormal", - "lowercasebold", - "lowercaseboldfraktur", - "lowercasedoublestruck", - "lowercasefraktur", - "lowercasegreekbold", - "lowercasegreeknormal", - "lowercasegreeksansserifbold", - "lowercasemonospace", - "lowercasenormal", - "lowercasesansserifbold", - "lowercasesansserifnormal", - "uppercasebold", - "uppercaseboldfraktur", - "uppercasedoublestruck", - "uppercasefraktur", - "uppercasegreekbold", - "uppercasegreeknormal", - "uppercasegreeksansserifbold", - "uppercasemonospace", - "uppercasenormal", - "uppercasesansserifbold", - "uppercasesansserifnormal", - }, - }, - { - -- For non-italic alphabets we remove italic correction. - tweak = "wipeitalics", - list = { - "digitsbold", - "digitsdoublestruck", - "digitsmonospace", - "digitsnormal", - "digitssansserifbold", - "digitssansserifnormal", - "lowercasebold", - "lowercaseboldfraktur", - "lowercasedoublestruck", - "lowercasefraktur", - "lowercasemonospace", - -- "lowercasenormal", - "lowercasesansserifbold", - -- "lowercasesansserifnormal", - "lowercasegreeknormal", - "uppercasebold", - "uppercaseboldfraktur", - "uppercasedoublestruck", - "uppercasefraktur", - "uppercasegreekbold", - "uppercasegreeknormal", - "uppercasegreeksansserifbold", - "uppercasemonospace", - "uppercasesansserifbold", - "uppercasesanserifnormal", -- some remain + -- For upright alphabets, we unset the anchor. This means that accents are placed + -- centered over the character. Should be on top. + tweak = "wipeanchors", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasegreekbold", + "lowercasegreeknormal", + "lowercasegreeksansserifbold", + "lowercasemonospace", +-- "lowercasenormal", + "lowercasesansserifbold", + "lowercasesansserifnormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasenormal", + "uppercasesansserifbold", + "uppercasesansserifnormal", }, - }, - { - -- This one fakes margins to get larger/smaller accents - -- with for example \widetilde. + }, + { + -- This one fakes margins to get larger/smaller accents with for example the + -- \widetilde. tweak = "margins", list = { - [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4 - - [0x1D712] = { left = -.1, right = -.1 }, -- italic chi - [0x1D713] = { left = -.1, right = -.1 }, -- italic psi - [0x1D714] = { left = -.1, right = -.1 }, -- italic omega - - [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha - [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma - [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa - [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu - [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi - [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma - [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon - [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi - [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi - [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega + [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4 + + [0x1D712] = { left = -.1, right = -.1 }, -- italic chi + [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + [0x1D714] = { left = -.1, right = -.1 }, -- italic omega + + [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha + [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma + [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa + [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu + [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi + [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma + [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon + [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi + [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi + [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega -- Greek lowercase sans (bold, italic) can be improved - [0x1D451] = { left = -.1, right = -.1 }, -- italic d - [0x1D453] = { left = -.1, right = -.1 }, -- italic f + [0x1D451] = { left = -.1, right = -.1 }, -- italic d + [0x1D453] = { left = -.1, right = -.1 }, -- italic f - [0x00394] = { left = .1, right = .1 }, -- upfight Delta - [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma + [0x00394] = { left = .1, right = .1 }, -- upfight Delta + [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma - -- [0x0004A] = { left = .1, right = .1 }, -- J - [0x00046] = { left = .1, right = .1 }, -- F - [0x0004C] = { left = .1, right = .1 }, -- L - [0x00050] = { left = .1, right = .1 }, -- P - [0x00053] = { left = .1, right = .1 }, -- S - [0x00054] = { left = .1, right = .1 }, -- T - [0x0005A] = { left = .1, right = .1 }, -- Z + -- [0x0004A] = { left = .1, right = .1 }, -- J + [0x00046] = { left = .1, right = .1 }, -- F + [0x0004C] = { left = .1, right = .1 }, -- L + [0x00050] = { left = .1, right = .1 }, -- P + [0x00053] = { left = .1, right = .1 }, -- S + [0x00054] = { left = .1, right = .1 }, -- T + [0x0005A] = { left = .1, right = .1 }, -- Z [0x1D43D] = { left = -.1, right = -.1 }, -- italic J -- [0x1D448] = { left = -.05, right = -.05 }, -- italic U -- [0x1D449] = { left = -.05, right = -.05 }, -- italic V [0x1D44B] = { left = -.05, right = -.05 }, -- italic X - -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f - -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h - -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u - -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x - - -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi - -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi - - -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d - -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g - - -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J - -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S - - -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F - -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I - -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J - -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z - - -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A - -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B - -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E - -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F - -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J - -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K - -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L - -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P - -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R - -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S - -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T - -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V - -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y - - -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C - - -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma - -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta - - -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E - -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F - -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope - -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L - -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S - - -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S - - -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C - -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E - -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F - -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope - -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P - -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S - -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z - - -- [0x1D4A0] = { left = .1, right = .1 }, -- script E - -- [0x1D4AE] = { left = .1, right = .1 }, -- script S - -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y + -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f + -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h + -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u + -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x + + -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi + -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + + -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d + -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g + + -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J + -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S + + -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F + -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I + -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J + -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z + + -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A + -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B + -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E + -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F + -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J + -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K + -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L + -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P + -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R + -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S + -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T + -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V + -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y + + -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C + + -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma + -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta + + -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E + -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F + -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope + -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L + -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S + + -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S + + -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C + -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E + -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F + -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope + -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P + -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S + -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z + + -- [0x1D4A0] = { left = .1, right = .1 }, -- script E + -- [0x1D4AE] = { left = .1, right = .1 }, -- script S + -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y }, }, - { - tweak = "fixprimes", - -- scale = 0.8, - -- smaller = true, - factor = 1,--1.1 - }, { tweak = "addprivates", -- list = { @@ -531,6 +402,9 @@ return { list = { [0x3D] = { squeeze = .85, yoffset = .0975 } } }, { + -- Do we need these in the future? + -- Maybe a more general setup? + -- Maybe "reset llx" tweak = "kernpairs", list = { [mathematics.tweaks.subsets.acenorsuvxz] = { @@ -565,27 +439,23 @@ return { [0x1D45F] = { -- r [0x1D460] = -.1, -- s }, --- [mathematics.tweaks.subsets.acenorsuvxz] = { --- [mathematics.tweaks.subsets.acenorsuvxz] = 2, --- }, --- [0x1D452] = { --- [0x1D453] = -.05, --- [0x1D465] = -.3, --- }, --- [0x1D453] = { --- [0x1D453] = -.1, --- [0x1D454] = -.1, --- [0x1D465] = -.3, --- }, --- [0x1D465] = { --- [0x1D465] = .1, --- } - } + -- [mathematics.tweaks.subsets.acenorsuvxz] = { + -- [mathematics.tweaks.subsets.acenorsuvxz] = 2, + -- }, + -- [0x1D452] = { + -- [0x1D453] = -.05, + -- [0x1D465] = -.3, + -- }, + -- [0x1D453] = { + -- [0x1D453] = -.1, + -- [0x1D454] = -.1, + -- [0x1D465] = -.3, + -- }, + -- [0x1D465] = { + -- [0x1D465] = .1, + -- } + } }, - -- { - -- tweak = "fixanchors", - -- factor = .5, - -- }, { tweak = "addbars", advance = 0.275, @@ -619,3 +489,124 @@ return { -- \alpha is looking like an italic a. The one from Dejavu could perhaps be an alternative? -- No hvariants in 772 + + + + +-- From the dimension tweak: +-- [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma +-- [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta +-- [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta +-- [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda +-- [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi +-- [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi +-- [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma +-- [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon +-- [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi +-- [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi +-- [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega +-- [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial +-- [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G +-- [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O +-- [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q +-- -- [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a +-- -- [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b +-- -- [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c +-- -- [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d +-- -- [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e +-- -- [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f +-- -- [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g +-- -- [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h +-- -- [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i +-- -- [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j +-- -- [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k +-- -- [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l +-- -- [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m +-- -- [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n +-- -- [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o +-- -- [0x1D45D] = { width = 1.05, italic = 0 }, -- p +-- -- [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q +-- -- [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r +-- -- [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s +-- -- [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t +-- -- [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u +-- -- [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v +-- -- [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w +-- -- [0x1D465] = { width = 1.175, italic = 0, anchor = 0.9 }, -- x +-- -- [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y +-- -- [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z +-- [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha +-- [0x1D6FD] = { width = 0.9, italic = 0, anchor = 1.05 }, -- \beta +-- [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma +-- [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta +-- [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon +-- [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon +-- [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta +-- [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta +-- [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta +-- [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta +-- [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota +-- [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa +-- [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda +-- [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu +-- [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu +-- [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi +-- [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron +-- [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi +-- [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi +-- [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho +-- [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho +-- [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma +-- [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma +-- [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau +-- [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon +-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi +-- [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi +-- [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi +-- [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi +-- [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega +-- -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa +-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi +-- [0x1D41B] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b +-- [0x1D41D] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d +-- [0x1D41F] = { width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f +-- [0x1D420] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g +-- [0x1D421] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h +-- [0x1D424] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k +-- [0x1D425] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l +-- [0x1D42A] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q +-- [0x1D42B] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r +-- [0x1D42C] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s +-- -- [0x1D482] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a +-- -- [0x1D483] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b +-- -- [0x1D484] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c +-- -- [0x1D485] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d +-- -- [0x1D486] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e +-- -- [0x1D487] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f +-- -- [0x1D488] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g +-- -- [0x1D489] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h +-- -- [0x1D48A] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i +-- -- [0x1D48B] = { width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j +-- -- [0x1D48C] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k +-- -- [0x1D48D] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l +-- -- [0x1D492] = { width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q +-- -- [0x1D493] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r +-- -- [0x1D497] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v +-- -- [0x1D499] = { width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x +-- -- [0x1D49A] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y +-- -- [0x1D49B] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z +-- [0x1D743] = { width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi +-- -- [0x1D435] = { anchor = 1.05 }, -- italic B +-- -- [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C +-- -- [0x1D437] = { anchor = 1.25 }, -- italic D +-- -- [0x1D43A] = { anchor = 0.8 }, -- italic G +-- -- [0x1D442] = { anchor = 0.85 }, -- italic O +-- -- [0x1D443] = { anchor = 1.1 }, -- italic P +-- -- [0x1D444] = { anchor = 0.85 }, -- italic Q +-- -- [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R +-- -- [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S +-- -- [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T +-- -- [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U +-- -- [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V +-- -- [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W +-- -- [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg index 2207c0645..8f9cf73b9 100644 --- a/tex/context/fonts/mkiv/cambria-math.lfg +++ b/tex/context/fonts/mkiv/cambria-math.lfg @@ -46,11 +46,14 @@ end -- local integral_top = { topright = 0.05 } -- local integral_bottom = { bottomright = -0.30 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "cambria-math", version = "1.00", comment = "Goodies that complement cambria.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -72,38 +75,16 @@ return { tweaks = { aftercopying = { { - tweak = "dimensions", - list = { - - -- [0x00060] = { yoffset = -0.1 }, -- grave - -- [0x000B4] = { yoffset = -0.1 }, -- acute - -- [0x002C6] = { yoffset = -0.1 }, -- hat - -- [0x002DC] = { yoffset = -0.1 }, -- tilde - -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.15 }, -- breve - -- [0x002D9] = { yoffset = -0.15 }, -- dot - -- [0x000A8] = { yoffset = -0.1 }, -- ddot - -- [0x020DB] = { yoffset = -0.05 }, -- dddot - -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.05 }, -- vec - - -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave - -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute - -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat - -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde - -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar - -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve - -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot - -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot - -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering - -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck - - [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J - [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f - -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f - - }, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.97 }, + presets.mathrsfscript { rscale = 0.97 }, + presets.mathxitsarabic { rscale = 0.95 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true }, { tweak = "kerns", @@ -264,3 +245,40 @@ return { kernpairs = kernpairs, }, } + + +-- Old + -- { + -- tweak = "dimensions", + -- list = { + + -- -- [0x00060] = { yoffset = -0.1 }, -- grave + -- -- [0x000B4] = { yoffset = -0.1 }, -- acute + -- -- [0x002C6] = { yoffset = -0.1 }, -- hat + -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde + -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.15 }, -- breve + -- -- [0x002D9] = { yoffset = -0.15 }, -- dot + -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.05 }, -- dddot + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.05 }, -- vec + + -- -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat + -- -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar + -- -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot + -- -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot + -- -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering + -- -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck + + -- [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J + -- [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f + -- -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f + + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/common-math.lfg b/tex/context/fonts/mkiv/common-math.lfg new file mode 100644 index 000000000..d97511e76 --- /dev/null +++ b/tex/context/fonts/mkiv/common-math.lfg @@ -0,0 +1,106 @@ +return { + name = "common-math", + version = "1.00", + comment = "Goodies that complement pagella.", + author = "Hans Hagen & Mikael Sundqvist", + copyright = "ConTeXt development team", + mathematics = { + tweaks = { + presets = { + matheulercalligraphic = function(parameters) + return { + tweak = "replacealphabets", + feature = "matheulercalligraphic", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + filename = "euler.otf", + rscale = parameters.rscale, + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + filename = "euler.otf", + rscale = parameters.rscale, + }, + }, + } + end, + mathrsfscript = function(parameters) + return { + tweak = "replacealphabets", + feature = "mathrsfscript", + list = { + { + source = "uppercasescript", + target = "uppercasescript", + filename = "ralphsmithsformalscript-companion.otf", + rscale = parameters.rscale, + feature = "ss01", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldscript", + filename = "ralphsmithsformalscript-companion.otf", + rscale = parameters.rscale, + feature = "ss01", + }, + }, + } + end, + mathxitsarabic = function(parameters) + return { + tweak = "replacealphabets", + feature = "mathxitsarabic", + list = { + { + source = "arabicmathematicalalphabeticsymbols", + target = "arabicmathematicalalphabeticsymbols", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + { + source = "digitsarabicindic", + target = "digitsarabicindic", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + { + source = "digitsextendedarabicindic", + target = "digitsextendedarabicindic", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + }, + } + end, + moveitalics = function(parameters) + return { + tweak = "moveitalics", + correct = parameters.correct, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } + } + end, + }, + }, + }, +} diff --git a/tex/context/fonts/mkiv/concrete-math.lfg b/tex/context/fonts/mkiv/concrete-math.lfg index ff55d353d..fd2d5caad 100644 --- a/tex/context/fonts/mkiv/concrete-math.lfg +++ b/tex/context/fonts/mkiv/concrete-math.lfg @@ -1,10 +1,13 @@ -- this file might go away and is for experiments only +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "concrete-math", version = "1.00", comment = "Goodies that complement concrete math.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -16,20 +19,21 @@ return { }, tweaks = { aftercopying = { - -- { - -- tweak = "fixprimes", - -- factor = 0.9, - -- }, { - tweak = "kerns", - list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, + tweak = "fixprimes", + factor = 0.9, }, + -- there are circular variants +-- { +-- tweak = "addmirrors", +-- }, +-- presets.matheulercalligraphic { rscale = 0.97 }, +-- presets.mathrsfscript { rscale = 0.95 }, + { + tweak = "kerns", + list = { + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + }, }, { tweak = "fixellipses", @@ -44,10 +48,12 @@ return { { tweak = "addequals", }, - - + { + tweak = "setoptions", + set = { "ignorekerndimensions" } }, }, + }, bigslots = { 1, 2, 3, 4 }, diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg index c2e909aef..d18082b85 100644 --- a/tex/context/fonts/mkiv/dejavu-math.lfg +++ b/tex/context/fonts/mkiv/dejavu-math.lfg @@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.25 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "dejavu-math", @@ -27,78 +27,55 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, FractionRuleThickness = 60, - AccentTopShiftUp = -25, - FlattenedAccentTopShiftUp = -25, - -- AccentExtendMargin = 50, + AccentTopShiftUp = -25, + FlattenedAccentTopShiftUp = -25, + -- AccentExtendMargin = 50, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 62, - RadicalRuleThickness = 46, -- 52 in font + RadicalRuleThickness = 46, -- 52 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1333 in font - -- PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + -- PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { { tweak = "version", expected = "Version 1.106", + }, + { + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 1, }, { - tweak = "dimensions", - list = { - [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a - -- [0x1D449] = { xoffset = 0, width = .8, italic = .2 }, - -- [0x1D44A] = { xoffset = 0, width = .8, italic = .2 }, - ["0x1D449:0x1D44A"] = { xoffset = 0, width = .8, italic = .2 }, - } + tweak = "addmirrors", }, + presets.matheulercalligraphic { rscale = 1.02 }, + presets.mathrsfscript { rscale = 1.02 }, + presets.mathxitsarabic { rscale = 1.05 }, + presets.moveitalics { correct = true }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -125,9 +102,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -136,20 +113,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -157,12 +132,10 @@ return { { tweak = "copyaccents", }, - -- So far for the accents. - { tweak = "fixprimes", - -- scale = 0.9, - -- smaller = true, + -- scale = 0.9, + -- smaller = true, factor = 0.8, }, { @@ -191,7 +164,7 @@ return { tweak = "addequals", }, { - tweak = "addfourier", + tweak = "addfourier", variant = 1, }, }, @@ -209,3 +182,16 @@ return { kerns = kerns, }, } + + + +-- Old + -- { + -- tweak = "dimensions", + -- list = { + -- [0x1D44E] = { width = 1, italic = 0, anchor = 0.9 }, -- a + -- -- [0x1D449] = { width = .8, italic = .2 }, + -- -- [0x1D44A] = { width = .8, italic = .2 }, + -- ["0x1D449:0x1D44A"] = { width = .8, italic = .2 }, + -- } + -- }, diff --git a/tex/context/fonts/mkiv/erewhon-math.lfg b/tex/context/fonts/mkiv/erewhon-math.lfg index 71ff64648..fe8bb7108 100644 --- a/tex/context/fonts/mkiv/erewhon-math.lfg +++ b/tex/context/fonts/mkiv/erewhon-math.lfg @@ -1,10 +1,13 @@ -- This file might go away and is for experiments only. +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "erewhon-math", version = "1.00", comment = "Goodies that complement erewhon math.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -21,60 +24,36 @@ return { }, tweaks = { aftercopying = { - { - tweak = "kerns", - list = { - [0x2F] = { - topleft = -0.15, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.15, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - }, - }, { tweak = "fixprimes", factor = 0.9, scale = 0.9, }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.93 }, + presets.mathrsfscript { rscale = 0.93 }, + presets.mathxitsarabic { rscale = 0.90 }, + { + tweak = "kerns", + list = { + [0x002F] = { topleft = -0.15, bottomright = -0.15 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + }, + }, { tweak = "checkspacing", }, @@ -93,6 +72,10 @@ return { { tweak = "addequals", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { diff --git a/tex/context/fonts/mkiv/garamond-math.lfg b/tex/context/fonts/mkiv/garamond-math.lfg index 7c1e7ab22..a0a0700f5 100644 --- a/tex/context/fonts/mkiv/garamond-math.lfg +++ b/tex/context/fonts/mkiv/garamond-math.lfg @@ -1,3 +1,6 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "ebgaramond", version = "1.00", @@ -11,17 +14,17 @@ return { FractionRuleThickness = 60, OverbarRuleThickness = 60, UnderbarRuleThickness = 60, - AccentTopShiftUp = -75, - FlattenedAccentTopShiftUp = -75, - -- AccentExtendMargin = 50, + AccentTopShiftUp = -75, + FlattenedAccentTopShiftUp = -75, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 75, - -- RadicalRuleThickness = 50, -- 50 in font + -- RadicalRuleThickness = 50, -- 50 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 85, -- 50 default - -- PrimeRaiseComposedPercent = 25, -- 25 default + PrimeRaisePercent = 85, -- 50 default + -- PrimeRaiseComposedPercent = 25, -- 25 default }, tweaks = { aftercopying = { @@ -29,123 +32,118 @@ return { tweak = "version", expected = "Version 2019-08-16", }, + { + tweak = "fixprimes", + scale = 0.95, + -- smaller = true, + factor = 0.95, + -- fake = 0.75, + }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.80 }, + { + tweak = "oldstylemath", + factor = 0, + }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, + { + tweak = "topanchors", + list = { + [0x1D453] = 0.88, -- italic f + }, + }, + { + tweak = "limits", + factor = 1.5, + list = mathematics.tweaks.subsets.integrals, + }, { tweak = "dimensions", list = { - -- offset width italic - -- -- [0x00060] = { yoffset = -0.1 }, -- grave - -- -- [0x000B4] = { yoffset = -0.1 }, -- acute - -- [0x002C6] = { yoffset = -0.1 }, -- hat - -- [0x002DC] = { yoffset = -0.1 }, -- tilde - -- -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.15 }, -- breve - -- [0x002D9] = { yoffset = -0.15 }, -- dot - -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot - -- [0x020DB] = { yoffset = -0.115 }, -- dddot - -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.1 }, -- vec - - -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave - -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute - -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat - -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde - -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar - -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve - -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot - -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot - -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering - -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck - - -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat - - [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma - -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult! - [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi - [0x02113] = { xoffset = 0, width = 1, italic = 0.075 }, -- \ell - [0x1D436] = { xoffset = 0, width = 1, italic = 0.05 }, -- C - [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J - [0x1D44B] = { xoffset = 0, width = 1, italic = 0.05 }, -- X - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- b - [0x1D450] = { xoffset = 0, width = 1.1, italic = 0 }, -- c - [0x1D451] = { xoffset = 0, width = 1, italic = 0.05, 0.8 }, -- d - [0x1D452] = { xoffset = 0, width = 1.1, italic = 0.05 }, -- e - [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, 1.2 }, -- f - [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g - [0x0210E] = { xoffset = 0, width = 1.1, italic = 0, 1.4 }, -- h - [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j - [0x1D458] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- k - [0x1D459] = { xoffset = 0, width = 1, italic = 0.05 }, -- l - [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, 1.4 }, -- p - [0x1D45E] = { xoffset = 0, width = 1.05, italic = 0 }, -- q - [0x1D45F] = { xoffset = 0, width = 1.05, italic = 0 }, -- r - [0x1D461] = { xoffset = 0, width = 1, italic = 0.1 }, -- t - [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x - [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, 1.35 }, -- y - [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta - [0x1D6FE] = { xoffset = 0, width = 1.05, italic = 0 }, -- \gamma - [0x1D6FF] = { xoffset = 0, width = 1, italic = 0.1 }, -- \delta - [0x1D716] = { xoffset = 0, width = 1.1, italic = 0 }, -- \epsilon - [0x1D700] = { xoffset = 0, width = 1.1, italic = 0 }, -- \varepsilon - [0x1D701] = { xoffset = 0, width = 1, italic = 0.15 }, -- \zeta - [0x1D703] = { xoffset = 0, width = 1, italic = 0.1 }, -- \theta - [0x1D705] = { xoffset = 0, width = 1, italic = 0.1 }, -- \kappa - [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda - [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu - [0x1D708] = { xoffset = 0, width = 1.1, italic = 0 }, -- \nu - [0x1D709] = { xoffset = 0, width = 1.1, italic = 0 }, -- \xi - [0x1D70B] = { xoffset = 0, width = 1.05, italic = 0 }, -- \pi - [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho - [0x1D70E] = { xoffset = 0, width = 1, italic = 0.1 }, -- \sigma - [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau - [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi - [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi + -- for older entries, see bottom of file + [0x1D453] = { width = 1.1, }, -- italic f }, }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants -- angle + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + }, + }, + { + -- to be considered + -- tweak = "kernpairs", + list = { + [mathematics.tweaks.subsets.gjqy] = { + [mathematics.tweaks.subsets.f] = -.1, + [0x1D70C] = -.1, -- italic \rho + }, + [mathematics.tweaks.subsets.bhklt] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.d] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.f] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + [mathematics.tweaks.subsets.gjqy] = -.25, + [mathematics.tweaks.subsets.bhklt] = -.1, + [mathematics.tweaks.subsets.d] = -.25, + [mathematics.tweaks.subsets.i] = -.25, + [mathematics.tweaks.subsets.mw] = -.25, + [mathematics.tweaks.subsets.p] = -.25, + [mathematics.tweaks.subsets.acenorsuvxz] = -.25, + [mathematics.tweaks.subsets.dotless] = -.25, + }, + [mathematics.tweaks.subsets.i] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.mw] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.p] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.acenorsuvxz] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.dotless] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + -- "uppercaseitalic" = { + -- [mathematics.tweaks.subsets.f] = -.25, + -- [0x1D70C] = -.25, -- italic \rho + -- }, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -155,16 +153,16 @@ return { tweak = "extendaccents", }, { - tweak = "fixaccents", + tweak = "fixanchors", }, -- First we set the dimensions of the initial accent which started out as zero but we want -- a proper width. { tweak = "dimensions", list = { - -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -195,13 +193,37 @@ return { tweak = "copyaccents", }, -- So far for the accents. - { - tweak = "fixprimes", - scale = 0.9, - -- smaller = true, - factor = 0.9, - -- fake = 0.75, + -- For non-italic alphabets we remove italic correction. + -- This one is/will become obsolete + -- tweak = "wipeitalics", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + -- "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasemonospace", + -- "lowercasenormal", + "lowercasesansserifbold", + -- "lowercasesansserifnormal", + -- "lowercasegreeknormal", + -- "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", -- some remain + }, }, { tweak = "checkspacing", @@ -229,6 +251,9 @@ return { tweak = "addfourier", variant = 1, }, + { + tweak = "diagnose", + }, }, }, alternates = { @@ -248,3 +273,81 @@ return { } + + +-- Some old entries: + + -- { + -- tweak = "dimensions", + -- list = { + -- -- offset width italic + -- -- -- [0x00060] = { yoffset = -0.1 }, -- grave + -- -- -- [0x000B4] = { yoffset = -0.1 }, -- acute + -- -- [0x002C6] = { yoffset = -0.1 }, -- hat + -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde + -- -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.15 }, -- breve + -- -- [0x002D9] = { yoffset = -0.15 }, -- dot + -- -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.115 }, -- dddot + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.1 }, -- vec + + -- -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat + -- -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar + -- -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot + -- -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot + -- -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering + -- -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck + + -- -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat + + -- [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma + -- -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult! + -- [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi + -- [0x02113] = { width = 1, italic = 0.075 }, -- \ell + -- [0x1D436] = { width = 1, italic = 0.05 }, -- C + -- [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J + -- [0x1D44B] = { width = 1, italic = 0.05 }, -- X + -- [0x1D44F] = { width = 1, italic = 0, }, -- b + -- [0x1D450] = { width = 1.1, italic = 0 }, -- c + -- [0x1D451] = { width = 1, italic = 0.05, }, -- d + -- [0x1D452] = { width = 1.1, italic = 0.05 }, -- e + -- [0x00066] = { width = 1.4, italic = 0.0, }, -- f + -- [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, }, -- f + -- [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g + -- [0x0210E] = { width = 1.1, italic = 0, }, -- h + -- [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j + -- [0x1D458] = { width = 1, italic = 0, }, -- k + -- [0x1D459] = { width = 1, italic = 0.05 }, -- l + -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, }, -- p + -- [0x1D45E] = { width = 1.05, italic = 0 }, -- q + -- [0x1D45F] = { width = 1.05, italic = 0 }, -- r + -- [0x1D461] = { width = 1, italic = 0.1 }, -- t + -- [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x + -- [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, }, -- y + -- [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta + -- [0x1D6FE] = { width = 1.05, italic = 0 }, -- \gamma + -- [0x1D6FF] = { width = 1, italic = 0.1 }, -- \delta + -- [0x1D716] = { width = 1.1, italic = 0 }, -- \epsilon + -- [0x1D700] = { width = 1.1, italic = 0 }, -- \varepsilon + -- [0x1D701] = { width = 1, italic = 0.15 }, -- \zeta + -- [0x1D703] = { width = 1, italic = 0.1 }, -- \theta + -- [0x1D705] = { width = 1, italic = 0.1 }, -- \kappa + -- [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda + -- [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu + -- [0x1D708] = { width = 1.1, italic = 0 }, -- \nu + -- [0x1D709] = { width = 1.1, italic = 0 }, -- \xi + -- [0x1D70B] = { width = 1.05, italic = 0 }, -- \pi + -- [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho + -- [0x1D70E] = { width = 1, italic = 0.1 }, -- \sigma + -- [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau + -- [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi + -- [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/generic-math.lfg b/tex/context/fonts/mkiv/generic-math.lfg index 490ad1416..214e479e0 100644 --- a/tex/context/fonts/mkiv/generic-math.lfg +++ b/tex/context/fonts/mkiv/generic-math.lfg @@ -102,6 +102,17 @@ return { -- [0x21CC] = false, } }, +-- { +-- tweak = "limits", +-- factor = 1.5, +-- list = { +-- [0x0222B] = true, +-- [0x0222C] = 1.45, +-- [0x0222D] = true, +-- [0x0222E] = true, +-- [0x0222F] = true, +-- }, +-- }, { -- For upright alphabets, we unset the anchor. -- This means that accents are placed @@ -171,6 +182,18 @@ return { "uppercasesanserifnormal", }, }, + -- { + -- comment = "example" + -- tweak = "action", + -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters) + -- list = fixes, -- one of the parameters + -- }, + -- { + -- comment = "example" + -- tweak = "action", + -- action = mathematics.tweaks.fixdimensions, + -- list = fixes, -- one of the parameters + -- }, { -- This one fakes margins to get larger/smaller accents -- with for example \widetilde. @@ -179,6 +202,10 @@ return { list = { }, }, + -- { + -- tweak = "fixanchors", + -- factor = .5, + -- }, { tweak = "addrules", }, diff --git a/tex/context/fonts/mkiv/kpfonts-math.lfg b/tex/context/fonts/mkiv/kpfonts-math.lfg index c0b019f79..ed50baf3b 100644 --- a/tex/context/fonts/mkiv/kpfonts-math.lfg +++ b/tex/context/fonts/mkiv/kpfonts-math.lfg @@ -1,3 +1,6 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "kpfonts-math", version = "1.00", @@ -11,12 +14,12 @@ return { -- AccentBaseHeight = 0, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 70, - -- RadicalRuleThickness = 50, -- 50 in font + -- RadicalRuleThickness = 50, -- 50 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1500 in font (only one) - PrimeRaisePercent = 25, -- 50 default - -- PrimeRaiseComposedPercent = 25, -- 25 default + PrimeRaisePercent = 25, -- 50 default + -- PrimeRaiseComposedPercent = 25, -- 25 default }, tweaks = { aftercopying = { @@ -27,51 +30,22 @@ return { { tweak = "dimensions", list = { - [0x2A3F] = { - factor = 0.84625, - } + [0x2A3F] = { factor = 0.84625 } }, }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.25, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.25, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.05, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.05, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.25 }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.25 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.05 }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.05 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants }, }, @@ -83,6 +57,34 @@ return { -- fake = 0.75, -- replace multiples with this width proportion -- -- keep = true, -- keep the text size prime (aka minute) -- }, + { + tweak = "addmirrors", + }, + { + -- kpfonts have calligraphic at private slots + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = { first = 0x0E7E1, last = 0x0E7FA }, + target = "uppercasecalligraphic", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + }, + { + source = { first = 0x0E701, last = 0x0E71A }, + target = "uppercaseboldcalligraphic", + }, + }, + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.92 }, { tweak = "checkspacing", }, @@ -96,8 +98,9 @@ return { tweak = "addrules", }, { + -- This will be fixed. Check if new version comes out! tweak = "addbars", - advance = 0.025, + advance = 0.5, }, { tweak = "addactuarian", @@ -105,6 +108,10 @@ return { { tweak = "addequals", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, alternates = { diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg index 77d0161e3..ea6a27cad 100644 --- a/tex/context/fonts/mkiv/libertinus-math.lfg +++ b/tex/context/fonts/mkiv/libertinus-math.lfg @@ -4,6 +4,11 @@ -- fix-feature or just disable ssty, but we have to revert to a runtime fix. Lucky me that I didn't -- remove that hardly needed 'tweaks' mechanism yet. +-- The italic x has a rectangular piece in its eye (redundant point) + +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "libertinus-math", version = "1.00", @@ -20,17 +25,17 @@ return { UnderbarRuleThickness = 50, AccentTopShiftUp = -35, FlattenedAccentTopShiftUp = -35, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentTopShiftUp = 0, AccentBaseDepth = 10, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -425, - -- RadicalRuleThickness = 40, -- 40 in font + -- RadicalRuleThickness = 40, -- 40 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1250 in font (only one) - PrimeRaisePercent = 70, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 70, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -40,85 +45,56 @@ return { expected = "Version 7.040", }, { - tweak = "dimensions", - list = { - -- [0x00060] = { yoffset = -0.075 }, -- grave - -- [0x000B4] = { yoffset = -0.075 }, -- acute - -- [0x002C6] = { yoffset = -0.075 }, -- hat - -- [0x002DC] = { yoffset = -0.075 }, -- tilde - -- -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.075 }, -- breve - -- [0x002D9] = { yoffset = -0.05 }, -- dot - -- [0x000A8] = { yoffset = -0.02 }, -- ddot - -- [0x020DB] = { yoffset = -0.02 }, -- dddot - -- [0x002DA] = { yoffset = -0.1 }, -- ring - -- -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.1 }, -- vec - - -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave - -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute - -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat - -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde - -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar - -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve - -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot - -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot - -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering - -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck - - -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8) - -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8) - -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8) - -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8) - }, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.92 }, + presets.mathrsfscript { rscale = 0.92 }, + presets.mathxitsarabic { rscale = 0.85 }, + { + tweak = "simplifykerns", + }, + { + -- When it makes sense we get rid of italics. + tweak = "moveitalics", + correct = true, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } }, + { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.15, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.15, - }, - - ["0x7D.parts.top"] = { - topright = -0.2, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.2, - }, -- right brace bottom - -- ["0x7D.variants.*"] = { - -- topright = -0.05, - -- bottomright = -0.05, - -- }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.15, bottomright = -0.15 }, + ["0x7D.parts.top"] = { topright = -0.2, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.2 }, -- right brace bottom + -- ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, }, }, @@ -148,19 +124,17 @@ return { tweak = "dimensions", list = { -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -169,8 +143,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { tweak = "fixprimes", scale = 0.9, @@ -203,6 +175,10 @@ return { tweak = "addfourier", variant = 1, }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { @@ -210,3 +186,40 @@ return { }, }, } + +-- Old values + -- { + -- tweak = "dimensions", + -- list = { + -- -- [0x00060] = { yoffset = -0.075 }, -- grave + -- -- [0x000B4] = { yoffset = -0.075 }, -- acute + -- -- [0x002C6] = { yoffset = -0.075 }, -- hat + -- -- [0x002DC] = { yoffset = -0.075 }, -- tilde + -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.075 }, -- breve + -- -- [0x002D9] = { yoffset = -0.05 }, -- dot + -- -- [0x000A8] = { yoffset = -0.02 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.02 }, -- dddot + -- -- [0x002DA] = { yoffset = -0.1 }, -- ring + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.1 }, -- vec + + -- -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat + -- -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar + -- -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot + -- -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot + -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering + -- -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck + + -- -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8) + -- -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8) + -- -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8) + -- -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8) + -- }, + -- }, + diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg index 1d81e0b77..355b583d1 100644 --- a/tex/context/fonts/mkiv/lm.lfg +++ b/tex/context/fonts/mkiv/lm.lfg @@ -1,6 +1,9 @@ -- In order to be able to use beta math fonts, we use our own file name and -- always remap. +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + local dimensions, kerns if CONTEXTLMTXMODE == 0 then local kern_150 = { bottomright = { { kern = -150 } } } @@ -76,8 +79,14 @@ return { DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 15, -- 25 default + PrimeRaisePercent = 60, + PrimeRaiseComposedPercent = 15, + -- SubSuperscriptGapMin = 160, -- 160 in font + SuperscriptBaselineDropMax = 250, -- 250 in font + -- SuperscriptBottomMaxWithSubscript = 344, -- 344 in font + -- SuperscriptBottomMin = 108, -- 108 in font + SuperscriptShiftUp = 363, -- 363 in font + SuperscriptShiftUpCramped = 89, -- 289 in font }, tweaks = { aftercopying = { @@ -85,6 +94,13 @@ return { tweak = "version", expected = "Version 1.958", }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.88 }, + presets.moveitalics { correct = true }, { tweak = "dimensions", list = { @@ -447,7 +463,7 @@ return { -- "lowercasedoublestruck", -- "lowercasefraktur", "lowercasemonospace", - "lowercasenormal", + -- "lowercasenormal", -- "lowercasesansserifbold", -- "lowercasesansserifnormal", -- "lowercasegreeknormal", @@ -550,6 +566,9 @@ return { { tweak = "fixradicals", }, + { + tweak = "addprivates", + }, { tweak = "addscripts", }, diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg index 372d8cce2..97cf97ab1 100644 --- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg +++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg @@ -1,3 +1,5 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets local dimensions, kerns if CONTEXTLMTXMODE == 0 then -- local kern_250 = { bottomright = { { kern = -250 } }, force = true } @@ -42,75 +44,83 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, FractionRuleThickness = 55, - -- AccentTopShiftUp = 0, - -- FlattenedAccentTopShiftUp = 0, - -- AccentExtendMargin = 50, + -- AccentTopShiftUp = 0, + -- FlattenedAccentTopShiftUp = 0, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 650, AccentBaseDepth = 150, RadicalDegreeBottomRaisePercent = 50, RadicalKernAfterDegree = -600, - -- RadicalRuleThickness = 35, -- 40 in font (46 in demi) + -- RadicalRuleThickness = 35, -- 40 in font (46 in demi) DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 50, -- 25 default + PrimeRaisePercent = 60, -- 50 default + PrimeRaiseComposedPercent = 50, -- 25 default +-- AxisHeight = 325, }, tweaks = { aftercopying = { { tweak = "version", - expected = "Version 1.802", + expected = "Version 1.803", }, - -- { - -- tweak = "substitutes", - -- list = { - -- [0x2264] = "ss03", - -- [0x2265] = "ss03", - -- } - -- }, - -- \definefontfeature[mathlucida][copymathscripts=yes] - -- \definefontfeature[mathlucida][copymathscripts=yes,ss04=yes] - -- 0xFEOO should be chancery style, if present { - tweak = "variants", - kind = "script", - feature = "ss04",-- this changes to chancery style for lucida - -- feature = false, -- use the saved ones (see typescript) - selector = 0xFE00, + tweak = "fixoldschool", + version = "Version 1.802", }, - -- 0xFEO1 should be roundhand style, if present +-- { +-- tweak = "showinfo", +-- version = "Version 1.803", +-- }, { - tweak = "variants", - kind = "script", - selector = 0xFE01, + tweak = "addmirrors", + }, + presets.mathxitsarabic { + rscale = 1.05 + }, + { + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + feature = "ss04", + }, + }, + }, + { + tweak = "dimensions", + version = "Version 1.802", + list = { + -- The < and > are slightly too small. We scale them by 867/795 + ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, + ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, + -- The = is too big if in ss03. We scale it by 795/867 (not working like this) + -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 }, + }, }, { tweak = "dimensions", list = { - -- these we fix here + -- these we fix here. Remove when we have new version of Lucida ["0x23DC.parts.1"] = { xoffset = -0.075, height = .4, yoffset = -0.6 }, ["0x23DC.parts.2"] = { height = .4, yoffset = -0.6 }, ["0x23DC.parts.3"] = { xoffset = 0.075, height = .4, yoffset = -0.6 }, ["0x23DD.parts.1"] = { xoffset = -0.075, depth = .8, yoffset = 0.2 }, ["0x23DD.parts.2"] = { depth = .8, yoffset = 0.2 }, ["0x23DD.parts.3"] = { xoffset = 0.075, depth = .8, yoffset = 0.2 }, - -- The < and > are slightly too small. We scale them by 867/795 - ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, - ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, - -- The = is too big if in ss03. We scale it by 795/867 (not working like this) - -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 }, -- these are done later using the AccentBase* parameters -- [0x23DC] = { height = .2, yoffset = -0.8 }, -- [0x23DD] = { depth = .6, yoffset = 0.4 }, - + -- -- ["0x7C.variants.1"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.2"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.3"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.4"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- going zero makes them be ignored - ["0x7C.variants.3"]={ squeeze = 0.90, height = 0.90, depth = 0.90 }, - ["0x7C.variants.4"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, + ["0x7C.variants.3"] = { squeeze = 0.90, height = 0.90, depth = 0.90 }, + ["0x7C.variants.4"] = { squeeze = 0.80, height = 0.80, depth = 0.80 }, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -127,10 +137,10 @@ return { { tweak = "dimensions", list = { - -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve - -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck + -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, -- Then we deal with all offsets and heights in one go. So we treat the initial accent @@ -138,20 +148,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -173,50 +181,20 @@ return { { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.2, bottomright = -0.2 }, - ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - [0x27EB] = { topright = -0.2, bottomright = -0.2 }, - ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15 }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25 }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.2, bottomright = -0.2 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + [0x27EB] = { topright = -0.2, bottomright = -0.2 }, + ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -254,7 +232,7 @@ return { }, { tweak = "addfourier", - -- scale = 1.5, + -- scale = 1.5, variant = 1, }, { @@ -269,9 +247,9 @@ return { [0x2192] = false, [0x219E] = false, [0x21A0] = false, --- [0x21A6] = false, --- [0x21CB] = false, --- [0x21CC] = false, + -- [0x21A6] = false, + -- [0x21CB] = false, + -- [0x21CC] = false, } }, }, diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg index 162b9f628..5216e1289 100644 --- a/tex/context/fonts/mkiv/minion-math.lfg +++ b/tex/context/fonts/mkiv/minion-math.lfg @@ -14,6 +14,9 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "minion-math", version = "1.00", @@ -37,49 +40,51 @@ return { parameters = { NoLimitSupFactor = 0, NoLimitSubFactor = 900, - -- AccentTopShiftUp = -15, - -- FlattenedAccentTopShiftUp = -15, - -- -- AccentExtendMargin = 50, - -- AccentBaseDepth = 50, - -- RadicalDegreeBottomRaisePercent = 60, - -- RadicalRuleThickness = 66, -- 72 in font - -- DelimiterPercent = 90, - -- DelimiterShortfall = 400, - -- DisplayOperatorMinHeight = 1900, -- 1250 in font - -- -- AccentSuperscriptDrop = 100, - -- -- AccentSuperscriptPercent = 20, - PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 25, -- 25 default - -- PrimeShiftUp = 0, - -- PrimeBaselineDropMax = 0, - RadicalKernAfterExtensible = 100, -- 0 default - RadicalKernBeforeExtensible = 100, -- 0 default + -- AccentTopShiftUp = -15, + -- FlattenedAccentTopShiftUp = -15, + -- AccentExtendMargin = 50, + -- AccentBaseDepth = 50, + -- RadicalDegreeBottomRaisePercent = 60, + -- RadicalRuleThickness = 66, -- 72 in font + -- DelimiterPercent = 90, + -- DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1900, -- 1250 in font + -- AccentSuperscriptDrop = 100, + -- AccentSuperscriptPercent = 20, + PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 25, -- 25 default + -- PrimeShiftUp = 0, + -- PrimeBaselineDropMax = 0, + RadicalKernAfterExtensible = 100, -- 0 default + RadicalKernBeforeExtensible = 100, -- 0 default }, tweaks = { aftercopying = { -- { -- tweak = "version", - -- expected = "unknown", + -- expected = "unknown", -- todo -- }, { - tweak = "dimensions", - -- smaller = true, - list = dimensions, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.88 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, + { -- Check! + tweak = "replacealphabets", + list = { + { + source = "uppercasecalligraphic", + target = "uppercasescript", + }, + }, }, - -- { - -- tweak = "variants", - -- kind = "script", - -- feature = "s_s_0",-- this changes to chancery style for lucida - -- -- feature = false, -- use the saved ones (see typescript) - -- selector = 0xFE00, - -- }, - -- -- 0xFEO1 should be roundhand style, if present - -- { - -- tweak = "variants", - -- kind = "script", - -- selector = 0xFE01, - -- }, - { tweak = "extendaccents", }, @@ -94,18 +99,18 @@ return { factor = 0.95, scale = 0.9, }, - -- { - -- tweak = "checkspacing", - -- }, - -- { - -- tweak = "addscripts", - -- }, - -- { - -- tweak = "accentdimensions", - -- }, - -- { - -- tweak = "addrules", - -- }, + -- { + -- tweak = "checkspacing", + -- }, + -- { + -- tweak = "addscripts", + -- }, + -- { + -- tweak = "accentdimensions", + -- }, + -- { + -- tweak = "addrules", + -- }, { tweak = "addfourier", variant = 1, diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg index 021bd2b7f..59eafeaaf 100644 --- a/tex/context/fonts/mkiv/pagella-math.lfg +++ b/tex/context/fonts/mkiv/pagella-math.lfg @@ -29,11 +29,13 @@ end -- When set this will bypass the italic correction hackery! +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + local integral_variants = { bottomright = -0.20 } ----- integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.20 } - return { name = "pagella-math", version = "1.00", @@ -45,20 +47,22 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, AccentTopShiftUp = 10, - FlattenedAccentTopShiftUp = 10, -- now also set, the wide ones (so we can move in one go) - -- AccentExtendMargin = 50, + FlattenedAccentTopShiftUp = 10, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 80, -- SpaceAfterScript = 0, -- SpaceAfterScript = 30, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -500, - RadicalRuleThickness = 54, -- 60 in font + RadicalRuleThickness = 54, -- 60 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1500 in font - PrimeRaisePercent = 75, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default + -- RadicalKernAfterExtensible = 0, -- 0 default + -- RadicalKernBeforeExtensible = 0, -- 0 default }, tweaks = { aftercopying = { @@ -66,47 +70,58 @@ return { tweak = "version", expected = "Version 1.632", }, - -- { - -- comment = "example" - -- tweak = "action", - -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters) - -- list = fixes, -- one of the parameters - -- }, - -- { - -- comment = "example" - -- tweak = "action", - -- action = mathematics.tweaks.fixdimensions, - -- list = fixes, -- one of the parameters - -- }, { - tweak = "dimensions", - list = { -- offset width italic - [0x020D7] = { yoffset = -0.05 }, -- vec - [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b - [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c - [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d - [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e - [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f - [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g - [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h - [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k - [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l - [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q - [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v - [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w - [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma - [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron - [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma - [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma - [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau - [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi - [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi - [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi + tweak = "fixprimes", + factor = 0.9, + -- smaller = true, + scale = 0.9, + -- fake = 0.65, + }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.97 }, + presets.mathrsfscript { rscale = 0.97 }, + presets.mathxitsarabic { rscale = 0.95 }, + { + -- When it makes sense we get rid of italics. + tweak = "moveitalics", + correct = true, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } + }, + { + tweak = "setovershoots", + list = { + { + target = "uppercasescript", + -- quad = true, -- to be decided + topovershoot = 0.05, + }, + { + target = "uppercaseboldscript", + -- quad = true, -- to be decided + topovershoot = 0.05, + }, }, }, - -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large -- accent anchor offset). First we copy and fix. @@ -126,7 +141,7 @@ return { [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve - [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering + [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering -- weird this one [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -135,20 +150,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -165,50 +178,24 @@ return { { tweak = "kerns", list = { - -- ["*:0x2F"] = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - + -- ["*:0x2F"] = { ... } + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + -- + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants -- angle - [0x27E9] = { topright = -0.2, bottomright = -0.2 }, - ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - [0x27EB] = { topright = -0.2, bottomright = -0.2 }, - ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - + [0x27E9] = { topright = -0.2, bottomright = -0.2 }, + ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + [0x27EB] = { topright = -0.2, bottomright = -0.2 }, + ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -218,17 +205,8 @@ return { ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - - }, }, - { - tweak = "fixprimes", - factor = 0.9, - -- smaller = true, - scale = 0.9, - -- fake = 0.65, - }, { tweak = "checkspacing", }, @@ -258,21 +236,19 @@ return { tweak = "addequals", }, { - tweak = "addfourier", + tweak = "addfourier", variant = 1, }, - -{ - tweak = "kernpairs", - list = { - -- beware: we kept the italic correction in spite of punctuation class - [0x1D453] = { -- f - [0x3A] = -.1, - [0x3B] = -.1, - }, - }, -}, - + { + tweak = "kernpairs", + list = { + -- beware: we kept the italic correction in spite of punctuation class + [0x1D453] = { -- f + [0x3A] = -.1, + [0x3B] = -.1, + }, + }, + }, }, }, bigslots = { @@ -288,3 +264,38 @@ return { kerns = kerns, }, } + + + + + +-- Old values + + -- { + -- tweak = "dimensions", + -- list = { -- offset width italic + -- [0x020D7] = { yoffset = -0.05 }, -- vec + -- [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a + -- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b + -- [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c + -- [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d + -- [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e + -- [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f + -- [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g + -- [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h + -- [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k + -- [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l + -- [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q + -- [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v + -- [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w + -- [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma + -- [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda + -- [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron + -- [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma + -- [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma + -- [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau + -- [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi + -- [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi + -- [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg index cb992cd0b..54d24ffa3 100644 --- a/tex/context/fonts/mkiv/schola-math.lfg +++ b/tex/context/fonts/mkiv/schola-math.lfg @@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.20 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "schola-math", @@ -28,17 +28,17 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -500, - RadicalRuleThickness = 64, -- 70 in font + RadicalRuleThickness = 64, -- 70 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1333 in font - -- PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + -- PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -47,58 +47,36 @@ return { expected = "Version 1.533", }, { - tweak = "dimensions", - list = { - -- nothing yet - } + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 1, }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.93 }, + presets.moveitalics { correct = true }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -126,9 +104,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -137,20 +115,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -158,16 +134,6 @@ return { { tweak = "copyaccents", }, - -- So far for the accents. - - - - { - tweak = "fixprimes", - scale = 0.85, - -- smaller = true, - factor = 1, - }, { tweak = "checkspacing", }, @@ -191,8 +157,8 @@ return { tweak = "addequals", }, { - tweak = "addfourier", - -- scale = 1.25, + tweak = "addfourier", + -- scale = 1.25, variant = 1, }, }, diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg index b5e6daf29..8b03a7730 100644 --- a/tex/context/fonts/mkiv/stix-two-math.lfg +++ b/tex/context/fonts/mkiv/stix-two-math.lfg @@ -3,6 +3,8 @@ local integral_variants = { bottomright = -0.4 } -- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.35 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "stix-two-math", @@ -31,18 +33,18 @@ return { NoLimitSubFactor = 1000, -- AccentBaseHeight = 0, AccentBaseDepth = 30, - FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go) - -- AccentExtendMargin = 50, + FlattenedAccentTopShiftUp = 0, + -- AccentExtendMargin = 50, RadicalDegreeBottomRaisePercent = 65, -- RadicalKernBeforeDegree = 500, RadicalKernAfterDegree = -500, RadicalVerticalGap = 10, - -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) + -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1800 in font - PrimeRaisePercent = 75, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -50,53 +52,40 @@ return { tweak = "version", expected = "Version 2.12 b168", }, + { + tweak = "fixprimes", + scale = 1, + -- smaller = true, + factor = 1, + }, + { + tweak = "addmirrors", + }, + presets.mathxitsarabic { rscale = 0.95 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - -- ["0x7D.variants.*"] = { - -- topright = -0.15, - -- bottomright = -0.15, - -- }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + -- ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -106,23 +95,21 @@ return { ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - - }, }, - -- 0xFEOO should be chancery style, if present { - tweak = "variants", - kind = "script", - -- feature = false, -- use the saved ones (see typescript) - selector = 0xFE00, - }, - -- 0xFEO1 should be roundhand style, if present - { - tweak = "variants", - kind = "script", - feature = "ss01",-- this changes to roundhand style for stixtwo - selector = 0xFE01, + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = "uppercasescript", + target = "uppercasescript", + feature = "ss01", + }, + }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large @@ -138,9 +125,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -149,20 +136,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -171,13 +156,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { - tweak = "fixprimes", - scale = 1, - -- smaller = true, - factor = 1, - }, { tweak = "checkspacing", }, @@ -204,21 +182,21 @@ return { tweak = "addfourier", variant = 1, }, -{ - tweak = "addparts", - list = { - [0x21F4] = { - horizontal = true, - template = 0x2192, - sequence = { - { glyph = "first", factor = 2 }, - { glyph = 0x2022, }, - { glyph = "first", factor = 2 }, - { glyph = "last" }, - } - } - } -}, + { + tweak = "addparts", + list = { + [0x21F4] = { + horizontal = true, + template = 0x2192, + sequence = { + { glyph = "first", factor = 2 }, + { glyph = 0x2022, }, + { glyph = "first", factor = 2 }, + { glyph = "last" }, + } + } + } + }, }, }, bigslots = { @@ -226,5 +204,3 @@ return { }, }, } - - diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg index c5bcb3e84..6a54535df 100644 --- a/tex/context/fonts/mkiv/termes-math.lfg +++ b/tex/context/fonts/mkiv/termes-math.lfg @@ -17,11 +17,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.30 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "termes-math", @@ -35,16 +35,16 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 50, RadicalDegreeBottomRaisePercent = 60, - RadicalRuleThickness = 46, -- 52 in font + RadicalRuleThickness = 46, -- 52 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 60, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -53,81 +53,45 @@ return { expected = "Version 1.543", }, { - tweak = "dimensions", - list = { - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b - [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- d - [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e - [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h - [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k - [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f - [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j - [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p - [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q - [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- w - [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \gamma - [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron - [0x1D70F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \tau - }, + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 0.95, + }, + { + tweak = "addmirrors", }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.88 }, + presets.moveitalics { correct = true }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, - ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, - ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, - ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom, - ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom, - ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom, - ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, - ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, - ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- + ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, + ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, + ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, + ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom, + ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom, + ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom, + ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, + ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, + ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -155,20 +119,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -177,13 +139,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { - tweak = "fixprimes", - scale = 0.85, - -- smaller = true, - factor = 0.95, - }, { tweak = "checkspacing", }, @@ -225,3 +180,25 @@ return { kerns = kerns, }, } + + + -- Do a testrun with hats on these: + -- { + -- tweak = "dimensions", + -- list = { + -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.3 }, -- b + -- [0x1D451] = { width = 1, italic = 0, anchor = 0.8 }, -- d + -- [0x1D452] = { width = 1, italic = 0, anchor = 0.9 }, -- e + -- [0x0210E] = { width = 1, italic = 0, anchor = 1.3 }, -- h + -- [0x1D458] = { width = 1, italic = 0, anchor = 1.3 }, -- k + -- [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f + -- [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j + -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p + -- [0x1D45E] = { width = 1, italic = 0, anchor = 0.9 }, -- q + -- [0x1D464] = { width = 1, italic = 0, anchor = 1.1 }, -- w + -- [0x1D6FE] = { width = 1, italic = 0, anchor = 1.1 }, -- \gamma + -- [0x1D706] = { width = 1, italic = 0, anchor = 1.05 }, -- \lambda + -- [0x1D70A] = { width = 1, italic = 0, anchor = 1.2 }, -- \omicron + -- [0x1D70F] = { width = 1, italic = 0, anchor = 1.05 }, -- \tau + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/type-imp-concrete.mkiv b/tex/context/fonts/mkiv/type-imp-concrete.mkiv index 72b0141a5..5e4e6bc76 100644 --- a/tex/context/fonts/mkiv/type-imp-concrete.mkiv +++ b/tex/context/fonts/mkiv/type-imp-concrete.mkiv @@ -1,50 +1,62 @@ +%D \module +%D [ file=type-imp-erewhon, +%D version=2022.30.09, % a bit older +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=\TEX Gyre Fonts, +%D author=Mikael Sundqvist, +%D date=\currentdate, +%D copyright={\CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + %\loadtypescriptfile[texgyre] %\resetfontfallback [concrete-euler-fix] %\definefontfallback[concrete-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes] - \starttypescriptcollection[concrete] %\definefontfeature[default-slanted-concrete][default][slant=.2] %\definefontfeature[none-slanted-concrete] [none] [slant=.2] \starttypescript [\s!serif] [concrete-serif] - \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default] - \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default] - \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete] - \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldSlanted][\s!file:cmunobx] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default] + \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default] + \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldSlanted] [\s!file:cmunobx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!sans] [concrete-sans] - \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default] - \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default] - \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete] - \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default] + \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default] + \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!mono] [concrete-mono] - \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none] - \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none] - \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none] - \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none] - \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none] - \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete] + \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none] + \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none] + \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none] + \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none] + \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none] + \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete] \stoptypescript \starttypescript [\s!math] [concrete-math] [\s!name] \loadfontgoodies[concrete-math] - \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=concrete-math] + \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features={\s!math\mathsizesuffix,mathextra,concrete:mathextra},\s!goodies=concrete-math] \stoptypescript \starttypescript [concrete] \definetypeface [concrete] [\s!rm] [\s!serif] [concrete-serif] [\s!default] - \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default] - \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default] - \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default] + \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default] + \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default] + \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default] \quittypescriptscanning \stoptypescript diff --git a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv index b8efcd7f9..8f38fb8b0 100644 --- a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv +++ b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv @@ -1,44 +1,56 @@ +%D \module +%D [ file=type-imp-erewhon, +%D version=2022.30.09, % a bit older +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=\TEX Gyre Fonts, +%D author=Mikael Sundqvist, +%D date=\currentdate, +%D copyright={\CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + %\loadtypescriptfile[texgyre] -%\resetfontfallback [erewhon-euler-fix] +%\resetfontfallback [erewhon-euler-fix] %\definefontfallback[erewhon-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes] - \starttypescriptcollection[erewhon] %\definefontfeature[default-slanted-erewhon][default][slant=.2] %\definefontfeature[none-slanted-erewhon] [none] [slant=.2] \starttypescript [\s!serif] [erewhon-serif] - \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default] - \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default] - \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted] [\s!features=\s!default] - \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default] + \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default] + \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default] + \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted][\s!features=\s!default] + \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted][\s!file:Erewhon-BoldSlanted] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [cabin-sans] - \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default] - \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default] - \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldItalic] [\s!file:Cabin-SemiBoldItalic] [\s!features=\s!default] + \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default] + \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default] + \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldItalic][\s!file:Cabin-SemiBoldItalic][\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [inconsolata-mono] - \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular] [\s!features=\s!none] - \definefontsynonym [\s!MonoBold] [\s!file:Inconsolatazi4-Bold] [\s!features=\s!none] + \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular][\s!features=\s!none] + \definefontsynonym [\s!MonoBold][\s!file:Inconsolatazi4-Bold] [\s!features=\s!none] \stoptypescript \starttypescript [\s!math] [erewhon-math] [\s!name] \loadfontgoodies[erewhon-math] - \definefontsynonym[\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=erewhon-math] + \definefontsynonym [\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features={\s!math\mathsizesuffix,erewhon:mathextra,mathextra},\s!goodies=erewhon-math] \stoptypescript \starttypescript [erewhon] - \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default] - \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default] + \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default] + \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default] \definetypeface [erewhon] [\s!tt] [\s!mono] [inconsolata-mono] [\s!default] [\s!rscale=1.1] - \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default] + \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default] \quittypescriptscanning \stoptypescript diff --git a/tex/context/fonts/mkiv/type-imp-euler.mkiv b/tex/context/fonts/mkiv/type-imp-euler.mkiv index 00df63458..1aea88aae 100644 --- a/tex/context/fonts/mkiv/type-imp-euler.mkiv +++ b/tex/context/fonts/mkiv/type-imp-euler.mkiv @@ -66,15 +66,11 @@ \stoptypescript \starttypescript [\s!math] [euleroverpagella] [\s!name] - \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella% - ,\s!goodies=pagella-with-euler-math% - ] + \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella,\s!goodies=pagella-with-euler-math] \stoptypescript \starttypescript [\s!math] [pagellaovereuler] [\s!name] - \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler% - ,\s!goodies=euler-with-pagella-math% - ] + \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler,\s!goodies=euler-with-pagella-math] \stoptypescript \starttypescript [pagella-with-euler] diff --git a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv index cf5052c82..e8e8e353b 100644 --- a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv @@ -181,8 +181,8 @@ \starttypescript [\s!math] [modern,latin-modern] \loadfontgoodies[lm] - \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm] - \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math-bold,lm-math,mathextra},\s!goodies=lm] + \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math,mathextra},\s!goodies=lm] + \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math-bold,lm-math,mathextra},\s!goodies=lm] \stoptypescript \starttypescript [modern-designsize-virtual] diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv index 1c9788a98..73f7c4dbf 100644 --- a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv @@ -50,7 +50,7 @@ \starttypescript [\s!math][newcomputermodern] [\s!name] % \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm] - \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}\s!goodies=lm] + \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra},\s!goodies=lm] \stoptypescript \starttypescript [\s!serif] [newcomputermodern-book] [\s!name] diff --git a/tex/context/fonts/mkiv/type-imp-stix.mkiv b/tex/context/fonts/mkiv/type-imp-stix.mkiv index b76b1d09b..ed2b63909 100644 --- a/tex/context/fonts/mkiv/type-imp-stix.mkiv +++ b/tex/context/fonts/mkiv/type-imp-stix.mkiv @@ -35,32 +35,11 @@ \starttypescriptcollection[stix] - % version one - - \starttypescript [\s!math] [stix] [\s!name] - \definefontsynonym[MathRoman][\s!file:stixmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}] - \stoptypescript - - \starttypescript [\s!serif] [stix] [\s!name] - \setups[\s!font:\s!fallback:\s!serif] - \definefontsynonym[\s!Serif] [\s!file:stix-regular.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifBold] [\s!file:stix-bold.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifItalic] [\s!file:stix-italic.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifBoldItalic][\s!file:stix-bolditalic.otf][\s!features=\s!default] - \stoptypescript - - \starttypescript[stix] - \definetypeface [stix] [\s!rm] [\s!serif] [stix] [\s!default] - \definetypeface [stix] [\s!mm] [\s!math] [stix] [\s!default] - \stoptypescript - - % version two - - \starttypescript [\s!math] [stixtwo] [\s!name] - \definefontsynonym[MathRoman][\s!file:stixtwomath-regular.otf] [\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math] + \starttypescript [\s!math] [stix,stixtwo,xits] [\s!name] + \definefontsynonym[\s!MathRoman][\s!file:stixtwomath-regular.otf][\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math] \stoptypescript - \starttypescript [\s!serif] [stixtwo] [\s!name] + \starttypescript [\s!serif] [stix,stixtwo,xits] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym[\s!Serif] [\s!file:stixtwotext-regular.otf] [\s!features=\s!default] \definefontsynonym[\s!SerifBold] [\s!file:stixtwotext-bold.otf] [\s!features=\s!default] @@ -68,11 +47,11 @@ \definefontsynonym[\s!SerifBoldItalic][\s!file:stixtwotext-bolditalic.otf][\s!features=\s!default] \stoptypescript - \starttypescript[stixtwo] + \starttypescript[stix,stixtwo,xits] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [stixtwo] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!serif] [stixtwo] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.895] - \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default] [\s!direction=\s!both] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv index 24b982bb5..c6b0ab28b 100644 --- a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv +++ b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv @@ -229,7 +229,14 @@ \stoptypescriptcollection -% tricky: we cannot mix now as the file is loaded only once +% We no longer support tx and px in LMTX. These fonts were used in the transition from +% traditional (type one) fonts to the new gyre fonts. The LMTX distribution no longer +% ships these fonts anyway. + +\ifcase\contextlmtxmode \else + \disablemode[pxmath] + \disablemode[txmath] +\fi \startmode[txmath] @@ -252,8 +259,8 @@ \starttypescript [\s!math][times,termes][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=termes-math] - \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes-math-bold,mathextra},\s!goodies=termes-math] + \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,mathextra},\s!goodies=termes-math] + \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,termes-math-bold,mathextra},\s!goodies=termes-math] \stoptypescript \stoptypescriptcollection @@ -281,8 +288,8 @@ \starttypescript [\s!math][palatino,pagella][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=pagella-math] - \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella-math-bold,mathextra},\s!goodies=pagella-math] + \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,mathextra},\s!goodies=pagella-math] + \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,pagella-math-bold,mathextra},\s!goodies=pagella-math] \stoptypescript \stoptypescriptcollection @@ -294,8 +301,8 @@ \starttypescript [\s!math][bookman,bonum][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=bonum-math] - \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum-math-bold,mathextra},\s!goodies=bonum-math] + \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,mathextra},\s!goodies=bonum-math] + \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,bonum-math-bold,mathextra},\s!goodies=bonum-math] \stoptypescript \stoptypescriptcollection @@ -305,8 +312,8 @@ \starttypescript [\s!math][schoolbook,schola][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=schola-math] - \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola-math-bold,mathextra},\s!goodies=schola-math] + \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,mathextra},\s!goodies=schola-math] + \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,schola-math-bold,mathextra},\s!goodies=schola-math] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-xits.mkiv b/tex/context/fonts/mkiv/type-imp-xits.mkiv index f2d3e83c3..ce8d4209d 100644 --- a/tex/context/fonts/mkiv/type-imp-xits.mkiv +++ b/tex/context/fonts/mkiv/type-imp-xits.mkiv @@ -25,10 +25,10 @@ \starttypescript [\s!math] [xits,xitsbidi] [\s!name] \loadfontgoodies[xits-math] - \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math] + \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRoman L2R][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRoman R2L][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math] - \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math] + \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRomanBold L2R][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRomanBold R2L][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math] \stoptypescript diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg index cf3050369..374f03a0e 100644 --- a/tex/context/fonts/mkiv/xits-math.lfg +++ b/tex/context/fonts/mkiv/xits-math.lfg @@ -1,3 +1,7 @@ +-- When testing XITS in LMTX one has to do this: +-- +-- \definefilesynonym [type-imp-xits.mkiv] [type-imp-xits.mkiv] + return { name = "xits-math", version = "1.00", @@ -15,6 +19,25 @@ return { }, }, mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go) + -- AccentExtendMargin = 50, + RadicalDegreeBottomRaisePercent = 65, + -- RadicalKernBeforeDegree = 500, + RadicalKernAfterDegree = -500, + RadicalVerticalGap = 10, + -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1800 in font + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default + + }, tweaks = { aftercopying = { { @@ -69,6 +92,10 @@ return { { tweak = "addrules", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, alternates = { diff --git a/tex/context/modules/mkiv/s-fonts-charts.mkiv b/tex/context/modules/mkiv/s-fonts-charts.mkiv index b7fcc9f9e..6fe58c899 100644 --- a/tex/context/modules/mkiv/s-fonts-charts.mkiv +++ b/tex/context/modules/mkiv/s-fonts-charts.mkiv @@ -172,10 +172,10 @@ \starttext -% \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all] + \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all] - \showfontchart[filename=danlan.otf] % ,page=yes,option=all] - \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all] +% \showfontchart[filename=danlan.otf] % ,page=yes,option=all] +% \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all] % \showfontchart[filename=aegean,page=yes] % \showfontchart[filename=veramono.ttf,page=yes] diff --git a/tex/context/modules/mkiv/s-fonts-coverage.mkiv b/tex/context/modules/mkiv/s-fonts-coverage.mkiv index 2d1870842..a4ae9d211 100644 --- a/tex/context/modules/mkiv/s-fonts-coverage.mkiv +++ b/tex/context/modules/mkiv/s-fonts-coverage.mkiv @@ -31,16 +31,18 @@ \continueifinputfile{s-fonts-coverage.mkiv} +% \usemodule[fonts-coverage] + \usemodule[art-01] \starttext - \showfontcomparison - [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf}, - pattern=ogonek] - % \showfontcomparison -% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}] +% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf}, +% pattern=ogonek] + + \showfontcomparison + [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}] \page diff --git a/tex/context/modules/mkiv/s-fonts-shapes.lua b/tex/context/modules/mkiv/s-fonts-shapes.lua index 868c22da1..d55b1198e 100644 --- a/tex/context/modules/mkiv/s-fonts-shapes.lua +++ b/tex/context/modules/mkiv/s-fonts-shapes.lua @@ -83,16 +83,21 @@ local function showglyphshape(specification) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local parameters = tfmdata.parameters + local tfmfactor = parameters.scaledpoints/10 +-- inspect(tfmdata.parameters) +-- inspect(tfmdata.properties) local anchors = fonts.helpers.collectanchors(tfmdata) - local function showonecharacter(unicode) + local function showonecharacter(unicode,krn,tight) local c = characters [unicode] local d = descriptions[unicode] if c and d then local factor = (parameters.size/parameters.units)*((7200/7227)/65536) local llx, lly, urx, ury = unpack(d.boundingbox) + local height = ury + local depth = lly llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor - local width = (d.width or 0)*factor + local width = (d.width or 0)*factor context.start() context.dontleavehmode() context.obeyMPboxdepth() @@ -110,76 +115,52 @@ local function showglyphshape(specification) context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;') context("defaultscale := 0.05 ; ") -- inefficient but non critical - local slant = { - function(v,dx,dy,txt,xsign,ysign,loc,labloc) - local n = #v - if n > 0 then - local l = { } - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) - end - context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1]) - context("draw laddered (%..t) withcolor .5white ;",l) -- why not "--" - context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l]) - for i=1,n do - context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i]) + function slant(v,dx,dy,txt,xsign,ysign,loc,labloc,shift) + local n = #v + if n > 0 then + local l = { } + local t = { } + for i=1,n do + local c = v[i] + local h = c.height or height or 0 + local d = depth or 0 + local k = c.kern or 0 + if i == 1 then + l[1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,d*factor,dx,dy) + t[1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,d,l[1],shift,shift); end + l[i+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) + t[i+1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,h,l[i+1],shift,shift); end - end, - function(v,dx,dy,txt,xsign,ysign,loc,labloc) - local n = #v - if n > 0 then - local l = { } - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) - end - if loc == "top" then - context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[n]) - else - context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1]) - end - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[i]) - end + context("draw laddered (%--t) withcolor .5white ;",l) + for i=1,#l do + context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i]) + context(t[i]) end - end, - } + end + end -- local math = d.math if math then local kerns = math.kerns if kerns then - for i=1,#slant do - local s = slant[i] - for k, v in next, kerns do - if k == "topright" then - -- s(v,width+italic,0,k,1,1,"top","ulft") - s(v,width,0,k,1,1,"top","ulft") - elseif k == "bottomright" then - s(v,width,0,k,1,1,"bot","lrt") - elseif k == "topleft" then - s(v,0,0,k,-1,1,"top","ulft") - elseif k == "bottomleft" then - s(v,0,0,k,-1,1,"bot","lrt") - end + for k, v in next, kerns do + if k == "topright" and (krn == "all" or krn == k) then + slant(v,width,0,k,1,1,"top","lrt",1) + elseif k == "bottomright" and (krn == "all" or krn == k) then + slant(v,width,0,k,1,1,"bot","ulft",-1) + elseif k == "topleft" and (krn == "all" or krn == k) then + slant(v,0,0,k,-1,1,"top","lrt",1) + elseif k == "bottomleft" and (krn == "all" or krn == k) then + slant(v,0,0,k,-1,1,"bot","ulft",-1) end end end - local accent = math.accent + local accent = math.topanchor or math.accent if accent and accent ~= 0 then local a = accent * factor - context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',a,ury,a,ury) - context('label.bot("\\type{%s}",(%s,%s+1bp));',"accent",a,ury) - context('label.top("%s",(%s,%s-1bp));',math.accent,a,ury) + context('draw (%s,%s+1/4)--(%s,%s-1/4) withcolor blue;',a,ury,a,ury) + context('draw textext.top("\\tttf%s") scaled .025 shifted (%s,%s+2/4);',accent,a,ury) end end -- @@ -215,7 +196,29 @@ local function showglyphshape(specification) context('label.rt("%s",(%s-2bp,%s-1bp));',italic,width+i,ury) end context('draw origin withcolor red withpen pencircle scaled 2lw;') - context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") + local kern = c.topright + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,ury) + end + local kern = c.bottomright + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,lly) + end + local kern = c.topleft + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,ury) + end + local kern = c.bottomleft + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,lly) + end + if not tight then + context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") + end context("currentpicture := currentpicture scaled 8 ;") context.stopMPcode() context.stop() @@ -226,16 +229,28 @@ local function showglyphshape(specification) fonts.helpers.nametoslot(specification.character) if unicode then - showonecharacter(unicode) + showonecharacter(unicode,"all",true) else context.modulefontsstartshowglyphshapes() for unicode, description in fonts.iterators.descriptions(tfmdata) do if unicode >= 0x110000 then break end + local kerns = specification.kerns + if kerns then + local k = description and description.math and description.math.kerns + if k then + if not (kerns == "all" or k[kerns]) then + goto DONE + end + else + goto DONE + end + end context.modulefontsstartshowglyphshape(unicode,description.name or "",description.index or 0) - showonecharacter(unicode) + showonecharacter(unicode,kerns,false) context.modulefontsstopshowglyphshape() + ::DONE:: end context.modulefontsstopshowglyphshapes() end diff --git a/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/tex/context/modules/mkiv/s-fonts-shapes.mkiv index 7dd39c07d..97fcbfa6c 100644 --- a/tex/context/modules/mkiv/s-fonts-shapes.mkiv +++ b/tex/context/modules/mkiv/s-fonts-shapes.mkiv @@ -30,7 +30,7 @@ \startsetups module:showallglyphshapes:start \unexpanded\def\modulefontsstartshowglyphshape##1##2##3{ - \startTEXpage[\c!offset=\exheight] % ,\c!frame=\v!on] + \startTEXpage[\c!offset=\exheight]% ,\c!frame=\v!on] \edef\lastshownglyphshapefieldunicode{##1}% \edef\lastshownglyphshapefieldname {##2}% \edef\lastshownglyphshapefieldindex {##3}% @@ -106,8 +106,11 @@ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage - \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage - \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage + +% \definefontfeature[tg][goodies=pagella-math] +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:texgyrepagella-math.otf*tg}{20bp}{0x002F}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage @@ -126,7 +129,12 @@ % \startTEXpage[offset=0pt]\ShowGlyphShape{file:husayninotebold.ttf}{50bp}{0x006DD}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{file:arabtype.ttf}{50bp}{0x0FCA1}\stopTEXpage -% \showallglyphshapes[name=name:cambria-math,size=100bp] +\showallglyphshapes[name=name:cambria-math,size=100bp,kerns=bottomright] +% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D6FD}\stopTEXpage + +% \showallglyphshapes[name=file:lucidabrightmathot,size=100bp,kerns=all] +% \showallglyphshapes[name=file:garamondmath,size=100bp,kerns=bottomright] + % \showallglyphshapes[name=name:arabtype,size=100bp] % \showallglyphshapes[name=file:husayninotebold.ttf,size=100bp] % \showallglyphshapes[name=name:dejavuserif,size=100bp] diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua index b634a203f..a967f7934 100644 --- a/tex/context/modules/mkiv/s-math-characters.lua +++ b/tex/context/modules/mkiv/s-math-characters.lua @@ -185,7 +185,7 @@ function moduledata.math.characters.showlist(specification) round(char.height or 0), round(char.depth or 0), round(char.italic or 0), - round(char.topaccent or 0) + round(char.topanchor or char.topaccent or 0) ) end if virtual and commands then diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c539d886c..c87c4ee52 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2022-09-16 14:39 +-- merge date : 2022-10-14 10:13 do -- begin closure to overcome local limits and interference @@ -13418,10 +13418,10 @@ do result.familyotherblues={ unpack(stack,1,top) } top=0 end+P("\10")/function() - result.strhw=stack[top] + result.stdhw=stack[top] top=0 end+P("\11")/function() - result.strvw=stack[top] + result.stdvw=stack[top] top=0 end+P("\13")/function() result.uniqueid=stack[top] @@ -13493,7 +13493,7 @@ do result.bluescale=stack[top] top=0 end+P("\10")/function() - result.bluesnap=stack[top] + result.blueshift=stack[top] top=0 end+P("\11")/function() result.bluefuzz=stack[top] @@ -13547,7 +13547,7 @@ do top=0 end ) - local remap={ + local remap_1={ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0", ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="1.",["\x1B"]="1E",["\x1C"]="1E-",["\x1D"]="1",["\x1E"]="1-",["\x1F"]="1", ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="2.",["\x2B"]="2E",["\x2C"]="2E-",["\x2D"]="2",["\x2E"]="2-",["\x2F"]="2", @@ -13563,8 +13563,13 @@ do ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-", ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-", } - local p_last=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")+R("\xF0\xFF") - local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0*(P(1)/remap))/function(n) + local remap_2={ + ["\x0F"]="0",["\x1F"]="1",["\x2F"]="2",["\x3F"]="3",["\x4F"]="4", + ["\x5F"]="5",["\x6F"]="6",["\x7F"]="7",["\x8F"]="8",["\x9F"]="9", + } + local p_last_1=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") + local p_last_2=R("\xF0\xFF") + local p_nibbles=P("\30")*Cs(((1-(p_last_1+p_last_2))/remap_1)^0*(p_last_1/remap_2+p_last_2/""))/function(n) top=top+1 stack[top]=tonumber(n) or 0 end @@ -15378,6 +15383,8 @@ function readers.cff(f,fontdata,specification) cffinfo.bluefuzz=data.bluefuzz cffinfo.stdhw=data.stdhw cffinfo.stdvw=data.stdvw + cffinfo.stemsnaph=data.stemsnaph + cffinfo.stemsnapv=data.stemsnapv end end cleanup(data,dictionaries) @@ -18461,6 +18468,7 @@ do local noflookups=#lookups local lookupprefix=sub(what,2,2) local usedlookups=false + local allsteps={} for lookupid=1,noflookups do local lookup=lookups[lookupid] local lookuptype=lookup.type @@ -18495,6 +18503,7 @@ do steps[nofsteps]=step local rules=step.rules if rules then + allsteps[#allsteps+1]=step for i=1,#rules do local rule=rules[i] local before=rule.before @@ -18600,11 +18609,8 @@ do reported[name]=true end end - for i=lastsequence+1,nofsequences do - local sequence=sequences[i] - local steps=sequence.steps - for i=1,#steps do - local step=steps[i] + for i=1,#allsteps do + local step=allsteps[i] local rules=step.rules if rules then for i=1,#rules do @@ -18674,7 +18680,6 @@ do end end end - end for i,n in sortedhash(sublookupcheck) do local l=lookups[i] local t=l.type @@ -19097,7 +19102,7 @@ local function readmathglyphinfo(f,fontdata,offset) if not math then glyph.math={ accent=accent } else - math.accent=accent + math.accent=accent end end end @@ -21289,7 +21294,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_d local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf -otf.version=3.120 +otf.version=3.121 otf.cache=containers.define("fonts","otl",otf.version,true) otf.svgcache=containers.define("fonts","svg",otf.version,true) otf.pngcache=containers.define("fonts","png",otf.version,true) @@ -27329,12 +27334,8 @@ local trace_testruns=false registertracker("otf.testruns",function(v) trace_tes local forcediscretionaries=false local forcepairadvance=false local repeatablemultiples=context or false -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries=v -end) -directives.register("otf.forcepairadvance",function(v) - forcepairadvance=v -end) +directives.register("otf.forcediscretionaries",function(v) forcediscretionaries=v end) +directives.register("otf.forcepairadvance",function(v) forcepairadvance=v end) local report_direct=logs.reporter("fonts","otf direct") local report_subchain=logs.reporter("fonts","otf subchain") local report_chain=logs.reporter("fonts","otf chain") @@ -27356,7 +27357,6 @@ local setboth=nuts.setboth local getid=nuts.getid local getstate=nuts.getstate local getsubtype=nuts.getsubtype -local setsubtype=nuts.setsubtype local getchar=nuts.getchar local setchar=nuts.setchar local getdisc=nuts.getdisc @@ -27376,10 +27376,10 @@ local flushcomponents=components.flush local ischar=nuts.ischar local usesfont=nuts.usesfont local insertnodeafter=nuts.insertafter -local copy_node=nuts.copy -local copy_node_list=nuts.copylist -local remove_node=nuts.remove -local find_node_tail=nuts.tail +local copynode=nuts.copy +local copynodelist=nuts.copylist +local removenode=nuts.remove +local findnodetail=nuts.tail local flushnodelist=nuts.flushlist local flushnode=nuts.flushnode local endofmath=nuts.endofmath @@ -27389,7 +27389,6 @@ local setmetatableindex=table.setmetatableindex local nextnode=nuts.traversers.node local nodecodes=nodes.nodecodes local glyphcodes=nodes.glyphcodes -local disccodes=nodes.disccodes local glyph_code=nodecodes.glyph local glue_code=nodecodes.glue local disc_code=nodecodes.disc @@ -27398,8 +27397,7 @@ local dir_code=nodecodes.dir local par_code=nodecodes.par local lefttoright_code=nodes.dirvalues.lefttoright local righttoleft_code=nodes.dirvalues.righttoleft -local discretionarydisc_code=disccodes.discretionary -local ligatureglyph_code=glyphcodes.ligature +local discretionarydisc_code=nodes.disccodes.discretionary local a_noligature=attributes.private("noligature") local injections=nodes.injections local setmark=injections.setmark @@ -27490,7 +27488,7 @@ local function cref(dataset,sequence,index) return "no valid dataset" end local merged=sequence.merged and "merged " or "" - if index then + if index and index>1 then return formatters["feature %a, type %a, %schain lookup %a, index %a"]( dataset[4],sequence.type,merged,sequence.name,index) else @@ -27547,7 +27545,7 @@ end local function appenddisc(disc,list) local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true) local posthead=list - local replacehead=copy_node_list(list) + local replacehead=copynodelist(list) if post then setlink(posttail,posthead) else @@ -27574,7 +27572,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -27612,7 +27609,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -27632,7 +27628,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if trace_marks then logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start)) end - local n=copy_node(start) + local n=copynode(start) copyinjection(n,start) head,current=insertnodeafter(head,current,n) elseif trace_marks then @@ -27696,57 +27692,57 @@ end local function multiple_glyphs(head,start,multiple,skiphash,what,stop) local nofmultiples=#multiple if nofmultiples>0 then + local first=start resetinjection(start) setchar(start,multiple[1]) if nofmultiples>1 then - local sn=getnext(start) - for k=2,nofmultiples do - local n=copy_node(start) + for i=2,nofmultiples do + local n=copynode(start) resetinjection(n) - setchar(n,multiple[k]) + setchar(n,multiple[i]) insertnodeafter(head,start,n) start=n end - if what~=true and repeatablemultiples then - local kind=type(what) - local m,f,l - if kind=="string" then - local what,n=string.match(what,"^repeat(.-)[:=](%d+)$") - if what=="middle" then - m=tonumber(n) - elseif what=="first" then - f=tonumber(n) - elseif what=="last" then - l=tonumber(n) - end - elseif kind=="table" then - m=what.middle - f=what.first - l=what.last - end - if f or m or l then - if m and m>1 and nofmultiples==3 then - local middle=getnext(first) - for i=2,m do - local n=copynode(middle) - resetinjection(n) - insertnodeafter(head,first,n) - end - end - if f and f>1 then - for i=2,f do - local n=copynode(first) - resetinjection(n) - insertnodeafter(head,first,n) - end - end - if l and l>1 then - for i=2,l do - local n=copynode(start) - resetinjection(n) - insertnodeafter(head,start,n) - start=n - end + end + if what~=true and repeatablemultiples then + local kind=type(what) + local m,f,l + if kind=="string" then + local what,n=string.match(what,"^repeat(.-)[:=](%d+)$") + if what=="middle" then + m=tonumber(n) + elseif what=="first" then + f=tonumber(n) + elseif what=="last" then + l=tonumber(n) + end + elseif kind=="table" then + m=what.middle + f=what.first + l=what.last + end + if f or m or l then + if m and m>1 and nofmultiples==3 then + local middle=getnext(first) + for i=2,m do + local n=copynode(middle) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if f and f>1 then + for i=2,f do + local n=copynode(first) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if l and l>1 then + for i=2,l do + local n=copynode(start) + resetinjection(n) + insertnodeafter(head,start,n) + start=n end end end @@ -27918,9 +27914,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local prev=getprev(start) if stop then setnext(stop) - local copy=copy_node_list(start) + local copy=copynodelist(start) local tail=stop - local liat=find_node_tail(copy) + local liat=findnodetail(copy) if pre then setlink(liat,pre) end @@ -27931,7 +27927,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip replace=start else setnext(start) - local copy=copy_node(start) + local copy=copynode(start) if pre then setlink(copy,pre) end @@ -28308,7 +28304,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r if trace_chains then logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start))) end - head,start=remove_node(head,start,true) + head,start=removenode(head,start,true) return head,getprev(start),true end function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) @@ -28821,7 +28817,7 @@ do if not userkern then local thekern=nuts.new("kern",1) local setkern=nuts.setkern userkern=function(k) - local n=copy_node(thekern) + local n=copynode(thekern) setkern(n,k) return n end @@ -28858,26 +28854,33 @@ local function setdiscchecked(d,pre,post,replace) setdisc(d,pre,post,replace) end local noflags={ false,false,false,false } -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size=ck[5]-ck[4]+1 local chainlookups=ck[6] local done=false if chainlookups then if size==1 then local chainlookup=chainlookups[1] - for j=1,#chainlookup do - local chainstep=chainlookup[j] - local chainkind=chainstep.type - local chainproc=chainprocs[chainkind] - if chainproc then - local ok - head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - if ok then - done=true + if chainlookup then + for j=1,#chainlookup do + local chainstep=chainlookup[j] + if chainstep then + local chainkind=chainstep.type + local chainproc=chainprocs[chainkind] + if chainproc then + local ok + head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + if ok then + done=true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + end + else + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end + else end else local i=1 @@ -28902,20 +28905,24 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) if chainlookup then for j=1,#chainlookup do local chainstep=chainlookup[j] - local chainkind=chainstep.type - local chainproc=chainprocs[chainkind] - if chainproc then - local ok,n - head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) - if ok then - done=true - if n and n>1 and i+n>nofchainlookups then - i=size - break + if chainstep then + local chainkind=chainstep.type + local chainproc=chainprocs[chainkind] + if chainproc then + local ok,n + head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) + if ok then + done=true + if n and n>1 and i+n>nofchainlookups then + i=size + break + end end + else + logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) end else - logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (2)",cref(dataset,sequence)) end end else @@ -28939,7 +28946,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done=true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -28966,6 +28973,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last=start local prev=getprev(start) local hasglue=false + local useddisc=nil + local usedstart=start local i=f while i<=l do local id=getid(current) @@ -29028,7 +29037,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) tail=prev setprev(current,sweepnode) else - tail=find_node_tail(head) + tail=findnodetail(head) end setnext(sweepnode,current) setprev(head) @@ -29139,13 +29148,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) head=lookaheaddisc end local pre,post,replace=getdisc(lookaheaddisc) - local new=copy_node_list(cf) + local new=copynodelist(cf) local cnew=new if pre then - setlink(find_node_tail(cf),pre) + setlink(findnodetail(cf),pre) end if replace then - local tail=find_node_tail(new) + local tail=findnodetail(new) setlink(tail,replace) end for i=1,insertedmarks do @@ -29159,14 +29168,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok=false - cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done=true end end if not notmatchreplace[lookaheaddisc] then local ok=false - new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done=true end @@ -29177,6 +29186,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start=getprev(lookaheaddisc) + useddisc=lookaheaddisc sweephead[cf]=getnext(clast) or false sweephead[new]=getnext(cl) or false elseif backtrackdisc then @@ -29198,8 +29208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setprev(cf) setnext(cl) local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true) - local new=copy_node_list(cf) - local cnew=find_node_tail(new) + local new=copynodelist(cf) + local cnew=findnodetail(new) for i=1,insertedmarks do cnew=getprev(cnew) end @@ -29209,14 +29219,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok=false - cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done=true end end if not notmatchreplace[backtrackdisc] then local ok=false - new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done=true end @@ -29237,30 +29247,55 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start=getprev(backtrackdisc) + useddisc=backtrackdisc sweephead[post]=getnext(clast) or false sweephead[replace]=getnext(last) or false else local ok=false - head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done=true end end - return head,start,done -end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule=ck[1] - local lookuptype=ck[8] or ck[2] - local nofseq=#ck[3] - local first=ck[4] - local last=ck[5] - local char=getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ",sweepnode and "" or "not ") + if useddisc and start~=usedstart then + start=getnext(start) + end + return head,start,done,useddisc +end +local chaintrac do + local level=0 + local last={} + chaintrac=function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level=level+1 + last[level]=start + local rule=ck[1] + local lookuptype=ck[8] or ck[2] + local nofseq=#ck[3] + local first=ck[4] + local last=ck[5] + local char=getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ",sweepnode and "" or "not ") + else + local what=start and "done" or "continue" + local where=head==last[level] and "same" or "different" + local char=getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level=level-1 + end + end end local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head,start,false + end local sweepnode=sweepnode local sweeptype=sweeptype local postreplace @@ -29288,7 +29323,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s local ck=contexts[k] local seq=ck[3] local f=ck[4] -local last=start + local last=start if not startchar or not seq[f][startchar] then goto next end @@ -29399,7 +29434,6 @@ local last=start end end if f>1 then - if startprev then local prev=startprev if prereplace and prev==checkdisc then prev=getprev(sweepnode) @@ -29514,9 +29548,6 @@ local last=start else goto next end - else - goto next - end end if s>l then local current=last and getnext(last) @@ -29640,12 +29671,15 @@ local last=start if discseen or sweepnode then head,start,done=chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break end - ::next:: + ::next:: end if discseen then notmatchpre={} @@ -29662,15 +29696,26 @@ handlers.gpos_context=handle_contextchain local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps=currentlookup.steps local nofsteps=currentlookup.nofsteps - if nofsteps>1 then - reportmoresteps(dataset,sequence) - end - local l=steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char=getchar(start) + if nofsteps==1 then + local s=steps[1] + local l=s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head,start,false + for i=1,nofsteps do + local s=steps[i] + local l=s.coverage[char] + if l then + local h,s,d=handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h,s,d + end + end + end end + return head,start,false end chainprocs.gsub_context=chained_contextchain chainprocs.gsub_contextchain=chained_contextchain @@ -29853,7 +29898,7 @@ local function kernrun(disc,k_run,font,attr,...) if done and trace_testruns then report_disc("done",disc) end - return nextstart,done + return nextstart end local function comprun(disc,c_run,...) if trace_compruns then @@ -29896,8 +29941,12 @@ local function comprun(disc,c_run,...) end setdisc(disc,pre,post,replace) end - return getnext(disc),renewed + return getnext(disc) end +local test_flatten_start=2 +directives.register("otf.testrun.forceflatten",function(v) + test_flatten_start=v and 1 or 2 +end) local function testrun(disc,t_run,c_run,...) if trace_testruns then report_disc("test",disc) @@ -29925,7 +29974,7 @@ local function testrun(disc,t_run,c_run,...) local d=d_replace>d_post and d_replace or d_post local head=getnext(disc) local tail=head - for i=2,d do + for i=test_flatten_start,d do local nx=getnext(tail) local id=getid(nx) if id==disc_code then @@ -29939,7 +29988,7 @@ local function testrun(disc,t_run,c_run,...) next=getnext(tail) setnext(tail) setprev(head) - local new=copy_node_list(head) + local new=copynodelist(head) if posttail then setlink(posttail,head) else @@ -30002,7 +30051,7 @@ local function testrun(disc,t_run,c_run,...) report_disc("done",disc) end end - return getnext(disc),renewed + return getnext(disc) end local nesting=0 local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) @@ -30420,7 +30469,7 @@ do head=h end elseif typ=="gsub_reversecontextchain" then - local start=find_node_tail(head) + local start=findnodetail(head) local rlmode=0 local merged=steps.merged while start do @@ -30498,13 +30547,12 @@ do start=getnext(start) elseif id==disc_code then if not discs or discs[start]==true then - local ok if gpossing then - start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else - start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end else start=getnext(start) @@ -30568,13 +30616,12 @@ do start=getnext(start) elseif id==disc_code then if not discs or discs[start]==true then - local ok if gpossing then - start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else - start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end else start=getnext(start) @@ -31074,6 +31121,10 @@ local function addfeature(data,feature,specifications,prepareonly) end local descriptions=data.descriptions local resources=data.resources + if not descriptions or not resources then + report_otf("missing specification") + return + end local features=resources.features local sequences=resources.sequences if not features or not sequences then @@ -33297,7 +33348,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) local subpos=nil local postpos=nil reorderreph.coverage={} - rephbase[font]={} + rephbase[font]={} for i=1,#seqsubset do local subset=seqsubset[i] local kind=subset[1] @@ -33418,7 +33469,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) end end end - local current,base,firstcons=start,nil,nil + local current,base,firstcons,subnotafterbase,postnotafterbase=start,nil,nil,nil,nil if getstate(start,s_rphf) then current=getnext(getnext(start)) end @@ -33474,7 +33525,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) logprocess("reorder two, handle nbsp") end end - else + else local last=getnext(stop) while current~=last do local next=getnext(current) @@ -33537,8 +33588,8 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) logprocess("reorder two, handle matra") end end - if dependent_vowel[char] then - if pre_mark[char] then + if not moved[current] and dependent_vowel[char] then + if pre_mark[char] then moved[current]=true local prev,next=getboth(current) setlink(prev,next) @@ -34012,11 +34063,11 @@ local function analyze_next_chars_two(c,font) if pre_mark[v] and not already_pre_mark then already_pre_mark=true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts=="mixed" then - return c - else - already_post_mark=true - end + if devanagarihash[font].conjuncts=="mixed" then + return c + else + already_post_mark=true + end elseif below_mark[v] and not already_below_mark then already_below_mark=true elseif above_mark[v] and not already_above_mark then @@ -37079,7 +37130,7 @@ local afm=fonts.handlers.afm local pfb=fonts.handlers.pfb local hashes=fonts.hashes local identifiers=hashes.identifiers -local version=otf.version or 0.011 +local version=otf.version or 0.013 local shapescache=containers.define("fonts","shapes",version,true) local streamscache=containers.define("fonts","streams",version,true) local compact_streams=false @@ -37926,17 +37977,19 @@ if not modules then modules={} end modules ['font-imp-italics']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local next=next +local next,tonumber=next,tonumber local fonts=fonts local handlers=fonts.handlers local registerotffeature=handlers.otf.features.register local registerafmfeature=handlers.afm.features.register local function initialize(tfmdata,key,value) + local factor=tonumber(value) or 1 for unicode,character in next,tfmdata.characters do local olditalic=character.italic if olditalic and olditalic~=0 then character.width=character.width+olditalic character.italic=0 + character.bottomright=-factor*olditalic end end end -- cgit v1.2.3