summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/char-def.lua2301
-rw-r--r--tex/context/base/mkiv/char-ini.lua24
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-cff.lua23
-rw-r--r--tex/context/base/mkiv/font-dsp.lua20
-rw-r--r--tex/context/base/mkiv/font-imp-italics.lua8
-rw-r--r--tex/context/base/mkiv/font-mis.lua2
-rw-r--r--tex/context/base/mkiv/font-osd.lua103
-rw-r--r--tex/context/base/mkiv/font-otc.lua6
-rw-r--r--tex/context/base/mkiv/font-otl.lua2
-rw-r--r--tex/context/base/mkiv/font-ots.lua423
-rw-r--r--tex/context/base/mkiv/font-shp.lua2
-rw-r--r--tex/context/base/mkiv/math-dir.lua1
-rw-r--r--tex/context/base/mkiv/mult-low.lua10
-rw-r--r--tex/context/base/mkiv/mult-prm.lua6
-rw-r--r--tex/context/base/mkiv/pack-cut.mkiv8
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin24641 -> 24594 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin260468 -> 261499 bytes
-rw-r--r--tex/context/base/mkiv/strc-doc.lua6
-rw-r--r--tex/context/base/mkiv/strc-lst.lua9
-rw-r--r--tex/context/base/mkiv/type-set.mkiv1
-rw-r--r--tex/context/base/mkxl/anch-pgr.lmt7
-rw-r--r--tex/context/base/mkxl/anch-pos.lmt52
-rw-r--r--tex/context/base/mkxl/anch-pos.mkxl27
-rw-r--r--tex/context/base/mkxl/buff-ini.lmt2
-rw-r--r--tex/context/base/mkxl/cont-new.mkxl2
-rw-r--r--tex/context/base/mkxl/context.mkxl2
-rw-r--r--tex/context/base/mkxl/core-env.lmt48
-rw-r--r--tex/context/base/mkxl/core-uti.lmt4
-rw-r--r--tex/context/base/mkxl/font-con.lmt30
-rw-r--r--tex/context/base/mkxl/font-ctx.lmt36
-rw-r--r--tex/context/base/mkxl/font-imp-effects.lmt20
-rw-r--r--tex/context/base/mkxl/font-imp-math.lmt105
-rw-r--r--tex/context/base/mkxl/font-ini.mklx6
-rw-r--r--tex/context/base/mkxl/font-mat.mklx275
-rw-r--r--tex/context/base/mkxl/font-mps.lmt8
-rw-r--r--tex/context/base/mkxl/font-otl.lmt24
-rw-r--r--tex/context/base/mkxl/font-ots.lmt246
-rw-r--r--tex/context/base/mkxl/font-pre.mkxl4
-rw-r--r--tex/context/base/mkxl/grph-trf.mkxl2
-rw-r--r--tex/context/base/mkxl/lpdf-ano.lmt6
-rw-r--r--tex/context/base/mkxl/lpdf-emb.lmt132
-rw-r--r--tex/context/base/mkxl/lpdf-lmt.lmt12
-rw-r--r--tex/context/base/mkxl/lpdf-rul.lmt2
-rw-r--r--tex/context/base/mkxl/math-act.lmt1083
-rw-r--r--tex/context/base/mkxl/math-ali.mkxl184
-rw-r--r--tex/context/base/mkxl/math-del.mklx7
-rw-r--r--tex/context/base/mkxl/math-fbk.lmt4
-rw-r--r--tex/context/base/mkxl/math-fen.mkxl72
-rw-r--r--tex/context/base/mkxl/math-fnt.lmt5
-rw-r--r--tex/context/base/mkxl/math-frc.mkxl30
-rw-r--r--tex/context/base/mkxl/math-ini.mkxl659
-rw-r--r--tex/context/base/mkxl/math-map.lmt160
-rw-r--r--tex/context/base/mkxl/math-noa.lmt11
-rw-r--r--tex/context/base/mkxl/math-rad.mklx8
-rw-r--r--tex/context/base/mkxl/math-stc.mklx11
-rw-r--r--tex/context/base/mkxl/math-vfu.lmt11
-rw-r--r--tex/context/base/mkxl/mult-sys.mkxl1
-rw-r--r--tex/context/base/mkxl/node-ali.lmt64
-rw-r--r--tex/context/base/mkxl/node-ini.lmt2
-rw-r--r--tex/context/base/mkxl/pack-box.mkxl2
-rw-r--r--tex/context/base/mkxl/pack-cut.mkxl9
-rw-r--r--tex/context/base/mkxl/pack-mrl.mkxl6
-rw-r--r--tex/context/base/mkxl/pack-pos.mkxl4
-rw-r--r--tex/context/base/mkxl/pack-rul.lmt31
-rw-r--r--tex/context/base/mkxl/pack-rul.mkxl21
-rw-r--r--tex/context/base/mkxl/page-box.mklx17
-rw-r--r--tex/context/base/mkxl/spac-ver.lmt47
-rw-r--r--tex/context/base/mkxl/spac-ver.mkxl20
-rw-r--r--tex/context/base/mkxl/strc-lst.mklx2
-rw-r--r--tex/context/base/mkxl/strc-ref.lmt28
-rw-r--r--tex/context/base/mkxl/strc-ref.mklx20
-rw-r--r--tex/context/base/mkxl/strc-reg.lmt10
-rw-r--r--tex/context/base/mkxl/strc-reg.mkxl3
-rw-r--r--tex/context/base/mkxl/syst-ini.mkxl7
-rw-r--r--tex/context/base/mkxl/tabl-tbl.mkxl6
-rw-r--r--tex/context/base/mkxl/task-ini.lmt2
-rw-r--r--tex/context/base/mkxl/type-set.mkxl1
-rw-r--r--tex/context/fonts/mkiv/asana-math.lfg15
-rw-r--r--tex/context/fonts/mkiv/bonum-math.lfg741
-rw-r--r--tex/context/fonts/mkiv/cambria-math.lfg84
-rw-r--r--tex/context/fonts/mkiv/common-math.lfg106
-rw-r--r--tex/context/fonts/mkiv/concrete-math.lfg36
-rw-r--r--tex/context/fonts/mkiv/dejavu-math.lfg144
-rw-r--r--tex/context/fonts/mkiv/erewhon-math.lfg83
-rw-r--r--tex/context/fonts/mkiv/garamond-math.lfg353
-rw-r--r--tex/context/fonts/mkiv/generic-math.lfg27
-rw-r--r--tex/context/fonts/mkiv/kpfonts-math.lfg95
-rw-r--r--tex/context/fonts/mkiv/libertinus-math.lfg201
-rw-r--r--tex/context/fonts/mkiv/lm.lfg25
-rw-r--r--tex/context/fonts/mkiv/lucida-opentype-math.lfg180
-rw-r--r--tex/context/fonts/mkiv/minion-math.lfg99
-rw-r--r--tex/context/fonts/mkiv/pagella-math.lfg259
-rw-r--r--tex/context/fonts/mkiv/schola-math.lfg132
-rw-r--r--tex/context/fonts/mkiv/stix-two-math.lfg184
-rw-r--r--tex/context/fonts/mkiv/termes-math.lfg173
-rw-r--r--tex/context/fonts/mkiv/type-imp-concrete.mkiv58
-rw-r--r--tex/context/fonts/mkiv/type-imp-erewhon.mkiv46
-rw-r--r--tex/context/fonts/mkiv/type-imp-euler.mkiv8
-rw-r--r--tex/context/fonts/mkiv/type-imp-latinmodern.mkiv4
-rw-r--r--tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv2
-rw-r--r--tex/context/fonts/mkiv/type-imp-stix.mkiv31
-rw-r--r--tex/context/fonts/mkiv/type-imp-texgyre.mkiv25
-rw-r--r--tex/context/fonts/mkiv/type-imp-xits.mkiv4
-rw-r--r--tex/context/fonts/mkiv/xits-math.lfg27
-rw-r--r--tex/context/modules/mkiv/s-fonts-charts.mkiv6
-rw-r--r--tex/context/modules/mkiv/s-fonts-coverage.mkiv12
-rw-r--r--tex/context/modules/mkiv/s-fonts-shapes.lua139
-rw-r--r--tex/context/modules/mkiv/s-fonts-shapes.mkiv16
-rw-r--r--tex/context/modules/mkiv/s-math-characters.lua2
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua395
114 files changed, 7134 insertions, 3141 deletions
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]+[<[<ZWJ|ZWNJ>]+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]+[<[<ZWJ|ZWNJ>]+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+[<ZWNJ|ZWJ>]|<ZWNJ|ZWJ>+H>} + C+[N]+[A] + [< H+[<ZWNJ|ZWJ>] | {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--
+<p>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!</p>
+
<p>This module is a bit more split up that I'd like but since we also want to test
with plain <l n='tex'/> it has to be so. This module is part of <l n='context'/>
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.</p>
-- 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 (<before><disc><current=fl><after> 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
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index d75e37cee..9469ffdf0 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files 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
@@ -225,30 +225,6 @@ registerotffeature {
-- 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
local rawresources = rawdata and rawdata.resources
@@ -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 % <id: name @ size>
+% \tracingfonts\plussix % <id: name @ size>
%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.</p>
-- 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 (<before><disc><current=fl><after> 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
@@ -575,12 +598,26 @@ 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)
local list = parameters.list
if list then
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,80 +1052,219 @@ 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
@@ -1134,6 +1273,88 @@ 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
function mathtweaks.kerns(target,original,parameters)
@@ -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
@@ -1823,6 +2057,70 @@ 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 }
function mathtweaks.wipecues(target,original,parameters)
@@ -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
@@ -2358,6 +2658,163 @@ 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 = { }
function mathtweaks.version(target,original,parameters)
@@ -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,
@@ -66,6 +68,12 @@ return {
message = "this font is not supported",
},
{
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 1 },
+ presets.mathrsfscript { rscale = 1 },
+ presets.mathxitsarabic { rscale = 0.95 },
+ {
tweak = "dimensions",
list = {
-- nothing yet
@@ -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,184 +232,144 @@ 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 = {
-- -- for specific parameters see act file
@@ -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,17 +27,17 @@ 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 = {
@@ -45,60 +45,37 @@ return {
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 = {
@@ -22,60 +25,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 = {
@@ -30,122 +33,117 @@ return {
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
},
},
@@ -84,6 +58,34 @@ return {
-- -- 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 = {
@@ -86,6 +95,13 @@ return {
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 = {
-- [0x00060] = { yoffset = -0.05 }, -- grave
@@ -447,7 +463,7 @@ return {
-- "lowercasedoublestruck",
-- "lowercasefraktur",
"lowercasemonospace",
- "lowercasenormal",
+ -- "lowercasenormal",
-- "lowercasesansserifbold",
-- "lowercasesansserifnormal",
-- "lowercasegreeknormal",
@@ -551,6 +567,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,18 +205,9 @@ 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 = {
@@ -51,52 +53,39 @@ return {
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