From 0aa93a6d31a45d8df2d8516567b98967ce04f183 Mon Sep 17 00:00:00 2001
From: Hans Hagen
Date: Fri, 14 Oct 2022 10:56:48 +0200
Subject: 2022-10-14 10:15:00
---
tex/context/base/mkii/cont-new.mkii | 2 +-
tex/context/base/mkii/context.mkii | 2 +-
tex/context/base/mkiv/char-def.lua | 2301 +++++++++++++++++++-
tex/context/base/mkiv/char-ini.lua | 24 +-
tex/context/base/mkiv/cont-new.mkiv | 2 +-
tex/context/base/mkiv/context.mkiv | 2 +-
tex/context/base/mkiv/font-cff.lua | 23 +-
tex/context/base/mkiv/font-dsp.lua | 20 +-
tex/context/base/mkiv/font-imp-italics.lua | 8 +-
tex/context/base/mkiv/font-mis.lua | 2 +-
tex/context/base/mkiv/font-osd.lua | 103 +-
tex/context/base/mkiv/font-otc.lua | 6 +
tex/context/base/mkiv/font-otl.lua | 2 +-
tex/context/base/mkiv/font-ots.lua | 423 ++--
tex/context/base/mkiv/font-shp.lua | 2 +-
tex/context/base/mkiv/math-dir.lua | 1 +
tex/context/base/mkiv/mult-low.lua | 10 +-
tex/context/base/mkiv/mult-prm.lua | 6 +
tex/context/base/mkiv/pack-cut.mkiv | 8 +-
tex/context/base/mkiv/status-files.pdf | Bin 24641 -> 24594 bytes
tex/context/base/mkiv/status-lua.pdf | Bin 260468 -> 261499 bytes
tex/context/base/mkiv/strc-doc.lua | 6 +-
tex/context/base/mkiv/strc-lst.lua | 9 +
tex/context/base/mkiv/type-set.mkiv | 1 +
tex/context/base/mkxl/anch-pgr.lmt | 7 +-
tex/context/base/mkxl/anch-pos.lmt | 52 +-
tex/context/base/mkxl/anch-pos.mkxl | 27 +-
tex/context/base/mkxl/buff-ini.lmt | 2 +-
tex/context/base/mkxl/cont-new.mkxl | 2 +-
tex/context/base/mkxl/context.mkxl | 2 +-
tex/context/base/mkxl/core-env.lmt | 48 +-
tex/context/base/mkxl/core-uti.lmt | 4 +-
tex/context/base/mkxl/font-con.lmt | 30 +-
tex/context/base/mkxl/font-ctx.lmt | 36 +-
tex/context/base/mkxl/font-imp-effects.lmt | 20 +-
tex/context/base/mkxl/font-imp-math.lmt | 105 +-
tex/context/base/mkxl/font-ini.mklx | 6 +-
tex/context/base/mkxl/font-mat.mklx | 275 ++-
tex/context/base/mkxl/font-mps.lmt | 8 +
tex/context/base/mkxl/font-otl.lmt | 24 +-
tex/context/base/mkxl/font-ots.lmt | 246 ++-
tex/context/base/mkxl/font-pre.mkxl | 4 -
tex/context/base/mkxl/grph-trf.mkxl | 2 +-
tex/context/base/mkxl/lpdf-ano.lmt | 6 +-
tex/context/base/mkxl/lpdf-emb.lmt | 132 +-
tex/context/base/mkxl/lpdf-lmt.lmt | 12 +-
tex/context/base/mkxl/lpdf-rul.lmt | 2 -
tex/context/base/mkxl/math-act.lmt | 1083 +++++++--
tex/context/base/mkxl/math-ali.mkxl | 184 +-
tex/context/base/mkxl/math-del.mklx | 7 +
tex/context/base/mkxl/math-fbk.lmt | 4 +-
tex/context/base/mkxl/math-fen.mkxl | 72 +-
tex/context/base/mkxl/math-fnt.lmt | 5 +-
tex/context/base/mkxl/math-frc.mkxl | 30 +-
tex/context/base/mkxl/math-ini.mkxl | 659 +++---
tex/context/base/mkxl/math-map.lmt | 160 +-
tex/context/base/mkxl/math-noa.lmt | 11 +-
tex/context/base/mkxl/math-rad.mklx | 8 +-
tex/context/base/mkxl/math-stc.mklx | 11 +-
tex/context/base/mkxl/math-vfu.lmt | 11 +-
tex/context/base/mkxl/mult-sys.mkxl | 1 +
tex/context/base/mkxl/node-ali.lmt | 64 +-
tex/context/base/mkxl/node-ini.lmt | 2 +
tex/context/base/mkxl/pack-box.mkxl | 2 +-
tex/context/base/mkxl/pack-cut.mkxl | 9 +-
tex/context/base/mkxl/pack-mrl.mkxl | 6 +-
tex/context/base/mkxl/pack-pos.mkxl | 4 +-
tex/context/base/mkxl/pack-rul.lmt | 31 +-
tex/context/base/mkxl/pack-rul.mkxl | 21 +-
tex/context/base/mkxl/page-box.mklx | 17 +-
tex/context/base/mkxl/spac-ver.lmt | 47 +-
tex/context/base/mkxl/spac-ver.mkxl | 20 +-
tex/context/base/mkxl/strc-lst.mklx | 2 +-
tex/context/base/mkxl/strc-ref.lmt | 28 +-
tex/context/base/mkxl/strc-ref.mklx | 20 +-
tex/context/base/mkxl/strc-reg.lmt | 10 +-
tex/context/base/mkxl/strc-reg.mkxl | 3 +
tex/context/base/mkxl/syst-ini.mkxl | 7 +-
tex/context/base/mkxl/tabl-tbl.mkxl | 6 +-
tex/context/base/mkxl/task-ini.lmt | 2 +-
tex/context/base/mkxl/type-set.mkxl | 1 +
tex/context/fonts/mkiv/asana-math.lfg | 15 +-
tex/context/fonts/mkiv/bonum-math.lfg | 741 ++++---
tex/context/fonts/mkiv/cambria-math.lfg | 84 +-
tex/context/fonts/mkiv/common-math.lfg | 106 +
tex/context/fonts/mkiv/concrete-math.lfg | 36 +-
tex/context/fonts/mkiv/dejavu-math.lfg | 144 +-
tex/context/fonts/mkiv/erewhon-math.lfg | 83 +-
tex/context/fonts/mkiv/garamond-math.lfg | 353 +--
tex/context/fonts/mkiv/generic-math.lfg | 27 +
tex/context/fonts/mkiv/kpfonts-math.lfg | 95 +-
tex/context/fonts/mkiv/libertinus-math.lfg | 201 +-
tex/context/fonts/mkiv/lm.lfg | 25 +-
tex/context/fonts/mkiv/lucida-opentype-math.lfg | 180 +-
tex/context/fonts/mkiv/minion-math.lfg | 99 +-
tex/context/fonts/mkiv/pagella-math.lfg | 259 +--
tex/context/fonts/mkiv/schola-math.lfg | 132 +-
tex/context/fonts/mkiv/stix-two-math.lfg | 184 +-
tex/context/fonts/mkiv/termes-math.lfg | 173 +-
tex/context/fonts/mkiv/type-imp-concrete.mkiv | 58 +-
tex/context/fonts/mkiv/type-imp-erewhon.mkiv | 46 +-
tex/context/fonts/mkiv/type-imp-euler.mkiv | 8 +-
tex/context/fonts/mkiv/type-imp-latinmodern.mkiv | 4 +-
.../fonts/mkiv/type-imp-newcomputermodern.mkiv | 2 +-
tex/context/fonts/mkiv/type-imp-stix.mkiv | 31 +-
tex/context/fonts/mkiv/type-imp-texgyre.mkiv | 25 +-
tex/context/fonts/mkiv/type-imp-xits.mkiv | 4 +-
tex/context/fonts/mkiv/xits-math.lfg | 27 +
tex/context/modules/mkiv/s-fonts-charts.mkiv | 6 +-
tex/context/modules/mkiv/s-fonts-coverage.mkiv | 12 +-
tex/context/modules/mkiv/s-fonts-shapes.lua | 139 +-
tex/context/modules/mkiv/s-fonts-shapes.mkiv | 16 +-
tex/context/modules/mkiv/s-math-characters.lua | 2 +-
tex/generic/context/luatex/luatex-fonts-merged.lua | 395 ++--
114 files changed, 7134 insertions(+), 3141 deletions(-)
create mode 100644 tex/context/fonts/mkiv/common-math.lfg
(limited to 'tex')
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 545627d07..6bcff2af2 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2022.09.16 14:39}
+\newcontextversion{2022.10.14 10:13}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 90eea4118..e02334f8d 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2022.09.16 14:39}
+\edef\contextversion{2022.10.14 10:13}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua
index 57061735b..a5a21687b 100644
--- a/tex/context/base/mkiv/char-def.lua
+++ b/tex/context/base/mkiv/char-def.lua
@@ -45,6 +45,43 @@ local variants_dotted={
[0xFE00]="dotted form",
}
+local variants_90={
+ [0xFE00]="rotated 90 degrees",
+}
+
+local variants_180={
+ [0xFE01]="rotated 180 degrees",
+}
+
+local variants_270={
+ [0xFE02]="rotated 270 degrees",
+}
+
+local variants_expanded={
+ [0xFE00]="expanded",
+}
+
+local variants_90_180={
+ [0xFE00]="rotated 90 degrees",
+ [0xFE01]="rotated 180 degrees",
+}
+
+local variants_90_180_270={
+ [0xFE00]="rotated 90 degrees",
+ [0xFE01]="rotated 180 degrees",
+ [0xFE02]="rotated 270 degrees",
+}
+
+local variants_180_270={
+ [0xFE01]="rotated 180 degrees",
+ [0xFE02]="rotated 270 degrees",
+}
+
+local variants_90_270={
+ [0xFE00]="rotated 90 degrees",
+ [0xFE02]="rotated 270 degrees",
+}
+
characters = characters or { }
characters.data={
@@ -480,9 +517,9 @@ characters.data={
direction="es",
linebreak="hy",
mathclass="ordinary",
- mathgroup="binary arithmetic",
mathextensible="h",
mathfiller="relfill",
+ mathgroup="binary arithmetic",
mathname="mathhyphen",
mathsymbol=0x2212,
synonyms={ "hyphen or minus sign", "hyphus" },
@@ -701,8 +738,8 @@ characters.data={
},
{
class="relation",
- name="Relbar",
comment="useless",
+ name="Relbar",
},
},
unicodeslot=0x3D,
@@ -1048,8 +1085,8 @@ characters.data={
{
adobename="asciicircum",
category="sk",
- comment="the Hat looks rediculous in most fonts",
cjkwd="na",
+ comment="the Hat looks rediculous in most fonts",
contextname="textasciicircum",
description="CIRCUMFLEX ACCENT",
direction="on",
@@ -23219,6 +23256,7 @@ characters.data={
direction="l",
indic="c",
linebreak="al",
+ synonyms={ "bangla khanda ta" },
unicodeslot=0x9CE,
},
[0x9D7]={
@@ -28096,6 +28134,13 @@ characters.data={
linebreak="al",
unicodeslot=0xCF2,
},
+ [0xCF3]={
+ category="mc",
+ description="KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0xCF3,
+ },
[0xD00]={
category="mn",
description="MALAYALAM SIGN COMBINING ANUSVARA ABOVE",
@@ -30909,6 +30954,13 @@ characters.data={
linebreak="sa",
unicodeslot=0xECD,
},
+ [0xECE]={
+ category="mn",
+ description="LAO YAMAKKAN",
+ direction="nsm",
+ linebreak="sa",
+ unicodeslot=0xECE,
+ },
[0xED0]={
category="nd",
description="LAO DIGIT ZERO",
@@ -56408,7 +56460,7 @@ characters.data={
combining=0xEA,
description="COMBINING DOUBLE CIRCUMFLEX ABOVE",
direction="nsm",
- linebreak="cm",
+ linebreak="gl",
unicodeslot=0x1DCD,
},
[0x1DCE]={
@@ -56784,7 +56836,7 @@ characters.data={
combining=0xE9,
description="COMBINING DOUBLE INVERTED BREVE BELOW",
direction="nsm",
- linebreak="cm",
+ linebreak="gl",
unicodeslot=0x1DFC,
},
[0x1DFD]={
@@ -63092,7 +63144,7 @@ characters.data={
category="po",
description="QUADRUPLE PRIME",
direction="on",
- linebreak="al",
+ linebreak="po",
mathclass="prime",
mathname="quadrupleprime",
specials={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 },
@@ -63195,6 +63247,7 @@ characters.data={
linebreak="al",
mathclass="ghost",
mathname="invisiblecomma",
+ synonyms={ "invisible comma" },
unicodeslot=0x2063,
},
[0x2064]={
@@ -66926,8 +66979,8 @@ characters.data={
description="EMPTY SET",
direction="on",
linebreak="al",
- mathgroup="constant set",
mathclass="ordinary",
+ mathgroup="constant set",
mathname="emptyset",
synonyms={ "null set" },
unicodeslot=0x2205,
@@ -67102,8 +67155,8 @@ characters.data={
},
{
class="relation",
- name="relbar",
comment="useless",
+ name="relbar",
},
},
unicodeslot=0x2212,
@@ -159588,6 +159641,30 @@ characters.data={
linebreak="al",
unicodeslot=0x10EB1,
},
+ [0x10EFD]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC SMALL LOW WORD SAKTA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10EFD,
+ },
+ [0x10EFE]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC SMALL LOW WORD QASR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10EFE,
+ },
+ [0x10EFF]={
+ category="mn",
+ combining=0xDC,
+ description="ARABIC SMALL LOW WORD MADDA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x10EFF,
+ },
[0x10F00]={
category="lo",
description="OLD SOGDIAN LETTER ALEPH",
@@ -164352,6 +164429,27 @@ characters.data={
linebreak="cm",
unicodeslot=0x1123E,
},
+ [0x1123F]={
+ category="lo",
+ description="KHOJKI LETTER QA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1123F,
+ },
+ [0x11240]={
+ category="lo",
+ description="KHOJKI LETTER SHORT I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11240,
+ },
+ [0x11241]={
+ category="mn",
+ description="KHOJKI VOWEL SIGN VOCALIC R",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11241,
+ },
[0x11280]={
category="lo",
description="MULTANI LETTER A",
@@ -172828,6 +172926,76 @@ characters.data={
linebreak="al",
unicodeslot=0x11AF8,
},
+ [0x11B00]={
+ category="po",
+ description="DEVANAGARI HEAD MARK",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B00,
+ },
+ [0x11B01]={
+ category="po",
+ description="DEVANAGARI HEAD MARK WITH HEADSTROKE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B01,
+ },
+ [0x11B02]={
+ category="po",
+ description="DEVANAGARI SIGN BHALE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B02,
+ },
+ [0x11B03]={
+ category="po",
+ description="DEVANAGARI SIGN BHALE WITH HOOK",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B03,
+ },
+ [0x11B04]={
+ category="po",
+ description="DEVANAGARI SIGN EXTENDED BHALE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B04,
+ },
+ [0x11B05]={
+ category="po",
+ description="DEVANAGARI SIGN EXTENDED BHALE WITH HOOK",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B05,
+ },
+ [0x11B06]={
+ category="po",
+ description="DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B06,
+ },
+ [0x11B07]={
+ category="po",
+ description="DEVANAGARI SIGN WESTERN NINE-LIKE BHALE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B07,
+ },
+ [0x11B08]={
+ category="po",
+ description="DEVANAGARI SIGN REVERSED NINE-LIKE BHALE",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B08,
+ },
+ [0x11B09]={
+ category="po",
+ description="DEVANAGARI SIGN MINDU",
+ direction="l",
+ linebreak="bb",
+ unicodeslot=0x11B09,
+ },
[0x11C00]={
category="lo",
description="BHAIKSUKI LETTER A",
@@ -175129,6 +175297,610 @@ characters.data={
linebreak="al",
unicodeslot=0x11EF8,
},
+ [0x11F00]={
+ category="mn",
+ description="KAWI SIGN CANDRABINDU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F00,
+ },
+ [0x11F01]={
+ category="mn",
+ description="KAWI SIGN ANUSVARA",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F01,
+ },
+ [0x11F02]={
+ category="lo",
+ description="KAWI SIGN REPHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F02,
+ },
+ [0x11F03]={
+ category="mc",
+ description="KAWI SIGN VISARGA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F03,
+ },
+ [0x11F04]={
+ category="lo",
+ description="KAWI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F04,
+ },
+ [0x11F05]={
+ category="lo",
+ description="KAWI LETTER AA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F05,
+ },
+ [0x11F06]={
+ category="lo",
+ description="KAWI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F06,
+ },
+ [0x11F07]={
+ category="lo",
+ description="KAWI LETTER II",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F07,
+ },
+ [0x11F08]={
+ category="lo",
+ description="KAWI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F08,
+ },
+ [0x11F09]={
+ category="lo",
+ description="KAWI LETTER UU",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F09,
+ },
+ [0x11F0A]={
+ category="lo",
+ description="KAWI LETTER VOCALIC R",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0A,
+ },
+ [0x11F0B]={
+ category="lo",
+ description="KAWI LETTER VOCALIC RR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0B,
+ },
+ [0x11F0C]={
+ category="lo",
+ description="KAWI LETTER VOCALIC L",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0C,
+ },
+ [0x11F0D]={
+ category="lo",
+ description="KAWI LETTER VOCALIC LL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0D,
+ },
+ [0x11F0E]={
+ category="lo",
+ description="KAWI LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0E,
+ },
+ [0x11F0F]={
+ category="lo",
+ description="KAWI LETTER AI",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F0F,
+ },
+ [0x11F10]={
+ category="lo",
+ description="KAWI LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F10,
+ },
+ [0x11F12]={
+ category="lo",
+ description="KAWI LETTER KA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F12,
+ },
+ [0x11F13]={
+ category="lo",
+ description="KAWI LETTER KHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F13,
+ },
+ [0x11F14]={
+ category="lo",
+ description="KAWI LETTER GA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F14,
+ },
+ [0x11F15]={
+ category="lo",
+ description="KAWI LETTER GHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F15,
+ },
+ [0x11F16]={
+ category="lo",
+ description="KAWI LETTER NGA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F16,
+ },
+ [0x11F17]={
+ category="lo",
+ description="KAWI LETTER CA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F17,
+ },
+ [0x11F18]={
+ category="lo",
+ description="KAWI LETTER CHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F18,
+ },
+ [0x11F19]={
+ category="lo",
+ description="KAWI LETTER JA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F19,
+ },
+ [0x11F1A]={
+ category="lo",
+ description="KAWI LETTER JHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1A,
+ },
+ [0x11F1B]={
+ category="lo",
+ description="KAWI LETTER NYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1B,
+ },
+ [0x11F1C]={
+ category="lo",
+ description="KAWI LETTER TTA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1C,
+ },
+ [0x11F1D]={
+ category="lo",
+ description="KAWI LETTER TTHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1D,
+ },
+ [0x11F1E]={
+ category="lo",
+ description="KAWI LETTER DDA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1E,
+ },
+ [0x11F1F]={
+ category="lo",
+ description="KAWI LETTER DDHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F1F,
+ },
+ [0x11F20]={
+ category="lo",
+ description="KAWI LETTER NNA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F20,
+ },
+ [0x11F21]={
+ category="lo",
+ description="KAWI LETTER TA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F21,
+ },
+ [0x11F22]={
+ category="lo",
+ description="KAWI LETTER THA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F22,
+ },
+ [0x11F23]={
+ category="lo",
+ description="KAWI LETTER DA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F23,
+ },
+ [0x11F24]={
+ category="lo",
+ description="KAWI LETTER DHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F24,
+ },
+ [0x11F25]={
+ category="lo",
+ description="KAWI LETTER NA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F25,
+ },
+ [0x11F26]={
+ category="lo",
+ description="KAWI LETTER PA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F26,
+ },
+ [0x11F27]={
+ category="lo",
+ description="KAWI LETTER PHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F27,
+ },
+ [0x11F28]={
+ category="lo",
+ description="KAWI LETTER BA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F28,
+ },
+ [0x11F29]={
+ category="lo",
+ description="KAWI LETTER BHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F29,
+ },
+ [0x11F2A]={
+ category="lo",
+ description="KAWI LETTER MA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2A,
+ },
+ [0x11F2B]={
+ category="lo",
+ description="KAWI LETTER YA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2B,
+ },
+ [0x11F2C]={
+ category="lo",
+ description="KAWI LETTER RA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2C,
+ },
+ [0x11F2D]={
+ category="lo",
+ description="KAWI LETTER LA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2D,
+ },
+ [0x11F2E]={
+ category="lo",
+ description="KAWI LETTER WA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2E,
+ },
+ [0x11F2F]={
+ category="lo",
+ description="KAWI LETTER SHA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F2F,
+ },
+ [0x11F30]={
+ category="lo",
+ description="KAWI LETTER SSA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F30,
+ },
+ [0x11F31]={
+ category="lo",
+ description="KAWI LETTER SA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F31,
+ },
+ [0x11F32]={
+ category="lo",
+ description="KAWI LETTER HA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F32,
+ },
+ [0x11F33]={
+ category="lo",
+ description="KAWI LETTER JNYA",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x11F33,
+ },
+ [0x11F34]={
+ category="mc",
+ description="KAWI VOWEL SIGN AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F34,
+ },
+ [0x11F35]={
+ category="mc",
+ description="KAWI VOWEL SIGN ALTERNATE AA",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F35,
+ },
+ [0x11F36]={
+ category="mn",
+ description="KAWI VOWEL SIGN I",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F36,
+ },
+ [0x11F37]={
+ category="mn",
+ description="KAWI VOWEL SIGN II",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F37,
+ },
+ [0x11F38]={
+ category="mn",
+ description="KAWI VOWEL SIGN U",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F38,
+ },
+ [0x11F39]={
+ category="mn",
+ description="KAWI VOWEL SIGN UU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F39,
+ },
+ [0x11F3A]={
+ category="mn",
+ description="KAWI VOWEL SIGN VOCALIC R",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F3A,
+ },
+ [0x11F3E]={
+ category="mc",
+ description="KAWI VOWEL SIGN E",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F3E,
+ },
+ [0x11F3F]={
+ category="mc",
+ description="KAWI VOWEL SIGN AI",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F3F,
+ },
+ [0x11F40]={
+ category="mn",
+ description="KAWI VOWEL SIGN EU",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F40,
+ },
+ [0x11F41]={
+ category="mc",
+ combining=0x9,
+ description="KAWI SIGN KILLER",
+ direction="l",
+ linebreak="cm",
+ unicodeslot=0x11F41,
+ },
+ [0x11F42]={
+ category="mn",
+ combining=0x9,
+ description="KAWI CONJOINER",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x11F42,
+ },
+ [0x11F43]={
+ category="po",
+ description="KAWI DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11F43,
+ },
+ [0x11F44]={
+ category="po",
+ description="KAWI DOUBLE DANDA",
+ direction="l",
+ linebreak="ba",
+ unicodeslot=0x11F44,
+ },
+ [0x11F45]={
+ category="po",
+ description="KAWI PUNCTUATION SECTION MARKER",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F45,
+ },
+ [0x11F46]={
+ category="po",
+ description="KAWI PUNCTUATION ALTERNATE SECTION MARKER",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F46,
+ },
+ [0x11F47]={
+ category="po",
+ description="KAWI PUNCTUATION FLOWER",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F47,
+ },
+ [0x11F48]={
+ category="po",
+ description="KAWI PUNCTUATION SPACE FILLER",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F48,
+ },
+ [0x11F49]={
+ category="po",
+ description="KAWI PUNCTUATION DOT",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F49,
+ },
+ [0x11F4A]={
+ category="po",
+ description="KAWI PUNCTUATION DOUBLE DOT",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4A,
+ },
+ [0x11F4B]={
+ category="po",
+ description="KAWI PUNCTUATION TRIPLE DOT",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4B,
+ },
+ [0x11F4C]={
+ category="po",
+ description="KAWI PUNCTUATION CIRCLE",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4C,
+ },
+ [0x11F4D]={
+ category="po",
+ description="KAWI PUNCTUATION FILLED CIRCLE",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4D,
+ },
+ [0x11F4E]={
+ category="po",
+ description="KAWI PUNCTUATION SPIRAL",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4E,
+ },
+ [0x11F4F]={
+ category="po",
+ description="KAWI PUNCTUATION CLOSING SPIRAL",
+ direction="l",
+ linebreak="id",
+ unicodeslot=0x11F4F,
+ },
+ [0x11F50]={
+ category="nd",
+ description="KAWI DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F50,
+ },
+ [0x11F51]={
+ category="nd",
+ description="KAWI DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F51,
+ },
+ [0x11F52]={
+ category="nd",
+ description="KAWI DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F52,
+ },
+ [0x11F53]={
+ category="nd",
+ description="KAWI DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F53,
+ },
+ [0x11F54]={
+ category="nd",
+ description="KAWI DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F54,
+ },
+ [0x11F55]={
+ category="nd",
+ description="KAWI DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F55,
+ },
+ [0x11F56]={
+ category="nd",
+ description="KAWI DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F56,
+ },
+ [0x11F57]={
+ category="nd",
+ description="KAWI DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F57,
+ },
+ [0x11F58]={
+ category="nd",
+ description="KAWI DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F58,
+ },
+ [0x11F59]={
+ category="nd",
+ description="KAWI DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x11F59,
+ },
[0x11FB0]={
category="lo",
description="LISU LETTER YHA",
@@ -185847,6 +186619,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13091,
+ variants=variants_90,
},
[0x13092]={
category="lo",
@@ -185854,6 +186627,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13092,
+ variants=variants_90,
},
[0x13093]={
category="lo",
@@ -185861,6 +186635,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13093,
+ variants=variants_180,
},
[0x13094]={
category="lo",
@@ -186015,6 +186790,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x130A9,
+ variants=variants_180,
},
[0x130AA]={
category="lo",
@@ -186729,6 +187505,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1310F,
+ variants=variants_90,
},
[0x13110]={
category="lo",
@@ -186785,6 +187562,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13117,
+ variants=variants_270,
},
[0x13118]={
category="lo",
@@ -186820,6 +187598,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1311C,
+ variants=variants_90,
},
[0x1311D]={
category="lo",
@@ -186855,6 +187634,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13121,
+ variants=variants_90,
},
[0x13122]={
category="lo",
@@ -186897,6 +187677,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13127,
+ variants=variants_90,
},
[0x13128]={
category="lo",
@@ -187023,6 +187804,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13139,
+ variants=variants_90_270,
},
[0x1313A]={
category="lo",
@@ -187541,6 +188323,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13183,
+ variants=variants_270,
},
[0x13184]={
category="lo",
@@ -187569,6 +188352,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13187,
+ variants=variants_180,
},
[0x13188]={
category="lo",
@@ -187744,6 +188528,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131A0,
+ variants=variants_90_270,
},
[0x131A1]={
category="lo",
@@ -187863,6 +188648,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131B1,
+ variants=variants_90_180,
},
[0x131B2]={
category="lo",
@@ -187912,6 +188698,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131B8,
+ variants=variants_90,
},
[0x131B9]={
category="lo",
@@ -187919,6 +188706,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131B9,
+ variants=variants_90,
},
[0x131BA]={
category="lo",
@@ -187926,6 +188714,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131BA,
+ variants=variants_270,
},
[0x131BB]={
category="lo",
@@ -188045,6 +188834,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131CB,
+ variants=variants_90,
},
[0x131CC]={
category="lo",
@@ -188290,6 +189080,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131EE,
+ variants=variants_180_270,
},
[0x131EF]={
category="lo",
@@ -188360,6 +189151,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131F8,
+ variants=variants_180,
},
[0x131F9]={
category="lo",
@@ -188367,6 +189159,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131F9,
+ variants=variants_90_180,
},
[0x131FA]={
category="lo",
@@ -188374,6 +189167,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x131FA,
+ variants=variants_90_180,
},
[0x131FB]={
category="lo",
@@ -188570,6 +189364,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13216,
+ variants=variants_270,
},
[0x13217]={
category="lo",
@@ -189025,6 +189820,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13257,
+ variants=variants_180,
},
[0x13258]={
category="lo",
@@ -189277,6 +190073,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1327B,
+ variants=variants_270,
},
[0x1327C]={
category="lo",
@@ -189305,6 +190102,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1327F,
+ variants=variants_90_180,
},
[0x13280]={
category="lo",
@@ -189347,6 +190145,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13285,
+ variants=variants_90,
},
[0x13286]={
category="lo",
@@ -189396,6 +190195,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1328C,
+ variants=variants_90,
},
[0x1328D]={
category="lo",
@@ -189564,6 +190364,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132A4,
+ variants=variants_180_270,
},
[0x132A5]={
category="lo",
@@ -189606,6 +190407,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132AA,
+ variants=variants_90,
},
[0x132AB]={
category="lo",
@@ -189837,6 +190639,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132CB,
+ variants=variants_90,
},
[0x132CC]={
category="lo",
@@ -189956,6 +190759,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132DC,
+ variants=variants_90,
},
[0x132DD]={
category="lo",
@@ -190033,6 +190837,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132E7,
+ variants=variants_90_270,
},
[0x132E8]={
category="lo",
@@ -190047,6 +190852,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132E9,
+ variants=variants_270,
},
[0x132EA]={
category="lo",
@@ -190152,6 +190958,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132F8,
+ variants=variants_270,
},
[0x132F9]={
category="lo",
@@ -190187,6 +190994,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x132FD,
+ variants=variants_270,
},
[0x132FE]={
category="lo",
@@ -190222,6 +191030,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13302,
+ variants=variants_270,
},
[0x13303]={
category="lo",
@@ -190229,6 +191038,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13303,
+ variants=variants_270,
},
[0x13304]={
category="lo",
@@ -190257,6 +191067,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13307,
+ variants=variants_90,
},
[0x13308]={
category="lo",
@@ -190264,6 +191075,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13308,
+ variants=variants_180,
},
[0x13309]={
category="lo",
@@ -190320,6 +191132,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13310,
+ variants=variants_270,
},
[0x13311]={
category="lo",
@@ -190327,6 +191140,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13311,
+ variants=variants_270,
},
[0x13312]={
category="lo",
@@ -190334,6 +191148,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13312,
+ variants=variants_180_270,
},
[0x13313]={
category="lo",
@@ -190341,6 +191156,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13313,
+ variants=variants_180_270,
},
[0x13314]={
category="lo",
@@ -190348,6 +191164,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13314,
+ variants=variants_180_270,
},
[0x13315]={
category="lo",
@@ -190397,6 +191214,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1331B,
+ variants=variants_90_180,
},
[0x1331C]={
category="lo",
@@ -190404,6 +191222,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1331C,
+ variants=variants_270,
},
[0x1331D]={
category="lo",
@@ -190439,6 +191258,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13321,
+ variants=variants_180_270,
},
[0x13322]={
category="lo",
@@ -190446,6 +191266,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13322,
+ variants=variants_90_180,
},
[0x13323]={
category="lo",
@@ -190551,6 +191372,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13331,
+ variants=variants_180_270,
},
[0x13332]={
category="lo",
@@ -190621,6 +191443,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1333B,
+ variants=variants_90,
},
[0x1333C]={
category="lo",
@@ -190628,6 +191451,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1333C,
+ variants=variants_90,
},
[0x1333D]={
category="lo",
@@ -190726,6 +191550,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1334A,
+ variants=variants_270,
},
[0x1334B]={
category="lo",
@@ -190887,6 +191712,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13361,
+ variants=variants_270,
},
[0x13362]={
category="lo",
@@ -191013,6 +191839,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13373,
+ variants=variants_270,
},
[0x13374]={
category="lo",
@@ -191041,6 +191868,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13377,
+ variants=variants_90,
},
[0x13378]={
category="lo",
@@ -191048,6 +191876,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13378,
+ variants=variants_90,
},
[0x13379]={
category="lo",
@@ -191083,6 +191912,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1337D,
+ variants=variants_270,
},
[0x1337E]={
category="lo",
@@ -191139,6 +191969,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13385,
+ variants=variants_270,
},
[0x13386]={
category="lo",
@@ -191279,6 +192110,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13399,
+ variants=variants_90,
},
[0x1339A]={
category="lo",
@@ -191286,6 +192118,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1339A,
+ variants=variants_90,
},
[0x1339B]={
category="lo",
@@ -191433,6 +192266,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133AF,
+ variants=variants_270,
},
[0x133B0]={
category="lo",
@@ -191440,6 +192274,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133B0,
+ variants=variants_270,
},
[0x133B1]={
category="lo",
@@ -191545,6 +192380,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133BF,
+ variants=variants_270,
},
[0x133C0]={
category="lo",
@@ -191685,6 +192521,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133D3,
+ variants=variants_90,
},
[0x133D4]={
category="lo",
@@ -191755,6 +192592,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133DD,
+ variants=variants_270,
},
[0x133DE]={
category="lo",
@@ -191902,6 +192740,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133F2,
+ variants=variants_90,
},
[0x133F3]={
category="lo",
@@ -191923,6 +192762,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133F5,
+ variants=variants_90,
},
[0x133F6]={
category="lo",
@@ -191930,6 +192770,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x133F6,
+ variants=variants_90,
},
[0x133F7]={
category="lo",
@@ -192021,6 +192862,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13403,
+ variants=variants_90,
},
[0x13404]={
category="lo",
@@ -192154,6 +192996,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13416,
+ variants=variants_90,
},
[0x13417]={
category="lo",
@@ -192175,6 +193018,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13419,
+ variants=variants_90_180_270,
},
[0x1341A]={
category="lo",
@@ -192182,6 +193026,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1341A,
+ variants=variants_90,
},
[0x1341B]={
category="lo",
@@ -192245,6 +193090,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x13423,
+ variants=variants_90,
},
[0x13424]={
category="lo",
@@ -192308,6 +193154,7 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1342C,
+ variants=variants_270,
},
[0x1342D]={
category="lo",
@@ -192322,6 +193169,14 @@ characters.data={
direction="l",
linebreak="al",
unicodeslot=0x1342E,
+ variants=variants_270,
+ },
+ [0x1342F]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH V011D",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1342F,
},
[0x13430]={
category="cf",
@@ -192386,6 +193241,213 @@ characters.data={
linebreak="cl",
unicodeslot=0x13438,
},
+ [0x13439]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH INSERT AT MIDDLE",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x13439,
+ },
+ [0x1343A]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH INSERT AT TOP",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x1343A,
+ },
+ [0x1343B]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH INSERT AT BOTTOM",
+ direction="l",
+ linebreak="gl",
+ unicodeslot=0x1343B,
+ },
+ [0x1343C]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE",
+ direction="l",
+ linebreak="op",
+ unicodeslot=0x1343C,
+ },
+ [0x1343D]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH END ENCLOSURE",
+ direction="l",
+ linebreak="cl",
+ unicodeslot=0x1343D,
+ },
+ [0x1343E]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE",
+ direction="l",
+ linebreak="op",
+ unicodeslot=0x1343E,
+ },
+ [0x1343F]={
+ category="cf",
+ description="EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE",
+ direction="l",
+ linebreak="cl",
+ unicodeslot=0x1343F,
+ },
+ [0x13440]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13440,
+ },
+ [0x13441]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH FULL BLANK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13441,
+ },
+ [0x13442]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH HALF BLANK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13442,
+ },
+ [0x13443]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH LOST SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13443,
+ variants=variants_expanded,
+ },
+ [0x13444]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH HALF LOST SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13444,
+ variants=variants_expanded,
+ },
+ [0x13445]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH TALL LOST SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13445,
+ variants=variants_expanded,
+ },
+ [0x13446]={
+ category="lo",
+ description="EGYPTIAN HIEROGLYPH WIDE LOST SIGN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x13446,
+ variants=variants_expanded,
+ },
+ [0x13447]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13447,
+ },
+ [0x13448]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13448,
+ },
+ [0x13449]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13449,
+ },
+ [0x1344A]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344A,
+ },
+ [0x1344B]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344B,
+ },
+ [0x1344C]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344C,
+ },
+ [0x1344D]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344D,
+ },
+ [0x1344E]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344E,
+ },
+ [0x1344F]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1344F,
+ },
+ [0x13450]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13450,
+ },
+ [0x13451]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13451,
+ },
+ [0x13452]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13452,
+ },
+ [0x13453]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13453,
+ },
+ [0x13454]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13454,
+ },
+ [0x13455]={
+ category="mn",
+ description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x13455,
+ },
[0x14400]={
category="lo",
description="ANATOLIAN HIEROGLYPH A001",
@@ -216633,6 +217695,14 @@ characters.data={
linebreak="id",
unicodeslot=0x1B122,
},
+ [0x1B132]={
+ category="lo",
+ cjkwd="w",
+ description="HIRAGANA LETTER SMALL KO",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B132,
+ },
[0x1B150]={
category="lo",
cjkwd="w",
@@ -216657,6 +217727,14 @@ characters.data={
linebreak="cj",
unicodeslot=0x1B152,
},
+ [0x1B155]={
+ category="lo",
+ cjkwd="w",
+ description="KATAKANA LETTER SMALL KO",
+ direction="l",
+ linebreak="cj",
+ unicodeslot=0x1B155,
+ },
[0x1B164]={
category="lo",
cjkwd="w",
@@ -226073,6 +227151,146 @@ characters.data={
linebreak="al",
unicodeslot=0x1D245,
},
+ [0x1D2C0]={
+ category="no",
+ description="KAKTOVIK NUMERAL ZERO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C0,
+ },
+ [0x1D2C1]={
+ category="no",
+ description="KAKTOVIK NUMERAL ONE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C1,
+ },
+ [0x1D2C2]={
+ category="no",
+ description="KAKTOVIK NUMERAL TWO",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C2,
+ },
+ [0x1D2C3]={
+ category="no",
+ description="KAKTOVIK NUMERAL THREE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C3,
+ },
+ [0x1D2C4]={
+ category="no",
+ description="KAKTOVIK NUMERAL FOUR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C4,
+ },
+ [0x1D2C5]={
+ category="no",
+ description="KAKTOVIK NUMERAL FIVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C5,
+ },
+ [0x1D2C6]={
+ category="no",
+ description="KAKTOVIK NUMERAL SIX",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C6,
+ },
+ [0x1D2C7]={
+ category="no",
+ description="KAKTOVIK NUMERAL SEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C7,
+ },
+ [0x1D2C8]={
+ category="no",
+ description="KAKTOVIK NUMERAL EIGHT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C8,
+ },
+ [0x1D2C9]={
+ category="no",
+ description="KAKTOVIK NUMERAL NINE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2C9,
+ },
+ [0x1D2CA]={
+ category="no",
+ description="KAKTOVIK NUMERAL TEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CA,
+ },
+ [0x1D2CB]={
+ category="no",
+ description="KAKTOVIK NUMERAL ELEVEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CB,
+ },
+ [0x1D2CC]={
+ category="no",
+ description="KAKTOVIK NUMERAL TWELVE",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CC,
+ },
+ [0x1D2CD]={
+ category="no",
+ description="KAKTOVIK NUMERAL THIRTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CD,
+ },
+ [0x1D2CE]={
+ category="no",
+ description="KAKTOVIK NUMERAL FOURTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CE,
+ },
+ [0x1D2CF]={
+ category="no",
+ description="KAKTOVIK NUMERAL FIFTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2CF,
+ },
+ [0x1D2D0]={
+ category="no",
+ description="KAKTOVIK NUMERAL SIXTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2D0,
+ },
+ [0x1D2D1]={
+ category="no",
+ description="KAKTOVIK NUMERAL SEVENTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2D1,
+ },
+ [0x1D2D2]={
+ category="no",
+ description="KAKTOVIK NUMERAL EIGHTEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2D2,
+ },
+ [0x1D2D3]={
+ category="no",
+ description="KAKTOVIK NUMERAL NINETEEN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1D2D3,
+ },
[0x1D2E0]={
category="no",
description="MAYAN NUMERAL ZERO",
@@ -240727,6 +241945,48 @@ characters.data={
linebreak="al",
unicodeslot=0x1DF1E,
},
+ [0x1DF25]={
+ category="ll",
+ description="LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF25,
+ },
+ [0x1DF26]={
+ category="ll",
+ description="LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF26,
+ },
+ [0x1DF27]={
+ category="ll",
+ description="LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF27,
+ },
+ [0x1DF28]={
+ category="ll",
+ description="LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF28,
+ },
+ [0x1DF29]={
+ category="ll",
+ description="LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF29,
+ },
+ [0x1DF2A]={
+ category="ll",
+ description="LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1DF2A,
+ },
[0x1E000]={
category="mn",
combining=0xE6,
@@ -241031,6 +242291,510 @@ characters.data={
linebreak="cm",
unicodeslot=0x1E02A,
},
+ [0x1E030]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL A",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x430 },
+ unicodeslot=0x1E030,
+ },
+ [0x1E031]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL BE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x431 },
+ unicodeslot=0x1E031,
+ },
+ [0x1E032]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL VE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x432 },
+ unicodeslot=0x1E032,
+ },
+ [0x1E033]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL GHE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x433 },
+ unicodeslot=0x1E033,
+ },
+ [0x1E034]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL DE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x434 },
+ unicodeslot=0x1E034,
+ },
+ [0x1E035]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL IE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x435 },
+ unicodeslot=0x1E035,
+ },
+ [0x1E036]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL ZHE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x436 },
+ unicodeslot=0x1E036,
+ },
+ [0x1E037]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL ZE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x437 },
+ unicodeslot=0x1E037,
+ },
+ [0x1E038]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL I",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x438 },
+ unicodeslot=0x1E038,
+ },
+ [0x1E039]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL KA",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x43A },
+ unicodeslot=0x1E039,
+ },
+ [0x1E03A]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL EL",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x43B },
+ unicodeslot=0x1E03A,
+ },
+ [0x1E03B]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL EM",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x43C },
+ unicodeslot=0x1E03B,
+ },
+ [0x1E03C]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL O",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x43E },
+ unicodeslot=0x1E03C,
+ },
+ [0x1E03D]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL PE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x43F },
+ unicodeslot=0x1E03D,
+ },
+ [0x1E03E]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL ER",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x440 },
+ unicodeslot=0x1E03E,
+ },
+ [0x1E03F]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL ES",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x441 },
+ unicodeslot=0x1E03F,
+ },
+ [0x1E040]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL TE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x442 },
+ unicodeslot=0x1E040,
+ },
+ [0x1E041]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL U",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x443 },
+ unicodeslot=0x1E041,
+ },
+ [0x1E042]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL EF",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x444 },
+ unicodeslot=0x1E042,
+ },
+ [0x1E043]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL HA",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x445 },
+ unicodeslot=0x1E043,
+ },
+ [0x1E044]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL TSE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x446 },
+ unicodeslot=0x1E044,
+ },
+ [0x1E045]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL CHE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x447 },
+ unicodeslot=0x1E045,
+ },
+ [0x1E046]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL SHA",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x448 },
+ unicodeslot=0x1E046,
+ },
+ [0x1E047]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL YERU",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x44B },
+ unicodeslot=0x1E047,
+ },
+ [0x1E048]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL E",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x44D },
+ unicodeslot=0x1E048,
+ },
+ [0x1E049]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL YU",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x44E },
+ unicodeslot=0x1E049,
+ },
+ [0x1E04A]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL DZZE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0xA689 },
+ unicodeslot=0x1E04A,
+ },
+ [0x1E04B]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL SCHWA",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4D9 },
+ unicodeslot=0x1E04B,
+ },
+ [0x1E04C]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x456 },
+ unicodeslot=0x1E04C,
+ },
+ [0x1E04D]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL JE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x458 },
+ unicodeslot=0x1E04D,
+ },
+ [0x1E04E]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL BARRED O",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4E9 },
+ unicodeslot=0x1E04E,
+ },
+ [0x1E04F]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4AF },
+ unicodeslot=0x1E04F,
+ },
+ [0x1E050]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL PALOCHKA",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4CF },
+ unicodeslot=0x1E050,
+ },
+ [0x1E051]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER A",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x430 },
+ unicodeslot=0x1E051,
+ },
+ [0x1E052]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER BE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x431 },
+ unicodeslot=0x1E052,
+ },
+ [0x1E053]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER VE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x432 },
+ unicodeslot=0x1E053,
+ },
+ [0x1E054]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER GHE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x433 },
+ unicodeslot=0x1E054,
+ },
+ [0x1E055]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER DE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x434 },
+ unicodeslot=0x1E055,
+ },
+ [0x1E056]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER IE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x435 },
+ unicodeslot=0x1E056,
+ },
+ [0x1E057]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER ZHE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x436 },
+ unicodeslot=0x1E057,
+ },
+ [0x1E058]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER ZE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x437 },
+ unicodeslot=0x1E058,
+ },
+ [0x1E059]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER I",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x438 },
+ unicodeslot=0x1E059,
+ },
+ [0x1E05A]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER KA",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x43A },
+ unicodeslot=0x1E05A,
+ },
+ [0x1E05B]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER EL",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x43B },
+ unicodeslot=0x1E05B,
+ },
+ [0x1E05C]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER O",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x43E },
+ unicodeslot=0x1E05C,
+ },
+ [0x1E05D]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER PE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x43F },
+ unicodeslot=0x1E05D,
+ },
+ [0x1E05E]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER ES",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x441 },
+ unicodeslot=0x1E05E,
+ },
+ [0x1E05F]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER U",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x443 },
+ unicodeslot=0x1E05F,
+ },
+ [0x1E060]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER EF",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x444 },
+ unicodeslot=0x1E060,
+ },
+ [0x1E061]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER HA",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x445 },
+ unicodeslot=0x1E061,
+ },
+ [0x1E062]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER TSE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x446 },
+ unicodeslot=0x1E062,
+ },
+ [0x1E063]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER CHE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x447 },
+ unicodeslot=0x1E063,
+ },
+ [0x1E064]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER SHA",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x448 },
+ unicodeslot=0x1E064,
+ },
+ [0x1E065]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x44A },
+ unicodeslot=0x1E065,
+ },
+ [0x1E066]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER YERU",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x44B },
+ unicodeslot=0x1E066,
+ },
+ [0x1E067]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x491 },
+ unicodeslot=0x1E067,
+ },
+ [0x1E068]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x456 },
+ unicodeslot=0x1E068,
+ },
+ [0x1E069]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER DZE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x455 },
+ unicodeslot=0x1E069,
+ },
+ [0x1E06A]={
+ category="lm",
+ description="CYRILLIC SUBSCRIPT SMALL LETTER DZHE",
+ direction="l",
+ linebreak="al",
+ specials={ "sub", 0x45F },
+ unicodeslot=0x1E06A,
+ },
+ [0x1E06B]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4AB },
+ unicodeslot=0x1E06B,
+ },
+ [0x1E06C]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0xA651 },
+ unicodeslot=0x1E06C,
+ },
+ [0x1E06D]={
+ category="lm",
+ description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE",
+ direction="l",
+ linebreak="al",
+ specials={ "super", 0x4B1 },
+ unicodeslot=0x1E06D,
+ },
+ [0x1E08F]={
+ category="mn",
+ combining=0xE6,
+ description="COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E08F,
+ },
[0x1E100]={
category="lo",
description="NYIAKENG PUACHUE HMONG LETTER MA",
@@ -242170,6 +243934,304 @@ characters.data={
linebreak="pr",
unicodeslot=0x1E2FF,
},
+ [0x1E4D0]={
+ category="lo",
+ description="NAG MUNDARI LETTER O",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D0,
+ },
+ [0x1E4D1]={
+ category="lo",
+ description="NAG MUNDARI LETTER OP",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D1,
+ },
+ [0x1E4D2]={
+ category="lo",
+ description="NAG MUNDARI LETTER OL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D2,
+ },
+ [0x1E4D3]={
+ category="lo",
+ description="NAG MUNDARI LETTER OY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D3,
+ },
+ [0x1E4D4]={
+ category="lo",
+ description="NAG MUNDARI LETTER ONG",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D4,
+ },
+ [0x1E4D5]={
+ category="lo",
+ description="NAG MUNDARI LETTER A",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D5,
+ },
+ [0x1E4D6]={
+ category="lo",
+ description="NAG MUNDARI LETTER AJ",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D6,
+ },
+ [0x1E4D7]={
+ category="lo",
+ description="NAG MUNDARI LETTER AB",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D7,
+ },
+ [0x1E4D8]={
+ category="lo",
+ description="NAG MUNDARI LETTER ANY",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D8,
+ },
+ [0x1E4D9]={
+ category="lo",
+ description="NAG MUNDARI LETTER AH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4D9,
+ },
+ [0x1E4DA]={
+ category="lo",
+ description="NAG MUNDARI LETTER I",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DA,
+ },
+ [0x1E4DB]={
+ category="lo",
+ description="NAG MUNDARI LETTER IS",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DB,
+ },
+ [0x1E4DC]={
+ category="lo",
+ description="NAG MUNDARI LETTER IDD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DC,
+ },
+ [0x1E4DD]={
+ category="lo",
+ description="NAG MUNDARI LETTER IT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DD,
+ },
+ [0x1E4DE]={
+ category="lo",
+ description="NAG MUNDARI LETTER IH",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DE,
+ },
+ [0x1E4DF]={
+ category="lo",
+ description="NAG MUNDARI LETTER U",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4DF,
+ },
+ [0x1E4E0]={
+ category="lo",
+ description="NAG MUNDARI LETTER UC",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E0,
+ },
+ [0x1E4E1]={
+ category="lo",
+ description="NAG MUNDARI LETTER UD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E1,
+ },
+ [0x1E4E2]={
+ category="lo",
+ description="NAG MUNDARI LETTER UK",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E2,
+ },
+ [0x1E4E3]={
+ category="lo",
+ description="NAG MUNDARI LETTER UR",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E3,
+ },
+ [0x1E4E4]={
+ category="lo",
+ description="NAG MUNDARI LETTER E",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E4,
+ },
+ [0x1E4E5]={
+ category="lo",
+ description="NAG MUNDARI LETTER ENN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E5,
+ },
+ [0x1E4E6]={
+ category="lo",
+ description="NAG MUNDARI LETTER EG",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E6,
+ },
+ [0x1E4E7]={
+ category="lo",
+ description="NAG MUNDARI LETTER EM",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E7,
+ },
+ [0x1E4E8]={
+ category="lo",
+ description="NAG MUNDARI LETTER EN",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E8,
+ },
+ [0x1E4E9]={
+ category="lo",
+ description="NAG MUNDARI LETTER ETT",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4E9,
+ },
+ [0x1E4EA]={
+ category="lo",
+ description="NAG MUNDARI LETTER ELL",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4EA,
+ },
+ [0x1E4EB]={
+ category="lm",
+ description="NAG MUNDARI SIGN OJOD",
+ direction="l",
+ linebreak="al",
+ unicodeslot=0x1E4EB,
+ },
+ [0x1E4EC]={
+ category="mn",
+ combining=0xE8,
+ description="NAG MUNDARI SIGN MUHOR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E4EC,
+ },
+ [0x1E4ED]={
+ category="mn",
+ combining=0xE8,
+ description="NAG MUNDARI SIGN TOYOR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E4ED,
+ },
+ [0x1E4EE]={
+ category="mn",
+ combining=0xDC,
+ description="NAG MUNDARI SIGN IKIR",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E4EE,
+ },
+ [0x1E4EF]={
+ category="mn",
+ combining=0xE6,
+ description="NAG MUNDARI SIGN SUTUH",
+ direction="nsm",
+ linebreak="cm",
+ unicodeslot=0x1E4EF,
+ },
+ [0x1E4F0]={
+ category="nd",
+ description="NAG MUNDARI DIGIT ZERO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F0,
+ },
+ [0x1E4F1]={
+ category="nd",
+ description="NAG MUNDARI DIGIT ONE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F1,
+ },
+ [0x1E4F2]={
+ category="nd",
+ description="NAG MUNDARI DIGIT TWO",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F2,
+ },
+ [0x1E4F3]={
+ category="nd",
+ description="NAG MUNDARI DIGIT THREE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F3,
+ },
+ [0x1E4F4]={
+ category="nd",
+ description="NAG MUNDARI DIGIT FOUR",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F4,
+ },
+ [0x1E4F5]={
+ category="nd",
+ description="NAG MUNDARI DIGIT FIVE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F5,
+ },
+ [0x1E4F6]={
+ category="nd",
+ description="NAG MUNDARI DIGIT SIX",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F6,
+ },
+ [0x1E4F7]={
+ category="nd",
+ description="NAG MUNDARI DIGIT SEVEN",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F7,
+ },
+ [0x1E4F8]={
+ category="nd",
+ description="NAG MUNDARI DIGIT EIGHT",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F8,
+ },
+ [0x1E4F9]={
+ category="nd",
+ description="NAG MUNDARI DIGIT NINE",
+ direction="l",
+ linebreak="nu",
+ unicodeslot=0x1E4F9,
+ },
[0x1E7E0]={
category="lo",
description="ETHIOPIC SYLLABLE HHYA",
@@ -258294,6 +260356,14 @@ characters.data={
linebreak="id",
unicodeslot=0x1F6D7,
},
+ [0x1F6DC]={
+ category="so",
+ cjkwd="w",
+ description="WIRELESS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F6DC,
+ },
[0x1F6DD]={
category="so",
cjkwd="w",
@@ -259332,6 +261402,62 @@ characters.data={
linebreak="al",
unicodeslot=0x1F773,
},
+ [0x1F774]={
+ category="so",
+ description="LOT OF FORTUNE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F774,
+ },
+ [0x1F775]={
+ category="so",
+ description="OCCULTATION",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F775,
+ },
+ [0x1F776]={
+ category="so",
+ description="LUNAR ECLIPSE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F776,
+ },
+ [0x1F77B]={
+ category="so",
+ description="HAUMEA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F77B,
+ },
+ [0x1F77C]={
+ category="so",
+ description="MAKEMAKE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F77C,
+ },
+ [0x1F77D]={
+ category="so",
+ description="GONGGONG",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F77D,
+ },
+ [0x1F77E]={
+ category="so",
+ description="QUAOAR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F77E,
+ },
+ [0x1F77F]={
+ category="so",
+ description="ORCUS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F77F,
+ },
[0x1F780]={
category="so",
description="BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE",
@@ -259956,6 +262082,13 @@ characters.data={
linebreak="id",
unicodeslot=0x1F7D8,
},
+ [0x1F7D9]={
+ category="so",
+ description="NINE POINTED WHITE STAR",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1F7D9,
+ },
[0x1F7E0]={
category="so",
cjkwd="w",
@@ -263879,6 +266012,30 @@ characters.data={
linebreak="id",
unicodeslot=0x1FA74,
},
+ [0x1FA75]={
+ category="so",
+ cjkwd="w",
+ description="LIGHT BLUE HEART",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA75,
+ },
+ [0x1FA76]={
+ category="so",
+ cjkwd="w",
+ description="GREY HEART",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA76,
+ },
+ [0x1FA77]={
+ category="so",
+ cjkwd="w",
+ description="PINK HEART",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA77,
+ },
[0x1FA78]={
category="so",
cjkwd="w",
@@ -263975,6 +266132,22 @@ characters.data={
linebreak="id",
unicodeslot=0x1FA86,
},
+ [0x1FA87]={
+ category="so",
+ cjkwd="w",
+ description="MARACAS",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA87,
+ },
+ [0x1FA88]={
+ category="so",
+ cjkwd="w",
+ description="FLUTE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FA88,
+ },
[0x1FA90]={
category="so",
cjkwd="w",
@@ -264207,6 +266380,30 @@ characters.data={
linebreak="id",
unicodeslot=0x1FAAC,
},
+ [0x1FAAD]={
+ category="so",
+ cjkwd="w",
+ description="FOLDING HAND FAN",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FAAD,
+ },
+ [0x1FAAE]={
+ category="so",
+ cjkwd="w",
+ description="HAIR PICK",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FAAE,
+ },
+ [0x1FAAF]={
+ category="so",
+ cjkwd="w",
+ description="KHANDA",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FAAF,
+ },
[0x1FAB0]={
category="so",
cjkwd="w",
@@ -264295,6 +266492,38 @@ characters.data={
linebreak="id",
unicodeslot=0x1FABA,
},
+ [0x1FABB]={
+ category="so",
+ cjkwd="w",
+ description="HYACINTH",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FABB,
+ },
+ [0x1FABC]={
+ category="so",
+ cjkwd="w",
+ description="JELLYFISH",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FABC,
+ },
+ [0x1FABD]={
+ category="so",
+ cjkwd="w",
+ description="WING",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FABD,
+ },
+ [0x1FABF]={
+ category="so",
+ cjkwd="w",
+ description="GOOSE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FABF,
+ },
[0x1FAC0]={
category="so",
cjkwd="w",
@@ -264343,6 +266572,22 @@ characters.data={
linebreak="eb",
unicodeslot=0x1FAC5,
},
+ [0x1FACE]={
+ category="so",
+ cjkwd="w",
+ description="MOOSE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FACE,
+ },
+ [0x1FACF]={
+ category="so",
+ cjkwd="w",
+ description="DONKEY",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FACF,
+ },
[0x1FAD0]={
category="so",
cjkwd="w",
@@ -264423,6 +266668,22 @@ characters.data={
linebreak="id",
unicodeslot=0x1FAD9,
},
+ [0x1FADA]={
+ category="so",
+ cjkwd="w",
+ description="GINGER ROOT",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FADA,
+ },
+ [0x1FADB]={
+ category="so",
+ cjkwd="w",
+ description="PEA POD",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FADB,
+ },
[0x1FAE0]={
category="so",
cjkwd="w",
@@ -264487,6 +266748,14 @@ characters.data={
linebreak="id",
unicodeslot=0x1FAE7,
},
+ [0x1FAE8]={
+ category="so",
+ cjkwd="w",
+ description="SHAKING FACE",
+ direction="on",
+ linebreak="id",
+ unicodeslot=0x1FAE8,
+ },
[0x1FAF0]={
category="so",
cjkwd="w",
@@ -264543,6 +266812,22 @@ characters.data={
linebreak="eb",
unicodeslot=0x1FAF6,
},
+ [0x1FAF7]={
+ category="so",
+ cjkwd="w",
+ description="LEFTWARDS PUSHING HAND",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1FAF7,
+ },
+ [0x1FAF8]={
+ category="so",
+ cjkwd="w",
+ description="RIGHTWARDS PUSHING HAND",
+ direction="on",
+ linebreak="eb",
+ unicodeslot=0x1FAF8,
+ },
[0x1FB00]={
category="so",
description="BLOCK SEXTANT-1",
diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua
index 9dcac8033..4deb21401 100644
--- a/tex/context/base/mkiv/char-ini.lua
+++ b/tex/context/base/mkiv/char-ini.lua
@@ -213,6 +213,7 @@ local blocks = allocate {
["arabic"] = { first = 0x00600, last = 0x006FF, otf="arab", description = "Arabic" },
["arabicextendeda"] = { first = 0x008A0, last = 0x008FF, description = "Arabic Extended-A" },
["arabicextendedb"] = { first = 0x00870, last = 0x0089F, description = "Arabic Extended-B" },
+ ["arabicextendedc"] = { first = 0x10EC0, last = 0x10EFF, description = "Arabic Extended-C" },
["arabicmathematicalalphabeticsymbols"] = { first = 0x1EE00, last = 0x1EEFF, description = "Arabic Mathematical Alphabetic Symbols" },
["arabicpresentationformsa"] = { first = 0x0FB50, last = 0x0FDFF, otf="arab", description = "Arabic Presentation Forms-A" },
["arabicpresentationformsb"] = { first = 0x0FE70, last = 0x0FEFF, otf="arab", description = "Arabic Presentation Forms-B" },
@@ -260,6 +261,7 @@ local blocks = allocate {
["cjkunifiedideographsextensione"] = { first = 0x2B820, last = 0x2CEAF, description = "CJK Unified Ideographs Extension E" },
["cjkunifiedideographsextensionf"] = { first = 0x2CEB0, last = 0x2EBEF, description = "CJK Unified Ideographs Extension F" },
["cjkunifiedideographsextensiong"] = { first = 0x30000, last = 0x3134F, description = "CJK Unified Ideographs Extension G" },
+ ["cjkunifiedideographsextensionh"] = { first = 0x31350, last = 0x323AF, description = "CJK Unified Ideographs Extension H" },
["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" },
["combiningdiacriticalmarksextended"] = { first = 0x01AB0, last = 0x01AFF, description = "Combining Diacritical Marks Extended" },
["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" },
@@ -279,10 +281,12 @@ local blocks = allocate {
["cyrillicextendeda"] = { first = 0x02DE0, last = 0x02DFF, otf="cyrl", description = "Cyrillic Extended-A" },
["cyrillicextendedb"] = { first = 0x0A640, last = 0x0A69F, otf="cyrl", description = "Cyrillic Extended-B" },
["cyrillicextendedc"] = { first = 0x01C80, last = 0x01C8F, description = "Cyrillic Extended-C" },
+ ["cyrillicextendedd"] = { first = 0x1E030, last = 0x1E08F, description = "Cyrillic Extended-D" },
["cyrillicsupplement"] = { first = 0x00500, last = 0x0052F, otf="cyrl", description = "Cyrillic Supplement" },
["deseret"] = { first = 0x10400, last = 0x1044F, otf="dsrt", description = "Deseret" },
["devanagari"] = { first = 0x00900, last = 0x0097F, otf="deva", description = "Devanagari" },
["devanagariextended"] = { first = 0x0A8E0, last = 0x0A8FF, description = "Devanagari Extended" },
+ ["devanagariextendeda"] = { first = 0x11B00, last = 0x11B5F, description = "Devanagari Extended-A" },
["digitsarabicindic"] = { first = 0x00660, last = 0x00669, math = true },
-- ["digitsbengali"] = { first = 0x009E6, last = 0x009EF, math = true },
["digitsbold"] = { first = 0x1D7CE, last = 0x1D7D7, math = true },
@@ -314,7 +318,7 @@ local blocks = allocate {
["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" },
["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" },
["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" },
- ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1343F, description = "Egyptian Hieroglyph Format Controls" },
+ ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1345F, description = "Egyptian Hieroglyph Format Controls" },
["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" },
["elbasan"] = { first = 0x10500, last = 0x1052F, description = "Elbasan" },
["elymaic"] = { first = 0x10FE0, last = 0x10FFF, description = "Elymaic" },
@@ -365,6 +369,7 @@ local blocks = allocate {
["ipaextensions"] = { first = 0x00250, last = 0x002AF, description = "IPA Extensions" },
["javanese"] = { first = 0x0A980, last = 0x0A9DF, description = "Javanese" },
["kaithi"] = { first = 0x11080, last = 0x110CF, description = "Kaithi" },
+ ["kaktoviknumerals"] = { first = 0x1D2C0, last = 0x1D2DF, description = "Kaktovik Numerals" },
["kanaextendeda"] = { first = 0x1B100, last = 0x1B12F, description = "Kana Extended-A" },
["kanaextendedb"] = { first = 0x1AFF0, last = 0x1AFFF, description = "Kana Extended-B" },
["kanasupplement"] = { first = 0x1B000, last = 0x1B0FF, description = "Kana Supplement" },
@@ -374,6 +379,7 @@ local blocks = allocate {
["katakana"] = { first = 0x030A0, last = 0x030FF, otf="kana", description = "Katakana" },
["katakanaphoneticextensions"] = { first = 0x031F0, last = 0x031FF, otf="kana", description = "Katakana Phonetic Extensions" },
["kayahli"] = { first = 0x0A900, last = 0x0A92F, description = "Kayah Li" },
+ ["kawi"] = { first = 0x11F00, last = 0x11F5F, description = "Kawi" },
["kharoshthi"] = { first = 0x10A00, last = 0x10A5F, otf="khar", description = "Kharoshthi" },
["khitansmallscript"] = { first = 0x18B00, last = 0x18CFF, description = "Khitan Small Script" },
["khmer"] = { first = 0x01780, last = 0x017FF, otf="khmr", description = "Khmer" },
@@ -456,6 +462,7 @@ local blocks = allocate {
["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" },
["myanmarextendedb"] = { first = 0x0A9E0, last = 0x0A9FF, description = "Myanmar Extended-B" },
["nabataean"] = { first = 0x10880, last = 0x108AF, description = "Nabataean" },
+ ["nagmundari"] = { first = 0x1E4D0, last = 0x1E4FF, description = "Nag Mundari" },
["nandinagari"] = { first = 0x119A0, last = 0x119FF, description = "Nandinagari" },
["newa"] = { first = 0x11400, last = 0x1147F, description = "Newa" },
["newtailue"] = { first = 0x01980, last = 0x019DF, description = "New Tai Lue" },
@@ -585,7 +592,20 @@ local blocks = allocate {
["yiradicals"] = { first = 0x0A490, last = 0x0A4CF, otf="yi", description = "Yi Radicals" },
["yisyllables"] = { first = 0x0A000, last = 0x0A48F, otf="yi", description = "Yi Syllables" },
["zanabazarsquare"] = { first = 0x11A00, last = 0x11A4F, description = "Zanabazar Square" },
- ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" }
+ ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" },
+
+ -- we need this early on:
+
+ ["lowercasecalligraphic"] = { first = 0x100000, last = 0x100019, math = true },
+ ["uppercasecalligraphic"] = { first = 0x100020, last = 0x100039, math = true },
+ ["lowercaseboldcalligraphic"] = { first = 0x100040, last = 0x100059, math = true },
+ ["uppercaseboldcalligraphic"] = { first = 0x100060, last = 0x100079, math = true },
+ -- ["lowercasesansgreek"] = { first = 0x100040, last = 0x100059, math = true }, -- reserved for future use
+ -- ["uppercasesansgreek"] = { first = 0x100060, last = 0x100079, math = true }, -- reserved for future use
+ -- ["lowercaseitalicsansgreek"] = { first = 0x100080, last = 0x100099, math = true }, -- reserved for future use
+ -- ["uppercaseitalicsansgreek"] = { first = 0x1000A0, last = 0x1000B9, math = true }, -- reserved for future use
+ -- ["lowercaseblackboarditalic"] = { first = 0x1000C0, last = 0x1000D9, math = true }, -- reserved for future use
+ -- ["uppercaseblackboarditalic"] = { first = 0x1000E0, last = 0x1000F9, math = true }, -- reserved for future use
}
-- moved from math-act.lua to here:
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 40594ad05..688232bf2 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2022.09.16 14:39}
+\newcontextversion{2022.10.14 10:13}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 1de2ec104..7b5df628c 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -49,7 +49,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2022.09.16 14:39}
+\edef\contextversion{2022.10.14 10:13}
%D Kind of special:
diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua
index 114d7dd07..4b60cd6c0 100644
--- a/tex/context/base/mkiv/font-cff.lua
+++ b/tex/context/base/mkiv/font-cff.lua
@@ -348,11 +348,11 @@ do
top = 0
end
+ P("\10") / function()
- result.strhw = stack[top]
+ result.stdhw = stack[top]
top = 0
end
+ P("\11") / function()
- result.strvw = stack[top]
+ result.stdvw = stack[top]
top = 0
end
+ P("\13") / function()
@@ -453,7 +453,7 @@ do
top = 0
end
+ P("\10") / function()
- result.bluesnap = stack[top]
+ result.blueshift = stack[top]
top = 0
end
+ P("\11") / function()
@@ -528,7 +528,7 @@ do
-- the second variant is much faster. Not that it matters much as we don't see
-- such numbers often.
- local remap = {
+ local remap_1 = {
["\x00"] = "00", ["\x01"] = "01", ["\x02"] = "02", ["\x03"] = "03", ["\x04"] = "04", ["\x05"] = "05", ["\x06"] = "06", ["\x07"] = "07", ["\x08"] = "08", ["\x09"] = "09", ["\x0A"] = "0.", ["\x0B"] = "0E", ["\x0C"] = "0E-", ["\x0D"] = "0", ["\x0E"] = "0-", ["\x0F"] = "0",
["\x10"] = "10", ["\x11"] = "11", ["\x12"] = "12", ["\x13"] = "13", ["\x14"] = "14", ["\x15"] = "15", ["\x16"] = "16", ["\x17"] = "17", ["\x18"] = "18", ["\x19"] = "19", ["\x1A"] = "1.", ["\x1B"] = "1E", ["\x1C"] = "1E-", ["\x1D"] = "1", ["\x1E"] = "1-", ["\x1F"] = "1",
["\x20"] = "20", ["\x21"] = "21", ["\x22"] = "22", ["\x23"] = "23", ["\x24"] = "24", ["\x25"] = "25", ["\x26"] = "26", ["\x27"] = "27", ["\x28"] = "28", ["\x29"] = "29", ["\x2A"] = "2.", ["\x2B"] = "2E", ["\x2C"] = "2E-", ["\x2D"] = "2", ["\x2E"] = "2-", ["\x2F"] = "2",
@@ -544,11 +544,18 @@ do
["\xC0"] = "E-0", ["\xC1"] = "E-1", ["\xC2"] = "E-2", ["\xC3"] = "E-3", ["\xC4"] = "E-4", ["\xC5"] = "E-5", ["\xC6"] = "E-6", ["\xC7"] = "E-7", ["\xC8"] = "E-8", ["\xC9"] = "E-9", ["\xCA"] = "E-.", ["\xCB"] = "E-E", ["\xCC"] = "E-E-", ["\xCD"] = "E-", ["\xCE"] = "E--", ["\xCF"] = "E-",
["\xD0"] = "-0", ["\xD1"] = "-1", ["\xD2"] = "-2", ["\xD3"] = "-3", ["\xD4"] = "-4", ["\xD5"] = "-5", ["\xD6"] = "-6", ["\xD7"] = "-7", ["\xD8"] = "-8", ["\xD9"] = "-9", ["\xDA"] = "-.", ["\xDB"] = "-E", ["\xDC"] = "-E-", ["\xDD"] = "-", ["\xDE"] = "--", ["\xDF"] = "-",
}
+ local remap_2 = {
+ ["\x0F"] = "0", ["\x1F"] = "1", ["\x2F"] = "2", ["\x3F"] = "3", ["\x4F"] = "4",
+ ["\x5F"] = "5", ["\x6F"] = "6", ["\x7F"] = "7", ["\x8F"] = "8", ["\x9F"] = "9",
+ }
+
+ local p_last_1 = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")
+ local p_last_2 = R("\xF0\xFF")
- local p_last = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")
- + R("\xF0\xFF")
+ -- tricky, we don't want to append last
- local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n)
+ -- local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n)
+ local p_nibbles = P("\30") * Cs(((1-(p_last_1+p_last_2))/remap_1)^0 * (p_last_1/remap_2 + p_last_2/"")) / function(n)
-- 0-9=digit a=. b=E c=E- d=reserved e=- f=finish
top = top + 1
stack[top] = tonumber(n) or 0
@@ -2715,6 +2722,8 @@ function readers.cff(f,fontdata,specification)
cffinfo.bluefuzz = data.bluefuzz
cffinfo.stdhw = data.stdhw
cffinfo.stdvw = data.stdvw
+ cffinfo.stemsnaph = data.stemsnaph
+ cffinfo.stemsnapv = data.stemsnapv
end
end
cleanup(data,dictionaries)
diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua
index 8f65ed9d9..1735b4cdc 100644
--- a/tex/context/base/mkiv/font-dsp.lua
+++ b/tex/context/base/mkiv/font-dsp.lua
@@ -2177,6 +2177,8 @@ do
--
local usedlookups = false -- setmetatableindex("number")
--
+ local allsteps = { } -- new per 2022-09-25
+
for lookupid=1,noflookups do
local lookup = lookups[lookupid]
local lookuptype = lookup.type
@@ -2214,6 +2216,7 @@ do
steps[nofsteps] = step
local rules = step.rules
if rules then
+ allsteps[#allsteps+1] = step -- new per 2022-09-25
for i=1,#rules do
local rule = rules[i]
local before = rule.before
@@ -2337,11 +2340,14 @@ do
end
end
- for i=lastsequence+1,nofsequences do
- local sequence = sequences[i]
- local steps = sequence.steps
- for i=1,#steps do
- local step = steps[i]
+ -- for i=lastsequence+1,nofsequences do
+ -- local sequence = sequences[i]
+ -- local steps = sequence.steps
+ -- for i=1,#steps do
+ -- local step = steps[i]
+
+ for i=1,#allsteps do -- new per 2022-09-25
+ local step = allsteps[i] -- new per 2022-09-25
local rules = step.rules
if rules then
for i=1,#rules do
@@ -2419,7 +2425,7 @@ do
end
end
end
- end
+ -- end -- new per 2022-09-25
for i, n in sortedhash(sublookupcheck) do
local l = lookups[i]
@@ -2881,7 +2887,7 @@ local function readmathglyphinfo(f,fontdata,offset)
if not math then
glyph.math = { accent = accent }
else
- math.accent = accent
+ math.accent = accent -- will become math.topanchor
end
end
end
diff --git a/tex/context/base/mkiv/font-imp-italics.lua b/tex/context/base/mkiv/font-imp-italics.lua
index 6c432d7cf..10a419daf 100644
--- a/tex/context/base/mkiv/font-imp-italics.lua
+++ b/tex/context/base/mkiv/font-imp-italics.lua
@@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['font-imp-italics'] = {
license = "see context related readme files"
}
-local next = next
+local next, tonumber = next, tonumber
local fonts = fonts
local handlers = fonts.handlers
@@ -14,11 +14,13 @@ local registerotffeature = handlers.otf.features.register
local registerafmfeature = handlers.afm.features.register
local function initialize(tfmdata,key,value)
+ local factor = tonumber(value) or 1
for unicode, character in next, tfmdata.characters do
local olditalic = character.italic
if olditalic and olditalic ~= 0 then
- character.width = character.width + olditalic
- character.italic = 0
+ character.width = character.width + olditalic
+ character.italic = 0
+ character.bottomright = -factor * olditalic
end
end
end
diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua
index c294bd638..5ae6659c5 100644
--- a/tex/context/base/mkiv/font-mis.lua
+++ b/tex/context/base/mkiv/font-mis.lua
@@ -21,7 +21,7 @@ local readers = otf.readers
if readers then
- otf.version = otf.version or 3.120
+ otf.version = otf.version or 3.121
otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true)
function fonts.helpers.getfeatures(name,save)
diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua
index ecf8009f9..f35be2cd1 100644
--- a/tex/context/base/mkiv/font-osd.lua
+++ b/tex/context/base/mkiv/font-osd.lua
@@ -6,16 +6,6 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag
license = "see context related readme files"
}
--- local experiment1 = false
--- local experiment2 = false
--- local experiment2b1 = false
--- local experiment2b2 = false
-
--- experiments.register("fonts.indic.experiment1", function(v) experiment1 = v end)
--- experiments.register("fonts.indic.experiment2", function(v) experiment2 = v end)
--- experiments.register("fonts.indic.experiment2b1", function(v) experiment2b1 = v end)
--- experiments.register("fonts.indic.experiment2b2", function(v) experiment2b2 = v end)
-
-- we need to check nbsphash (context only)
-- A few remarks:
@@ -1392,16 +1382,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
if reph or vattu then
--- print(">>> has reph or vattu")
local current = start
local cns = nil
local done = false
while current ~= stop do
--- print("\t>>> current ~= stop yet")
local c = current
local n = getnext(current)
if ra[getchar(current)] and halant[getchar(n)] then
--- print("\t\t>>> current ra; next halant")
c = n
n = getnext(n)
local b, bn = base, base
@@ -1415,7 +1402,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
if getstate(current,s_rphf) then
-- position Reph (Ra + H) after post-base 'matra' (if any) since these
-- become marks on the 'matra', not on the base glyph
--- print("\t\t\t>>> ra + halant form → reph")
if b ~= current then
if current == start then
if head == start then
@@ -1435,7 +1421,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
elseif cns and getnext(cns) ~= current then -- todo: optimize next
-- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants)
--- print("\t\t\t>>> ra below base (vattu) → rkrf")
local cp = getprev(current)
local cnsn = getnext(cns)
setlink(cp,n)
@@ -1449,17 +1434,14 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
current = getprev(n)
end
else
--- print("\t\t>>> NOT! current ra; next halant")
local char = getchar(current)
if consonant[char] then
--- print("\t\t\t>>> is consonant")
cns = current
local next = getnext(cns)
if halant[getchar(next)] then
cns = next
end
if not vatucache[char] then
--- print("\t\t\t\t>>> is in vatucache")
next = getnext(cns)
while dependent_vowel[getchar(next)] do
cns = next
@@ -1467,7 +1449,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces)
end
end
elseif char == c_nbsp then
--- print("\t\t\t>>> is nbsp")
nbspaces = nbspaces + 1
cns = current
local next = getnext(cns)
@@ -1936,8 +1917,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
reorderreph.coverage = { } -- use local
rephbase[font] = { } -- use local
--- print("!!!!!! reorder two ")
-
for i=1,#seqsubset do
-- this can be done more efficient, the last test and less getnext
@@ -2064,7 +2043,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
end
- local current, base, firstcons = start, nil, nil
+ local current, base, firstcons, subnotafterbase, postnotafterbase = start, nil, nil, nil, nil
if getstate(start,s_rphf) then
-- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants
@@ -2125,10 +2104,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
end
else -- not Stand Alone cluster
--- print("!!!! not standalone cluster")
local last = getnext(stop)
while current ~= last do -- find base consonant
local next = getnext(current)
+-- IF PATCHED THEN
+-- if current == subpos then
+-- subnotafterbase = current
+-- end
+-- if current == postpos then
+-- postnotafterbase = current
+-- end
+-- END
if consonant[getchar(current)] then
if not (current ~= stop and next ~= stop and halant[getchar(next)] and getchar(getnext(next)) == c_zwj) then
if not firstcons then
@@ -2138,6 +2124,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
local a = getstate(current)
if not (a == s_blwf or a == s_pstf or (a ~= s_rphf and a ~= s_blwf and ra[getchar(current)])) then
base = current
+-- IF PATCHED THEN
+-- if subnotafterbase then
+-- subpos = base
+-- end
+-- if postnotafterbase then
+-- postpos = base
+-- end
+-- END
end
end
end
@@ -2195,12 +2189,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
end
--
--- print("char: " .. char)
--- if not moved[current] and dependent_vowel[char] then
- if dependent_vowel[char] then
--- print(">>!! dependent vowel")
+-- IF PATCHED THEN
+-- if dependent_vowel[char] then
+-- ELSE
+ if not moved[current] and dependent_vowel[char] then
+-- END
if pre_mark[char] then -- or: if before_main or before_half
+-- IF PATCHED THEN
+-- -- nothing
+-- ELSE
moved[current] = true
+-- END
-- can be helper to remove one node
local prev, next = getboth(current)
setlink(prev,next)
@@ -2251,6 +2250,13 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
end
elseif above_mark[char] then
-- after main consonant
+-- IF PATCHED
+-- target = subpos
+-- if postpos == subpos then
+-- postpos = current
+-- end
+-- subpos = current
+-- ELSE
target = basepos
if subpos == basepos then
subpos = current
@@ -2259,6 +2265,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas
postpos = current
end
basepos = current
+-- END
elseif below_mark[char] then
-- after subjoined consonants
target = subpos
@@ -2502,12 +2509,16 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe
if pre_mark[v] and not already_pre_mark then
already_pre_mark = true
elseif post_mark[v] and not already_post_mark then
- if devanagarihash[font].conjuncts == "mixed" then
- -- for messy fonts
- return c
- else
- already_post_mark = true
- end
+-- IF PATCHED THEN
+-- already_post_mark = true
+-- ELSE
+ if devanagarihash[font].conjuncts == "mixed" then
+ -- for messy fonts
+ return c
+ else
+ already_post_mark = true
+ end
+-- END
elseif below_mark[v] and not already_below_mark then
already_below_mark = true
elseif above_mark[v] and not already_above_mark then
@@ -2710,10 +2721,6 @@ local function analyze_next_chars_two(c,font)
for k=1,#vowels do
local v = vowels[k]
if pre_mark[v] and not already_pre_mark then
--- print(">>> pre_mark")
--- if dependent_vowel[v] then
--- print(">>>> dependent vowel")
--- end
already_pre_mark = true
elseif above_mark[v] and not already_above_mark then
already_above_mark = true
@@ -2731,12 +2738,16 @@ local function analyze_next_chars_two(c,font)
if pre_mark[v] and not already_pre_mark then
already_pre_mark = true
elseif post_mark[v] and not already_post_mark then
- if devanagarihash[font].conjuncts == "mixed" then
- -- for messy fonts
- return c
- else
- already_post_mark = true
- end
+-- IF PATCHED THEN
+-- already_post_mark = true
+-- ELSE
+ if devanagarihash[font].conjuncts == "mixed" then
+ -- for messy fonts
+ return c
+ else
+ already_post_mark = true
+ end
+-- END
elseif below_mark[v] and not already_below_mark then
already_below_mark = true
elseif above_mark[v] and not already_above_mark then
@@ -3068,15 +3079,12 @@ local function method_two(head,font,attr)
end
end
if independent_vowel[char] then
--- print("!!>>> independent_vowel")
-- vowel-based syllable: [Ra+H]+V+[N]+[<[]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
current = analyze_next_chars_one(c,font,1)
syllableend = current
else
--- print("!!>>> dependent vowel")
local standalone = char == c_nbsp
if standalone then
--- print("!!>>> standalone")
nbspaces = nbspaces + 1
local p = getprev(current)
if not p then
@@ -3090,12 +3098,10 @@ local function method_two(head,font,attr)
end
end
if standalone then
--- print("!!>>>>>>> next standalone")
-- Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
current = analyze_next_chars_one(c,font,2)
syllableend = current
elseif consonant[getchar(current)] then
--- print("!!>>>>>>> a consonant")
-- WHY current INSTEAD OF c ?
-- Consonant syllable: {C+[N]+]|+H>} + C+[N]+[A] + [< H+[] | {M}+[N]+[H]>]+[SM]+[(VD)]
current = analyze_next_chars_two(current,font) -- not c !
@@ -3104,7 +3110,6 @@ local function method_two(head,font,attr)
end
end
if syllableend then
--- print("!!!>>> syllable end")
syllabe = syllabe + 1
local c = syllablestart
local n = getnext(syllableend)
diff --git a/tex/context/base/mkiv/font-otc.lua b/tex/context/base/mkiv/font-otc.lua
index 67b77b111..f83c3e8ec 100644
--- a/tex/context/base/mkiv/font-otc.lua
+++ b/tex/context/base/mkiv/font-otc.lua
@@ -142,6 +142,12 @@ local function addfeature(data,feature,specifications,prepareonly)
local descriptions = data.descriptions
local resources = data.resources
+
+ if not descriptions or not resources then
+ report_otf("missing specification")
+ return
+ end
+
local features = resources.features
local sequences = resources.sequences
diff --git a/tex/context/base/mkiv/font-otl.lua b/tex/context/base/mkiv/font-otl.lua
index f36e533ca..9493bd03c 100644
--- a/tex/context/base/mkiv/font-otl.lua
+++ b/tex/context/base/mkiv/font-otl.lua
@@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading")
local fonts = fonts
local otf = fonts.handlers.otf
-otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otl", otf.version, true)
otf.svgcache = containers.define("fonts", "svg", otf.version, true)
otf.pngcache = containers.define("fonts", "png", otf.version, true)
diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 7de108d4c..b3055976a 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -8,6 +8,11 @@ if not modules then modules = { } end modules ['font-ots'] = { -- sequences
}
--[[ldx--
+I need to check the description at the microsoft site ... it has been improved
+so maybe there are some interesting details there. Most below is based on old and
+incomplete documentation and involved quite a bit of guesswork (checking with the
+abstract uniscribe of those days. But changing things is tricky!
+
This module is a bit more split up that I'd like but since we also want to test
with plain it has to be so. This module is part of
and discussion about improvements and functionality mostly happens on the
@@ -165,13 +170,8 @@ local forcepairadvance = false -- for testing
local repeatablemultiples = context or false
-directives.register("otf.forcediscretionaries",function(v)
- forcediscretionaries = v
-end)
-
-directives.register("otf.forcepairadvance",function(v)
- forcepairadvance = v
-end)
+directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end)
+directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end)
local report_direct = logs.reporter("fonts","otf direct")
local report_subchain = logs.reporter("fonts","otf subchain")
@@ -197,7 +197,6 @@ local setboth = nuts.setboth
local getid = nuts.getid
local getstate = nuts.getstate
local getsubtype = nuts.getsubtype
-local setsubtype = nuts.setsubtype
local getchar = nuts.getchar
local setchar = nuts.setchar
local getdisc = nuts.getdisc
@@ -229,10 +228,10 @@ local ischar = nuts.ischar
local usesfont = nuts.usesfont
local insertnodeafter = nuts.insertafter
-local copy_node = nuts.copy
-local copy_node_list = nuts.copylist
-local remove_node = nuts.remove
-local find_node_tail = nuts.tail
+local copynode = nuts.copy
+local copynodelist = nuts.copylist
+local removenode = nuts.remove
+local findnodetail = nuts.tail
local flushnodelist = nuts.flushlist
local flushnode = nuts.flushnode
local endofmath = nuts.endofmath
@@ -244,12 +243,8 @@ local setmetatableindex = table.setmetatableindex
local nextnode = nuts.traversers.node
------ zwnj = 0x200C
------ zwj = 0x200D
-
local nodecodes = nodes.nodecodes
local glyphcodes = nodes.glyphcodes
-local disccodes = nodes.disccodes
local glyph_code = nodecodes.glyph
local glue_code = nodecodes.glue
@@ -261,8 +256,7 @@ local par_code = nodecodes.par
local lefttoright_code = nodes.dirvalues.lefttoright
local righttoleft_code = nodes.dirvalues.righttoleft
-local discretionarydisc_code = disccodes.discretionary
-local ligatureglyph_code = glyphcodes.ligature
+local discretionarydisc_code = nodes.disccodes.discretionary
local a_noligature = attributes.private("noligature")
@@ -377,7 +371,7 @@ local function cref(dataset,sequence,index)
return "no valid dataset"
end
local merged = sequence.merged and "merged " or ""
- if index then
+ if index and index > 1 then
return formatters["feature %a, type %a, %schain lookup %a, index %a"](
dataset[4],sequence.type,merged,sequence.name,index)
else
@@ -455,7 +449,7 @@ end
local function appenddisc(disc,list)
local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
local posthead = list
- local replacehead = copy_node_list(list)
+ local replacehead = copynodelist(list)
if post then
setlink(posttail,posthead)
else
@@ -483,7 +477,6 @@ local function markstoligature(head,start,stop,char)
end
resetinjection(base)
setchar(base,char)
- setsubtype(base,ligatureglyph_code)
setcomponents(base,start)
setlink(prev,base,next)
flushcomponents(start)
@@ -536,7 +529,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
end
resetinjection(base)
setchar(base,char)
- setsubtype(base,ligatureglyph_code)
setcomponents(base,comp)
setlink(prev,base,next)
if not discfound then
@@ -560,7 +552,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
if trace_marks then
logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
end
- local n = copy_node(start)
+ local n = copynode(start)
copyinjection(n,start) -- is this ok ? we position later anyway
head, current = insertnodeafter(head,current,n) -- unlikely that mark has components
elseif trace_marks then
@@ -634,67 +626,68 @@ end
local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what to do with skiphash matches here
local nofmultiples = #multiple
if nofmultiples > 0 then
+ local first = start
resetinjection(start)
setchar(start,multiple[1])
if nofmultiples > 1 then
- local sn = getnext(start)
- for k=2,nofmultiples do
+ -- local sn = getnext(start)
+ for i=2,nofmultiples do
-- untested:
--
-- while ignoremarks and marks[getchar(sn)] then
-- local sn = getnext(sn)
-- end
- local n = copy_node(start) -- ignore components
+ local n = copynode(start) -- ignore components
resetinjection(n)
- setchar(n,multiple[k])
+ setchar(n,multiple[i])
insertnodeafter(head,start,n)
start = n
end
- if what ~= true and repeatablemultiples then
- -- This is just some experimental code; we might introduce gsub_extensible
- -- some day instead. Beware: when we have a feature that mixes alternates and
- -- multiples we need to make sure we don't handle the alternate string values
- -- here. This might eventually become an lmtx only feature.
- local kind = type(what)
- local m, f, l
- if kind == "string" then
- local what, n = string.match(what,"^repeat(.-)[:=](%d+)$")
- if what == "middle" then
- m = tonumber(n)
- elseif what == "first" then
- f = tonumber(n)
- elseif what == "last" then
- l = tonumber(n)
- end
- elseif kind == "table" then
- -- won't happen because currently we don't split these values
- m = what.middle
- f = what.first
- l = what.last
+ end
+ if what ~= true and repeatablemultiples then
+ -- This is just some experimental code; we might introduce gsub_extensible
+ -- some day instead. Beware: when we have a feature that mixes alternates and
+ -- multiples we need to make sure we don't handle the alternate string values
+ -- here.
+ local kind = type(what)
+ local m, f, l
+ if kind == "string" then
+ local what, n = string.match(what,"^repeat(.-)[:=](%d+)$")
+ if what == "middle" then
+ m = tonumber(n)
+ elseif what == "first" then
+ f = tonumber(n)
+ elseif what == "last" then
+ l = tonumber(n)
end
- if f or m or l then
- if m and m > 1 and nofmultiples == 3 then
- local middle = getnext(first)
- for i=2,m do
- local n = copynode(middle) -- ignore components
- resetinjection(n)
- insertnodeafter(head,first,n)
- end
+ elseif kind == "table" then
+ -- won't happen because currently we don't split these values
+ m = what.middle
+ f = what.first
+ l = what.last
+ end
+ if f or m or l then
+ if m and m > 1 and nofmultiples == 3 then
+ local middle = getnext(first)
+ for i=2,m do
+ local n = copynode(middle) -- ignore components
+ resetinjection(n)
+ insertnodeafter(head,first,n)
end
- if f and f > 1 then
- for i=2,f do
- local n = copynode(first) -- ignore components
- resetinjection(n)
- insertnodeafter(head,first,n)
- end
+ end
+ if f and f > 1 then
+ for i=2,f do
+ local n = copynode(first) -- ignore components
+ resetinjection(n)
+ insertnodeafter(head,first,n)
end
- if l and l > 1 then
- for i=2,l do
- local n = copynode(start) -- ignore components
- resetinjection(n)
- insertnodeafter(head,start,n)
- start = n
- end
+ end
+ if l and l > 1 then
+ for i=2,l do
+ local n = copynode(start) -- ignore components
+ resetinjection(n)
+ insertnodeafter(head,start,n)
+ start = n
end
end
end
@@ -894,9 +887,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip
local prev = getprev(start)
if stop then
setnext(stop)
- local copy = copy_node_list(start)
+ local copy = copynodelist(start)
local tail = stop -- was: getprev(stop) -- Kai: needs checking on your samples
- local liat = find_node_tail(copy)
+ local liat = findnodetail(copy)
if pre then
setlink(liat,pre)
end
@@ -907,7 +900,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip
replace = start
else
setnext(start)
- local copy = copy_node(start)
+ local copy = copynode(start)
if pre then
setlink(copy,pre)
end
@@ -1321,7 +1314,7 @@ as less as needed but that would also make the code even more messy.
-- To be done (example needed): what if > 1 steps
--- this is messy: do we need this disc checking also in alternaties?
+-- this is messy: do we need this disc checking also in alternates?
local function reportzerosteps(dataset,sequence)
logwarning("%s: no steps",cref(dataset,sequence))
@@ -1357,7 +1350,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r
if trace_chains then
logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start)))
end
- head, start = remove_node(head,start,true)
+ head, start = removenode(head,start,true)
return head, getprev(start), true
end
@@ -1952,7 +1945,7 @@ do if not userkern then -- generic
local setkern = nuts.setkern -- not injections.setkern
userkern = function(k)
- local n = copy_node(thekern)
+ local n = copynode(thekern)
setkern(n,k)
return n
end
@@ -1994,12 +1987,11 @@ end
local noflags = { false, false, false, false }
-local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where)
local size = ck[5] - ck[4] + 1
local chainlookups = ck[6]
local done = false
-
-- current match
if chainlookups then
-- Lookups can be like { 1, false, 3 } or { false, 2 } or basically anything and
@@ -2010,23 +2002,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
-- if nofchainlookups > size then
-- -- bad rules
-- end
-
local chainlookup = chainlookups[1]
- for j=1,#chainlookup do
- local chainstep = chainlookup[j]
- local chainkind = chainstep.type
- local chainproc = chainprocs[chainkind]
- if chainproc then
- local ok
- -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
- -- char + mark -> char where mark has to disappear
- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
- if ok then
- done = true
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ if chainstep then
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok
+ -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
+ -- char + mark -> char where mark has to disappear
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
+ if ok then
+ done = true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ else
+ logprocess("%s: has an issue (1)",cref(dataset,sequence))
end
- else
- logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
end
+ else
+ -- whatever
end
else
@@ -2067,23 +2066,28 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
if chainlookup then
for j=1,#chainlookup do
local chainstep = chainlookup[j]
- local chainkind = chainstep.type
- local chainproc = chainprocs[chainkind]
- if chainproc then
- local ok, n
- head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
- -- messy since last can be changed !
- if ok then
- done = true
- if n and n > 1 and i + n > nofchainlookups then
- -- this is a safeguard, we just ignore the rest of the lookups
- i = size -- prevents an advance
- break
+ if chainstep then
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok, n
+ head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
+ -- messy since last can be changed !
+ if ok then
+ done = true
+ if n and n > 1 and i + n > nofchainlookups then
+ -- this is a safeguard, we just ignore the rest of the lookups
+ i = size -- prevents an advance
+ break
+ end
end
+ else
+ -- actually an error
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
end
else
-- actually an error
- logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ logprocess("%s: has an issue (2)",cref(dataset,sequence))
end
end
else
@@ -2111,7 +2115,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
else
done = true
if trace_contexts then
- logprocess("%s: skipping match",cref(dataset,sequence))
+ logprocess("%s: skipping match @ %i",cref(dataset,sequence),where)
end
end
end
@@ -2141,6 +2145,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
local last = start
local prev = getprev(start)
local hasglue = false
+ local useddisc = nil -- new 2022-09-25
+ local usedstart = start -- new 2022-09-25
-- fishy: so we can overflow and then go on in the sweep?
-- todo : id can also be glue_code as we checked spaces
@@ -2211,7 +2217,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
tail = prev
setprev(current,sweepnode)
else
- tail = find_node_tail(head)
+ tail = findnodetail(head)
end
setnext(sweepnode,current)
setprev(head)
@@ -2302,15 +2308,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
end
end
+
local done = false
if lookaheaddisc then
-
local cf = start
local cl = getprev(lookaheaddisc)
local cprev = getprev(start)
local insertedmarks = 0
-
while cprev do
local char = ischar(cf,currentfont)
if char and marks[char] then
@@ -2329,13 +2334,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
head = lookaheaddisc
end
local pre, post, replace = getdisc(lookaheaddisc)
- local new = copy_node_list(cf) -- br, how often does that happen
+ local new = copynodelist(cf) -- br, how often does that happen
local cnew = new
if pre then
- setlink(find_node_tail(cf),pre)
+ setlink(findnodetail(cf),pre)
end
if replace then
- local tail = find_node_tail(new)
+ local tail = findnodetail(new)
setlink(tail,replace)
end
for i=1,insertedmarks do
@@ -2349,14 +2354,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpre[lookaheaddisc] then
local ok = false
- cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck)
+ cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1)
if ok then
done = true
end
end
if not notmatchreplace[lookaheaddisc] then
local ok = false
- new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2)
if ok then
done = true
end
@@ -2367,16 +2372,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(lookaheaddisc,cf,post,new)
end
start = getprev(lookaheaddisc)
+ useddisc = lookaheaddisc -- new 2022-09-25
sweephead[cf] = getnext(clast) or false
sweephead[new] = getnext(cl) or false
-
elseif backtrackdisc then
-
local cf = getnext(backtrackdisc)
local cl = start
local cnext = getnext(start)
local insertedmarks = 0
-
while cnext do
local char = ischar(cnext,currentfont)
if char and marks[char] then
@@ -2391,8 +2394,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setprev(cf)
setnext(cl)
local pre, post, replace, pretail, posttail, replacetail = getdisc(backtrackdisc,true)
- local new = copy_node_list(cf)
- local cnew = find_node_tail(new)
+ local new = copynodelist(cf)
+ local cnew = findnodetail(new)
for i=1,insertedmarks do
cnew = getprev(cnew)
end
@@ -2402,14 +2405,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpost[backtrackdisc] then
local ok = false
- cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck)
+ cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3)
if ok then
done = true
end
end
if not notmatchreplace[backtrackdisc] then
local ok = false
- new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4)
if ok then
done = true
end
@@ -2430,33 +2433,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(backtrackdisc,pre,post,replace)
end
start = getprev(backtrackdisc)
+ useddisc = backtrackdisc -- new 2022-09-25
sweephead[post] = getnext(clast) or false
sweephead[replace] = getnext(last) or false
-
else
local ok = false
- head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+ head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5)
if ok then
done = true
end
end
-
- return head, start, done
+ if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25
+ start = getnext(start) -- new 2022-09-25
+ end -- new 2022-09-25
+ return head, start, done, useddisc -- new 2022-09-25
end
-local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
- local rule = ck[1]
- local lookuptype = ck[8] or ck[2]
- local nofseq = #ck[3]
- local first = ck[4]
- local last = ck[5]
- local char = getchar(start)
- logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
- cref(dataset,sequence),rule,match and "matches" or "nomatch",
- gref(char),first-1,last-first+1,nofseq-last,lookuptype,
- discseen and "" or "no ", sweepnode and "" or "not ")
+local chaintrac do
+
+ local level = 0
+ local last = { }
+
+ chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
+ if dataset then
+ level = level + 1
+ last[level] = start
+ local rule = ck[1]
+ local lookuptype = ck[8] or ck[2]
+ local nofseq = #ck[3] -- ck[3].n
+ local first = ck[4]
+ local last = ck[5]
+ local char = getchar(start)
+ logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
+ level,cref(dataset,sequence),rule,match and "matches" or "nomatch",
+ gref(char),first-1,last-first+1,nofseq-last,lookuptype,
+ discseen and "" or "no ", sweepnode and "" or "not ")
+ else
+ -- (start,done)
+ local what = start and "done" or "continue"
+ local where = head == last[level] and "same" or "different"
+ local char = getchar(head)
+ if char then
+ logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where)
+ else
+ logwarning("- %i : %s, %s node",level,what,where)
+ end
+ level = level - 1
+ end
+ end
+
end
-- The next one is quite optimized but still somewhat slow, fonts like ebgaramond
@@ -2470,6 +2497,9 @@ end
-- the previous disc .. such be it ( with only f done)
local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash)
+ if not contexts then
+ return head, start, false
+ end
-- optimizing for rlmode gains nothing
local sweepnode = sweepnode
local sweeptype = sweeptype
@@ -2510,10 +2540,10 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s
for k=1,nofcontexts do -- does this disc mess work well with n > 1
- local ck = contexts[k]
- local seq = ck[3]
- local f = ck[4] -- first current
-local last = start
+ local ck = contexts[k]
+ local seq = ck[3]
+ local f = ck[4] -- first current
+ local last = start
if not startchar or not seq[f][startchar] then
-- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts)
goto next
@@ -2524,7 +2554,7 @@ local last = start
else
local l = ck[5] -- last current
local current = start
--- local last = start
+ -- local last = start
-- current match
@@ -2638,7 +2668,7 @@ local last = start
-- before
if f > 1 then
- if startprev then
+ -- if startprev then -- new 2022-09-25
local prev = startprev
if prereplace and prev == checkdisc then
prev = getprev(sweepnode)
@@ -2762,9 +2792,9 @@ local last = start
else
goto next
end
- else
- goto next
- end
+ -- else -- new 2022-09-25
+ -- goto next -- new 2022-09-25
+ -- end -- new 2022-09-25
end
-- after
@@ -2888,24 +2918,25 @@ local last = start
end
end
end
-
if trace_contexts then
chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode)
end
if discseen or sweepnode then
+ -- When we process a disc we can collapse and therefore we backtrack one node (start) and
+ -- reprocess. This is needed because there might be more in the collapsed list.
head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck)
else
- head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck)
+ head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6)
+ end
+ if trace_contexts then
+ chaintrac(start,done)
end
if done then
break
-- else
-- next context
end
- ::next::
- -- if trace_chains then
- -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode)
- -- end
+ ::next::
end
if discseen then
notmatchpre = { }
@@ -2924,21 +2955,46 @@ handlers.gsub_reversecontextchain = handle_contextchain
handlers.gpos_contextchain = handle_contextchain
handlers.gpos_context = handle_contextchain
--- this needs testing
+-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
+-- local steps = currentlookup.steps
+-- local nofsteps = currentlookup.nofsteps
+-- if nofsteps > 1 then
+-- reportmoresteps(dataset,sequence)
+-- end
+-- -- probably wrong
+-- local l = steps[1].coverage[getchar(start)]
+-- if l then
+-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+-- else
+-- return head, start, false
+-- end
+-- end
+-- new 2022-09-25
+
local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
local steps = currentlookup.steps
local nofsteps = currentlookup.nofsteps
- if nofsteps > 1 then
- reportmoresteps(dataset,sequence)
- end
- -- probably wrong
- local l = steps[1].coverage[getchar(start)]
- if l then
- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ local char = getchar(start)
+ if nofsteps == 1 then
+ local s = steps[1]
+ local l = s.coverage[char]
+ if l then
+ return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ end
else
- return head, start, false
+ for i=1,nofsteps do
+ local s = steps[i]
+ local l = s.coverage[char]
+ if l then
+ local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ if d then
+ return h, s, d
+ end
+ end
+ end
end
+ return head, start, false
end
chainprocs.gsub_context = chained_contextchain
@@ -3077,7 +3133,7 @@ do -- overcome local limit
end
-- Functions like kernrun, comprun etc evolved over time and in the end look rather
--- complex. It's a bit of a compromis between extensive copying and creating subruns.
+-- complex. It's a bit of a compromise between extensive copying and creating subruns.
-- The logic has been improved a lot by Kai and Ivo who use complex fonts which
-- really helped to identify border cases on the one hand and get insight in the diverse
-- ways fonts implement features (not always that consistent and efficient). At the same
@@ -3184,7 +3240,8 @@ local function kernrun(disc,k_run,font,attr,...)
if done and trace_testruns then
report_disc("done",disc)
end
- return nextstart, done
+ -- return nextstart, done
+ return nextstart
end
-- fonts like ebgaramond do ligatures this way (less efficient than e.g. dejavu which
@@ -3237,12 +3294,19 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list
setdisc(disc,pre,post,replace)
end
--
- return getnext(disc), renewed
+ -- return getnext(disc), renewed
+ return getnext(disc)
end
-- if we can hyphenate in a lig then unlikely a lig so we
-- could have a option here to ignore lig
+local test_flatten_start = 2 -- must start at 2 according to Kai
+
+directives.register("otf.testrun.forceflatten", function(v)
+ test_flatten_start = v and 1 or 2
+end)
+
local function testrun(disc,t_run,c_run,...)
if trace_testruns then
report_disc("test",disc)
@@ -3271,7 +3335,7 @@ local function testrun(disc,t_run,c_run,...)
local d = d_replace > d_post and d_replace or d_post
local head = getnext(disc) -- is: next
local tail = head
- for i=2,d do -- must start at 2 according to Kai
+ for i=test_flatten_start,d do
local nx = getnext(tail)
local id = getid(nx)
if id == disc_code then
@@ -3286,7 +3350,7 @@ local function testrun(disc,t_run,c_run,...)
next = getnext(tail)
setnext(tail)
setprev(head)
- local new = copy_node_list(head)
+ local new = copynodelist(head)
if posttail then
setlink(posttail,head)
else
@@ -3359,7 +3423,8 @@ local function testrun(disc,t_run,c_run,...)
end
end
-- next can have changed (copied list)
- return getnext(disc), renewed
+ -- return getnext(disc), renewed
+ return getnext(disc)
end
-- 1{2{\oldstyle\discretionary{3}{4}{5}}6}7\par
@@ -3882,7 +3947,7 @@ do
-- the before and after lists in the loader. But first I need to see a font that uses multiple
-- matches.
--
- local start = find_node_tail(head)
+ local start = findnodetail(head)
local rlmode = 0 -- how important is this .. do we need to check for dir?
local merged = steps.merged
while start do
@@ -3968,17 +4033,13 @@ do
start = getnext(start)
elseif id == disc_code then
if not discs or discs[start] == true then
- local ok
if gpossing then
- start, ok = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
- start, ok = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
else
- start, ok = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
end
- -- if ok then
- -- done = true
- -- end
else
start = getnext(start)
end
@@ -4052,17 +4113,13 @@ do
start = getnext(start)
elseif id == disc_code then
if not discs or discs[start] == true then
- local ok
if gpossing then
- start, ok = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
- start, ok = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
else
- start, ok = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
end
- -- if ok then
- -- done = true
- -- end
else
start = getnext(start)
end
@@ -4184,7 +4241,7 @@ do
start = getnext(start)
-- elseif id == par_code and startofpar(start) then
-- rlparmode, rlmode = pardirstate(start)
- -- start = getnext(start)
+ -- start = nxt
else
start = getnext(start)
end
@@ -4274,8 +4331,8 @@ registerotffeature {
}
}
--- Moved here (up) a bit. This doesn't really belong in generic so it will
--- move to a context module some day.
+-- Moved here (up) a bit. This doesn't really belong in generic so it will move to a
+-- context module some day.
local function markinitializer(tfmdata,value)
local properties = tfmdata.properties
diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua
index 2ca3011a5..cab4b7540 100644
--- a/tex/context/base/mkiv/font-shp.lua
+++ b/tex/context/base/mkiv/font-shp.lua
@@ -17,7 +17,7 @@ local pfb = fonts.handlers.pfb
local hashes = fonts.hashes
local identifiers = hashes.identifiers
-local version = otf.version or 0.011
+local version = otf.version or 0.013
local shapescache = containers.define("fonts", "shapes", version, true)
local streamscache = containers.define("fonts", "streams", version, true)
diff --git a/tex/context/base/mkiv/math-dir.lua b/tex/context/base/mkiv/math-dir.lua
index f26324ed9..f0298d243 100644
--- a/tex/context/base/mkiv/math-dir.lua
+++ b/tex/context/base/mkiv/math-dir.lua
@@ -142,6 +142,7 @@ function directions.processmath(head) -- style, penalties
return processmath(head)
end
end
+ return head
end
function directions.setmath(n)
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index e8ce240f0..e4566b7e4 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -101,9 +101,9 @@ return {
"adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode",
"gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode",
--
- "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode",
- "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode",
- "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode",
+ -- "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode",
+ -- "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode",
+ -- "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode",
--
"overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode",
"accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "applyordinarykernpairmathcontrolcode",
@@ -112,10 +112,11 @@ return {
"applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode",
"checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode",
"analyzescriptnucleuscharmathcontrolcode", "analyzescriptnucleuslistmathcontrolcode", "analyzescriptnucleusboxmathcontrolcode",
+ "accenttopskewwithoffsetmathcontrolcode", "ignorekerndimensionsmathcontrolcode",
--
"noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode",
"noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode",
- "noitaliccorrectionglyphoptioncode",
+ "noitaliccorrectionglyphoptioncode", "islargeoperatorglyphoptioncode", "hasitalicshapeglyphoptioncode",
--
"normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode",
"vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode",
@@ -217,6 +218,7 @@ return {
"flattenclassoptioncode", "omitpenaltyclassoptioncode", "unpackclassoptioncode", "raiseprimeclassoptioncode",
"carryoverlefttopkernclassoptioncode", "carryoverleftbottomkernclassoptioncode", "carryoverrighttopkernclassoptioncode", "carryoverrightbottomkernclassoptioncode",
"preferdelimiterdimensionsclassoptioncode", "autoinjectclassoptioncode", "removeitaliccorrectionclassoptioncode",
+ "operatoritaliccorrectionclassoptioncode",
--
"noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode",
"noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode",
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index 546b93af3..60fb704d4 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -164,6 +164,8 @@ return {
"Umathradicaldegreeafter",
"Umathradicaldegreebefore",
"Umathradicaldegreeraise",
+ "Umathradicalextensibleafter",
+ "Umathradicalextensiblebefore",
"Umathradicalkern",
"Umathradicalrule",
"Umathradicalvariant",
@@ -256,12 +258,14 @@ return {
"aligntab",
"allcrampedstyles",
"alldisplaystyles",
+ "allmainstyles",
"allmathstyles",
"allscriptscriptstyles",
"allscriptstyles",
"allsplitstyles",
"alltextstyles",
"alluncrampedstyles",
+ "allunsplitstyles",
"atendofgroup",
"atendofgrouped",
"attribute",
@@ -411,6 +415,8 @@ return {
"ifparameters",
"ifrelax",
"iftok",
+ "ifzerodim",
+ "ifzeronum",
"ignorearguments",
"ignorepars",
"immediate",
diff --git a/tex/context/base/mkiv/pack-cut.mkiv b/tex/context/base/mkiv/pack-cut.mkiv
index 84c14d648..533440efd 100644
--- a/tex/context/base/mkiv/pack-cut.mkiv
+++ b/tex/context/base/mkiv/pack-cut.mkiv
@@ -102,9 +102,8 @@
\vss}%
\hss}}
-\unexpanded\def\makecutbox#1%
- {\bgroup
- \d_pack_cutmarks_height\ht#1%
+\unexpanded\def\makecutbox#1% not grouped !
+ {\d_pack_cutmarks_height\ht#1%
\d_pack_cutmarks_depth \dp#1%
\d_pack_cutmarks_width \wd#1%
\setbox#1\hpack
@@ -155,8 +154,7 @@
\box#1}%
\wd#1\d_pack_cutmarks_width
\ht#1\d_pack_cutmarks_height
- \dp#1\d_pack_cutmarks_depth
- \egroup}
+ \dp#1\d_pack_cutmarks_depth}
\unexpanded\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox}
\unexpanded\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox}
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index fb4443218..982b677cd 100644
Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index d75e37cee..9469ffdf0 100644
Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ
diff --git a/tex/context/base/mkiv/strc-doc.lua b/tex/context/base/mkiv/strc-doc.lua
index d613d1aa7..7a79a7121 100644
--- a/tex/context/base/mkiv/strc-doc.lua
+++ b/tex/context/base/mkiv/strc-doc.lua
@@ -168,9 +168,9 @@ end
local lastsaved = 0
function sections.save(sectiondata)
-local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier
- local numberdata = sectiondata.numberdata
- local ntobesaved = #tobesaved
+ local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier
+ local numberdata = sectiondata.numberdata
+ local ntobesaved = #tobesaved
if not numberdata or sectiondata.metadata.nolist then
-- stay
else
diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua
index 865c44624..4a190132b 100644
--- a/tex/context/base/mkiv/strc-lst.lua
+++ b/tex/context/base/mkiv/strc-lst.lua
@@ -263,6 +263,14 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
if r and not r.section then
r.section = structures.sections.currentid()
end
+ local b = r and t.block
+ if r and not b then
+ local s = r.section
+ if s then
+ s = structures.sections.tobesaved[s]
+ r.block = s and s.block or nil
+ end
+ end
local i = r and r.internal or 0 -- brrr
if r and kind and name then
local tag = tags.getid(kind,name)
@@ -834,6 +842,7 @@ filters[v_default] = function(specification) -- is named
for i=1,#collected do
local v = collected[i]
local r = v.references
+-- inspect(v)
if r and (not block or not r.block or pblock == r.block) then
local sectionnumber = sections[r.section]
if sectionnumber then
diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv
index 3447c4e6e..269d41966 100644
--- a/tex/context/base/mkiv/type-set.mkiv
+++ b/tex/context/base/mkiv/type-set.mkiv
@@ -132,6 +132,7 @@
\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
+%definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv]
\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
diff --git a/tex/context/base/mkxl/anch-pgr.lmt b/tex/context/base/mkxl/anch-pgr.lmt
index 5ef6ecacb..575d4e906 100644
--- a/tex/context/base/mkxl/anch-pgr.lmt
+++ b/tex/context/base/mkxl/anch-pgr.lmt
@@ -34,6 +34,7 @@ local context = context
local implement = interfaces.implement
local texgetcount = tex.getcount
+local texiscount = tex.iscount
local getmacro = tokens.getters.macro
local expandasvalue = tex.expandasvalue
@@ -61,6 +62,8 @@ local f_pair = formatters["(%p,%p)"]
local f_path = formatters["%--t--cycle"]
local f_pair_i = formatters["(%r,%r)"] -- rounded
+local c_realpageno = texiscount("realpageno")
+
graphics = graphics or { }
local backgrounds = { }
graphics.backgrounds = backgrounds
@@ -254,7 +257,7 @@ end
nodes.handlers.textbackgrounds = function(head,where,parent) -- we have hlistdir and local dir
-- todo enable action in register
index = index + 1
- realpage = texgetcount("realpageno")
+ realpage = texgetcount(c_realpageno)
return processranges(a_textbackground,flush,head,parent)
end
@@ -1214,7 +1217,7 @@ backgrounds.fetchmultipar = fetchmultipar
local function getwhatever(action)
local tags = scanmpstring()
local anchor = scanmpstring()
- local page = texgetcount("realpageno")
+ local page = texgetcount(c_realpageno)
if tags == "self" then
tags = expandasvalue(string_value,"mpcategoryparameter",true,"self")
elseif type(tags) == "string" then
diff --git a/tex/context/base/mkxl/anch-pos.lmt b/tex/context/base/mkxl/anch-pos.lmt
index fc668f699..6488a2fd7 100644
--- a/tex/context/base/mkxl/anch-pos.lmt
+++ b/tex/context/base/mkxl/anch-pos.lmt
@@ -65,6 +65,8 @@ local tex = tex
local texgetdimen = tex.getdimen
local texgetcount = tex.getcount
local texgetinteger = tex.getintegervalue or tex.getcount
+local texiscount = tex.iscount
+local texisdimen = tex.isdimen
local texsetcount = tex.setcount
local texget = tex.get
local texsp = tex.sp
@@ -133,15 +135,19 @@ local default = { -- not r and paragraphs etc
}
}
-local f_b_tag = formatters["b:%s"]
-local f_e_tag = formatters["e:%s"]
-local f_p_tag = formatters["p:%s"]
------ f_w_tag = formatters["w:%s"]
+local f_b_tag = formatters["b:%s"]
+local f_e_tag = formatters["e:%s"]
+local f_p_tag = formatters["p:%s"]
+----- f_w_tag = formatters["w:%s"]
-local f_region = formatters["region:%s"]
+local f_region = formatters["region:%s"]
-local f_tag_three = formatters["%s:%s:%s"]
-local f_tag_two = formatters["%s:%s"]
+local f_tag_three = formatters["%s:%s:%s"]
+local f_tag_two = formatters["%s:%s"]
+
+local c_realpageno = texiscount("realpageno")
+local d_strutht = texisdimen("strutht")
+local d_strutdp = texisdimen("strutdp")
-- Because positions are set with a delay we cannot yet make the tree -- so that
-- is a finalizer step. But, we already have a dual split.
@@ -902,7 +908,7 @@ local function enhance(data)
data.y = y ~= 0 and y or nil
end
if data.p == true then
- data.p = texgetcount("realpageno") -- we should use a variable set in otr
+ data.p = texgetcount(c_realpageno) -- we should use a variable set in otr
end
if data.c == true then
data.c = column
@@ -1075,7 +1081,7 @@ local function b_region(specification)
local x, y = getpos()
last.x = x ~= 0 and x or nil
last.y = y ~= 0 and y or nil
- last.p = texgetcount("realpageno")
+ last.p = texgetcount(c_realpageno)
insert(regions,tag) -- todo: fast stack
region = tag
end
@@ -1117,7 +1123,7 @@ local function setregionbox(n,tag,index,k,lo,ro,to,bo,column) -- kind
-- these auto regions (comning from framed). Too messy and the split in the
-- setter is fast enough.
tobesaved[tag] = {
- -- p = texgetcount("realpageno"), -- we copy them
+ -- p = texgetcount(c_realpageno), -- we copy them
x = 0,
y = 0,
w = w ~= 0 and w or nil,
@@ -1191,6 +1197,8 @@ end
do
+ local c_anch_positions_paragraph = texiscount("c_anch_positions_paragraph")
+
local nofparagraphs = 0
local function enhancepar_1(data)
@@ -1205,7 +1213,7 @@ do
if y ~= 0 then
data.y = y
end
- data.p = texgetcount("realpageno") -- we should use a variable set in otr
+ data.p = texgetcount(c_realpageno) -- we should use a variable set in otr
if column then
data.c = column
end
@@ -1253,7 +1261,7 @@ do
if y ~= 0 then
data.y = y
end
- data.p = texgetcount("realpageno") -- we should use a variable set in otr
+ data.p = texgetcount(c_realpageno)
if column then
data.c = column
end
@@ -1268,10 +1276,10 @@ do
name = "parpos",
actions = function()
nofparagraphs = nofparagraphs + 1
- texsetcount("global","c_anch_positions_paragraph",nofparagraphs)
+ texsetcount("global",c_anch_positions_paragraph,nofparagraphs)
local name = f_p_tag(nofparagraphs)
- local h = texgetdimen("strutht")
- local d = texgetdimen("strutdp")
+ local h = texgetdimen(d_strutht)
+ local d = texgetdimen(d_strutdp)
--
local top = texgetnest("top","head")
local nxt = top.next
@@ -1429,8 +1437,8 @@ do
public = true,
protected = true,
actions = function(name)
- local h = texgetdimen("strutht")
- local d = texgetdimen("strutdp")
+ local h = texgetdimen(d_strutht)
+ local d = texgetdimen(d_strutdp)
local spec = {
p = true,
c = column,
@@ -1453,8 +1461,8 @@ do
public = true,
protected = true,
actions = function(name,kind)
- local h = texgetdimen("strutht")
- local d = texgetdimen("strutdp")
+ local h = texgetdimen(d_strutht)
+ local d = texgetdimen(d_strutdp)
local spec = {
k = kind,
p = true,
@@ -1476,7 +1484,7 @@ end
function jobpositions.getreserved(tag,n)
if tag == v_column then
- local fulltag = f_tag_three(tag,texgetcount("realpageno"),n or 1)
+ local fulltag = f_tag_three(tag,texgetcount(c_realpageno),n or 1)
local data = collected[fulltag]
if data then
return data, fulltag
@@ -1484,7 +1492,7 @@ function jobpositions.getreserved(tag,n)
tag = v_text
end
if tag == v_text then
- local fulltag = f_tag_two(tag,texgetcount("realpageno"))
+ local fulltag = f_tag_two(tag,texgetcount(c_realpageno))
return collected[fulltag] or false, fulltag
end
return collected[tag] or false, tag
@@ -2257,7 +2265,7 @@ implement {
public = true,
protected = true,
actions = function(list)
- doifelse(onsamepage(list,tostring(texgetcount("realpageno"))))
+ doifelse(onsamepage(list,tostring(texgetcount(c_realpageno))))
end
}
diff --git a/tex/context/base/mkxl/anch-pos.mkxl b/tex/context/base/mkxl/anch-pos.mkxl
index fef8e54f6..f8891eb33 100644
--- a/tex/context/base/mkxl/anch-pos.mkxl
+++ b/tex/context/base/mkxl/anch-pos.mkxl
@@ -17,10 +17,19 @@
%D early, but starting in 2012 more dramatic changes started to happen, especially
%D in relation to background graphics. It will probably take some time to settle.
-\registerctxluafile{anch-pos}{autosuffix}
-
\unprotect
+\newcount\c_anch_column % will be delegated to lua
+\newcount\c_anch_text % will be delegated to lua
+\newcount\c_anch_free
+\newtoks \t_anch_positions_tracers
+\newcount\c_anch_positions_paragraph
+
+\newbox \b_anch_position
+\newif \ifpositioning % sort of public
+
+\registerctxluafile{anch-pos}{autosuffix}
+
%D The first application of positional information was embedded graphics. Since we
%D are interacting with text, it made sense to take the current line height and
%D depth into account too. This is why we have position macros for simple positions
@@ -43,8 +52,8 @@
% \dosetpositionstrut #1 % defined at lua end
% \dosetpositionstrutkind #1#2 % defined at lua end
-\newbox\b_anch_position
-\newif \ifpositioning % sort of public
+% see top: \newbox\b_anch_position
+% see top: \newif \ifpositioning % sort of public
\mutable\let\currentposition \empty
\mutable\let\currentpositionaction\empty
@@ -282,8 +291,8 @@
\permanent\def\textanchor {text:\the\realpageno}
\permanent\def\regionanchor{region:0}
-\newcount\c_anch_column % will be delegated to lua
-\newcount\c_anch_text % will be delegated to lua
+% see top: \newcount\c_anch_column % will be delegated to lua
+% see top: \newcount\c_anch_text % will be delegated to lua
% beware we need to pass \somethingexpanded or { }
@@ -336,7 +345,7 @@
\expandafter\gobblesixarguments
\fi}
-\newcount\c_anch_free
+% see top: \newcount\c_anch_free
\protected\def\anch_mark_tagged_box_free_yes#1#2#3#4#5#6% only needed when positions
{\global\advance\c_anch_free\plusone % could be done at the lua end
@@ -408,8 +417,8 @@
%D can keep track of them. This mechanism is activated automatically based on
%D information collected in the previous pass.
-\newtoks \t_anch_positions_tracers
-\newcount\c_anch_positions_paragraph
+% see top: \newtoks \t_anch_positions_tracers
+% see top: \newcount\c_anch_positions_paragraph
\permanent\protected\def\tracepositions
{\the\t_anch_positions_tracers}
diff --git a/tex/context/base/mkxl/buff-ini.lmt b/tex/context/base/mkxl/buff-ini.lmt
index 985c834ff..1d4722531 100644
--- a/tex/context/base/mkxl/buff-ini.lmt
+++ b/tex/context/base/mkxl/buff-ini.lmt
@@ -573,7 +573,7 @@ local function savebuffer(list,name,prefix,option,directory) -- name is optional
if directory ~= "" and dir.makedirs(directory) then
name = file.join(directory,name)
end
- io.savedata(name,replacenewlines(content),"\n",option == v_append)
+ savedata(name,replacenewlines(content),"\n",option == v_append)
end
implement {
diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl
index 5fb6ae5b6..e8f8e5e2e 100644
--- a/tex/context/base/mkxl/cont-new.mkxl
+++ b/tex/context/base/mkxl/cont-new.mkxl
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2022.09.16 14:39}
+\newcontextversion{2022.10.14 10:13}
%D This file is loaded at runtime, thereby providing an excellent place for hacks,
%D patches, extensions and new features. There can be local overloads in cont-loc
diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl
index cd7075d5e..bf5dd9a07 100644
--- a/tex/context/base/mkxl/context.mkxl
+++ b/tex/context/base/mkxl/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\immutable\edef\contextformat {\jobname}
-\immutable\edef\contextversion{2022.09.16 14:39}
+\immutable\edef\contextversion{2022.10.14 10:13}
%overloadmode 1 % check frozen / warning
%overloadmode 2 % check frozen / error
diff --git a/tex/context/base/mkxl/core-env.lmt b/tex/context/base/mkxl/core-env.lmt
index 486beeec4..f5b382f12 100644
--- a/tex/context/base/mkxl/core-env.lmt
+++ b/tex/context/base/mkxl/core-env.lmt
@@ -135,30 +135,30 @@ end)
tex.isdefined = isdefined
-function tex.isdimen(name)
- local hit = cache[name]
- return hit.command == dimencode and hit.index or true
-end
-
-function tex.iscount(name)
- local hit = cache[name]
- return hit.command == countcode and hit.index or true
-end
-
-function tex.istoken(name)
- local hit = cache[name]
- return hit.command == tokencode and hit.index or true
-end
-
-function tex.isskip(name)
- local hit = cache[name]
- return hit.command == skipcode and hit.index or true
-end
-
-function tex.ismuskip(name)
- local hit = cache[name]
- return hit.command == muskipcode and hit.index or true
-end
+-- function tex.isdimen(name)
+-- local hit = cache[name]
+-- return hit.command == dimencode and hit.index or true
+-- end
+--
+-- function tex.iscount(name)
+-- local hit = cache[name]
+-- return hit.command == countcode and hit.index or true
+-- end
+--
+-- function tex.istoken(name)
+-- local hit = cache[name]
+-- return hit.command == tokencode and hit.index or true
+-- end
+--
+-- function tex.isskip(name)
+-- local hit = cache[name]
+-- return hit.command == skipcode and hit.index or true
+-- end
+--
+-- function tex.ismuskip(name)
+-- local hit = cache[name]
+-- return hit.command == muskipcode and hit.index or true
+-- end
function tex.type(name)
return types[cache[name].command] or "macro"
diff --git a/tex/context/base/mkxl/core-uti.lmt b/tex/context/base/mkxl/core-uti.lmt
index 2266119de..d533de5f3 100644
--- a/tex/context/base/mkxl/core-uti.lmt
+++ b/tex/context/base/mkxl/core-uti.lmt
@@ -448,8 +448,8 @@ end)
function statistics.formatruntime(runtime)
if not environment.initex then -- else error when testing as not counters yet
-- stoptiming(statistics) -- to be sure
- local shipped = texgetcount('nofshipouts')
- local pages = texgetcount('realpageno')
+ local shipped = texgetcount("nofshipouts")
+ local pages = texgetcount("realpageno")
if pages > shipped then
pages = shipped
end
diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt
index ddaf8afb1..319d5fe48 100644
--- a/tex/context/base/mkxl/font-con.lmt
+++ b/tex/context/base/mkxl/font-con.lmt
@@ -533,12 +533,6 @@ function constructors.scale(tfmdata,specification)
targetparameters.scriptscale = scriptscale
targetparameters.scriptscriptscale = scriptscriptscale
- -- todo: maybe retrofit to font-con.lua
-
- local oldmath = properties.oldmath
- targetproperties.oldmath = oldmath
- target.oldmath = oldmath
-
local mathcontrol = properties.mathcontrol
targetproperties.mathcontrol = mathcontrol
target.mathcontrol = mathcontrol
@@ -706,10 +700,26 @@ function constructors.scale(tfmdata,specification)
if vi and vi ~= 0 then
chr.vitalic = vi*hdelta
end
- local va = character.accent
+-- local va = character.accent
+-- if va and not chr.topanchor then
+-- chr.topanchor = va
+-- end
+ local va = character.topanchor
+ if va then
+ chr.topanchor = va*vdelta
+ end
+ va = character.bottomanchor
if va then
- chr.topaccent = va*vdelta
+ chr.bottomanchor = va*vdelta
end
+ local vo = character.topovershoot
+ if vo then
+ chr.topovershoot = vo*hdelta
+ end
+ -- vo = character.bottomovershoot
+ -- if vo then
+ -- chr.bottomovershoot = vo*hdelta
+ -- end
if stackmath then -- not ok yet
local mk = character.mathkerns
if mk then
@@ -755,6 +765,10 @@ function constructors.scale(tfmdata,specification)
if sm then
chr.smaller = sm
end
+ local mi = character.mirror
+ if mi then
+ chr.mirror = mi
+ end
local fa = character.flataccent
if fa then
chr.flataccent = fa
diff --git a/tex/context/base/mkxl/font-ctx.lmt b/tex/context/base/mkxl/font-ctx.lmt
index 585547cbf..75572e089 100644
--- a/tex/context/base/mkxl/font-ctx.lmt
+++ b/tex/context/base/mkxl/font-ctx.lmt
@@ -1221,23 +1221,23 @@ do -- else too many locals
"integer",
},
actions = function (
- global, -- \ifx\fontclass\empty\s!false\else\s!true\fi
- cs, -- {#csname}%
- str, -- \somefontfile
- size, -- \d_font_scaled_font_size
- inheritancemode, -- \c_font_feature_inheritance_mode
- classfeatures, -- \m_font_class_features
- fontfeatures, -- \m_font_features
- classfallbacks, -- \m_font_class_fallbacks
- fontfallbacks, -- \m_font_fallbacks
- mathsize, -- \fontface
- textsize, -- \d_font_scaled_text_face
- classgoodies, -- \m_font_class_goodies
- goodies, -- \m_font_goodies
- classdesignsize, -- \m_font_class_designsize
- fontdesignsize, -- \m_font_designsize
- scaledfontmode -- \scaledfontmode
- )
+ global, -- \ifx\fontclass\empty\s!false\else\s!true\fi
+ cs, -- {#csname}%
+ str, -- \somefontfile
+ size, -- \d_font_scaled_font_size
+ inheritancemode, -- \c_font_feature_inheritance_mode
+ classfeatures, -- \m_font_class_features
+ fontfeatures, -- \m_font_features
+ classfallbacks, -- \m_font_class_fallbacks
+ fontfallbacks, -- \m_font_fallbacks
+ mathsize, -- \fontface
+ textsize, -- \d_font_scaled_text_face
+ classgoodies, -- \m_font_class_goodies
+ goodies, -- \m_font_goodies
+ classdesignsize, -- \m_font_class_designsize
+ fontdesignsize, -- \m_font_designsize
+ scaledfontmode -- \scaledfontmode
+ )
if trace_defining then
report_defining("start stage two: %s, size %s, features %a & %a, mode %a",str,size,classfeatures,fontfeatures,inheritancemode)
end
@@ -1397,7 +1397,7 @@ do -- else too many locals
busy = false
mathematics.finishfallbacks(tfmdata,specification,fallbacks)
tfmdata.original = specification.specification
-constructors.beforepassingfonttotex(tfmdata)
+ constructors.beforepassingfonttotex(tfmdata)
local id = definefont(tfmdata,properties.id)
csnames[id] = specification.cs
properties.id = id -- already set
diff --git a/tex/context/base/mkxl/font-imp-effects.lmt b/tex/context/base/mkxl/font-imp-effects.lmt
index 38d86498a..8dce81087 100644
--- a/tex/context/base/mkxl/font-imp-effects.lmt
+++ b/tex/context/base/mkxl/font-imp-effects.lmt
@@ -238,11 +238,12 @@ local function manipulateeffect(tfmdata)
parameters.hshift = hshift
parameters.vshift = vshift
for unicode, character in next, characters do
- local oldwidth = character.width
- local oldheight = character.height
- local olddepth = character.depth
- local olditalic = character.italic
- local oldtopaccent = character.topaccent
+ local oldwidth = character.width
+ local oldheight = character.height
+ local olddepth = character.depth
+ local olditalic = character.italic
+ local oldtopanchor = character.topanchor
+ local oldbottomanchor = character.bottomanchor
if oldwidth and oldwidth > 0 then
character.width = oldwidth + wdelta
end
@@ -252,13 +253,16 @@ local function manipulateeffect(tfmdata)
if olddepth and olddepth > 0 then
character.depth = olddepth + ddelta
end
- if olditalic or oldtopaccent then
+ if olditalic or oldtopaccent or oldbottomaccent then
local factor = character.width / oldwidth
if olditalic and olditalic > 0 then
character.italic = olditalic * factor
end
- if oldtopaccent and oldtopaccent > 0 then
- character.topaccent = oldtopaccent * factor
+ if oldtopanchor and oldtopanchor > 0 then
+ character.topanchor = oldtopanchor * factor
+ end
+ if oldbottomanchor and oldbottomanchor > 0 then
+ character.bottomanchor = oldbottomanchor * factor
end
end
end
diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt
index 9811cb7c8..04fe5c04c 100644
--- a/tex/context/base/mkxl/font-imp-math.lmt
+++ b/tex/context/base/mkxl/font-imp-math.lmt
@@ -224,30 +224,6 @@ registerotffeature {
-- end
-- end
-local function initialize(tfmdata,value)
- if value then
- local rawdata = tfmdata.shared.rawdata
- local rawresources = rawdata and rawdata.resources
- local mathconstants = rawresources.mathconstants
- if mathconstants then
- tfmdata.properties.oldmath = true
- end
- end
-end
-
-registerotffeature {
- name = "oldmath",
- description = "deal with fake opentype fonts",
- -- manipulators = {
- -- base = manipulate,
- -- node = manipulate,
- -- },
- initializers = {
- base = initialize,
- node = initialize,
- }
-}
-
local function initialize(tfmdata,value)
if type(value) == "string" then
local rawdata = tfmdata.shared.rawdata
@@ -318,46 +294,45 @@ registerotffeature {
-- is. So the quick and dirty solution is:
--
-- add copies in private slots
--- use a pseudo feature to acess those
+-- use a pseudo feature to access those
-- and optionally afterwards replace the original slots
-local coverage = { }
-
-local function initialize(tfmdata,value)
- if value then
- if not next(coverage) then
- for k, char in next, mathematics.alphabets.sr.tf.lcletters do
- coverage[char] = 0xFE800 + k
- end
- for k, char in next, mathematics.alphabets.sr.tf.ucletters do
- coverage[char] = 0xFE800 + k
- end
- fonts.handlers.otf.addfeature {
- name = "savemathscripts",
- type = "substitution",
- data = coverage,
- }
- end
- local characters = tfmdata.characters
- local descriptions = tfmdata.descriptions
- for char, private in next, coverage do
- local data = characters[char]
- if data and not characters[private] then
- -- otherwise we need a virtual
- characters [private] = copytable(data)
- descriptions[private] = copytable(descriptions[char])
- end
- end
- end
-end
-
-registerotffeature {
- name = "copymathscripts",
- description = "copy math script",
- prepend = 1,
- initializers = {
- base = initialize,
- node = initialize,
- }
-}
-
+-- local coverage = { }
+--
+-- local function initialize(tfmdata,value)
+-- if value then
+-- if not next(coverage) then
+-- for k, char in next, mathematics.alphabets.sr.tf.lcletters do
+-- coverage[char] = 0xFE800 + k
+-- end
+-- for k, char in next, mathematics.alphabets.sr.tf.ucletters do
+-- coverage[char] = 0xFE800 + k
+-- end
+-- fonts.handlers.otf.addfeature {
+-- name = "savemathscripts",
+-- type = "substitution",
+-- data = coverage,
+-- }
+-- end
+-- local characters = tfmdata.characters
+-- local descriptions = tfmdata.descriptions
+-- for char, private in next, coverage do
+-- local data = characters[char]
+-- if data and not characters[private] then
+-- -- otherwise we need a virtual
+-- characters [private] = copytable(data)
+-- descriptions[private] = copytable(descriptions[char])
+-- end
+-- end
+-- end
+-- end
+--
+-- registerotffeature {
+-- name = "copymathscripts",
+-- description = "copy math script",
+-- prepend = 1,
+-- initializers = {
+-- base = initialize,
+-- node = initialize,
+-- }
+-- }
diff --git a/tex/context/base/mkxl/font-ini.mklx b/tex/context/base/mkxl/font-ini.mklx
index 473f37da2..67663b7db 100644
--- a/tex/context/base/mkxl/font-ini.mklx
+++ b/tex/context/base/mkxl/font-ini.mklx
@@ -657,8 +657,8 @@
% 4:x{\definedfont[Serif sa 4]x}\par
% 5:x{\definedfont[Serif sa 5]x}\par
-\permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax}
-\permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax}
+% \permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax}
+% \permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax}
\mutable\let\somefontname \s!unknown
\mutable\let\somefontspec \s!unknown
@@ -991,7 +991,7 @@
\newif\ifskipfontcharacteristics \skipfontcharacteristicstrue
-\tracingfonts\plussix %
+% \tracingfonts\plussix %
%D When fontclasses are used, we define the font global, since namespaces are
%D used. Otherwise we parse the specs each time.
diff --git a/tex/context/base/mkxl/font-mat.mklx b/tex/context/base/mkxl/font-mat.mklx
index 20925157b..0f3a2a222 100644
--- a/tex/context/base/mkxl/font-mat.mklx
+++ b/tex/context/base/mkxl/font-mat.mklx
@@ -15,6 +15,26 @@
\unprotect
+%D The original (\MKIV) approach to bidi is that we have two extra families for
+%D regular, bold and pseudobold:
+%D
+%D regular normal=0 l2r=1 r2l=2
+%D bold normal=3 l2r=4 r2l=5
+%D pseudobold normal=6 l2r=7 r2l=8
+%D
+%D where l2r is just an alias. Because we're now using the mirror lookup (like
+%D we do a smaller lookup) in the engine we not just have:
+%D
+%D regular normal=0
+%D bold normal=3
+%D pseudobold normal=6
+%D
+%D And when one can wonder if pseudobold is needed (just bolden); we can then
+%D actually go down to only two families. It is one of these cases when it hurts
+%D to throw away a nice old mechanism that worked quite well so here we keep it
+%D commented. For what it's worth: this variant switches a bit faster too and
+%D produces less logging but I doubt if anyone will notice that.
+
%D Be nice:
\ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi
@@ -55,16 +75,16 @@
% todo: \c_font_fam_mr
\aliased\let\c_font_fam_mr \zerocount % math regular
-\aliased\let\c_font_fam_mr_lr\plusone % math regular l2r
-\aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l
+%aliased\let\c_font_fam_mr_lr\plusone % math regular l2r
+%aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l
\aliased\let\c_font_fam_mb \plusthree % math bold
-\aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r
-\aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l
+%aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r
+%aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l
\definesystemattribute[mathfamily][public]
-\newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy
+%newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy
\newconditional\c_font_complete_bold_mathstrategy \settrue\c_font_complete_bold_mathstrategy
% \frozen ...
@@ -106,9 +126,12 @@
\mutable\let\fontfamily\relax % for now public but it is a helper
+\newconditional\c_math_last_family_set
+
\def\font_helpers_set_math_family_indeed_normal#mrtag#family% \fontface etc are also used later on
{\let\savedfontbody\fontbody
\let\fontfamily#family%
+ \settrue\c_math_last_family_set
% the order is important as we depend on known id's when completing fonts
% enabling is needed when we have fallbacks which spoils the families
\let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree
@@ -139,6 +162,7 @@
\def\font_helpers_set_math_family_indeed_compact#mrtag#family% \fontface etc are also used later on
{\let\savedfontbody\fontbody
\let\fontfamily#family%
+ \settrue\c_math_last_family_set
\font_helpers_set_math_family_set_scales_compact
% the order is important as we depend on known id's when completing fonts
% enabling is needed when we have fallbacks which spoils the families
@@ -163,6 +187,7 @@
\let\defaultfontclass\fontclass % else truefontname falls back on the wrong one
\let\savedfontbody\fontbody
\let\fontfamily#familytag%
+ \settrue\c_math_last_family_set
\font_helpers_set_math_family_set_scales_normal
\let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree
\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% defines
@@ -183,6 +208,7 @@
\let\defaultfontclass\fontclass % else truefontname falls back on the wrong one
\let\savedfontbody\fontbody
\let\fontfamily#familytag%
+ \settrue\c_math_last_family_set
\let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone
\font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% defines
\font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% enables
@@ -309,77 +335,114 @@
\let\m_font_fallbacks\empty
\let\m_font_goodies \empty
-\appendtoks % can be analyzed once
- % why here ..
- %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}%
- \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}%
- % ...
- \ifx\m_font_class_direction\v!both
- \settrue\c_font_bidirectional_mathstrategy
- \else
- \setfalse\c_font_bidirectional_mathstrategy
- \fi
-\to \t_font_math_strategies
-
-\def\font_helpers_bidirectional_mathstrategy_yes
- {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr
- \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl
- \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else
- \font_helpers_bidirectional_mathstrategy_yes_changed
- \fi}
-
-\def\font_helpers_bidirectional_mathstrategy_yes_changed
- {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr
- \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr
- \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr}
-
-\def\font_helpers_bidirectional_mathstrategy_nop
- {\font_helpers_set_math_family\c_font_fam_mr\s!mr
- \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else
- \font_helpers_bidirectional_mathstrategy_nop_changed
- \fi}
-
-\def\font_helpers_bidirectional_mathstrategy_nop_changed
- {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr
- \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr
- \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr
- \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr
- \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr
- \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr}
+% \appendtoks % can be analyzed once
+% % why here ..
+% %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}%
+% \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}%
+% % ...
+% \ifx\m_font_class_direction\v!both
+% \settrue\c_font_bidirectional_mathstrategy
+% \else
+% \setfalse\c_font_bidirectional_mathstrategy
+% \fi
+% \to \t_font_math_strategies
+%
+% \def\font_helpers_bidirectional_mathstrategy_yes
+% {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr
+% \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl
+% \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else
+% \font_helpers_bidirectional_mathstrategy_yes_changed
+% \fi}
+%
+% \def\font_helpers_bidirectional_mathstrategy_yes_changed
+% {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr
+% \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr
+% \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr}
+%
+% \def\font_helpers_bidirectional_mathstrategy_nop
+% {\font_helpers_set_math_family\c_font_fam_mr\s!mr
+% \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else
+% \font_helpers_bidirectional_mathstrategy_nop_changed
+% \fi}
+%
+% \def\font_helpers_bidirectional_mathstrategy_nop
+% {\font_helpers_set_math_family\c_font_fam_mr\s!mr}
+%
+% \def\font_helpers_bidirectional_mathstrategy_nop_changed
+% {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr
+% \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr
+% \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr
+% \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr
+% \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr
+% \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr}
+%
+% \appendtoks
+% \ifconditional\c_font_bidirectional_mathstrategy
+% \font_helpers_bidirectional_mathstrategy_yes
+% \else
+% \font_helpers_bidirectional_mathstrategy_nop
+% \fi
+% \to \t_font_math_strategies
\appendtoks
- \ifconditional\c_font_bidirectional_mathstrategy
- \font_helpers_bidirectional_mathstrategy_yes
- \else
- \font_helpers_bidirectional_mathstrategy_nop
- \fi
+ \font_helpers_set_math_family\c_font_fam_mr\s!mr
\to \t_font_math_strategies
-\def\font_helpers_complete_bold_mathstrategy_yes_bidi
- {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr
- \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl
- \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else
- \font_helpers_complete_bold_mathstrategy_yes_bidi_changed
- \fi}
-
-\def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed
- {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr
- \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr
- \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr}
+% \def\font_helpers_complete_bold_mathstrategy_yes_bidi
+% {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr
+% \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl
+% \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else
+% \font_helpers_complete_bold_mathstrategy_yes_bidi_changed
+% \fi}
+%
+% \def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed
+% {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr
+% \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr
+% \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr}
+%
+% \def\font_helpers_complete_bold_mathstrategy_yes
+% {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax
+% \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else
+% \font_helpers_complete_bold_mathstrategy_yes_changed
+% \fi}
+%
+% \def\font_helpers_complete_bold_mathstrategy_yes_changed
+% {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb
+% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb
+% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb
+% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb
+% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb
+% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb}
+%
+% \def\font_helpers_complete_bold_mathstrategy_nop
+% {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else
+% \font_helpers_complete_bold_mathstrategy_nop_changed
+% \fi}
+%
+% \def\font_helpers_complete_bold_mathstrategy_nop_changed
+% {\textfont \c_font_fam_mb \textfont \c_font_fam_mr
+% \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr
+% \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr
+% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr
+% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr
+% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr
+% \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl
+% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl
+% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl}
+%
+% \def\font_helpers_apply_complete_bold_mathstrategy
+% {\ifconditional\c_font_complete_bold_mathstrategy
+% \ifconditional\c_font_bidirectional_mathstrategy
+% \font_helpers_complete_bold_mathstrategy_yes_bidi
+% \else
+% \font_helpers_complete_bold_mathstrategy_yes
+% \fi
+% \else
+% \font_helpers_complete_bold_mathstrategy_nop
+% \fi}
\def\font_helpers_complete_bold_mathstrategy_yes
- {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax
- \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else
- \font_helpers_complete_bold_mathstrategy_yes_changed
- \fi}
-
-\def\font_helpers_complete_bold_mathstrategy_yes_changed
- {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb
- \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb
- \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb
- \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb
- \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb
- \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb}
+ {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax}
\def\font_helpers_complete_bold_mathstrategy_nop
{\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else
@@ -389,21 +452,11 @@
\def\font_helpers_complete_bold_mathstrategy_nop_changed
{\textfont \c_font_fam_mb \textfont \c_font_fam_mr
\scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr
- \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr
- \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr
- \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr
- \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr
- \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl
- \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl
- \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl}
+ \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr}
\def\font_helpers_apply_complete_bold_mathstrategy
{\ifconditional\c_font_complete_bold_mathstrategy
- \ifconditional\c_font_bidirectional_mathstrategy
- \font_helpers_complete_bold_mathstrategy_yes_bidi
- \else
- \font_helpers_complete_bold_mathstrategy_yes
- \fi
+ \font_helpers_complete_bold_mathstrategy_yes
\else
\font_helpers_complete_bold_mathstrategy_nop
\fi}
@@ -420,27 +473,33 @@
\fam\zerocount % all characters and symbols are in this family
\to \everymathematics
+% \protected\def\font_helpers_synchronize_math_family_mr
+% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy
+% \ifconditional\c_math_right_to_left
+% \plustwo
+% \else
+% \plusone
+% \fi
+% \else
+% \zerocount
+% \fi}
+%
+% \protected\def\font_helpers_synchronize_math_family_mb
+% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy
+% \ifconditional\c_math_right_to_left
+% \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi
+% \else
+% \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi
+% \fi
+% \else
+% \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi
+% \fi}
+
\protected\def\font_helpers_synchronize_math_family_mr
- {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy
- \ifconditional\c_math_right_to_left
- \plustwo
- \else
- \plusone
- \fi
- \else
- \zerocount
- \fi}
+ {\c_attr_mathfamily\zerocount}
\protected\def\font_helpers_synchronize_math_family_mb
- {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy
- \ifconditional\c_math_right_to_left
- \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi
- \else
- \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi
- \fi
- \else
- \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi
- \fi}
+ {\c_attr_mathfamily\ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi}
\installcorenamespace{fontmathsynchronizer}
\installcorenamespace{fontmathstoredstrategy}
@@ -471,7 +530,6 @@
\fi
\to \t_font_math_strategies
-%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname}
\def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname}
\newconditional\c_font_pseudo_bold_math_state
@@ -569,4 +627,19 @@
\permanent\protected\def\setmscale#1{\ifmmode\scaledmathstyle\numericscale#1\relax\fi}
+%D This is nasty, as the engine only stores the last set family parameters (per style) which
+%D in our case can be bold.
+
+\def\font_helpers_synchronize_math_parameters
+ {\textfont \zerocount\textfont \zerocount
+ \scriptfont \zerocount\scriptfont \zerocount
+ \scriptscriptfont\zerocount\scriptscriptfont\zerocount
+ \setfalse\c_math_last_family_set}
+
+\appendtoks
+ \ifconditional\c_math_last_family_set
+ \font_helpers_synchronize_math_parameters
+ \fi
+\to\everybodyfont
+
\protect \endinput
diff --git a/tex/context/base/mkxl/font-mps.lmt b/tex/context/base/mkxl/font-mps.lmt
index 9a123a25e..7afc48d0f 100644
--- a/tex/context/base/mkxl/font-mps.lmt
+++ b/tex/context/base/mkxl/font-mps.lmt
@@ -46,6 +46,14 @@ function metapost.boundingbox(d,factor)
return f_boundingbox(llx,lly,urx,lly,urx,ury,llx,ury)
end
+function metapost.baseline(d,factor)
+ local bounds = d.boundingbox
+ local factor = factor or 1
+ local llx = factor*bounds[1]
+ local urx = factor*bounds[3]
+ return f_vertical(llx,0,urx,0)
+end
+
function metapost.widthline(d,factor)
local bounds = d.boundingbox
local factor = factor or 1
diff --git a/tex/context/base/mkxl/font-otl.lmt b/tex/context/base/mkxl/font-otl.lmt
index 85b32470b..b7889fc05 100644
--- a/tex/context/base/mkxl/font-otl.lmt
+++ b/tex/context/base/mkxl/font-otl.lmt
@@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading")
local fonts = fonts
local otf = fonts.handlers.otf
-otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otl", otf.version, true)
otf.svgcache = containers.define("fonts", "svg", otf.version, true)
otf.pngcache = containers.define("fonts", "png", otf.version, true)
@@ -426,9 +426,9 @@ local function copytotfm(data,cache_id)
character.vitalic = vitalic
end
--
- local accent = m.accent -- taccent?
- if accent then
- character.accent = accent
+ local topanchor = m.topanchor or m.accent -- for now
+ if topanchor then
+ character.topanchor = topanchor
end
--
local kerns = m.kerns
@@ -766,14 +766,14 @@ end
-- moved from font-oth.lua, todo: also afm
-local function getgsub(tfmdata,k,kind,value)
+local function getgsub(tfmdata,k,kind,value,script,language)
local shared = tfmdata.shared
local rawdata = shared and shared.rawdata
if rawdata then
local sequences = rawdata.resources.sequences
if sequences then
local properties = tfmdata.properties
- local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language)
+ local validlookups, lookuplist = otf.collectlookups(rawdata,kind,script or properties.script,language or properties.language)
if validlookups then
-- local choice = tonumber(value) or 1 -- no random here (yet)
for i=1,#lookuplist do
@@ -797,8 +797,8 @@ end
otf.getgsub = getgsub -- returns value, gsub_kind
-function otf.getsubstitution(tfmdata,k,kind,value)
- local found, kind = getgsub(tfmdata,k,kind,value)
+function otf.getsubstitution(tfmdata,k,kind,value,script,language)
+ local found, kind = getgsub(tfmdata,k,kind,value,script,language)
if not found then
--
elseif kind == "gsub_single" then
@@ -812,16 +812,16 @@ end
otf.getalternate = otf.getsubstitution
-function otf.getmultiple(tfmdata,k,kind)
- local found, kind = getgsub(tfmdata,k,kind)
+function otf.getmultiple(tfmdata,k,kind,value,script,language)
+ local found, kind = getgsub(tfmdata,k,kind,value,script,language)
if found and kind == "gsub_multiple" then
return found
end
return { k }
end
-function otf.getkern(tfmdata,left,right,kind)
- local kerns = getgsub(tfmdata,left,kind or "kern",true) -- for now we use getsub
+function otf.getkern(tfmdata,left,right,kind,value,script,language)
+ local kerns = getgsub(tfmdata,left,kind or "kern",true,script,language) -- for now we use getsub
if kerns then
local found = kerns[right]
local kind = type(found)
diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt
index 2ab52a35a..73c9b7c56 100644
--- a/tex/context/base/mkxl/font-ots.lmt
+++ b/tex/context/base/mkxl/font-ots.lmt
@@ -169,13 +169,8 @@ local forcepairadvance = false -- for testing
local repeatlastmultiple = context and true
-directives.register("otf.forcediscretionaries",function(v)
- forcediscretionaries = v
-end)
-
-directives.register("otf.forcepairadvance",function(v)
- forcepairadvance = v
-end)
+directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end)
+directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end)
local report_direct = logs.reporter("fonts","otf direct")
local report_subchain = logs.reporter("fonts","otf subchain")
@@ -200,7 +195,6 @@ local getboth = nuts.getboth
local setboth = nuts.setboth
local getid = nuts.getid
local getstate = nuts.getstate
-local setsubtype = nuts.setsubtype
local getchar = nuts.getchar
local setchar = nuts.setchar
local getdisc = nuts.getdisc
@@ -264,7 +258,6 @@ local lefttoright_code = nodes.dirvalues.lefttoright
local righttoleft_code = nodes.dirvalues.righttoleft
local discretionarydisc_code = nodes.disccodes.discretionary
------ ligatureglyph_code = glyphcodes.ligature
local injections = nodes.injections
local setmark = injections.setmark
@@ -299,9 +292,9 @@ local marks = false
local classes = false
local currentfont = false
local currentdynamic = false
-local currentscale = 1000 -- false
-local currentxscale = 1000 -- false
-local currentyscale = 1000 -- false
+local currentscale = 1000
+local currentxscale = 1000
+local currentyscale = 1000
local factor = 0
local threshold = 0
local checkmarks = false
@@ -503,7 +496,6 @@ local function markstoligature(head,start,stop,char)
end
resetinjection(base)
setchar(base,char)
- -- setsubtype(base,ligatureglyph_code)
setcomponents(base,start)
setlink(prev,base,next)
flushcomponents(start)
@@ -525,7 +517,7 @@ local glyphoptioncodes = tex.glyphoptioncodes
local no_left_ligature_code = glyphoptioncodes.noleftligature
local no_right_ligature_code = glyphoptioncodes.norightligature
-local no_left_kern_code = glyphoptioncodes.noleftkern
+----- no_left_kern_code = glyphoptioncodes.noleftkern
local no_right_kern_code = glyphoptioncodes.norightkern
local hasglyphoption = nuts.hasglyphoption
@@ -558,7 +550,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
if start == stop and getchar(start) == char and not hasmarks then
resetinjection(start)
setchar(start,char)
--- fonts.collections.direct(start)
+ -- fonts.collections.direct(start)
return head, start
end
if inhibited(start,stop) then
@@ -575,9 +567,8 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
end
resetinjection(base)
setchar(base,char)
--- fonts.collections.direct(base)
+ -- fonts.collections.direct(base)
setoptions(base,getoptions(start) | getoptions(stop)) -- maybe only lig options
- -- setsubtype(base,ligatureglyph_code)
setcomponents(base,comp)
setlink(prev,base,next)
if not discfound then
@@ -1379,7 +1370,7 @@ as less as needed but that would also make the code even more messy.
-- To be done (example needed): what if > 1 steps
--- this is messy: do we need this disc checking also in alternaties?
+-- this is messy: do we need this disc checking also in alternates?
local function reportzerosteps(dataset,sequence)
logwarning("%s: no steps",cref(dataset,sequence))
@@ -2058,9 +2049,7 @@ local function setdiscchecked(d,pre,post,replace)
setdisc(d,pre,post,replace)
end
-local noflags = { false, false, false, false }
-
-local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where)
local size = ck[5] - ck[4] + 1
local chainlookups = ck[6]
@@ -2076,26 +2065,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
-- -- bad rules
-- end
local chainlookup = chainlookups[1]
- for j=1,#chainlookup do
- local chainstep = chainlookup[j]
- if chainstep then
- local chainkind = chainstep.type
- local chainproc = chainprocs[chainkind]
- if chainproc then
- local ok
- -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
- -- char + mark -> char where mark has to disappear
- -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash)
- if ok then
- done = true
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep = chainlookup[j]
+ if chainstep then
+ local chainkind = chainstep.type
+ local chainproc = chainprocs[chainkind]
+ if chainproc then
+ local ok
+ -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g.
+ -- char + mark -> char where mark has to disappear
+ -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
+ head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash)
+ if ok then
+ done = true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
end
else
- logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ logprocess("%s: has an issue (1)",cref(dataset,sequence))
end
- else
- logprocess("%s: has an issue (1)",cref(dataset,sequence))
end
+ else
+ -- whatever
end
else
@@ -2185,7 +2178,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
else
done = true
if trace_contexts then
- logprocess("%s: skipping match",cref(dataset,sequence))
+ logprocess("%s: skipping match @ %i",cref(dataset,sequence),where)
end
end
end
@@ -2215,6 +2208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
local last = start
local prev = getprev(start)
local hasglue = false
+ local useddisc = nil -- new 2022-09-25
+ local usedstart = start -- new 2022-09-25
-- fishy: so we can overflow and then go on in the sweep?
-- todo : id can also be glue_code as we checked spaces
@@ -2376,15 +2371,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
end
end
+
local done = false
if lookaheaddisc then
-
local cf = start
local cl = getprev(lookaheaddisc)
local cprev = getprev(start)
local insertedmarks = 0
-
while cprev do
local nxt, char = isnextchar(cf,currentfont,currentdynamic,currentscale,currentxscale,currentyscale)
if char and marks[char] then
@@ -2423,14 +2417,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpre[lookaheaddisc] then
local ok = false
- cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck)
+ cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1)
if ok then
done = true
end
end
if not notmatchreplace[lookaheaddisc] then
local ok = false
- new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2)
if ok then
done = true
end
@@ -2441,16 +2435,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(lookaheaddisc,cf,post,new)
end
start = getprev(lookaheaddisc)
+ useddisc = lookaheaddisc -- new 2022-09-25
sweephead[cf] = getnext(clast) or false
sweephead[new] = getnext(cl) or false
-
elseif backtrackdisc then
-
local cf = getnext(backtrackdisc)
local cl = start
local cnext = getnext(start)
local insertedmarks = 0
-
while cnext do
local nxt, char = isnextchar(cnext,currentfont,currentdynamic,currentscale,currentxscale,currentyscale)
if char and marks[char] then
@@ -2476,14 +2468,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpost[backtrackdisc] then
local ok = false
- cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck)
+ cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3)
if ok then
done = true
end
end
if not notmatchreplace[backtrackdisc] then
local ok = false
- new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4)
if ok then
done = true
end
@@ -2504,33 +2496,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(backtrackdisc,pre,post,replace)
end
start = getprev(backtrackdisc)
+ useddisc = backtrackdisc -- new 2022-09-25
sweephead[post] = getnext(clast) or false
sweephead[replace] = getnext(last) or false
-
else
local ok = false
- head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+ head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5)
if ok then
done = true
end
end
-
- return head, start, done
+ if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25
+ start = getnext(start) -- new 2022-09-25
+ end -- new 2022-09-25
+ return head, start, done, useddisc -- new 2022-09-25
end
-local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
- local rule = ck[1]
- local lookuptype = ck[8] or ck[2]
- local nofseq = #ck[3]
- local first = ck[4]
- local last = ck[5]
- local char = getchar(start)
- logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
- cref(dataset,sequence),rule,match and "matches" or "nomatch",
- gref(char),first-1,last-first+1,nofseq-last,lookuptype,
- discseen and "" or "no ", sweepnode and "" or "not ")
+local chaintrac do
+
+ local level = 0
+ local last = { }
+
+ chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
+ if dataset then
+ level = level + 1
+ last[level] = start
+ local rule = ck[1]
+ local lookuptype = ck[8] or ck[2]
+ local nofseq = #ck[3] -- ck[3].n
+ local first = ck[4]
+ local last = ck[5]
+ local char = getchar(start)
+ logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
+ level,cref(dataset,sequence),rule,match and "matches" or "nomatch",
+ gref(char),first-1,last-first+1,nofseq-last,lookuptype,
+ discseen and "" or "no ", sweepnode and "" or "not ")
+ else
+ -- (start,done)
+ local what = start and "done" or "continue"
+ local where = head == last[level] and "same" or "different"
+ local char = getchar(head)
+ if char then
+ logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where)
+ else
+ logwarning("- %i : %s, %s node",level,what,where)
+ end
+ level = level - 1
+ end
+ end
+
end
-- The next one is quite optimized but still somewhat slow, fonts like ebgaramond
@@ -2544,6 +2560,9 @@ end
-- the previous disc .. such be it ( with only f done)
local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash)
+ if not contexts then
+ return head, start, false
+ end
-- optimizing for rlmode gains nothing
local sweepnode = sweepnode
local sweeptype = sweeptype
@@ -2579,17 +2598,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s
-- fonts can have many steps (each doing one check) or many contexts
-- todo: make a per-char cache so that we have small contexts (when we have a context
- -- n == 1 and otherwise it can be more so we can even distingish n == 1 or more)
+ -- n == 1 and otherwise it can be more so we can even distinguish n == 1 or more)
local nofcontexts = contexts.n -- #contexts
local startchar = nofcontext == 1 or ischar(start,currentfont) -- already checked
for k=1,nofcontexts do -- does this disc mess work well with n > 1
- local ck = contexts[k]
- local seq = ck[3]
- local f = ck[4] -- first current
-local last = start
+ local ck = contexts[k]
+ local seq = ck[3]
+ local f = ck[4] -- first current
+ local last = start
if not startchar or not seq[f][startchar] then
-- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts)
goto next
@@ -2600,7 +2619,9 @@ local last = start
else
local l = ck[5] -- last current
local current = start
--- local last = start
+ -- local last = start
+
+ -- current match
if l > f then
-- before/current/after | before/current | current/after
@@ -2712,7 +2733,7 @@ local last = start
-- before
if f > 1 then
- if startprev then
+ -- if startprev then -- new 2022-09-25
local prev = startprev
if prereplace and prev == checkdisc then
prev = getprev(sweepnode)
@@ -2837,9 +2858,9 @@ local last = start
else
goto next
end
- else
- goto next
- end
+ -- else -- new 2022-09-25
+ -- goto next -- new 2022-09-25
+ -- end -- new 2022-09-25
end
-- after
@@ -2968,19 +2989,21 @@ local last = start
chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode)
end
if discseen or sweepnode then
+ -- When we process a disc we can collapse and therefore we backtrack one node (start) and
+ -- reprocess. This is needed because there might be more in the collapsed list.
head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck)
else
- head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck)
+ head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6)
+ end
+ if trace_contexts then
+ chaintrac(start,done)
end
if done then
break
-- else
-- next context
end
- ::next::
- -- if trace_chains then
- -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode)
- -- end
+ ::next::
end
if discseen then
notmatchpre = { }
@@ -2999,21 +3022,46 @@ handlers.gsub_reversecontextchain = handle_contextchain
handlers.gpos_contextchain = handle_contextchain
handlers.gpos_context = handle_contextchain
--- this needs testing
+-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
+-- local steps = currentlookup.steps
+-- local nofsteps = currentlookup.nofsteps
+-- if nofsteps > 1 then
+-- reportmoresteps(dataset,sequence)
+-- end
+-- -- probably wrong
+-- local l = steps[1].coverage[getchar(start)]
+-- if l then
+-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+-- else
+-- return head, start, false
+-- end
+-- end
+-- new 2022-09-25
+
local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
local steps = currentlookup.steps
local nofsteps = currentlookup.nofsteps
- if nofsteps > 1 then
- reportmoresteps(dataset,sequence)
- end
- -- probably wrong
- local l = steps[1].coverage[getchar(start)]
- if l then
- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ local char = getchar(start)
+ if nofsteps == 1 then
+ local s = steps[1]
+ local l = s.coverage[char]
+ if l then
+ return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ end
else
- return head, start, false
+ for i=1,nofsteps do
+ local s = steps[i]
+ local l = s.coverage[char]
+ if l then
+ local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ if d then
+ return h, s, d
+ end
+ end
+ end
end
+ return head, start, false
end
chainprocs.gsub_context = chained_contextchain
@@ -3152,7 +3200,7 @@ do -- overcome local limit
end
-- Functions like kernrun, comprun etc evolved over time and in the end look rather
--- complex. It's a bit of a compromis between extensive copying and creating subruns.
+-- complex. It's a bit of a compromise between extensive copying and creating subruns.
-- The logic has been improved a lot by Kai and Ivo who use complex fonts which
-- really helped to identify border cases on the one hand and get insight in the diverse
-- ways fonts implement features (not always that consistent and efficient). At the same
@@ -3259,7 +3307,7 @@ local function kernrun(disc,k_run,...)
if done and trace_testruns then
report_disc("done",disc)
end
--- return nextstart, done
+ -- return nextstart, done
return nextstart
end
@@ -3313,7 +3361,7 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list
setdisc(disc,pre,post,replace)
end
--
--- return getnext(disc), renewed
+ -- return getnext(disc), renewed
return getnext(disc)
end
@@ -3442,7 +3490,7 @@ local function testrun(disc,t_run,c_run,...)
end
end
-- next can have changed (copied list)
--- return getnext(disc), renewed
+ -- return getnext(disc), renewed
return getnext(disc)
end
@@ -3978,20 +4026,13 @@ do
start = nxt
elseif id == disc_code then
if not discs or discs[start] == true then
--- local ok
if gpossing then
--- start, ok = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
start = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
--- start, ok = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
start = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
else
--- start, ok = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
start = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
end
- -- if ok then
- -- done = true
- -- end
else
start = nxt
end
@@ -4002,7 +4043,7 @@ do
start = nxt
-- elseif id == par_code and startofpar(start) then
-- rlparmode, rlmode = pardirstate(start)
- -- start = nxt
+ -- start = nxt
else
start = nxt
end
@@ -4051,15 +4092,11 @@ do
start = nxt
elseif id == disc_code then
if not discs or discs[start] == true then
--- local ok
if gpossing then
--- start, ok = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
start = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
--- start, ok = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
start = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
else
--- start, ok = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
start = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
end
else
@@ -4098,9 +4135,6 @@ do
currentfont = font
currentdynamic = false
--- currentscale = false
--- currentxscale = false
--- currentyscale = false
currentscale = 1000
currentxscale = 1000
currentyscale = 1000
@@ -4191,7 +4225,7 @@ do
start = nxt
-- elseif id == par_code and startofpar(start) then
-- rlparmode, rlmode = pardirstate(start)
- -- start = nxt
+ -- start = nxt
else
start = nxt
end
diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl
index 3c7a01857..8cb0b5b6c 100644
--- a/tex/context/base/mkxl/font-pre.mkxl
+++ b/tex/context/base/mkxl/font-pre.mkxl
@@ -427,10 +427,6 @@
language=dflt,
script=math]
-\definefontfeature
- [oldmath]
- [oldmath=yes]
-
\ifdefined\mathnolimitsmode
\mathnolimitsmode\plusone % font driven (only opentype)
\fi
diff --git a/tex/context/base/mkxl/grph-trf.mkxl b/tex/context/base/mkxl/grph-trf.mkxl
index a08cec904..0f1458873 100644
--- a/tex/context/base/mkxl/grph-trf.mkxl
+++ b/tex/context/base/mkxl/grph-trf.mkxl
@@ -117,7 +117,7 @@
\setupcurrentscale[#2]%
\fi
%
- \dowithnextboxcs\grph_scale_finish\hbox}
+ \dowithnextboxcs\grph_scale_finish\naturalhbox} % intercept direction
\def\grph_scale_finish
{% todo: p_scale_
diff --git a/tex/context/base/mkxl/lpdf-ano.lmt b/tex/context/base/mkxl/lpdf-ano.lmt
index 85fe050a2..b0d398457 100644
--- a/tex/context/base/mkxl/lpdf-ano.lmt
+++ b/tex/context/base/mkxl/lpdf-ano.lmt
@@ -386,6 +386,8 @@ local v_minheight = variables.minheight
local v_fit = variables.fit
local v_tight = variables.tight
+local c_realpageno = tex.iscount("realpageno")
+
-- nicer is to create dictionaries and set properties but it's a bit overkill
-- The problem with the following settings is that they are guesses: we never know
@@ -466,7 +468,7 @@ end)
local function flushdestination(specification)
local names = specification.names
local view = specification.view
- local r = pdfpagereference(texgetcount("realpageno"))
+ local r = pdfpagereference(c_realpageno)
if (references.innermethod ~= v_name) and (view == defaultview or not view or view == "") then
r = pagedestinations[r]
else
@@ -1079,7 +1081,7 @@ end
function specials.deltapage(var,actions)
local p = tonumber(var.operation)
if p then
- p = references.checkedrealpage(p + texgetcount("realpageno"))
+ p = references.checkedrealpage(p + texgetcount(c_realpageno))
return pdflinkpage(p)
end
end
diff --git a/tex/context/base/mkxl/lpdf-emb.lmt b/tex/context/base/mkxl/lpdf-emb.lmt
index 6932879e7..3ce288b48 100644
--- a/tex/context/base/mkxl/lpdf-emb.lmt
+++ b/tex/context/base/mkxl/lpdf-emb.lmt
@@ -872,6 +872,7 @@ do
FontName = basefont,
Flags = 4,
FontBBox = fontbbox,
+-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 },
Ascent = scale(ascender),
Descent = scale(descender),
ItalicAngle = round(italicangle or 0),
@@ -971,7 +972,6 @@ do
return int4tag .. tointeger4(n)
end
- local e = false
local z = byte("0")
local dp = 10
local ep = 11
@@ -985,6 +985,7 @@ do
local s = fg(v)
local t = { [0] = realtag }
local n = 0
+ local e = false
for s in gmatch(s,".") do
if s == "e" or s == "E" then
e = true
@@ -1027,6 +1028,73 @@ do
return t
end
+ -- -- An alternative
+ --
+ -- local fg = formatters["%0.14gE%i"]
+ --
+ -- todictreal = function(v)
+ -- local E = 0
+ -- if v >= 10.0 then
+ -- while v >= 10.0 do
+ -- v = v / 10.0
+ -- E = E + 1
+ -- end
+ -- elseif v < 1.0 then
+ -- while v < 1.0 do
+ -- v = v * 10.0
+ -- E = E - 1
+ -- end
+ -- end
+ -- local s = fg(v,E)
+ -- local t = { [0] = realtag }
+ -- local n = 0
+ -- local e = false
+ -- for s in gmatch(s,".") do
+ -- if s == "e" or s == "E" then
+ -- e = true
+ -- elseif s == "+" then
+ -- -- skip
+ -- elseif s == "-" then
+ -- n = n + 1
+ -- if e then
+ -- t[n] = em
+ -- e = false
+ -- else
+ -- t[n] = mn
+ -- end
+ -- else
+ -- if e then
+ -- n = n + 1
+ -- t[n] = ep
+ -- e = false
+ -- end
+ -- n = n + 1
+ -- if s == "." then
+ -- t[n] = dp
+ -- else
+ -- t[n] = byte(s) - z
+ -- end
+ -- end
+ -- end
+ -- n = n + 1
+ -- t[n] = es
+ -- if (n % 2) ~= 0 then
+ -- n = n + 1
+ -- t[n] = es
+ -- end
+ -- local j = 0
+ -- for i=1,n,2 do
+ -- j = j + 1
+ -- t[j] = char(t[i]*0x10+t[i+1])
+ -- end
+ -- -- print(v,s)
+ -- -- for i=0,j do
+ -- -- print(string.format("%02X",utf.byte(t[i])))
+ -- -- end
+ -- t = concat(t,"",0,j)
+ -- return t
+ -- end
+
todictnumber = function(n)
if not n or n == 0 then
return todictinteger(0)
@@ -1063,7 +1131,8 @@ do
local function todictdeltas(t)
local r = { }
for i=1,#t do
- r[i] = todictnumber(t[i]-(t[i-1] or 0))
+-- r[i] = todictnumber(t[i]-(t[i-1] or 0))
+ r[i] = todictnumber(t[i]+(t[i-1] or 0))
end
return concat(r)
end
@@ -1140,7 +1209,7 @@ do
--
local charstrings = fontfile.charstrings
local nofglyphs = #charstrings + 1
- local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo
+-- local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo
local fontbbox = fontfile.fontbbox
local defaultwidth = cffinfo.defaultwidth or 0
local nominalwidth = cffinfo.nominalwidth or 0
@@ -1153,6 +1222,8 @@ do
local bluefuzz = cffinfo.bluefuzz
local stdhw = cffinfo.stdhw
local stdvw = cffinfo.stdvw
+ local stemsnaph = cffinfo.stemsnaph
+ local stemsnapv = cffinfo.stemsnapv
--
if defaultwidth == 0 then defaultwidth = nil end
if nomimalwidth == 0 then nominalwidth = nil end
@@ -1163,8 +1234,10 @@ do
if bluescale then bluescale = todictnumber(bluescale) end
if blueshift then blueshift = todictnumber(blueshift) end
if bluefuzz then bluefuzz = todictnumber(bluefuzz) end
- if stdhw then stdhw = todictdeltas(stdhw) end
- if stdvw then stdvw = todictdeltas(stdvw) end
+ if stemsnaph then stemsnaph = todictarray(stemsnaph) end
+ if stemsnapv then stemsnapv = todictarray(stemsnapv) end
+ if stdhw then stdhw = todictnumber(stdhw) end
+ if stdvw then stdvw = todictnumber(stdvw) end
--
local fontversion = todictstring(fontfile,fontheader.fontversion or "uknown version")
local familyname = todictstring(fontfile,cffinfo.familyname or names.family or basefontname)
@@ -1177,7 +1250,7 @@ do
local underlineposition = todictnumber(cffinfo.underlineposition)
local underlinethickness = todictnumber(cffinfo.underlinethickness)
local charstringtype = todictnumber(2)
- local fontmatrix = todictarray(fontmatrix)
+-- local fontmatrix = todictarray(fontmatrix)
local ros = todictstring(fontfile,"Adobe") -- registry
.. todictstring(fontfile,"Identity") -- identity
.. todictnumber(0) -- supplement
@@ -1191,18 +1264,21 @@ do
--
local defaultwidthx = todictnumber(defaultwidth)
local nominalwidthx = todictnumber(nominalwidth)
+ -- the order of the blues is important!
local private = ""
- .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "")
- .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "")
- .. (bluevalues and (bluevalues .. todictkey(6)) or "")
- .. (otherblues and (otherblues .. todictkey(7)) or "")
- .. (familyblues and (familyblues .. todictkey(8)) or "")
- .. (familyotherblues and (familyotherblues .. todictkey(9)) or "")
- .. (bluescale and (bluescale .. todictkey(12,9)) or "")
- .. (blueshift and (blueshift .. todictkey(12,10)) or "")
- .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "")
- .. (stdhw and (stdhw .. todictkey(12,12)) or "")
- .. (stdvw and (stdvw .. todictkey(12,13)) or "")
+ .. (bluevalues and (bluevalues .. todictkey( 6)) or "")
+ .. (otherblues and (otherblues .. todictkey( 7)) or "")
+ .. (familyblues and (familyblues .. todictkey( 8)) or "")
+ .. (familyotherblues and (familyotherblues .. todictkey( 9)) or "")
+ .. (bluescale and (bluescale .. todictkey(12, 9)) or "")
+ .. (blueshift and (blueshift .. todictkey(12,10)) or "")
+ .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "")
+ .. (stdhw and (stdhw .. todictkey(10)) or "")
+ .. (stdvw and (stdvw .. todictkey(11)) or "")
+ .. (stemsnaph and (stemsnaph .. todictkey(12,12)) or "")
+ .. (stemsnapv and (stemsnapv .. todictkey(12,13)) or "")
+ .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "")
+ .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "")
local privatesize = todictnumber(#private)
local privatespec = privatesize .. privateoffset
--
@@ -1245,7 +1321,7 @@ do
.. underlineposition .. todictkey(12, 3)
.. underlinethickness .. todictkey(12, 4)
.. charstringtype .. todictkey(12, 6)
- .. fontmatrix .. todictkey(12, 7)
+-- .. fontmatrix .. todictkey(12, 7)
.. strokewidth .. todictkey(12, 8)
.. topvars
}
@@ -1272,6 +1348,10 @@ do
--
-- fdselect
--
+ -- see printer mail thread / experiments with Leah Neukirchen: some printers
+ -- (probaby with an old GS on board) need this matrix because oitherwise they
+ -- accumulate the top one (resulting in very tiny invisible results)
+ --
local fdselect =
tocardinal1(3) -- format
.. tocardinal2(1) -- n of ranges
@@ -1301,8 +1381,8 @@ do
offset = writestring(target,private,offset,"private")
--
local fdarray = {
- fontname .. todictkey(12,38)
- .. privatespec .. todictkey(18)
+ fontname .. todictkey(12,38)
+ .. privatespec .. todictkey(18) -- case 1
}
fdarrayoffset = todictoffset(offset)
offset = writeindex(target,fdarray,offset,"fdarray")
@@ -1314,19 +1394,18 @@ do
.. charsetoffset .. todictkey(15)
.. fdarrayoffset .. todictkey(12,36)
.. fdselectoffset .. todictkey(12,37)
- .. privatespec .. todictkey(18)
+ .. privatespec .. todictkey(18) -- case 2
target[dictof] = topdict .. topvars
--
target = concat(target)
-- if trace_details then
- -- local name = "temp.cff"
- -- report_fonts("saving %a",name)
- -- io.savedata(name,target)
- -- inspect(fonts.handlers.otf.readers.cffcheck(name))
+ -- local name = "temp.cff"
+ -- report_fonts("saving %a",name)
+ -- io.savedata(name,target)
+ -- inspect(fonts.handlers.otf.readers.cffcheck(name))
-- end
return target
end
-
end
-- todo: check widths (missing a decimal)
@@ -1468,6 +1547,7 @@ do
FontName = basefont,
Flags = 4,
FontBBox = fontbbox,
+-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 },
Ascent = scale(ascender),
Descent = scale(descender),
ItalicAngle = round(italicangle or 0),
diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt
index bf1142119..d937e3dea 100644
--- a/tex/context/base/mkxl/lpdf-lmt.lmt
+++ b/tex/context/base/mkxl/lpdf-lmt.lmt
@@ -202,6 +202,7 @@ local usedfontstreams = { }
local usedindices = setmetatableindex(function(t,k)
local n = 0
+-- n = 31
local v = setmetatableindex(function(tt,kk)
if n >= 0xFFFF then
report_fonts("registering character index: overflow in hash %a, todo: use overflow font")
@@ -2488,11 +2489,12 @@ end
do
- local names = { }
- local cache = { }
- local nofpages = 0
+ local names = { }
+ local cache = { }
+ local nofpages = 0
- local texgetcount = tex.getcount
+ local texgetcount = tex.getcount
+ local c_realpageno = tex.iscount("realpageno")
pdfreserveobject = function(name)
nofobjects = nofobjects + 1
@@ -2511,7 +2513,7 @@ do
pdfpagereference = function(n,complete) -- true | false | nil | n [true,false]
if n == true or not n then
complete = n
- n = texgetcount("realpageno")
+ n = texgetcount(c_realpageno)
end
if n > nofpages then
nofpages = n
diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt
index ca38dcaa8..2c8227be9 100644
--- a/tex/context/base/mkxl/lpdf-rul.lmt
+++ b/tex/context/base/mkxl/lpdf-rul.lmt
@@ -146,9 +146,7 @@ FakeRule(RuleWidth,RuleHeight,RuleDepth,RuleThickness,RuleColor);
setdimen("d_rule_h", h)
setdimen("d_rule_v", v)
setdimen("d_rule_line", p.line or 65536)
--- setdimen("d_rule_offset", p.offset or 0)
setdimen("d_rule_offset", (p.offset or 0) * 65536)
--- setmacro("m_rule_factor", (p.factor or 0) * bpfactor) -- needs checking
setdimen("d_rule_factor", (p.factor or 0)) -- needs checking
setmacro("m_rule_option", p.option or "")
setmacro("m_rule_direction", p.direction or lefttoright_code)
diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt
index f0b132d66..7fb4f9b9f 100644
--- a/tex/context/base/mkxl/math-act.lmt
+++ b/tex/context/base/mkxl/math-act.lmt
@@ -23,6 +23,11 @@ local trace_tweaking = false trackers.register("math.tweaks", function(v)
local report_math = logs.reporter("mathematics","initializing")
local report_mathtweak = logs.reporter("mathematics","tweak")
+local getfontoffamily = tex.getfontoffamily
+local fontcharacters = fonts.hashes.characters
+local chardata = characters.data
+local extensibles = mathematics.extensibles
+
local context = context
local commands = commands
local mathematics = mathematics
@@ -166,28 +171,6 @@ function mathematics.checkaccentbaseheight(target,original)
end
end
--- function mathematics.checkprivateparameters(target,original)
--- local mathparameters = target.mathparameters
--- if mathparameters then
--- local parameters = target.parameters
--- local properties = target.properties
--- if parameters then
--- local size = parameters.size
--- if size then
--- -- gone
--- elseif properties then
--- report_math("invalid parameters in font %a",properties.fullname or "?")
--- else
--- report_math("invalid parameters in font")
--- end
--- elseif properties then
--- report_math("no parameters in font %a",properties.fullname or "?")
--- else
--- report_math("no parameters and properties in font")
--- end
--- end
--- end
-
function mathematics.overloadparameters(target,original)
if use_math_goodies then
local mathparameters = target.mathparameters
@@ -200,6 +183,8 @@ function mathematics.overloadparameters(target,original)
if mathematics then
local parameters = mathematics.parameters
local bigslots = mathematics.bigslots or mathematics.bigs
+-- inspect(parameters)
+-- print("before",mathparameters.AxisHeight)
if parameters then
if trace_defining then
report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size)
@@ -222,6 +207,7 @@ function mathematics.overloadparameters(target,original)
end
mathparameters[name] = newvalue
end
+-- print("after ",mathparameters.AxisHeight)
for name, value in next, parameters do
local tvalue = type(value)
if tvalue == "string" then
@@ -265,7 +251,7 @@ local function report_tweak(fmt,target,original,...)
(target and target .shared.rawdata.metadata)
local parameters = target.parameters
report_mathtweak(
- "%a, size %p, math size %i, %s",
+ "%a, size %P, math size %i, %s",
metadata and metadata.fontname or "unknown",
parameters.size or 655360,
parameters.mathsize or 1,
@@ -276,6 +262,39 @@ local function report_tweak(fmt,target,original,...)
end
end
+mathtweaks.subsets = {
+ acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 },
+ bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 },
+ d = { 0x1D451 },
+ f = { 0x1D453 },
+ gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 },
+ i = { 0x1D456 },
+ mw = { 0x1D45A, 0x1D464 },
+ p = { 0x1D45D },
+ dotless = { 0x00049, 0x0004A, 0x00131, 0x00237, 0x1D6A4, 0x1D6A5 },
+ integrals = { 0x0222B, 0x0222C, 0x0222D, 0x0222E, 0x0222F, 0x02230, 0x02231, 0x02232, 0x02233, 0x02A0B, 0x02A0C, 0x02A0D, 0x02A0E, 0x02A0F, 0x02A10, 0x02A11, 0x02A12, 0x02A13, 0x02A14, 0x02A15, 0x02A16, 0x02A17, 0x02A18, 0x02A19, 0x02A1A, 0x02A1B, 0x02A1C },
+}
+
+local function getalso(target,original)
+ local also = target.tweakalso -- maybe
+ if not also then
+ also = { }
+ for k, v in sortedhash(target.characters) do
+ local u = v.unicode
+ if u and k ~= u then
+ local a = also[u]
+ if a then
+ a[#a+1] = k
+ else
+ also[u] = { k }
+ end
+ end
+ end
+ target.tweakalso = also
+ end
+ return also
+end
+
-- {
-- tweak = "dimensions",
-- list = {
@@ -398,32 +417,33 @@ do
extend = factor,
}, v)
end
- local original = v.original
- if not original then
+ local originalslot = v.original
+ if not originalslot then
local delta = v.delta
if delta then
- original = k + delta
+ originalslot = k + delta
end
end
- if original then
- original = mathgaps[original] or original
- local data = targetcharacters[original]
+ if originalslot then
+ originalslot = mathgaps[originalslot] or originalslot
+ local data = targetcharacters[originalslot]
if data then
data = copytable(data)
- data.unicode = original
+ data.unicode = originalslot
targetcharacters[k] = data
character = data
else
- report_mathtweak("no slot %U",original)
+ report_mathtweak("no slot %U",originalslot)
return
end
end
--
- local width = character.width
- local height = character.height
- local depth = character.depth
- local italic = character.italic
- local topaccent = character.topaccent
+ local width = character.width
+ local height = character.height
+ local depth = character.depth
+ local italic = character.italic
+ local topanchor = character.topanchor
+ local bottomanchor = character.bottomanchor
--
local widthfactor = v.width
local heightfactor = v.height
@@ -442,7 +462,7 @@ do
if advancefactor then
character.advance = advancefactor * width
else
- character.advance = width -- so advance is oldwidth
+ character.advance = character.advance or width -- so advance is oldwidth
end
if widthfactor then
character.width = widthfactor * width
@@ -470,8 +490,11 @@ do
end
end
if anchorfactor then
- character.topaccent = anchorfactor * (topaccent or width)
+ character.topanchor = anchorfactor * (topanchor or width)
end
+-- if anchorfactor then
+-- character.bottomaccent = anchorfactor * (bottomanchor or width)
+-- end
-- begin experiment
local line = v.wline
if line then
@@ -573,6 +596,18 @@ do
end
+do
+
+ function mathtweaks.showinfo(target,original,parameters)
+ local mathparameters = target.mathparameters
+ for k, v in sortedhash(mathparameters) do
+ report_mathtweak("%s : %s",k,v)
+ end
+ end
+
+end
+
+
do
function mathtweaks.wipevariants(target,original,parameters)
@@ -581,6 +616,8 @@ do
local targetcharacters = target.characters
-- local originalcharacters = original.characters
local count = 0
+ -- local also = getalso(target,original)
+ -- local done = { }
for k, v in sortedhash(list) do
local ori = targetcharacters[k]
local nxt = ori.next
@@ -675,17 +712,6 @@ do
-- maybe we'll have a different name
- mathtweaks.subsets = {
- acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 },
- bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 },
- d = { 0x1D451 },
- f = { 0x1D453 },
- gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 },
- i = { 0x1D456 },
- mw = { 0x1D45A, 0x1D464},
- p = { 0x1D45D },
- }
-
function mathtweaks.kernpairs(target,original,parameters)
local list = parameters.list
if list then
@@ -749,37 +775,11 @@ end
do
- -- What a mess ... should be a different alphabet.
-
- local function expand(target,original,list,selector,feature)
- if feature then
- local getsubstitution = fonts.handlers.otf.getsubstitution
- for _, char in next, list do
- local variant = getsubstitution(original,char,feature,true)
- if variant then
- mathematics.addvariant(target,char,variant,selector)
- end
- end
- else
- for i, char in next, list do
- mathematics.addvariant(target,char,0xFE800+i,selector)
- end
- end
- end
-
function mathtweaks.variants(target,original,parameters)
- local feature = parameters.feature
- local selector = parameters.selector
- local kind = parameters.kind
- if kind == "script" then
- if selector then
- expand(target,original,mathematics.alphabets.sr.tf.lcletters,selector,feature)
- expand(target,original,mathematics.alphabets.sr.tf.ucletters,selector,feature)
- end
- end
+ report_mathtweak("todo: remove 'variants' tweak from goodie file")
end
- mathtweaks.variant = mathtweaks.variants
+ mathtweaks.variant = mathtweaks.variants
end
@@ -1052,86 +1052,307 @@ do
local factor = tonumber(parameters.factor) or 0
if factor ~= 0 then
for k, v in next, targetcharacters do
- local a = v.topaccent
+ local a = v.topanchor
if a and a > 0 then
- v.topaccent = a * factor
+ v.topanchor = a * factor
end
end
end
end
- -- local default = {
- -- "digitsnormal",
- -- "lowercasedoublestruck",
- -- "uppercasedoublestruck",
- -- }
+ mathtweaks.fixaccents = mathtweaks.fixanchors
+
+end
+
+do
+
+ -- actually this should be a an engine feature driven by category because we don't
+ -- want this in display mode .. only a test for MS and HH
+
+ local issymbol = characters.is_symbol
+
+ function mathtweaks.oldstylemath(target,original,parameters)
+ local characters = target.characters
+ local axis = target.mathparameters.AxisHeight
+ local delta = (parameters.factor or .1) * axis
+ target.mathparameters.AxisHeight = (axis - delta)
+ for k, v in sortedhash(characters) do
+ if issymbol[k] then -- quick hack, engine knows
+ v.yoffset = -delta
+ v.height = (v.height or 0) - delta
+ v.depth = (v.depth or 0) - delta
+ end
+ end
+ end
- local function wipe(target,original,parameters,field)
- local targetcharacters = target.characters
+end
+
+do
+
+ function mathtweaks.simplifykerns(target,original,parameters)
+ local characters = target.characters
+ local simplified = 0
+ for k, v in sortedhash(characters) do
+ local mathkerns = v.mathkerns
+ if mathkerns then
+ local k = mathkerns.topleft
+ if k then
+ k = k[#k].kern
+ if k then
+ v.topleft = k
+ end
+ end
+ local k = mathkerns.topright
+ if k then
+ k = k[#k].kern
+ if k then
+ v.topright = k
+ end
+ end
+ local k = mathkerns.bottomleft
+ if k then
+ k = k[1].kern -- todo get value at baseline
+ if k then
+ v.bottomleft = k
+ end
+ end
+ local k = mathkerns.bottomright
+ if k then
+ k = k[1].kern -- todo get value at baseline
+ if k then
+ v.bottomright = k
+ end
+ end
+ v.mathkerns = nil
+ simplified = simplified + 1
+ end
+ end
+ if simplified == 0 then
+ report_tweak("no need to simplify mathkerns",target,original)
+ elseif trace_tweaking then
+ report_tweak("%i mathkerns simplified",target,original,simplified)
+ end
+ end
+
+end
+
+do
+
+ local function wipe(target,original,parameters,field,move,integrals)
+ local targetcharacters = target.characters
+ local targetdescriptions = target.descriptions
+ local factor = target.parameters.factor
+ local correct = parameters.correct
+ local function getllx(u)
+ local d = targetdescriptions[u]
+ if d then
+ local b = d.boundingbox
+ if b then
+ local llx = b[1]
+ if llx < 0 then
+ return - llx
+ end
+ end
+ end
+ return false
+ end
local function step(s,l)
- local done = false
while s do
- local c = targetcharacters[mathgaps[s] or s]
+ local u = mathgaps[s] or s
+ local c = targetcharacters[u]
if c then
- local v = c[field]
- if v then
- if trace_tweaking then
- if l then
- report_tweak("removing %a in range %a from %C",target,original,field,l,s)
+ if field == "topanchor" then
+ if c.topanchor then
+ c.topanchor = nil
+ else
+ goto smaller
+ end
+ else
+ local done = false
+ local italic = c.italic
+ if move then
+ local width = c.width or 0
+ c.advance = width
+ if correct then
+ local llx = getllx(u)
+ if llx then
+ local topanchor = c.topanchor
+ llx = llx * factor
+ width = width + llx
+ c.xoffset = llx
+ if topanchor then
+ c.topanchor = topanchor + llx
+ end
+-- if c.bottomleft or c.topleft then
+-- print("BEFORE",c.bottomleft,c.topleft,llx)
+-- c.bottomleft = (c.bottomleft or 0) - llx
+-- c.topleft = (c.topleft or 0) - llx
+-- print("AFTER",c.bottomleft,c.topleft,llx)
+-- else
+ c.bottomleft = (c.bottomleft or 0) - llx
+ c.topleft = (c.topleft or 0) - llx
+-- end
+ done = true
+ end
+ end
+ if italic and italic ~= 0 then
+ c.width = width + italic
+-- print(">>>",bottomright)
+ c.bottomright = - italic
+-- c.bottomright = c.bottomright - italic
+ done = true
else
- report_tweak("removing %a from %C",target,original,field,s)
+ c.width = width
end
end
- c[field] = nil
- done = true
+ if italic then
+ c.italic = nil
+ done = true
+ end
+ if not done then
+ goto smaller
+ end
end
+ if trace_tweaking then
+ if l then
+ report_tweak("%s %a in range %a from %C","removing",target,original,field,l,s)
+ else
+ report_tweak("%s %a from %C","removing",target,original,field,s)
+ end
+ end
+ goto smaller
+ ::smaller::
s = c.smaller
else
break
end
end
- return done
end
local list = parameters.list -- todo: ranges
- -- if list == "default" then
- -- list = default
- -- else
if type(list) == "string" then
list = { list }
end
for i=1,#list do
local l = list[i]
- local r = blocks[l]
- if r then
- local done = false
- for i=r.first,r.last do
- if step(i,l) then
- done = true
- end
- end
- if not done and trace_tweaking then
- report_mathtweak("there is no need to remove %a range %a",field,l)
+ if type(l) == "table" then
+ for i=1,#l do
+ step(i,l[i])
end
else
- stepper(l,step)
+ local r = blocks[l]
+ if r then
+ for i=r.first,r.last do
+ step(i,l)
+ end
+ else
+ stepper(l,step)
+ end
end
end
end
function mathtweaks.wipeanchors(target,original,parameters)
- wipe(target,original,parameters,"topaccent")
+ wipe(target,original,parameters,"topanchor")
end
+ mathtweaks.wipeaccents = mathtweaks.wipeanchors
+
function mathtweaks.wipeitalics(target,original,parameters)
wipe(target,original,parameters,"italic")
end
+ function mathtweaks.moveitalics(target,original,parameters)
+ wipe(target,original,parameters,"italic",true)
+ end
+
-- function mathtweaks.fixdigits(target,original,parameters)
-- mathtweaks.fixanchors(target,original,{ list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } })
-- end
end
+do
+
+ function mathtweaks.topanchors(target,original,parameters)
+ local characters = target.characters
+ local list = parameters.list
+ if list then
+ for k, v in sortedhash(list) do
+ local c = characters[k]
+ if c then
+ local w = c.width
+ if w and w ~= 0 then
+ c.topanchor = v * w
+ if trace_tweaking then
+ -- todo
+ end
+ end
+ end
+ end
+ -- todo: small
+ end
+ end
+
+ mathtweaks.topaccents = mathtweaks.topanchors
+
+ function mathtweaks.limits(target,original,parameters)
+ local characters = target.characters
+ local list = parameters.list
+ if list then
+ local factor = parameters.factor or 1
+ local also = getalso(target,original)
+ local done = { }
+ local function relocate(u,factor)
+ if done[u] then
+ return
+ end
+ done[u] = true
+ local c = characters[u]
+ if c then
+ local italic = c.italic
+ if italic and italic ~= 0 then
+ local width = c.width or 0
+ local half = (italic/2) * factor
+ c.topanchor = width + half
+ c.bottomanchor = width - half
+ c.bottomright = - italic
+ c.italic = nil
+ if trace_tweaking then
+ -- todo
+ end
+ end
+ local s = c.smaller
+ if s then
+ relocate(s,factor)
+ end
+ local n = c.next
+ if n then
+ relocate(n,factor)
+ end
+ if also then
+ local a = also[u]
+ if a then
+ for i=1,#a do
+ relocate(a[i],factor)
+ end
+ end
+ end
+ end
+ end
+ if #list > 0 then
+ for i=1,#list do
+ relocate(list[i],factor)
+ end
+ else
+ for k, v in sortedhash(list) do
+ relocate(k,tonumber(v) or factor)
+ end
+ end
+ end
+ end
+
+end
+
do
-- musical timestamp: March 2022, Antonio Sanches (Bad Hombre), live performance in NL
@@ -1178,12 +1399,14 @@ do
local characters = target.characters
local function setone(unicode,data)
local chardata = characters[mathgaps[unicode] or unicode]
- local width = chardata.width or 0
- local total = (chardata.height or 0) + (chardata.depth or 0)
- local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end
- local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end
- local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end
- local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end
+ if chardata then
+ local width = chardata.width or 0
+ local total = (chardata.height or 0) + (chardata.depth or 0)
+ local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end
+ local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end
+ local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end
+ local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end
+ end
end
for unicode, data in next, margins do
setone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone)
@@ -1398,39 +1621,39 @@ end
do
- local addprivate = fonts.helpers.addprivate
- local privateslot = fonts.helpers.privateslot
-
- -- function mathtweaks.addrules(target,original,parameters)
- -- local characters = target.characters
- -- local height = target.mathparameters.OverbarRuleThickness
- -- local depth = target.mathparameters.UnderbarRuleThickness
- -- local width = target.parameters.emwidth/2
- -- local step = 0.8 * width
- -- characters[0x203E] = { -- over
- -- width = width,
- -- height = height,
- -- depth = 0,
- -- unicode = 0x203E,
- -- commands = { { "rule", height, width } },
- -- hparts = {
- -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 },
- -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 },
- -- }
- -- }
- -- characters[0x0332] = { -- under
- -- width = width,
- -- height = 0,
- -- depth = depth,
- -- yoffset = -depth,
- -- unicode = 0x0332,
- -- commands = { { "rule", height, width } },
- -- hparts = {
- -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 },
- -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 },
- -- }
- -- }
- -- end
+ local addprivate = fonts.helpers.addprivate
+ local privateslot = fonts.helpers.privateslot
+
+ -- function mathtweaks.addrules(target,original,parameters)
+ -- local characters = target.characters
+ -- local height = target.mathparameters.OverbarRuleThickness
+ -- local depth = target.mathparameters.UnderbarRuleThickness
+ -- local width = target.parameters.emwidth/2
+ -- local step = 0.8 * width
+ -- characters[0x203E] = { -- over
+ -- width = width,
+ -- height = height,
+ -- depth = 0,
+ -- unicode = 0x203E,
+ -- commands = { { "rule", height, width } },
+ -- hparts = {
+ -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 },
+ -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 },
+ -- }
+ -- }
+ -- characters[0x0332] = { -- under
+ -- width = width,
+ -- height = 0,
+ -- depth = depth,
+ -- yoffset = -depth,
+ -- unicode = 0x0332,
+ -- commands = { { "rule", height, width } },
+ -- hparts = {
+ -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 },
+ -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 },
+ -- }
+ -- }
+ -- end
function mathtweaks.addrules(target,original,parameters)
local characters = target.characters
@@ -1787,6 +2010,9 @@ end
do
+ -- mirror
+ -- smaller
+
local list = {
0x221A,
}
@@ -1802,11 +2028,19 @@ do
end
data.height = depth
data.depth = height
+if data.rorrim then
+ -- the original does the magic
+else
data.yoffset = depth - height
+end
+ end
+ local smaller = data.smaller
+ if smaller then
+ fix(target,original,characters,smaller)
end
- local small = data.smaller
- if small then
- fix(target,original,characters,small)
+ local mirror = data.mirror
+ if mirror then
+ fix(target,original,characters,mirror)
end
end
end
@@ -1821,6 +2055,70 @@ do
end
+do
+
+ local done = nil
+
+ local function fix(target,original,characters,unicode,axis)
+ if done[unicode] then
+ return
+ end
+ done[unicode] = true
+ local data = characters[unicode]
+ if data then
+ local height = data.height or 0
+ local depth = data.depth or 0
+ if trace_tweaking then
+ report_tweak("swapping height and depth of %U",target,original,unicode)
+ end
+ local half = (height + depth)/2
+ if data.rorrim then
+ -- the original does the magic
+ else
+ data.yoffset = depth - (half - axis)
+ end
+ height = half + axis
+ depth = half - axis
+ data.height = height
+ data.depth = depth
+ local smaller = data.smaller
+ if smaller then
+ fix(target,original,characters,smaller,axis)
+ end
+ local mirror = data.mirror
+ if mirror then
+ fix(target,original,characters,mirror,axis)
+ end
+ local next = data.next
+ if next then
+ fix(target,original,characters,next,axis)
+ end
+ end
+ end
+
+ function mathtweaks.fixoldschool(target,original,parameters)
+ local characters = target.characters
+ local list = mathtweaks.subsets.integrals
+ local also = getalso(target,original)
+ local axis = target.mathparameters.AxisHeight
+ done = { }
+ for i=1,#list do
+ local unicode = list[i]
+ fix(target,original,characters,unicode,axis)
+ end
+ if also then
+ local a = also[u]
+ if a then
+ for i=1,#a do
+ fix(target,original,characters,a[i],axis)
+ end
+ end
+ end
+ done = nil
+ end
+
+end
+
do
local list = { 0x2061, 0x2062, 0x2063, 0x2064 }
@@ -1896,12 +2194,12 @@ characters[hat] = copytable(characters[0x0302]) -- TODO
local alias = entry[1]
local stretchingdata = characters[stretching]
if stretchingdata and stretchingdata.width == 0 then
- local topaccent = stretchingdata.topaccent or 0
- local width = -topaccent
- topaccent = width/2
+ local topanchor = stretchingdata.topanchor or 0
+ local width = -topanchor
+ topanchor = width/2
stretchingdata.width = width
- stretchingdata.topaccent = topaccent
- stretchingdata.commands = { rightcommand[width + topaccent], charcommand[stretching] }
+ stretchingdata.topanchor = topanchor
+ stretchingdata.commands = { rightcommand[width + topanchor], charcommand[stretching] }
if trace_tweaking then
report_tweak("width of initial extensible accent %U set",target,original,stretching)
end
@@ -1925,7 +2223,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO
local flataccent = last.flataccent
if flataccent then
characters[flataccent].extensible = true
- end
+ end
break
end
end
@@ -1947,7 +2245,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO
depth = stretchingdata.depth,
next = stretchingdata.next,
commands = { charcommand[stretching] },
- topaccent = stretchingdata.topaccent,
+ topanchor = stretchingdata.topanchor,
-- unicode = stretching, -- when we aliasize to combiners
unicode = alias, -- when we keep the original
}
@@ -2018,7 +2316,9 @@ do
local linewidth = target.MathConstants.RadicalRuleThickness -- make option
local basechar = characters[radical]
local baseheight = basechar.height
+/2
local basedepth = basechar.depth
+/2
local basetotal = baseheight + basedepth
local used = baseheight
--
@@ -2188,7 +2488,7 @@ do
}
}
if trace_tweaking then
- report_tweak("fourier %U added using %U",target,original,basecode,fourier)
+ report_tweak("fourier %U added using %U",target,original,basecode,fouriercode)
end
end
end
@@ -2284,17 +2584,17 @@ do
function mathtweaks.fixellipses(target,original,parameters)
local characters = target.characters
local function fix(normal,raised)
- local normalone = characters[normal]
- if normalone then
- local raisedone = copytable(normalone)
- characters[raised] = raisedone
- raisedone.unicode = weird
- local height = raisedone.height
+ local normaldata = characters[normal]
+ if normaldata then
+ local raiseddata = copytable(normaldata)
+ characters[raised] = raiseddata
+ raiseddata.unicode = raised
+ local height = raiseddata.height
local yoffset = (parameters.yoffset or 2) * height
- raisedone.yoffset = yoffset
- raisedone.height = height + yoffset
+ raiseddata.yoffset = yoffset
+ raiseddata.height = height + yoffset
if trace_tweaking then
- report_tweak("taking %U from %U",target,original,weird,normal)
+ report_tweak("taking %U from %U",target,original,raised,normal)
end
end
end
@@ -2356,6 +2656,163 @@ do
end
+do
+
+ -- We started with the list that xits has in rtlm but most of them can be derived from
+ -- the database, and others need to be added.
+
+ -- Checked while watching/listening to Dave Matthews Band: The Central Park Concert
+ -- (with superb solos by Warren Haynes), a DVD I bought around when we started with the
+ -- LUATEX advanture.
+
+ local mirrors = {
+
+ [0x0002F] = true, -- slashes
+ [0x0005C] = true,
+ [0x000F7] = true,
+
+ [0x02032] = true, -- primes
+ [0x02033] = true,
+ [0x02034] = true,
+ [0x02057] = true,
+ [0x02035] = true,
+ [0x02036] = true,
+ [0x02037] = true,
+
+ [0x0221A] = true, -- radicals
+ [0x0221B] = true,
+ [0x0221C] = true,
+ [0x0221D] = true,
+
+ [0x0222B] = true, -- integrals
+ [0x0222C] = true,
+ [0x0222D] = true,
+ [0x0222E] = true,
+ [0x0222F] = true,
+ [0x02230] = true,
+ [0x02231] = true,
+ [0x02232] = true,
+ [0x02233] = true,
+
+ [0x02A0A] = true, -- seen in xits (to be checked)
+ [0x02A0B] = true,
+ [0x02A0C] = true,
+ [0x02A0D] = true,
+ [0x02A0E] = true,
+
+ [0x02140] = true,
+ [0x02201] = true,
+ [0x02202] = true,
+ [0x02203] = true,
+ [0x02204] = true,
+ [0x02211] = true,
+
+ [0x02239] = true,
+ [0x0225F] = true,
+ [0x0228C] = true,
+ [0x022A7] = true,
+ [0x022AA] = true,
+ [0x022AC] = true,
+ [0x022AD] = true,
+ [0x022AE] = true,
+ [0x022AF] = true,
+ [0x022F5] = true,
+ [0x022F8] = true,
+ [0x022F9] = true,
+ [0x022FF] = true,
+ [0x02320] = true,
+ [0x02321] = true,
+ [0x027C0] = true,
+ [0x029DC] = true,
+ [0x029F4] = true,
+
+ [0x02A0F] = true,
+ [0x02A10] = true,
+ [0x02A11] = true,
+ [0x02A12] = true,
+ [0x02A13] = true,
+ [0x02A14] = true,
+ [0x02A15] = true,
+ [0x02A16] = true,
+ [0x02A17] = true,
+ [0x02A18] = true,
+ [0x02A19] = true,
+ [0x02A1A] = true,
+ [0x02A1B] = true,
+ [0x02A1C] = true,
+ [0x02A20] = true,
+
+ [0x02A74] = true,
+ [0x02AA3] = true,
+ [0x02AE2] = true,
+ [0x02AE6] = true,
+ [0x1D715] = true,
+ }
+
+ local new = fonts.helpers.newprivateslot
+
+ local function add(target,original,characters,unicode,what)
+ local data = characters[unicode]
+ if data then
+ if not data.mirror then
+ local slot = new("mirror."..unicode)
+ local mirror = copytable(data)
+ data.mirror = slot
+ mirror.rorrim = unicode -- so we can check later
+ mirror.commands = {
+ { "offset", data.width, 0, unicode, -1, 1 }
+ }
+ if trace_tweaking then
+ report_tweak("adding mirror %U (%s)",target,original,unicode,what)
+ end
+ characters[slot] = mirror
+ elseif trace_tweaking then
+ report_tweak("skipping mirror %U (%s)",target,original,unicode,what)
+ end
+ local hparts = data.hparts
+ if hparts then
+ for i=1,#hparts do
+ add(target,original,characters,hparts[i],"hpart")
+ end
+ end
+ local vparts = data.vparts
+ if vparts then
+ for i=1,#vparts do
+ add(target,original,characters,vparts[i],"vpart")
+ end
+ end
+ local smaller = data.smaller
+ if smaller then
+ add(target,original,characters,"smaller")
+ end
+ local next = data.next
+ if next then
+ add(target,original,characters,next,"next")
+ end
+ end
+ end
+
+ -- todo: also check the rtlm table if present
+
+ function mathtweaks.addmirrors(target,original,parameters)
+ local characters = target.characters
+ for unicode, detail in sortedhash(characters) do
+ local data = chardata[unicode]
+ if data and data.mirror then
+ add(target,original,characters,unicode,"mirror")
+ end
+ end
+ for unicode, detail in sortedhash(mirrors) do
+ if characters[unicode] then
+ add(target,original,characters,unicode,"character")
+ elseif trace_tweaking then
+ report_tweak("ignoring mirror %U (%s)",target,original,unicode,what)
+ end
+ end
+ end
+
+end
+
do
local reported = { }
@@ -2380,6 +2837,215 @@ do
report_tweak()
end
reported[fontname] = true
+ target.tweakversion = version
+ end
+ end
+ end
+
+end
+
+do
+
+ function mathtweaks.diagnose(target,original,parameters)
+ local characters = target.characters
+ for k, v in sortedhash(characters) do
+ local italic = v.italic
+ if italic then
+ report_tweak("italics: %U %p",target,original,k,italic)
+ end
+ end
+-- inspect(characters[0xF0929])
+ end
+
+end
+
+do
+
+ function mathtweaks.setoptions(target,original,parameters)
+ local setlist = parameters.set or parameters.list
+ local resetlist = parameters.reset
+ if setlist or resetlist then
+ local properties = target.properties
+ local codes = tex.mathcontrolcodes
+ local oldcontrol = tex.get("mathfontcontrol")
+ local newcontrol = oldcontrol
+ -- todo: reset
+ if resetlist then
+ for i=1,#resetlist do
+ local v = tonumber(codes[resetlist[i]])
+ if v then
+ newcontrol = newcontrol & (not v)
+ end
+ end
+ end
+ if setlist then
+ for i=1,#setlist do
+ local v = tonumber(codes[setlist[i]])
+ if v then
+ newcontrol = newcontrol | v
+ end
+ end
+ end
+ newcontrol = newcontrol | codes.usefontcontrol
+ properties.mathcontrol = newcontrol
+ target.mathcontrol = newcontrol
+ if trace_tweaking then
+ report_tweak("forcing math font options 0x%08X instead of 0x08X",target,original,newcontrol,oldcontrol)
+ end
+ end
+ end
+
+end
+
+do
+
+ function mathtweaks.setovershoots(target,original,parameters)
+ local list = parameters.list
+ if list then
+ local characters = target.characters
+ local emwidth = target.parameters.quad
+ for i=1,#list do
+ local entry = list[i]
+ local target = entry.target
+ local top = entry.topovershoot
+ local quad = entry.quad
+ if target and top then
+ local range = blocks[target]
+ if range then
+ if quad then
+ quad = emwidth
+ end
+ for r = range.first, range.last do
+ local unicode = mathgaps[r] or r
+ local data = characters[unicode]
+ if data then
+ data.topovershoot = top * (quad or data.width or 0)
+ end
+ end
+ if trace_tweaking then
+ report_mathtweak("setting overshoots for %a",target)
+ end
+ end
+ end
+ end
+ end
+ end
+
+ -- there is no real need for thios but let's play nice with memory anyway
+
+ local efindex = 0
+ local effects = setmetatableindex (function (t,k)
+ efindex = efindex + 1
+ local v = "tweakreplacealphabets" .. efindex
+ local e = fonts.specifiers.presetcontext(v,"",k)
+ -- print(k,v,e)
+ t[k] = v
+ return v
+ end)
+
+ function mathtweaks.replacealphabets(target,original,parameters)
+ local feature = parameters.feature
+ local features = target.specification.features.normal
+ if not feature or features[feature] == true then
+ local list = parameters.list
+ if list then
+ local definedfont = fonts.definers.internal
+ local copiedglyph = fonts.handlers.vf.math.copy_glyph
+-- does a deep copy, including parts and so
+ local getsubstitution = fonts.handlers.otf.getsubstitution
+ local fontdata = fonts.hashes.identifiers
+ --
+ local fonts = target.fonts
+ local size = target.size
+ local characters = target.characters
+ -- compact: size = 655360
+ if not fonts then
+ fonts = { }
+ target.fonts = fonts
+ end
+ if #fonts == 0 then
+ fonts[1] = { id = 0, size = size } -- self, will be resolved later
+ end
+ for i=1,#list do
+ local entry = list[i]
+ local filename = entry.filename
+ local feature = entry.feature
+ local thesource = entry.source
+ local thetarget = entry.target or thesource
+ if thesource and thetarget then
+ local sourcerange = type(thesource) == "table" and thesource or blocks[thesource] -- .gaps
+ local targetrange = type(thetarget) == "table" and thetarget or blocks[thetarget] -- .gaps
+ if sourcerange and targetrange then
+ local firsttarget = targetrange.first
+ local firstsource = sourcerange.first
+ local lastsource = sourcerange.last or firstsource
+ if firstsource and firsttarget then
+ local offset = firsttarget - firstsource
+ local topovershoot = entry.topovershoot
+ if filename then
+ local rscale = entry.rscale or 1 -- todo
+ size = size * rscale -- maybe use scale in vf command
+ -- load font, todo: set language and script, the effect hack is ugly
+ local fullname = filename
+ local effect = features.effect
+ if effect then
+ fullname = fullname .. "*" .. effects["effect={"..effect.."}"]
+ end
+ local id = definedfont {
+ name = fullname,
+ size = size,
+ }
+ local chars = fontchars[id]
+ local dropin = fontdata[id]
+ local index = #fonts + 1
+ fonts[index] = { id = id, size = size }
+ -- copy characters
+ for s=firstsource,lastsource do
+ local t = s + offset
+ local sourceunicode = mathgaps[s] or s
+ local targetunicode = mathgaps[t] or t
+ if feature then
+ sourceunicode = getsubstitution(dropin,sourceunicode,feature,true,"math","dflt") or sourceunicode
+ end
+ if trace_tweaking then
+ report_mathtweak("copying %s %U from file %a to %s %U",thesource,sourceunicode,filename,thetarget,targetunicode)
+ end
+ characters[targetunicode] = copiedglyph(target,characters,chars,sourceunicode,index)
+ end
+ elseif feature then
+ for s=firstsource,lastsource do
+ local t = s + offset
+ local sourceunicode = mathgaps[s] or s
+ local targetunicode = mathgaps[t] or t
+ local variant = getsubstitution(original,sourceunicode,feature,true,"math","dflt")
+ local data = characters[variant]
+ if data then
+ if trace_tweaking then
+ report_mathtweak("copying %s %U from feature %a to %s %U",thesource,sourceunicode,feature,thetarget,targetunicode)
+ end
+ characters[targetunicode] = copytable(data)
+ end
+ end
+ else
+ for s=firstsource,lastsource do
+ local t = s + offset
+ local sourceunicode = mathgaps[s] or s
+ local targetunicode = mathgaps[t] or t
+ local data = characters[sourceunicode]
+ if data then
+ if trace_tweaking then
+ report_mathtweak("copying %s %U to %s %U",thesource,sourceunicode,thetarget,targetunicode)
+ end
+ characters[targetunicode] = copytable(data)
+ end
+ end
+ end
+ else
+ -- error
+ end
+ end
+ end
+ end
end
end
end
@@ -2418,7 +3084,10 @@ local function applytweaks(when,target,original)
if type(tweak) == "table" then
local action = mathtweaks[tweak.tweak or ""]
if action then
- if original then
+ local version = tweak.version
+ if version and version ~= target.tweakversion then
+ report_math("skipping tweak %a version %a",tweak.tweak,version)
+ elseif original then
action(target,original,tweak)
else
action(target,tweak)
@@ -2456,6 +3125,65 @@ function mathematics.tweakaftercopyingfont(target,original)
end
end
+do
+
+ local defaults = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ },
+ {
+ source = "lowercasescript",
+ target = "lowercasecalligraphic",
+ },
+ {
+ source = "uppercaseboldscript",
+ target = "uppercaseboldcalligraphic",
+ },
+ {
+ source = "lowercaseboldscript",
+ target = "lowercaseboldcalligraphic",
+ },
+ }
+
+ function mathematics.checkaftercopyingfont(target,original)
+ local mathparameters = target.mathparameters -- why not hasmath
+ if mathparameters then
+ local characters = target.characters
+ --
+ for i=1,#defaults do
+ -- we assume no ssty here yet .. todo
+ local default = defaults[i]
+ local block = blocks[default.target]
+ local first = block.first
+ local last = block.last
+ if not characters[mathgaps[first] or last] then
+ mathtweaks.replacealphabets(target,original,{
+ tweak = "replacealphabets",
+ list = { default }
+ })
+ end
+ end
+ --
+ local addvariant = mathematics.addvariant
+ local function register(old,new)
+ for i, cold in next, old do
+ local cnew = new[i]
+ addvariant(target,cold,cold,0xFE00)
+ addvariant(target,cnew,cnew,0xFE01)
+ addvariant(target,cnew,cold,0xFE00)
+ addvariant(target,cold,cnew,0xFE01)
+ end
+ end
+ local sr = mathematics.alphabets.sr.tf
+ local ca = mathematics.alphabets.ca.tf
+ register(sr.ucletters,ca.ucletters)
+ register(sr.lcletters,ca.lcletters)
+ end
+ end
+
+end
+
function mathematics.beforepassingfonttotex(target)
if use_math_goodies then
local mathparameters = target.mathparameters -- why not hasmath
@@ -2472,20 +3200,13 @@ sequencers.appendaction("mathparameters","system","mathematics.checkaccentbasehe
sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont")
sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont")
+sequencers.appendaction("aftercopyingcharacters", "system","mathematics.checkaftercopyingfont")
sequencers.appendaction("beforepassingfonttotex", "system","mathematics.beforepassingfonttotex")
-- no, it's a feature now (see good-mth):
--
-- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions")
--- helpers
-
-local getfontoffamily = tex.getfontoffamily
-
-local fontcharacters = fonts.hashes.characters
-local chardata = characters.data
-local extensibles = mathematics.extensibles
-
-- we use numbers at the tex end (otherwise we could stick to chars)
local e_left = extensibles.left
@@ -2657,7 +3378,7 @@ function mathematics.finishfallbacks(target,specification,fallbacks)
if trace_collecting then
report_math("adding fallback characters to font %a",specification.hash)
end
- local definedfont = fonts.definers.internal
+ ----- definedfont = fonts.definers.internal
local copiedglyph = fonts.handlers.vf.math.copy_glyph
local fonts = target.fonts
local size = specification.size -- target.size
diff --git a/tex/context/base/mkxl/math-ali.mkxl b/tex/context/base/mkxl/math-ali.mkxl
index b6b037117..af6b48cee 100644
--- a/tex/context/base/mkxl/math-ali.mkxl
+++ b/tex/context/base/mkxl/math-ali.mkxl
@@ -1011,12 +1011,12 @@
\ifmmode\stopimath\fi
\hfil
\aligntab
- \hskip\mathcasesparameter\c!distance\relax
+ \kern\mathcasesparameter\c!distance\relax % hskip
\math_cases_strut % looks better
\aligncontent
\hfil
\aligntab
- \hskip\mathcasesparameter\c!numberdistance\relax
+ \kern\mathcasesparameter\c!numberdistance\relax % hskip
\span\math_text_in_eqalign{\aligncontent}%
\crcr} % todo: number
@@ -1286,7 +1286,7 @@
\math_matrix_anchor
% \ifdim\d_math_eqalign_distance>\zeropoint
% \ifbitwiseand\c_math_matrix_anchor_mode\plustwo
- % \hskip.5\d_math_eqalign_distance
+ % \kern.5\d_math_eqalign_distance
% \fi
% \fi
\fi}
@@ -1296,7 +1296,7 @@
\ifcase\c_math_matrix_anchor_mode\else
% \ifdim\d_math_eqalign_distance>\zeropoint
% \ifbitwiseand\c_math_matrix_anchor_mode\plusfour
- % \hskip.5\d_math_eqalign_distance
+ % \kern.5\d_math_eqalign_distance
% \fi
% \fi
\math_matrix_anchor
@@ -1312,7 +1312,7 @@
\aligntab
\aligntab
\math_matrix_anchor
- \hskip.5\d_math_eqalign_distance % kern
+ \kern.5\d_math_eqalign_distance % hskip
\aligncontent
\aligntab
\global\advance\c_math_eqalign_column\plusone
@@ -1358,27 +1358,40 @@
\dousecolorparameter\p_rulecolor
\fi}
-% \noaligned\permanent\tolerant\protected\def\math_matrix_HL[#1]#*%
-% {\noalign\bgroup
-% \math_matrix_check_rule[#1]%
-% \divide\scratchdimen\plustwo
-% \autorule\s!height\scratchdimen\s!depth\scratchdimen\relax
-% \egroup}
-%
-% \permanent\tolerant\protected\def\math_matrix_VL[#1]#*%
-% {\NC
-% \math_matrix_check_rule[#1]%
-% \divide\d_math_eqalign_distance\plustwo
-% \hskip-\d_math_eqalign_distance
-% \autorule\s!width\scratchdimen\relax
-% \hskip-\d_math_eqalign_distance
-% \NC}
-
% These offset are an experiment so we abuse some existing keys or we have to
% cook up new ones. Maybe we then should provide small medium big halfline etc.
% but all depends on actual demand for this feature.
+% Musical timestamp VL, NL, SL: Bad Hombre II by Antonio Sanches
+%
+% \startformula
+% \startmatrix[left=\left(,right=\right)]
+% \NC 0 \NL 0 \NC 0 \NC 2x \NC 1 \NC 0 \NC 0 \NL \NR
+% \NC 0 \VL 0 \NC 0 \NC 0 \NC 2x \NC 0 \NC 0 \NL \NR
+% \NC 0 \VL 0 \NC 0 \NC 0 \NC 0 \NC 3x \NC 0 \NL \NR
+% \NC 0 \NL 0 \NC 0 \NC 0 \NC 0 \NC 0 \NC 4x \VL \NR
+% \stopmatrix
+% \stopformula
+%
+% \startformula
+% \startmatrix[left=\left(,right=\right)]
+% \SL[3] \NL \NL \NL \NL \NL \NR
+% \VL 2x \NL 1 \NL 0 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR
+% \VL 0 \NL 2x \NL 1 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR
+% \VL 0 \NL 0 \NL 2x \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR
+% \SL[5] \NL \NL \NL \NR
+% \NL 0 \NL 0 \NL 0 \VL 2x \NL 1 \VL 0 \NL 0 \NL \NR
+% \NL 0 \NL 0 \NL 0 \VL 0 \NL 2x \VL 0 \NL 0 \NL \NR
+% \NL \NL \NL \SL[3] \NL \NL \NR
+% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL 0 \NL \NR
+% \NL \NL \NL \NL \NL \SL[2] \NL \NR
+% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL \NR
+% \NL \NL \NL \NL \NL \NL \SL[1] \NL \NR
+% \stopmatrix
+% \stopformula
+
\definesystemattribute[mathalignmentvrule][public]
+\definesystemattribute[mathalignmenthrule][public]
\setupmathmatrix
[%c!toffset=\zeropoint,
@@ -1417,32 +1430,136 @@
\fi
\egroup}
-\protected\def\math_matrix_vertical_rule#1%
- {\math_matrix_check_rule[#1]%
+\protected\def\math_matrix_vertical_rule_indeed#1#2%
+ {\math_matrix_check_rule[#2]%
\enablematrixrules
- \vrule
+ #1
\s!attr \mathalignmentvruleattribute\plusone
\s!width \scratchdimen
\s!top -\dimexpr\mathmatrixparameter\c!toffset\relax
\s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax
\relax}
+\protected\def\math_matrix_vertical_rule_yes{\math_matrix_vertical_rule_indeed\vrule }
+\protected\def\math_matrix_vertical_rule_nop{\math_matrix_vertical_rule_indeed\novrule}
+
+\installcorenamespace{mathmatrixrulealternative}
+
+\newboundary\c_math_matrix_vl_boundary
+%newboundary\c_math_matrix_sl_boundary
+
+\protected\def\math_matrix_horizontal_rule_indeed#1#2%
+ {\math_matrix_check_rule[#2]%
+ \global\setfalse\c_math_matrix_first
+ \global\settrue\c_math_matrix_sl_seen
+ \enablematrixrules
+ \leaders#1%
+ \s!attr \mathalignmenthruleattribute\plusone
+ \s!height .5\scratchdimen
+ \s!depth .5\scratchdimen
+ % \s!top -\dimexpr\mathmatrixparameter\c!toffset\relax
+ % \s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax
+ \hfilll
+ \kern\dimexpr.5\d_math_eqalign_distance\relax
+ \aligntab}
+
+\protected\def\math_matrix_horizontal_rule_yes{\math_matrix_horizontal_rule_indeed\hrule }
+\protected\def\math_matrix_horizontal_rule_nop{\math_matrix_horizontal_rule_indeed\nohrule}
+
+\def\math_matrix_hrule_progress_rest#1%
+ {\expandedloop
+ \plusone
+ \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi)*\plustwo+\minusone\relax
+ \plusone
+ {\span\omit}}%
+
+\def\math_matrix_hrule_progress_first#1%
+ {\expandedloop
+ \plusone
+ \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi+\minusone)*\plustwo+\plusone\relax
+ \plusone
+ {\span\omit}}%
+
+\def\math_matrix_hrule_progress
+ {\NL
+ \ifconditional\c_math_matrix_first
+ \expandafter\math_matrix_hrule_progress_first
+ \else
+ \expandafter\math_matrix_hrule_progress_rest
+ \fi}
+
+\tolerant\permanent\protected\def\SL[#1]#*[#2]#*% [n] [name] | [name] | [n]
+ {\ifcsname\??mathmatrixrulealternative#2\endcsname
+ \lastnamedcs{#1}{#2}%
+ \orelse\ifcsname\??mathmatrixrulealternative#1\endcsname
+ \lastnamedcs{#2}{#1}%
+ \else
+ \csname\??mathmatrixrulealternative\v!auto\endcsname{#1}{#2}%
+ \fi}
+
+\defcsname\??mathmatrixrulealternative\v!auto\endcsname#1#2%
+ {\math_matrix_hrule_progress{#1}%
+ \ifnum\c_math_matrix_first=\zerocount
+ \kern-\dimexpr\linewidth\relax
+ \else
+ \kern-\dimexpr.5\d_math_eqalign_distance+\linewidth\relax
+ \fi
+ \math_matrix_horizontal_rule_yes{#2}%
+ %boundary\c_math_matrix_sl_boundary
+ \enforced\let\NR\math_matrix_NL_NR}
\permanent\tolerant\protected\def\math_matrix_VL[#1]#*%
{\span\omit
- \hskip.5\d_math_eqalign_distance
- \math_matrix_vertical_rule{#1}%
- \hskip.5\d_math_eqalign_distance
- \aligntab}
+ \ifconditional\c_math_matrix_first\else
+ \kern.5\d_math_eqalign_distance % hskip
+ \fi
+ \math_matrix_vertical_rule_yes{#1}%
+ \kern.5\d_math_eqalign_distance % hskip
+ \global\setfalse\c_math_matrix_first
+ \aligntab
+ \boundary\c_math_matrix_vl_boundary
+ \enforced\let\NR\math_matrix_NL_NR
+ }
+
+\permanent\tolerant\protected\def\math_matrix_NL[#1]#*%
+ {\span\omit
+ \ifconditional\c_math_matrix_first\else
+ \kern.5\d_math_eqalign_distance % hskip
+ \fi
+ \math_matrix_vertical_rule_nop{#1}%
+ \kern.5\d_math_eqalign_distance % hskip
+ \global\setfalse\c_math_matrix_first
+ \aligntab
+ \boundary\c_math_matrix_vl_boundary
+ \enforced\let\NR\math_matrix_NL_NR}
+
+\permanent\protected\def\math_matrix_NL_NR
+ {\ifnum\lastboundary=\c_math_matrix_vl_boundary
+ \ifconditional \c_math_matrix_sl_seen
+ \kern-1.5\d_math_eqalign_distance % hskip
+ \else
+ \kern-.5\d_math_eqalign_distance % hskip
+ \fi
+ \fi
+ \math_matrix_anchor_last
+ \math_matrix_stop_row
+ \math_matrix_pickup
+ \crcr
+ \math_matrix_start_row}
+
+\appendtoks
+ \enforced\let\NL\math_matrix_NL
+ \global\setfalse\c_math_matrix_sl_seen
+\to \everymathmatrix
\permanent\tolerant\protected\def\math_matrix_VC[#1]#*%
{\NC
- \math_matrix_vertical_rule{#1}%
+ \math_matrix_vertical_rule_yes{#1}%
\NC}
\permanent\tolerant\protected\def\math_matrix_VT[#1]#*%
{\span\omit
- \math_matrix_vertical_rule{#1}%
+ \math_matrix_vertical_rule_yes{#1}%
\aligntab}
\def\math_matrix_start_row
@@ -1531,6 +1648,7 @@
callback
\s!attr \mathmatrixornamentattribute "10
\s!attr \mathalignmentvruleattribute \plusone
+ \s!attr \mathalignmenthruleattribute \plusone
\bgroup
% preamble
\span\math_matrix_preamble
@@ -2300,7 +2418,7 @@
\hpack to \displaywidth\bgroup
\hss
\strc_math_flush_number_box
- \hskip\d_framed_locator_ro
+ \kern\d_framed_locator_ro
\egroup
\egroup
\strc_math_flush_box_framed_fit_inline}
@@ -2308,7 +2426,7 @@
\def\strc_math_number_left_overflow_inside
{\setbox\b_strc_math_display\vpack\bgroup
\hpack to \displaywidth\bgroup
- % \hskip\d_framed_locator_lo
+ % \kern\d_framed_locator_lo
\strc_math_flush_number_box
\hss
\egroup
@@ -2722,7 +2840,7 @@
\ifzeropt\scratchdimen\else\kern\scratchdimen\fi
\setbox\scratchbox\hbox{\mathsimplealignparameter\c!text}%
\ifvoid\scratchbox\else
- \hskip\mathsimplealignparameter\c!textdistance
+ \kern\mathsimplealignparameter\c!textdistance % hskip
\vcenter{\box\scratchbox}%
\fi
\egroup
diff --git a/tex/context/base/mkxl/math-del.mklx b/tex/context/base/mkxl/math-del.mklx
index edfd77de2..cfb8dc5d2 100644
--- a/tex/context/base/mkxl/math-del.mklx
+++ b/tex/context/base/mkxl/math-del.mklx
@@ -105,6 +105,13 @@
[fourier]
[\c!right=\delimitedrighttildeuc]
+% \definemathdelimited
+% [bannuity]
+% [%topoffset=.2\exheight,
+% \c!strut=no,
+% \c!rightmargin=.05\emwidth,
+% \c!right=\delimitedrightanutityuc]
+
% $ \autofences \fourier{(z+\frac12)} + \courier{(z+\frac12)} + \xourier{(z+\frac12)} $
\protect \endinput
diff --git a/tex/context/base/mkxl/math-fbk.lmt b/tex/context/base/mkxl/math-fbk.lmt
index 185bb0d55..052f15f50 100644
--- a/tex/context/base/mkxl/math-fbk.lmt
+++ b/tex/context/base/mkxl/math-fbk.lmt
@@ -168,7 +168,7 @@ end
-- a few examples:
-local addextra = mathematics.extras.add
+-- local addextra = mathematics.extras.add
-- addextra(0xFE350) -- MATHEMATICAL DOUBLE ARROW LEFT END
-- addextra(0xFE351) -- MATHEMATICAL DOUBLE ARROW MIDDLE PART
@@ -395,7 +395,7 @@ local addextra = mathematics.extras.add
-- local height = target.parameters.xheight / 2
-- local c, done = accent_to_extensible(target,private,data.original,unicode,height,0,nil,-height,unicode)
-- if done then
--- c.topaccent = nil -- or maybe also all the others
+-- c.topanchor = nil -- or maybe also all the others
-- end
-- return c
-- end
diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl
index 7cb775294..b3c85070f 100644
--- a/tex/context/base/mkxl/math-fen.mkxl
+++ b/tex/context/base/mkxl/math-fen.mkxl
@@ -53,6 +53,7 @@
\c!source=\zerocount,
\c!height=\zeropoint,
\c!depth=\zeropoint,
+ \c!distance=\zerocount,
\c!factor=\v!auto]
\appendtoks
@@ -314,7 +315,66 @@
\installlocalcurrenthandler \??mathfences {mathfence}
-\tolerant\protected\def\math_fenced_fenced#1#*[#2]%
+%D The horizontal text variant was introduced for Alan Braslau. Because this is not
+%D used that often we only support double text arguments.
+%D
+%D Musical timestamp: I am The Moon by Tedeschi Trucks Band
+
+% \definemathfence [tupdownarrows] [text] [\c!left="2191,\c!right="2193]
+
+\protected\def\math_fenced_horizontal_common#1#2#3#4% \Uwhatever class symbol source
+ {\c_math_fenced_class\mathfenceparameter#2\relax
+ \edef\p_fence{#3}%
+ #1% \Uleft \Umiddle \Uleft
+ \usedcolorparameterattributes{\mathfenceparameter\c!color}%
+ \s!leftclass \mathunspacedcode
+ \s!rightclass \mathunspacedcode
+ \s!class \mathunspacedcode
+ \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax
+ \Udelimiter\mathghostcode\fam\p_fence}
+
+\tolerant\protected\def\math_fenced_horizontal#1#*[#2]#:#*#3#4%
+ {% \csname math\mathfenceparameter\c!mathclass\endcsname
+ \mathord \bgroup % class here
+ \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}%
+ \setupcurrentmathfence[#2]%
+ % \usemathstyleparameter\mathfenceparameter\c!mathstyle
+ \setmathsmalltextbox\scratchboxone\hbox{\usemathfencestyleandcolor\c!leftstyle \c!leftcolor #3}%
+ \setmathsmalltextbox\scratchboxtwo\hbox{\usemathfencestyleandcolor\c!rightstyle\c!rightcolor#4}%
+ \let\math_fenced_common\math_fenced_horizontal_common
+ \edef\p_fenced_middle{\mathfenceparameter\c!middle}%
+ \ifempty\p_fenced_middle\else
+ \letmathfenceparameter\c!left \p_fenced_middle
+ \letmathfenceparameter\c!right\zerocount
+ \fi
+ \scratchdistance\mathfenceparameter\c!distance
+ \box\scratchboxone
+ \kern\scratchdistance
+ \math_fenced_fenced_start\currentmathfence
+ \math_fenced_fenced_stop \currentmathfence
+ \kern\scratchdistance
+ \box\scratchboxtwo
+ \egroup}
+
+\tolerant\protected\def\math_fenced_fenced#1%
+ {\ifcstok{\namedmathfenceparameter{#1}\c!text}\v!yes % not the best keyword
+ \expandafter\math_fenced_horizontal
+ \else
+ \expandafter\math_fenced_vertical
+ \fi{#1}}
+
+% two step because we don't want to define text itself as command
+
+\definemathfence
+ [\v!text]
+
+\setupmathfence
+ [\v!text]
+ [\c!text=\v!yes,
+ \c!command=\v!yes,
+ \c!distance=.125\emwidth]
+
+\tolerant\protected\def\math_fenced_vertical#1#*[#2]%
{\begingroup
%{\beginmathgroup
\setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}%
@@ -1129,4 +1189,14 @@
\setmathoptions\mathmiddlecode bor \autoinjectclassoptioncode
\relax}
+%D New (to be completed):
+
+% $x + \tupdownarrows{left}{right} + x$
+% $x + \tdownuparrows{left}{right} + x$
+% $x + \tupanddownarrows[color=red,leftcolor=green,rightcolor=blue]{left}{right} + x$
+
+\definemathfence [tupanddownarrows] [\v!text] [\c!left="2191,\c!right="2193]
+\definemathfence [tupdownarrows] [\v!text] [\c!left="21C5,\c!right=0]
+\definemathfence [tdownuparrows] [\v!text] [\c!middle="21F5]
+
\protect
diff --git a/tex/context/base/mkxl/math-fnt.lmt b/tex/context/base/mkxl/math-fnt.lmt
index 1901d79ae..cd4976900 100644
--- a/tex/context/base/mkxl/math-fnt.lmt
+++ b/tex/context/base/mkxl/math-fnt.lmt
@@ -50,13 +50,15 @@ local function register_extensible(font,char,style,box)
local private = fonts.helpers.setboxdirectly(font,unicode,box)
-- we saved a scaled glyph stream so we now use an unscaled one ...
local g = new_glyph(font,private,al)
+ if fonts.hashes.properties[font].compactmath then
+ nuts.setscales(g,1000,1000,1000)
+ end
local n = new_hlist(g)
--
if newcommands then
oldchar.commands = newcommands
end
--
-
-- local newchar = {
-- unicode = unicode,
-- width = wd,
@@ -77,7 +79,6 @@ local function register_extensible(font,char,style,box)
-- end
-- end
-- addcharacters(font, { [private] = newchar })
-
-- so the dimensions of the box don't match the glyph scale!
setwhd(n,wd,ht,dp)
setattrlst(n,al)
diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl
index c0ef58c27..42e665f75 100644
--- a/tex/context/base/mkxl/math-frc.mkxl
+++ b/tex/context/base/mkxl/math-frc.mkxl
@@ -269,8 +269,8 @@
\Udelimiter\zerocount\fam\scratchcountertwo}
\defcsname\??fractionmethods\v!vertical \v!auto \v!none\endcsname{\Uover}
\defcsname\??fractionmethods\v!vertical \v!auto \endcsname{\Uoverwithdelims
- \Udelimiter\zerocount\fam\scratchcounterone
- \Udelimiter\zerocount\fam\scratchcountertwo}
+ \Udelimiter\zerocount\fam\scratchcounterone
+ \Udelimiter\zerocount\fam\scratchcountertwo}
\defcsname\??fractionmethods\v!vertical \v!symbol \v!none\endcsname{\Ustretched
\Udelimiter\zerocount\fam\scratchcounterthree}
\defcsname\??fractionmethods\v!vertical \v!symbol \endcsname{\Ustretchedwithdelims
@@ -452,34 +452,20 @@
\to \everysetupmathfraction
\def\math_fraction_set_threshold_inline_auto
- {\Umathfractiondelsize\textstyle \maxdimen
- \Umathfractiondelsize\scriptstyle \maxdimen
- \Umathfractiondelsize\scriptscriptstyle\maxdimen
-\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle
-\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle
-\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle
- }
+ {\Umathfractiondelsize\allmathstyles\maxdimen}
\def\math_fraction_set_threshold_display_auto
- {\Umathfractiondelsize\displaystyle \maxdimen
-\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle
- }
+ {\Umathfractiondelsize\alldisplaystyles\maxdimen}
\def\math_fraction_set_threshold_inline_ratio
{\edef\p_threshold{\mathfractionparameter\c!inlinethreshold}%
- \Umathfractiondelsize\textstyle \p_threshold\dimexpr\textface\relax
- \Umathfractiondelsize\scriptstyle \p_threshold\dimexpr\scriptface\relax
- \Umathfractiondelsize\scriptscriptstyle\p_threshold\dimexpr\scriptscriptface\relax
-\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle
-\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle
-\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle
- }
+ \Umathfractiondelsize\alltextstyles \p_threshold\dimexpr\textface\relax
+ \Umathfractiondelsize\allscriptstyles \p_threshold\dimexpr\scriptface\relax
+ \Umathfractiondelsize\allscriptscriptstyles\p_threshold\dimexpr\scriptscriptface\relax}
\def\math_fraction_set_threshold_display_ratio
{\edef\p_threshold{\mathfractionparameter\c!displaythreshold}%
- \Umathfractiondelsize\displaystyle \p_threshold\dimexpr\textface\relax
-\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle
- }
+ \Umathfractiondelsize\alldisplaystyles\p_threshold\dimexpr\textface\relax}
\setupmathfractions
[\c!inlinethreshold=.25, % no unit but fraction
diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl
index bf674068a..d13c2447c 100644
--- a/tex/context/base/mkxl/math-ini.mkxl
+++ b/tex/context/base/mkxl/math-ini.mkxl
@@ -55,7 +55,7 @@
\registerctxluafile{math-ini}{autosuffix}
\registerctxluafile{math-dim}{autosuffix}
-% \registerctxluafile{math-act}{autosuffix}
+%registerctxluafile{math-act}{autosuffix}
\registerctxluafile{math-ext}{}
\registerctxluafile{math-vfu}{autosuffix}
\registerctxluafile{math-ttv}{}
@@ -65,7 +65,7 @@
\registerctxluafile{math-noa}{autosuffix}
\registerctxluafile{math-tag}{autosuffix}
\registerctxluafile{math-fbk}{autosuffix}
-\registerctxluafile{math-dir}{}
+%registerctxluafile{math-dir}{}
\registerctxluafile{math-spa}{autosuffix}
\registerctxluafile{math-fnt}{autosuffix}
\registerctxluafile{math-pre}{autosuffix}
@@ -107,6 +107,8 @@
+\analyzescriptnucleuscharmathcontrolcode
+\analyzescriptnucleuslistmathcontrolcode
+\analyzescriptnucleusboxmathcontrolcode
+ +\accenttopskewwithoffsetmathcontrolcode
+ % +\ignorekerndimensionsmathcontrolcode % xits needs this (bad depth of fences)
\relax
% \mathpenaltiesmode\plusone
@@ -513,8 +515,22 @@
\defaultmathclassoptions
% +\checkligatureclassoptioncode
+\checkkernpairclassoptioncode
+ % up to Mikael to decide, ok with italic chars, maybe less so with raw ints:
+ % +\operatoritaliccorrectionclassoptioncode
\relax
+% we tweak away weird italics so only special cases see this:
+%
+% \def\IntOr{\Umathchar\mathordinarycode"00"00222B }
+% \def\IntOp{\Umathchar\mathoperatorcode"00"00222B }
+%
+% \showglyphs \showfontitalics
+% $\IntOp\limits x \quad \IntOp\limits^1_2 x \quad \IntOp\nolimits^1_2 x $\blank
+% $\IntOr\limits x \quad \IntOr\limits^1_2 x \quad \IntOr\nolimits^1_2 x $\blank
+%
+% $\mathop{f} (x) \quad \mathop{f}\limits (x) \quad \mathop{f}\nolimits (x)$\blank
+% $\mathop{f}^a_b (x) \quad \mathop{f}\limits^a_b (x) \quad \mathop{f}\nolimits^a_b (x)$\blank
+
\setmathoptions\mathbinarycode\numexpr
\defaultmathclassoptions
+\lookaheadforendclassoptioncode
@@ -1099,318 +1115,317 @@
\startsetups math:spacing:presets
\resetmathspacing
%
- % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathordinarycode \mathrelationcode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathordinarycode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathordinarycode \mathfractioncode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space
- % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allscriptstyles \pettymuskip % 220705 Results in an unwanted space
- %
- \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip
- % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \ zeromuskip
- \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip
+ % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathordinarycode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathordinarycode \mathrelationcode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathordinarycode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathordinarycode \mathfractioncode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space
+ % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allunsplitstyles \pettymuskip % 220705 Results in an unwanted space
%
- \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allscriptstyles \pettymuskip
- %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip
- %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathopencode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allscriptstyles \pettymuskip
- %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathbinarycode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip
+ % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip
%
- \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allscriptstyles \pettymuskip
- %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathopencode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allscriptstyles \thinmuskip
- % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathrelationcode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allunsplitstyles \pettymuskip
+ %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip
+ %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathopencode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allunsplitstyles \pettymuskip
+ %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathbinarycode \mathradicalcode \allunsplitstyles \pettymuskip
%
- % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip
- % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allunsplitstyles \pettymuskip
+ %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathopencode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allunsplitstyles \thinmuskip
+ % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathrelationcode \mathradicalcode \allunsplitstyles \pettymuskip
%
- \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathclosecode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathclosecode \mathrelationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip
- \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles\thinmuskip
- \inherited\setmathspacing \mathclosecode \mathopencode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip
- % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathfractioncode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip
+ % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip
%
- \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allscriptstyles \thinmuskip
- % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathopencode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allscriptstyles \thinmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allscriptstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathclosecode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathclosecode \mathrelationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip
+ \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathopencode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip
+ % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathfractioncode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip
%
- \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathconstructcode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathconstructcode \mathrelationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathopencode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allunsplitstyles \thinmuskip
+ % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathopencode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allunsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allunsplitstyles \thinmuskip
%
- \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathopencode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathconstructcode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathconstructcode \mathrelationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathopencode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathradicalcode \allunsplitstyles \pettymuskip
%
+ \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathopencode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allunsplitstyles \pettymuskip
%
- \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathfractioncode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathfractioncode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathfractioncode \mathrelationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathfractioncode \mathopencode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathfractioncode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathfractioncode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathfractioncode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathfractioncode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathfractioncode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathfractioncode \mathrelationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathfractioncode \mathopencode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathfractioncode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathfractioncode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathfractioncode \mathradicalcode \allunsplitstyles \pettymuskip
%
- \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathradicalcode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathradicalcode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathradicalcode \mathrelationcode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allscriptstyles \pettymuskip
- % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allscriptstyles \tinymuskip
- \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathradicalcode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip
- \inherited\setmathspacing \mathradicalcode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathradicalcode \mathradicalcode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathradicalcode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathradicalcode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathradicalcode \mathrelationcode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allunsplitstyles \pettymuskip
+ % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allunsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathradicalcode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip
+ \inherited\setmathspacing \mathradicalcode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathradicalcode \mathradicalcode \allunsplitstyles \pettymuskip
%
- \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathclosecode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip
- \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathclosecode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip
+ \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip
%
- \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip
%
- \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip
- \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip
+ \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip
%
- \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip
- \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip
- \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \pettymuskip
- \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip
- \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allscriptstyles \pettymuskip
+ \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip
+ \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip
+ \inherited\setmathspacing \mathclosecode \mathdimensioncode \allunsplitstyles \pettymuskip
+ \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip
+ \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allunsplitstyles \pettymuskip
%
% \im{1\unit{hour} 20 \unit{minute} 56 \unit{second}}
%
- \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip
+ \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip
+ %
+ \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip
%
- \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip
+ \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip
%
- \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip
- \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip
-
- \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip
- \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip
+ \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip
\stopsetups
\directsetup{math:spacing:default}
@@ -1506,10 +1521,12 @@
\permanent\protected\def\math_upright {\setmathattribute\s!regular\s!tf\setmathfontstylealternate\s!tf}
\permanent\protected\def\math_italic {\setmathattribute\s!regular\s!it\setmathfontstylealternate\s!it}
-\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting}
-\permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy}
-\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur}
-\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard\setmathfontstylealternate\s!blackboard}
+%permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting}
+%permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy}
+\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script}
+\permanent\protected\def\math_calligraphic{\setmathalphabet \s!calligraphic\setmathfontstylealternate\s!calligraphic}
+\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur}
+\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard \setmathfontstylealternate\s!blackboard}
\permanent\protected\def\mathupright {\mathgroupedcommandcs\math_upright }
\permanent\protected\def\mathitalic {\mathgroupedcommandcs\math_italic }
@@ -1804,14 +1821,12 @@
% using \s!font \mathstylefontid\mathstyle\fam would needs expansion and guesswork
\appendtoks
- \Umathruleheight\alltextstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount
- \Umathruledepth \alltextstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount
+ \Umathruleheight\allmainstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount
+ \Umathruledepth \allmainstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount
\Umathruleheight\allscriptstyles \strutheightfactor\fontspecifiedsize\scriptfont \zerocount
\Umathruledepth \allscriptstyles \strutdepthfactor \fontspecifiedsize\scriptfont \zerocount
\Umathruleheight\allscriptscriptstyles\strutheightfactor\fontspecifiedsize\scriptscriptfont\zerocount
\Umathruledepth \allscriptscriptstyles\strutdepthfactor \fontspecifiedsize\scriptscriptfont\zerocount
- \Umathruleheight\alldisplaystyles \Umathruleheight\textstyle
- \Umathruledepth \alldisplaystyles \Umathruledepth \textstyle
\to \everybodyfont
\protected\def\math_strut
@@ -2364,26 +2379,26 @@
\math_basics_synchronize_direction
\to \everyswitchmathematics
-% experimental (needed for an article)
-
-\installcorenamespace {mathbidi}
-
-\newcount\c_math_bidi
-
-\def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone}
-\def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue}
-
-\letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable
-\letcsname\??mathbidi\v!no \endcsname\math_bidi_disable
-
-\appendtoks
- \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ?
- \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi
-\to \everysetupmathematics
+% experimental (needed for an article) .. this is is no longer neded
-\appendtoks
- \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi
-\to \everyswitchmathematics
+% \installcorenamespace {mathbidi}
+%
+% \newcount\c_math_bidi
+%
+% \def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone}
+% \def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue}
+%
+% \letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable
+% \letcsname\??mathbidi\v!no \endcsname\math_bidi_disable
+%
+% \appendtoks
+% \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ?
+% \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi
+% \to \everysetupmathematics
+%
+% \appendtoks
+% \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi
+% \to \everyswitchmathematics
%D Delayed: greek.
%D
diff --git a/tex/context/base/mkxl/math-map.lmt b/tex/context/base/mkxl/math-map.lmt
index f411505f2..d0a1410a1 100644
--- a/tex/context/base/mkxl/math-map.lmt
+++ b/tex/context/base/mkxl/math-map.lmt
@@ -66,7 +66,7 @@ local context = context
-- todo: allocate
-mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "blackboard" }
+mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "calligraphic", "blackboard" }
mathematics.alternatives = allocate { "normal", "bold", "italic", "bolditalic" }
mathematics.sets = allocate { "ucletters", "lcletters", "digits", "ucgreek", "lcgreek", "symbols" }
@@ -520,58 +520,95 @@ local script = {
bi = script_bf,
}
+local calligraphic_tf = {
+ digits = tovector(regular_tf.digits),
+ ucletters = toupper(0x100020),
+ lcletters = tolower(0x100000),
+ lcgreek = tovector(regular_tf.lcgreek),
+ ucgreek = tovector(regular_tf.ucgreek),
+ symbols = tovector(regular_tf.symbols),
+}
+
+local calligraphic_bf = {
+ digits = tovector(regular_bf.digits),
+ ucletters = toupper(0x100060),
+ lcletters = tolower(0x100040),
+ lcgreek = tovector(regular_bf.lcgreek),
+ ucgreek = tovector(regular_bf.ucgreek),
+ symbols = tovector(regular_bf.symbols),
+}
+
+local calligraphic = {
+ tf = calligraphic_tf,
+ bf = calligraphic_bf,
+ it = calligraphic_tf,
+ bi = calligraphic_bf,
+}
+
local alphabets = allocate {
- regular = regular,
- sansserif = sansserif,
- monospaced = monospaced,
- blackboard = blackboard,
- fraktur = fraktur,
- script = script,
-}
-
-alphabets.tt = tovector(monospaced)
-alphabets.ss = tovector(sansserif)
-alphabets.rm = tovector(regular)
-alphabets.bb = tovector(blackboard)
-alphabets.fr = tovector(fraktur)
-alphabets.sr = tovector(script)
-
-monospaced.normal = tovector(monospaced_tf)
-monospaced.italic = tovector(monospaced_it)
-monospaced.bold = tovector(monospaced_bf)
-monospaced.bolditalic = tovector(monospaced_bi)
-
-sansserif.normal = tovector(sansserif_tf)
-sansserif.italic = tovector(sansserif_it)
-sansserif.bold = tovector(sansserif_bf)
-sansserif.bolditalic = tovector(sansserif_bi)
-
-regular.normal = tovector(regular_tf)
-regular.italic = tovector(regular_it)
-regular.bold = tovector(regular_bf)
-regular.bolditalic = tovector(regular_bi)
-
-blackboard.normal = tovector(blackboard_tf)
-blackboard.italic = tovector(blackboard_tf)
-blackboard.bold = tovector(blackboard_tf)
-blackboard.bolditalic = tovector(blackboard_tf)
-
-fraktur.normal = tovector(fraktur_tf)
-fraktur.italic = tovector(fraktur_bf)
-fraktur.bold = tovector(fraktur_tf)
-fraktur.bolditalic = tovector(fraktur_bf)
-
-alphabets.serif = tovector(regular)
-alphabets.type = tovector(monospaced)
-alphabets.teletype = tovector(monospaced)
-
-mathematics.alphabets = alphabets
-
-local mathremap = allocate { }
-mathematics.mapremap = mathremap
-
-local boldmap = allocate { }
-mathematics.boldmap = boldmap
+ regular = regular,
+ sansserif = sansserif,
+ monospaced = monospaced,
+ blackboard = blackboard,
+ fraktur = fraktur,
+ script = script,
+ calligraphic = calligraphic,
+}
+
+alphabets.tt = tovector(monospaced)
+alphabets.ss = tovector(sansserif)
+alphabets.rm = tovector(regular)
+alphabets.bb = tovector(blackboard)
+alphabets.fr = tovector(fraktur)
+alphabets.sr = tovector(script)
+alphabets.ca = tovector(calligraphic)
+
+monospaced.normal = tovector(monospaced_tf)
+monospaced.italic = tovector(monospaced_it)
+monospaced.bold = tovector(monospaced_bf)
+monospaced.bolditalic = tovector(monospaced_bi)
+
+sansserif.normal = tovector(sansserif_tf)
+sansserif.italic = tovector(sansserif_it)
+sansserif.bold = tovector(sansserif_bf)
+sansserif.bolditalic = tovector(sansserif_bi)
+
+regular.normal = tovector(regular_tf)
+regular.italic = tovector(regular_it)
+regular.bold = tovector(regular_bf)
+regular.bolditalic = tovector(regular_bi)
+
+blackboard.normal = tovector(blackboard_tf)
+blackboard.italic = tovector(blackboard_tf)
+blackboard.bold = tovector(blackboard_tf)
+blackboard.bolditalic = tovector(blackboard_tf)
+
+fraktur.normal = tovector(fraktur_tf)
+fraktur.italic = tovector(fraktur_bf)
+fraktur.bold = tovector(fraktur_tf)
+fraktur.bolditalic = tovector(fraktur_bf)
+
+script.normal = tovector(script_tf)
+script.italic = tovector(script_bf)
+script.bold = tovector(script_tf)
+script.bolditalic = tovector(script_bf)
+
+calligraphic.normal = tovector(calligraphic_tf)
+calligraphic.italic = tovector(calligraphic_bf)
+calligraphic.bold = tovector(calligraphic_tf)
+calligraphic.bolditalic = tovector(calligraphic_bf)
+
+alphabets.serif = tovector(regular)
+alphabets.type = tovector(monospaced)
+alphabets.teletype = tovector(monospaced)
+
+mathematics.alphabets = alphabets
+
+local mathremap = allocate { }
+mathematics.mapremap = mathremap
+
+local boldmap = allocate { }
+mathematics.boldmap = boldmap
-- all math (a bit of redundancy here) (sorted for tracing)
@@ -704,10 +741,11 @@ implement {
actions = function(alphabet)
if texgetmode() == mathmode_code then
-- local r = mathremap[mathalphabet]
- local r = mathremap[texgetattribute(mathalphabet)]
+ local a = texgetattribute(mathalphabet)
+ local r = mathremap[a]
local style = r and r.style or "tf"
local data = alphabets[alphabet][style]
- texsetattribute(mathalphabet,data and data.attribute or texattribute[mathalphabet])
+ texsetattribute(mathalphabet,data and data.attribute or a)
end
end
}
@@ -805,7 +843,7 @@ end
-- begin of experiment
-local fallback = {
+local stylefallbacks = {
tf = "bf",
it = "bi",
bf = "tf",
@@ -813,12 +851,12 @@ local fallback = {
}
function mathematics.fallbackstyleattr(attribute)
- local r = mathremap[attribute]
- local alphabet = r.alphabet or "regular"
- local style = r.style or "tf"
- local fback = fallback[style]
- if fback then
- local data = alphabets[alphabet][fback]
+ local redirect = mathremap[attribute]
+ local alphabet = redirect.alphabet or "regular"
+ local style = redirect.style or "tf"
+ local fallback = stylefallbacks[style]
+ if fallback then
+ local data = alphabets[alphabet][fallback]
if data then
local attr = data.attribute
return attribute ~= attr and attr
diff --git a/tex/context/base/mkxl/math-noa.lmt b/tex/context/base/mkxl/math-noa.lmt
index a754f6f39..30b7b0448 100644
--- a/tex/context/base/mkxl/math-noa.lmt
+++ b/tex/context/base/mkxl/math-noa.lmt
@@ -683,13 +683,14 @@ end
do
- local a_mathalphabet = privateattribute("mathalphabet")
- local a_mathgreek = privateattribute("mathgreek")
+ local a_mathalphabet = privateattribute("mathalphabet")
+ local a_mathgreek = privateattribute("mathgreek")
- local relocate = { }
+ local relocate = { }
- local remapalphabets = mathematics.remapalphabets
- local fallbackstyleattr = mathematics.fallbackstyleattr
+ local remapalphabets = mathematics.remapalphabets
+ local fallbackstyleattr = mathematics.fallbackstyleattr
+ local fallbackalphabetattr = mathematics.fallbackalphabetattr
local function report_remap(tag,id,old,new,extra)
if new then
diff --git a/tex/context/base/mkxl/math-rad.mklx b/tex/context/base/mkxl/math-rad.mklx
index 04d6bfbba..9dfc80d13 100644
--- a/tex/context/base/mkxl/math-rad.mklx
+++ b/tex/context/base/mkxl/math-rad.mklx
@@ -242,13 +242,13 @@
\scratchdimen \wd\scratchbox
\scratchtopoffset \dimexpr\scratchoffset+\dp\nextbox\relax
\scratchbottomoffset\dimexpr\scratchoffset+\ht\nextbox/2\relax
- \hpack to \scratchdimen{\hss\box\nextbox\hskip\scratchoffset}%
- \hskip-\scratchdimen
+ \hpack to \scratchdimen{\hss\box\nextbox\kern\scratchoffset}%
+ \kern-\scratchdimen
\lower\dimexpr\scratchtopoffset\box\scratchbox%
\ifx\currentmathradicaldegree\empty \else
\setbox\scratchbox\mathstylehbox{\scriptscriptstyle\currentmathradicaldegree\hss}%
\wd\scratchbox\scratchdimen
- \hskip-\scratchdimen
+ \kern-\scratchdimen
\raise\dimexpr\scratchbottomoffset\box\scratchbox
\fi
\endgroup}
@@ -296,7 +296,7 @@
% the width of the graphic determines the width of the final result
\setbox\scratchbox\hpack{\uniqueMPgraphic{\p_mp}}% todo: add code key + tag
\hpack to \wd\scratchbox{\hss\box\nextbox\hss}%
- \hskip-\wd\scratchbox
+ \kern-\wd\scratchbox
\box\scratchbox
\endgroup}
diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx
index 2ddfa24fd..828115f83 100644
--- a/tex/context/base/mkxl/math-stc.mklx
+++ b/tex/context/base/mkxl/math-stc.mklx
@@ -75,6 +75,9 @@
% at the lua end and some checking: use \mathhorizontalcode or \mathextensiblecode
% but in practice arrows etc are not used that often
+% At some point we can consider to use the more natural \LUAMETATEX\ features but the
+% problem is that we lack proper support in fonts and we also have less control.
+
\installcorenamespace {mathextensiblefallbacks}
% currently no italic correction ... problem is that we don't know yet if we have an italic
@@ -1059,6 +1062,7 @@
\definemathextensible [\v!reverse] [xrightharpoondown] ["21C1]
\definemathextensible [\v!reverse] [xrightharpoonup] ["21C0]
\definemathextensible [\v!reverse] [xrightoverleftarrow] ["21C4]
+\definemathextensible [\v!reverse] [xleftoverrightarrow] ["21C6]
\definemathextensible [\v!reverse] [xleftrightharpoons] ["21CB]
\definemathextensible [\v!reverse] [xrightleftharpoons] ["21CC]
\definemathextensible [\v!reverse] [xtriplerel] ["2261]
@@ -1081,6 +1085,7 @@
\definemathextensible [\v!mathematics] [mrightharpoondown] ["21C1]
\definemathextensible [\v!mathematics] [mrightharpoonup] ["21C0]
\definemathextensible [\v!mathematics] [mrightoverleftarrow] ["21C4]
+\definemathextensible [\v!mathematics] [mleftoverrightarrow] ["21C6]
\definemathextensible [\v!mathematics] [mleftrightharpoons] ["21CB]
\definemathextensible [\v!mathematics] [mrightleftharpoons] ["21CC]
\definemathextensible [\v!mathematics] [mtriplerel] ["2261]
@@ -1103,6 +1108,7 @@
\definemathextensible [\v!text] [trightharpoondown] ["21C1]
\definemathextensible [\v!text] [trightharpoonup] ["21C0]
\definemathextensible [\v!text] [trightoverleftarrow] ["21C4]
+\definemathextensible [\v!text] [tleftoverrightarrow] ["21C6]
\definemathextensible [\v!text] [tleftrightharpoons] ["21CB]
\definemathextensible [\v!text] [trightleftharpoons] ["21CC]
\definemathextensible [\v!text] [ttriplerel] ["2261]
@@ -1184,6 +1190,7 @@
\definemathextensible [\v!chemistry] [cleftarrow] ["2190]
\definemathextensible [\v!chemistry] [crightarrow] ["2192]
\definemathextensible [\v!chemistry] [crightoverleftarrow] ["21C4]
+\definemathextensible [\v!chemistry] [cleftoverrightarrow] ["21C6]
% for the moment:
@@ -1208,6 +1215,7 @@
\immutable\protected\def\rightarrowfill {\math_stackers_hacked_fill \relbar \relbar \rightarrow}
\immutable\protected\def\leftarrowfill {\math_stackers_hacked_fill \leftarrow \relbar \relbar }
\immutable\protected\def\rightoverleftarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillleftend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillrightend}
+\immutable\protected\def\leftoverrightarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillrightend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillleftend}
\immutable\protected\def\equalfill {\math_stackers_hacked_fill \Relbar \Relbar \Relbar}
\immutable\protected\def\Rightarrowfill {\math_stackers_hacked_fill \Relbar \Relbar \Rightarrow}
\immutable\protected\def\Leftarrowfill {\math_stackers_hacked_fill \Leftarrow \Relbar \Relbar}
@@ -1247,6 +1255,7 @@
\defineextensiblefiller [rightharpoondownfill] ["21C1]
\defineextensiblefiller [rightharpoonupfill] ["21C0]
\defineextensiblefiller [rightoverleftarrowfill] ["21C4]
+\defineextensiblefiller [leftoverrightarrowfill] ["21C6]
%defineextensiblefiller [leftrightharpoonsfill] ["21CB] % yet undefined
%defineextensiblefiller [rightleftharpoonsfill] ["21CC] % yet undefined
\defineextensiblefiller [triplerelfill] ["2261]
@@ -1303,7 +1312,7 @@
[\v!symbol]
[\c!voffset=-.3\mathexheight,
\c!hoffset=\zeropoint,
- \c!mathclass=ord,
+ \c!mathclass=\s!ordinary,
\c!topoffset=.4\mathemwidth, % poor man's italic correction
\c!middlecommand=\mathematics]
diff --git a/tex/context/base/mkxl/math-vfu.lmt b/tex/context/base/mkxl/math-vfu.lmt
index c58906a10..906c9ccf6 100644
--- a/tex/context/base/mkxl/math-vfu.lmt
+++ b/tex/context/base/mkxl/math-vfu.lmt
@@ -631,8 +631,9 @@ local function copy_glyph(main,target,original,unicode,slot)
height = olddata.height,
depth = olddata.depth,
italic = olddata.italic,
- topaccent = olddata.topaccent,
+ topanchor = olddata.topanchor,
kerns = olddata.kerns,
+ mathkerns = olddata.mathkerns,
tounicode = olddata.tounicode,
commands = { { "slot", slot, unicode } },
}
@@ -646,7 +647,9 @@ local function copy_glyph(main,target,original,unicode,slot)
height = oldnextdata.height,
depth = oldnextdata.depth,
italic = oldnextdata.italic,
- topaccent = oldnextdata.topaccent,
+ topanchor = oldnextdata.topanchor,
+ kerns = olddata.kerns,
+ mathkerns = olddata.mathkerns,
tounicode = olddata.tounicode,
commands = { { "slot", slot, nextglyph } },
}
@@ -982,7 +985,7 @@ function vfmath.define(specification,set,goodies)
if skewchar then
local k = kerns[skewchar]
if k then
- t.topaccent = width/2 + k
+ t.topanchor = width/2 + k
end
end
characters[unicode] = t
@@ -1131,8 +1134,6 @@ function vfmath.define(specification,set,goodies)
report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start)
end
--
- -- main.oldmath = true
- --
-- We bypass the scaler so ...
--
main.MathConstants = main.mathconstants
diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl
index 38d2c0633..636c15363 100644
--- a/tex/context/base/mkxl/mult-sys.mkxl
+++ b/tex/context/base/mkxl/mult-sys.mkxl
@@ -160,6 +160,7 @@
\definesystemconstant {class}
\definesystemconstant {leftclass}
\definesystemconstant {rightclass}
+\definesystemconstant {calligraphic}
\definesystemconstant {clone}
\definesystemconstant {close}
\definesystemconstant {cmyk}
diff --git a/tex/context/base/mkxl/node-ali.lmt b/tex/context/base/mkxl/node-ali.lmt
index 9209a520b..4b52f2d4b 100644
--- a/tex/context/base/mkxl/node-ali.lmt
+++ b/tex/context/base/mkxl/node-ali.lmt
@@ -30,6 +30,7 @@ local getlist = nuts.getlist
local setlist = nuts.setlist
local setattrlist = nuts.setattrlist
local setprop = nuts.setprop
+local getprop = nuts.getprop
local getfont = nuts.getfont
local getchar = nuts.getchar
local addmargins = nuts.addmargins
@@ -626,16 +627,24 @@ deltas = { }
do
local a_mathalignmentvrule = attributes.private("mathalignmentvrule")
+ local a_mathalignmenthrule = attributes.private("mathalignmenthrule")
- local function first_pass(head,attr,preamble)
+ -- these loops will be combined
+
+ local dp = { }
+ local ht = { }
+
+ local function vrule_pass(head,attr,preamble)
+ local i = 0
for row, id, subtype, list in nextlist, head do
if id == hlist_code and subtype == row_code then
+ i = i + 1
+ local prv, nxt = getboth(row)
for cell, id, subtype, list in nextlist, list do
if list then
for n, id, subtype in nextrule, list do
local signal = getattr(n,a_mathalignmentvrule)
if signal then
- local prv, nxt = getboth(row)
if prv then
if getid(prv) ~= rule_code or not getattr(prv,a_mathalignmentvrule) then
prv = nil
@@ -646,20 +655,65 @@ do
nxt = nil
end
end
- setoffsets(n,nil,nil,not prv and 0 or nil,not nxt and 0 or nil)
+ local top = not prv and 0 or nil
+ local bot = not nxt and 0 or nil
+ setoffsets(n,nil,nil,d and -d or top,h and -h or bot)
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+
+ local function hrule_pass(head,attr,preamble)
+ local i = 0
+ for row, id, subtype, list in nextlist, head do
+ if id == hlist_code and subtype == row_code then
+ i = i + 1
+ local height = 0
+ local depth = 0
+ local done = false
+ for cell, id, subtype, list in nextlist, list do
+ if list then
+ for n, id, subtype in nextglue, list do
+ local signal = getattr(n,a_mathalignmenthrule)
+ if signal then
+ local w, h, d = getwhd(n)
+ if h and d then
+ if h > height then
+ height = h
+ end
+ if d > depth then
+ depth = d
+ end
+ done = true
+ end
end
end
end
end
+ if done then
+ setheight(row,height)
+ setdepth(row,depth)
+ dp[i] = height
+ ht[i] = depth
+ end
end
end
end
function nodes.handlers.mathmatrixrules(head,where,attr,preamble)
if where == "wrapup" then
+ dp = { }
+ ht = { }
+ local signal = getattr(attr,a_mathalignmenthrule)
+ if signal == 0x01 then -- matrix
+ hrule_pass(head,attr,preamble)
+ end
local signal = getattr(attr,a_mathalignmentvrule)
- if signal == 1 then -- matrix
- first_pass(head,attr,preamble)
+ if signal == 0x01 then -- matrix
+ vrule_pass(head,attr,preamble)
end
end
end
diff --git a/tex/context/base/mkxl/node-ini.lmt b/tex/context/base/mkxl/node-ini.lmt
index 53bd082af..34028fa2e 100644
--- a/tex/context/base/mkxl/node-ini.lmt
+++ b/tex/context/base/mkxl/node-ini.lmt
@@ -226,6 +226,8 @@ local texsetintegervalue = tex.setintegervalue
for i=0,nodecodes.glyph do
texsetintegervalue(nodecodes[i] .. "nodecode",i,"immutable")
end
+texsetintegervalue("tempnodecode",nodecodes.temp,"immutable") -- can happen in tables
+
for i=0,#gluecodes do
texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable")
end
diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl
index 28c1a42f0..ecd793056 100644
--- a/tex/context/base/mkxl/pack-box.mkxl
+++ b/tex/context/base/mkxl/pack-box.mkxl
@@ -1199,7 +1199,7 @@
\fi
\global\setbox\scratchcounterone\hpack\bgroup
\unhbox\scratchcounterone
- \hskip-\wd\nextbox
+ \kern-\wd\nextbox
\box\nextbox
\egroup
\endgroup}}
diff --git a/tex/context/base/mkxl/pack-cut.mkxl b/tex/context/base/mkxl/pack-cut.mkxl
index 0cd06ed43..1e23a97e3 100644
--- a/tex/context/base/mkxl/pack-cut.mkxl
+++ b/tex/context/base/mkxl/pack-cut.mkxl
@@ -13,6 +13,8 @@
\unprotect
+% to be redone in a more modern way
+
%D \macros
%D {makecutbox, cuthbox, cutvbox, cutvtop}
%D
@@ -101,9 +103,8 @@
\vss}%
\hss}}
-\permanent\protected\def\makecutbox#1%
- {\bgroup
- \d_pack_cutmarks_height\ht#1%
+\permanent\protected\def\makecutbox#1% not grouped !
+ {\d_pack_cutmarks_height\ht#1%
\d_pack_cutmarks_depth \dp#1%
\d_pack_cutmarks_width \wd#1%
\setbox#1\hpack
@@ -155,7 +156,7 @@
\wd#1\d_pack_cutmarks_width
\ht#1\d_pack_cutmarks_height
\dp#1\d_pack_cutmarks_depth
- \egroup}
+ \box#1}
\permanent\protected\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox}
\permanent\protected\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox}
diff --git a/tex/context/base/mkxl/pack-mrl.mkxl b/tex/context/base/mkxl/pack-mrl.mkxl
index 7a04f3904..b4339b0b2 100644
--- a/tex/context/base/mkxl/pack-mrl.mkxl
+++ b/tex/context/base/mkxl/pack-mrl.mkxl
@@ -181,7 +181,7 @@
\s!depth \scratchdepth
\relax
\ifzeropt\scratchdistance\else
- \hskip\scratchdistance
+ \kern\scratchdistance % hskip
\fi}
\installcorenamespace{blackruletype}
@@ -648,7 +648,7 @@
{\llap
{\usetextrulesstyleandcolor\c!style\c!color
#1%
- \hskip\leftmargindistance}}
+ \kern\leftmargindistance}} % hskip
{\color[\directtextrulesparameter\c!rulecolor]
{\vrule
\s!height\scratchheight
@@ -794,7 +794,7 @@
\strut
#2%
\hfill\directfillinrulesparameter\c!separator
- \hskip\scratchdistance
+ \kern\scratchdistance % hskip
\egroup
\fi
\setupwhitespace[\v!big]%
diff --git a/tex/context/base/mkxl/pack-pos.mkxl b/tex/context/base/mkxl/pack-pos.mkxl
index aee22081f..e2fd1c8f8 100644
--- a/tex/context/base/mkxl/pack-pos.mkxl
+++ b/tex/context/base/mkxl/pack-pos.mkxl
@@ -90,7 +90,7 @@
\vbox to \d_pack_positioning_y_dimension
{\vskip\d_pack_positioning_y_offset
\hbox to \d_pack_positioning_x_dimension
- {\hskip\d_pack_positioning_x_offset
+ {\kern\d_pack_positioning_x_offset
\box\b_pack_positioning
\hfill}
\vfill}%
@@ -145,7 +145,7 @@
{\offinterlineskip % else we get an empty line
\vskip\d_pack_positioning_y_position
\hbox to \zeropoint
- {\hskip\d_pack_positioning_x_position
+ {\kern\d_pack_positioning_x_position
\box\nextbox
\hss}
\vss}%
diff --git a/tex/context/base/mkxl/pack-rul.lmt b/tex/context/base/mkxl/pack-rul.lmt
index f81a672d2..c2183c1ad 100644
--- a/tex/context/base/mkxl/pack-rul.lmt
+++ b/tex/context/base/mkxl/pack-rul.lmt
@@ -35,6 +35,8 @@ local equationlist_code = listcodes.equation
local texsetdimen = tex.setdimen
local texsetcount = tex.setcount
+local texisdimen = tex.isdimen
+local texiscount = tex.iscount
local implement = interfaces.implement
@@ -52,8 +54,6 @@ local getdirection = nuts.getdirection
local setshift = nuts.setshift
local setwidth = nuts.setwidth
local getwidth = nuts.getwidth
--- local setboxglue = nuts.setboxglue
--- local getboxglue = nuts.getboxglue
local setboxglue = nuts.setglue
local getboxglue = nuts.getglue
@@ -73,6 +73,13 @@ directives.register("framed.checkmath",function(v) checkformath = v end) -- expe
-- beware: dir nodes and pseudostruts can end up on lines of their own
+local c_framednoflines = texiscount("framednoflines")
+local d_framedfirstheight = texisdimen("framedfirstheight")
+local d_framedlastdepth = texisdimen("framedlastdepth")
+local d_framedminwidth = texisdimen("framedminwidth")
+local d_framedmaxwidth = texisdimen("framedmaxwidth")
+local d_framedaveragewidth = texisdimen("framedaveragewidth")
+
local function doreshapeframedbox(n,resync)
if resync then
resync = drivers.converters.resyncbox
@@ -148,7 +155,7 @@ local function doreshapeframedbox(n,resync)
setlist(p)
flushnode(p)
elseif checkformath and subtype == equationlist_code then
- -- display formulas use a shift
+ -- display formulas use a shift .. actually we never have display mode
if nofnonzero == 1 then
setshift(h,0)
end
@@ -172,12 +179,12 @@ local function doreshapeframedbox(n,resync)
end
end
end
- texsetcount("global","framednoflines",noflines)
- texsetdimen("global","framedfirstheight",firstheight or 0) -- also signal
- texsetdimen("global","framedlastdepth",lastdepth or 0)
- texsetdimen("global","framedminwidth",minwidth)
- texsetdimen("global","framedmaxwidth",maxwidth)
- texsetdimen("global","framedaveragewidth",averagewidth)
+ texsetcount("global",c_framednoflines,noflines)
+ texsetdimen("global",d_framedfirstheight,firstheight or 0) -- also signal
+ texsetdimen("global",d_framedlastdepth,lastdepth or 0)
+ texsetdimen("global",d_framedminwidth,minwidth)
+ texsetdimen("global",d_framedmaxwidth,maxwidth)
+ texsetdimen("global",d_framedaveragewidth,averagewidth)
end
local function doanalyzeframedbox(n)
@@ -206,9 +213,9 @@ local function doanalyzeframedbox(n)
end
end
end
- texsetcount("global","framednoflines",noflines)
- texsetdimen("global","framedfirstheight",firstheight or 0)
- texsetdimen("global","framedlastdepth",lastdepth or 0)
+ texsetcount("global",c_framednoflines,noflines)
+ texsetdimen("global",d_framedfirstheight,firstheight or 0)
+ texsetdimen("global",d_framedlastdepth,lastdepth or 0)
end
implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments = "integer" }
diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl
index 803d83bf3..b06e8f57c 100644
--- a/tex/context/base/mkxl/pack-rul.mkxl
+++ b/tex/context/base/mkxl/pack-rul.mkxl
@@ -18,6 +18,13 @@
%D packaging and expansion we also keep tracing reasonable. For instance, multiple
%D stacked backgrounds can slow down a run if not optimized this way.
+\newcount\framednoflines
+\newdimen\framedfirstheight
+\newdimen\framedlastdepth
+\newdimen\framedminwidth
+\newdimen\framedmaxwidth
+\newdimen\framedaveragewidth
+
\registerctxluafile{pack-rul}{autosuffix,optimize}
\unprotect
@@ -703,7 +710,7 @@
\def\pack_framed_stroked_box_normal_closed
{\hpack\bgroup
\scratchdimen.5\d_framed_linewidth
- \hskip\scratchdimen
+ \kern\scratchdimen
\clf_framedoutline
\dimexpr\d_framed_target_wd-\d_framed_linewidth\relax
\dimexpr\d_framed_target_ht-\scratchdimen\relax
@@ -2323,12 +2330,12 @@
%D It is possible to let the frame macro calculate the width of a centered box
%D automatically (\type {fit}). When doing so, we need to reshape the box:
-\newcount\framednoflines
-\newdimen\framedfirstheight
-\newdimen\framedlastdepth
-\newdimen\framedminwidth
-\newdimen\framedmaxwidth
-\newdimen\framedaveragewidth
+% \newcount\framednoflines
+% \newdimen\framedfirstheight
+% \newdimen\framedlastdepth
+% \newdimen\framedminwidth
+% \newdimen\framedmaxwidth
+% \newdimen\framedaveragewidth
\def\pack_framed_reshape_reset
{\framednoflines \zerocount
diff --git a/tex/context/base/mkxl/page-box.mklx b/tex/context/base/mkxl/page-box.mklx
index 56cb73f7a..a65989222 100644
--- a/tex/context/base/mkxl/page-box.mklx
+++ b/tex/context/base/mkxl/page-box.mklx
@@ -79,10 +79,19 @@
% {\boxxoffset#box\dimexpr\boxxoffset#box\doifbothsides++-\backoffset\relax
% \boxyoffset#box\dimexpr\boxyoffset#box-\topoffset\relax}
+% \def\page_boxes_apply_offset % #box
+% {\unless\ifzeropt\topoffset % we can't do an unless here
+% \expandafter\page_boxes_apply_offset_indeed
+% \orunless\ifzeropt\backoffset
+% \expandafter\page_boxes_apply_offset_indeed
+% \else
+% \expandafter\gobbleoneargument
+% \fi}
+
\def\page_boxes_apply_offset % #box
- {\unless\ifzeropt\topoffset
+ {\unless\ifdim\topoffset=\zeropoint
\expandafter\page_boxes_apply_offset_indeed
- \orunless\ifzeropt\backoffset
+ \orunless\ifdim\backoffset=\zeropoint
\expandafter\page_boxes_apply_offset_indeed
\else
\expandafter\gobbleoneargument
@@ -100,9 +109,9 @@
\def\page_boxes_apply_replicate_indeed#box%
{\setbox#box\vpack
{\offinterlineskip
- \dorecurse{\layoutparameter\c!ny}
+ \dorecurse{\layoutparameter\c!ny}%
{\hpack{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}%
- \vskip\layoutparameter\c!dy}
+ \vskip\layoutparameter\c!dy}%
\unskip}}
\def\page_boxes_apply_orientate_paper#box%
diff --git a/tex/context/base/mkxl/spac-ver.lmt b/tex/context/base/mkxl/spac-ver.lmt
index 7884a111c..283109f03 100644
--- a/tex/context/base/mkxl/spac-ver.lmt
+++ b/tex/context/base/mkxl/spac-ver.lmt
@@ -56,6 +56,8 @@ local texsetcount = tex.setcount
local texnest = tex.nest
local texgetbox = tex.getbox
+local tg = texgetdimen
+
local buildpage = tex.triggerbuildpage
local variables = interfaces.variables
@@ -69,13 +71,6 @@ local v_split = variables.split
local v_min = variables.min
local v_max = variables.max
local v_none = variables.none
-local v_line = variables.line
-local v_noheight = variables.noheight
-local v_nodepth = variables.nodepth
-local v_line = variables.line
-local v_halfline = variables.halfline
-local v_line_m = "-" .. v_line
-local v_halfline_m = "-" .. v_halfline
local v_first = variables.first
local v_last = variables.last
local v_top = variables.top
@@ -115,6 +110,11 @@ local a_skiporder = attributes.private('skiporder')
local a_snapmethod = attributes.private('snapmethod')
local a_snapvbox = attributes.private('snapvbox')
+local d_bodyfontstrutheight = tex.isdimen("bodyfontstrutheight")
+local d_bodyfontstrutdepth = tex.isdimen("bodyfontstrutdepth")
+local d_globalbodyfontstrutheight = tex.isdimen("globalbodyfontstrutheight")
+local d_globalbodyfontstrutdepth = tex.isdimen("globalbodyfontstrutdepth")
+
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -357,6 +357,13 @@ end
local snap_hlist do
+ local v_noheight = variables.noheight
+ local v_nodepth = variables.nodepth
+ local v_line = variables.line
+ local v_halfline = variables.halfline
+ local v_line_m = "-" .. v_line
+ local v_halfline_m = "-" .. v_halfline
+
local floor = math.floor
local ceil = math.ceil
@@ -397,24 +404,24 @@ local snap_hlist do
local snapht, snapdp
if method[v_local] then
-- snapping is done immediately here
- snapht = texgetdimen("bodyfontstrutheight")
- snapdp = texgetdimen("bodyfontstrutdepth")
+ snapht = texgetdimen(d_bodyfontstrutheight)
+ snapdp = texgetdimen(d_bodyfontstrutdepth)
if t then
t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp)
end
elseif method[v_global] then
- snapht = texgetdimen("globalbodyfontstrutheight")
- snapdp = texgetdimen("globalbodyfontstrutdepth")
+ snapht = texgetdimen(d_globalbodyfontstrutheight)
+ snapdp = texgetdimen(d_globalbodyfontstrutdepth)
if t then
t[#t+1] = formatters["global: snapht %p snapdp %p"](snapht,snapdp)
end
else
-- maybe autolocal
-- snapping might happen later in the otr
- snapht = texgetdimen("globalbodyfontstrutheight")
- snapdp = texgetdimen("globalbodyfontstrutdepth")
- local lsnapht = texgetdimen("bodyfontstrutheight")
- local lsnapdp = texgetdimen("bodyfontstrutdepth")
+ snapht = texgetdimen(d_globalbodyfontstrutheight)
+ snapdp = texgetdimen(d_globalbodyfontstrutdepth)
+ local lsnapht = texgetdimen(d_bodyfontstrutheight)
+ local lsnapdp = texgetdimen(d_bodyfontstrutdepth)
if snapht ~= lsnapht and snapdp ~= lsnapdp then
snapht, snapdp = lsnapht, lsnapdp
end
@@ -672,7 +679,7 @@ local snap_hlist do
local lines = (ch+cd)/snaphtdp
if t then
local original = (h+d)/snaphtdp
- local whatever = (ch+cd)/(texgetdimen("globalbodyfontstrutheight") + texgetdimen("globalbodyfontstrutdepth"))
+ local whatever = (ch+cd)/(texgetdimen(d_globalbodyfontstrutheight) + texgetdimen(d_globalbodyfontstrutdepth))
t[#t+1] = formatters["final lines : %p -> %p (%p)"](original,lines,whatever)
t[#t+1] = formatters["final height: %p -> %p"](h,ch)
t[#t+1] = formatters["final depth : %p -> %p"](d,cd)
@@ -1699,10 +1706,10 @@ do
--
if trace_vsnapping then
report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p",
- texgetdimen("globalbodyfontstrutheight"),
- texgetdimen("globalbodyfontstrutdepth"),
- texgetdimen("bodyfontstrutheight"),
- texgetdimen("bodyfontstrutdepth")
+ texgetdimen(d_globalbodyfontstrutheight),
+ texgetdimen(d_globalbodyfontstrutdepth),
+ texgetdimen(d_bodyfontstrutheight),
+ texgetdimen(d_bodyfontstrutdepth)
)
end
if trace then
diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl
index 28a1151fb..7ab80d6a9 100644
--- a/tex/context/base/mkxl/spac-ver.mkxl
+++ b/tex/context/base/mkxl/spac-ver.mkxl
@@ -15,6 +15,14 @@
\unprotect
+\newskip \bodyfontlineheight % why a skip
+\newdimen \bodyfontstrutheight
+\newdimen \bodyfontstrutdepth
+
+\newskip \globalbodyfontlineheight % why a skip
+\newdimen \globalbodyfontstrutheight
+\newdimen \globalbodyfontstrutdepth
+
\registerctxluafile{spac-ver}{autosuffix,optimize}
% todo: use usernodes ?
@@ -1396,13 +1404,13 @@
\installcorenamespace{gridsnapperattributes}
\installcorenamespace{gridsnappersets}
-\newskip \bodyfontlineheight
-\newdimen \bodyfontstrutheight
-\newdimen \bodyfontstrutdepth
+% \newskip \bodyfontlineheight % see top
+% \newdimen \bodyfontstrutheight % see top
+% \newdimen \bodyfontstrutdepth % see top
-\newskip \globalbodyfontlineheight % why a skip
-\newdimen \globalbodyfontstrutheight
-\newdimen \globalbodyfontstrutdepth
+% \newskip \globalbodyfontlineheight % see top
+% \newdimen \globalbodyfontstrutheight % see top
+% \newdimen \globalbodyfontstrutdepth % see top
\permanent\def\snappedvboxattribute{\ifgridsnapping attr\snapvboxattribute\c_attr_snapmethod\fi}
\permanent\def\setlocalgridsnapping{\ifgridsnapping \c_attr_snapvbox \c_attr_snapmethod\fi}
diff --git a/tex/context/base/mkxl/strc-lst.mklx b/tex/context/base/mkxl/strc-lst.mklx
index 785d566cf..c04d68fa7 100644
--- a/tex/context/base/mkxl/strc-lst.mklx
+++ b/tex/context/base/mkxl/strc-lst.mklx
@@ -146,7 +146,7 @@
\scratchcounter\clf_addtolist
references {
internal \locationcount
- % block {\currentsectionblock}
+ % block {\currentsectionblock} % needed for publications (can be get from section)
% section structures.sections.currentid()
% location {\p_location}
}
diff --git a/tex/context/base/mkxl/strc-ref.lmt b/tex/context/base/mkxl/strc-ref.lmt
index 7ad20fa34..32c2a5429 100644
--- a/tex/context/base/mkxl/strc-ref.lmt
+++ b/tex/context/base/mkxl/strc-ref.lmt
@@ -54,6 +54,7 @@ local implement = interfaces.implement
local ctx_latelua = context.latelua
+local texiscount = tex.iscount
local texgetcount = tex.getcount
local texsetcount = tex.setcount
local texconditionals = tex.conditionals
@@ -124,6 +125,11 @@ local currentreference = nil
local txtcatcodes = catcodes.numbers.txtcatcodes -- or just use "txtcatcodes"
+local c_realpageno = texiscount("realpageno")
+local c_locationcount = texiscount("locationcount")
+local c_locationorder = texiscount("locationorder")
+local c_lastdestinationattribute = texiscount("lastdestinationattribute")
+
local context = context
local ctx_pushcatcodes = context.pushcatcodes
@@ -294,7 +300,7 @@ local function referredpage(n)
end
end
-- fallback
- return texgetcount("realpageno")
+ return texgetcount(c_realpageno)
end
references.referredpage = referredpage
@@ -304,7 +310,7 @@ function references.registerpage(n) -- called in the backend code
if n > maxreferred then
maxreferred = n
end
- tobereferred[n] = texgetcount("realpageno")
+ tobereferred[n] = texgetcount(c_realpageno)
end
end
@@ -323,14 +329,14 @@ local function setnextorder(kind,name)
lastorder = (ok[name] or 0) + 1
ok[name] = lastorder
end
- texsetcount("global","locationorder",lastorder)
+ texsetcount("global",c_locationorder,lastorder)
end
local function setnextinternal(kind,name)
setnextorder(kind,name) -- always incremented with internal
- local n = texgetcount("locationcount") + 1
- texsetcount("global","locationcount",n)
+ local n = texgetcount(c_locationcount) + 1
+ texsetcount("global",c_locationcount,n)
return n
end
@@ -433,12 +439,12 @@ end
-- function references.enhance(prefix,tag)
-- local l = tobesaved[prefix][tag]
-- if l then
--- l.references.realpage = texgetcount("realpageno")
+-- l.references.realpage = texgetcount(c_realpageno)
-- end
-- end
local function synchronizepage(reference) -- non public helper
- reference.realpage = texgetcount("realpageno")
+ reference.realpage = texgetcount(c_realpageno)
if jobpositions.used() then
reference.x, reference.y = getpos()
end
@@ -2040,7 +2046,7 @@ local function setinternalreference(specification)
if internal then -- new
destinationattributes[internal] = destination
end
- texsetcount("lastdestinationattribute",destination)
+ texsetcount(c_lastdestinationattribute,destination)
return destination
end
@@ -2107,7 +2113,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically
} or unsetvalue
end
end
- texsetcount("lastdestinationattribute",attr)
+ texsetcount(c_lastdestinationattribute,attr)
return attr
end
@@ -2685,7 +2691,7 @@ function references.checkedrealpage(r)
realpageofpage(r) -- just initialize
end
if not r then
- return texgetcount("realpageno")
+ return texgetcount(c_realpageno)
elseif r < 1 then
return 1
elseif r > nofrealpages then
@@ -2780,7 +2786,7 @@ end
function specials.deltapage(var,actions)
local p = tonumber(var.operation)
if p then
- p = references.checkedrealpage(p + texgetcount("realpageno"))
+ p = references.checkedrealpage(p + texgetcount(c_realpageno))
var.r = p
actions.realpage = actions.realpage or p -- first wins
end
diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx
index 07c8c2c1b..012d9d92d 100644
--- a/tex/context/base/mkxl/strc-ref.mklx
+++ b/tex/context/base/mkxl/strc-ref.mklx
@@ -27,6 +27,14 @@
\writestatus{loading}{ConTeXt Structure Macros / Cross Referencing}
+\newif \iflocation
+\newcount\locationcount
+\newcount\locationorder
+\newbox \locationbox
+
+\newcount\lastreferenceattribute
+\newcount\lastdestinationattribute
+
\registerctxluafile{strc-rsc}{autosuffix}
\registerctxluafile{strc-ref}{autosuffix}
\registerctxluafile{node-ref}{autosuffix,optimize}
@@ -137,8 +145,8 @@
%D Actually there is not much difference between a text and a full reference, but
%D it's the concept that counts. The low level implementation is:
-\newcount\lastreferenceattribute
-\newcount\lastdestinationattribute
+% sett top : \newcount\lastreferenceattribute
+% sett top : \newcount\lastdestinationattribute
\def\strc_references_finish#prefix#reference#internal% gets expanded anyway
{\normalexpanded{\clf_deferredenhancereference{#prefix}{#reference}}}
@@ -803,10 +811,10 @@
%D
%D We could do this in \LUA\ \unknown
-\newif \iflocation
-\newcount\locationcount
-\newcount\locationorder
-\newbox \locationbox
+% seet top: \newif \iflocation
+% seet top: \newcount\locationcount
+% seet top: \newcount\locationorder
+% seet top: \newbox \locationbox
\appendtoks
\locationfalse
diff --git a/tex/context/base/mkxl/strc-reg.lmt b/tex/context/base/mkxl/strc-reg.lmt
index a45f23bf0..85198a151 100644
--- a/tex/context/base/mkxl/strc-reg.lmt
+++ b/tex/context/base/mkxl/strc-reg.lmt
@@ -34,6 +34,7 @@ local processors = typesetters.processors
local splitprocessor = processors.split
local texgetcount = tex.getcount
+local texiscount = tex.iscount
local variables = interfaces.variables
local v_forward = variables.forward
@@ -67,6 +68,9 @@ local setmetatableindex = table.setmetatableindex
local absmaxlevel = 5 -- \c_strc_registers_maxlevel
+local c_realpageno = texiscount("realpageno")
+local c_locationcount = texiscount("locationcount")
+
local h_prefixpage = helpers.prefixpage
local h_prefixlastpage = helpers.prefixlastpage
local h_title = helpers.title
@@ -564,7 +568,7 @@ local function storeregister(rawdata) -- metadata, references, entries
--
local internal = references.internal
if not internal then
- internal = texgetcount("locationcount") -- we assume that it has been set
+ internal = texgetcount(c_locationcount) -- we assume that it has been set
references.internal = internal
end
--
@@ -606,7 +610,7 @@ local function enhanceregister(specification)
local data = saved.metadata.notsaved and collected[name] or saved
local entry = data.entries[n]
if entry then
- entry.references.realpage = texgetcount("realpageno")
+ entry.references.realpage = texgetcount(c_realpageno)
end
end
@@ -621,7 +625,7 @@ local function extendregister(name,tag,rawdata) -- maybe do lastsection internal
local entry = data.entries[tag]
if entry then
local references = entry.references
- references.lastrealpage = texgetcount("realpageno")
+ references.lastrealpage = texgetcount(c_realpageno)
references.lastsection = currentid()
if rawdata then
local userdata = rawdata.userdata
diff --git a/tex/context/base/mkxl/strc-reg.mkxl b/tex/context/base/mkxl/strc-reg.mkxl
index 22b1202db..b0f50ecfd 100644
--- a/tex/context/base/mkxl/strc-reg.mkxl
+++ b/tex/context/base/mkxl/strc-reg.mkxl
@@ -1068,11 +1068,14 @@
% \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}%
% \fi}
+\let\currentregisterrealpage\!!zerocount % todo: more general accessor
+
\permanent\protected\def\withregisterpagecommand#1#2#3#4%
{\ifcase#3\relax
{\tt [entry\space not\space flushed]}%
\else
\def\currentregisterpageindex{#2}%
+ \def\currentregisterrealpage{#3}%
\iflocation
\strc_references_goto_internal{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]%
\else
diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl
index 0c5251373..96bdde764 100644
--- a/tex/context/base/mkxl/syst-ini.mkxl
+++ b/tex/context/base/mkxl/syst-ini.mkxl
@@ -990,7 +990,8 @@
%D \ifzeropt \somedimen ... \else ... \fi
%D \stoptyping
-\aliased\let\ifzeropt\ifcase
+\aliased\let\ifzeropt\ifzerodim % was \let\ifzeropt\ifcase
+\aliased\let\ifzero \ifzeronum % was \let\ifzeropt\ifcase
% these token list helpers might move to syst-aux.mkiv
%
@@ -1254,8 +1255,8 @@
%D For a while we will keep these useless numbers as for instance tikz checks for them:
-\immutable\integerdef\eTeXversion 2
-\immutable\def \eTeXrevision {2}
+\immutable\integerdef\eTeXversion 2
+\immutable\def \eTeXrevision {.2} % there is a funny period here
% %D Just in case users use this (or some styles still have it):
diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl
index 4d4037ff6..851984bea 100644
--- a/tex/context/base/mkxl/tabl-tbl.mkxl
+++ b/tex/context/base/mkxl/tabl-tbl.mkxl
@@ -407,11 +407,11 @@
% \protected % we can expand this one
\def\tabl_tabulate_inject_pre_skip#1%
{\ifdim#1>\zeropoint
- \kern#1\relax % was \hskip
+ \kern#1\relax % hskip
\orelse\ifnum\c_tabl_tabulate_column=\zerocount
\ifconditional\c_tabl_tabulate_autorulespacing
\ifcase\c_tabl_tabulate_has_rule_spec_first\else
- \kern\s_tabl_tabulate_first\relax % was \hskip
+ \kern\s_tabl_tabulate_first\relax % hskip
\fi
\fi
\fi}
@@ -423,7 +423,7 @@
\orelse\ifnum\c_tabl_tabulate_columns=\c_tabl_tabulate_nofcolumns
\ifconditional\c_tabl_tabulate_autorulespacing
\ifcase\c_tabl_tabulate_has_rule_spec_last\else
- \kern\s_tabl_tabulate_last\relax % was \hskip
+ \kern\s_tabl_tabulate_last\relax % hskip
\fi
\fi
\fi}
diff --git a/tex/context/base/mkxl/task-ini.lmt b/tex/context/base/mkxl/task-ini.lmt
index 9c90aba02..17555d7e2 100644
--- a/tex/context/base/mkxl/task-ini.lmt
+++ b/tex/context/base/mkxl/task-ini.lmt
@@ -122,7 +122,7 @@ appendaction("math", "normalizers", "noads.handlers.dictionaries",
appendaction("math", "normalizers", "noads.handlers.suspicious", nil, "nonut", "enabled" )
appendaction("math", "builders", "builders.kernel.mlisttohlist", nil, "nut", "enabled" ) -- mandate
-appendaction("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" )
+------------("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" )
appendaction("math", "builders", "noads.handlers.makeup", nil, "nonut", "disabled" )
------------("math", "builders", "noads.handlers.align", nil, "nonut", "enabled" )
diff --git a/tex/context/base/mkxl/type-set.mkxl b/tex/context/base/mkxl/type-set.mkxl
index a14a99630..ae07bd914 100644
--- a/tex/context/base/mkxl/type-set.mkxl
+++ b/tex/context/base/mkxl/type-set.mkxl
@@ -134,6 +134,7 @@
\definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv]
\definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv]
+\definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv]
\definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv]
\definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv]
diff --git a/tex/context/fonts/mkiv/asana-math.lfg b/tex/context/fonts/mkiv/asana-math.lfg
index 934f9e0f0..379dd014f 100644
--- a/tex/context/fonts/mkiv/asana-math.lfg
+++ b/tex/context/fonts/mkiv/asana-math.lfg
@@ -30,6 +30,8 @@
-- local integral_top = { topright = 0.05 }
-- local integral_bottom = { bottomright = -0.25 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "asana-math",
@@ -49,7 +51,7 @@ return {
-- StretchStackGapAboveMin = less,
-- StretchStackGapBelowMin = less,
-- StretchStackTopShiftUp = less,
- NoLimitSupFactor = -200,
+ NoLimitSupFactor = 200,
NoLimitSubFactor = 1200,
AccentBaseDepth = 300,
RadicalDegreeBottomRaisePercent = 70,
@@ -65,6 +67,12 @@ return {
expected = "Version 000.958",
message = "this font is not supported",
},
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 1 },
+ presets.mathrsfscript { rscale = 1 },
+ presets.mathxitsarabic { rscale = 0.95 },
{
tweak = "dimensions",
list = {
@@ -103,7 +111,10 @@ return {
{
tweak = "fixellipses",
},
-
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
+ },
},
},
bigslots = {
diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg
index c09b55c20..508293f19 100644
--- a/tex/context/fonts/mkiv/bonum-math.lfg
+++ b/tex/context/fonts/mkiv/bonum-math.lfg
@@ -17,10 +17,12 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then
end
--- When set this will bypass the italic correction hackery!
-local integral_variants = { bottomright = -0.20 }
-local integral_top = { topright = 0.05 }
-local integral_bottom = { bottomright = -0.30 }
+local integral_variants = { bottomright = -0.20 }
+local integral_top = { topright = 0.05 }
+local integral_bottom = { bottomright = -0.30 }
+
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "bonum-math",
@@ -34,19 +36,19 @@ return {
NoLimitSubFactor = 900,
AccentTopShiftUp = -15,
FlattenedAccentTopShiftUp = -15,
- -- AccentExtendMargin = 50,
+ -- AccentExtendMargin = 50,
AccentBaseDepth = 50,
RadicalDegreeBottomRaisePercent = 60,
- RadicalRuleThickness = 66, -- 72 in font
+ RadicalRuleThickness = 66, -- 72 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1900, -- 1250 in font
-- AccentSuperscriptDrop = 100,
- -- AccentSuperscriptPercent = 20,
- -- PrimeRaisePercent = 50,
- PrimeRaiseComposedPercent = 0,
- -- PrimeShiftUp = 0,
- -- PrimeBaselineDropMax = 0,
+ -- AccentSuperscriptPercent = 20,
+ -- PrimeRaisePercent = 50,
+ PrimeRaiseComposedPercent = 0,
+ -- PrimeShiftUp = 0,
+ -- PrimeBaselineDropMax = 0,
},
tweaks = {
aftercopying = {
@@ -55,125 +57,79 @@ return {
expected = "Version 1.005",
},
{
+ tweak = "fixprimes",
+ -- scale = 0.8,
+ -- smaller = true,
+ factor = 1,--1.1
+ },
+ {
+ tweak = "addmirrors",
+ },
+ {
+ tweak = "replacealphabets",
+ -- feature = "mathbeta", -- we always replace
+ list = {
+ {
+ source = { first = 0x003B1 },
+ filename = "texgyrebonummath-companion.otf",
+ },
+ {
+ source = { first = 0x1D6FC },
+ filename = "texgyrebonummath-companion.otf",
+ },
+ },
+ },
+ presets.matheulercalligraphic { rscale = 0.98 },
+ presets.mathrsfscript { rscale = 0.98 },
+ presets.mathxitsarabic { rscale = 1 },
+ presets.moveitalics { correct = true },
+ {
+ -- For some alphabets we remove italic correction.
+ -- tweak = "wipeitalics",
+ list = {
+ "digitsbold",
+ "digitsdoublestruck",
+ "digitsmonospace",
+ "digitsnormal",
+ "digitssansserifbold",
+ "digitssansserifnormal",
+ "lowercasebold",
+ "lowercaseboldfraktur",
+ "lowercasedoublestruck",
+ "lowercasefraktur",
+ "lowercasemonospace",
+ -- "lowercasenormal",
+ "lowercasesansserifbold",
+ -- "lowercasesansserifnormal",
+ "lowercasegreeknormal",
+ "uppercasebold",
+ "uppercaseboldfraktur",
+ "uppercasedoublestruck",
+ "uppercasefraktur",
+ "uppercasegreekbold",
+ "uppercasegreeknormal",
+ "uppercasegreeksansserifbold",
+ "uppercasemonospace",
+ "uppercasesansserifbold",
+ "uppercasesanserifnormal", -- some remain
+ },
+ },
+ {
+ -- tweak = "topaccents",
+ list = {
+ [0x1D453] = 0.7, -- f
+ },
+ },
+ {
+ tweak = "limits",
+ list = {
+ [0x0222B] = 1.5,
+ },
+ },
+ {
+ -- We need to check these, are the tweaks necessary or not?
tweak = "dimensions",
list = {
- [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma
- [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta
- [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta
- [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda
- [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi
- [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi
- [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma
- [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon
- [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi
- [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi
- [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega
- [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial
- [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G
- [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O
- [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q
- [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a
- [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b
- [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c
- [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d
- [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e
- [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f
- [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g
- [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h
- [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i
- [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j
- [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k
- [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l
- [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m
- [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n
- [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o
- [0x1D45D] = { xoffset = 0, width = 1.05, italic = 0 }, -- p
- [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q
- [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r
- [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s
- [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t
- [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u
- [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v
- [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w
- [0x1D465] = { xoffset = 0, width = 1.175, italic = 0, anchor = 0.9 }, -- x
- [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y
- [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z
- [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha
- [0x1D6FD] = { xoffset = 0, width = 0.9, italic = 0, anchor = 1.05 }, -- \beta
- [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma
- [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta
- [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon
- [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon
- [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta
- [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta
- [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta
- [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta
- [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota
- [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa
- [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda
- [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu
- [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu
- [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi
- [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron
- [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi
- [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi
- [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho
- [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho
- [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma
- [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma
- [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau
- [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon
- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi
- [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi
- [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi
- [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi
- [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega
- -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa
- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi
- [0x1D41B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b
- [0x1D41D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d
- [0x1D41F] = { xoffset = 0, width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f
- [0x1D420] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g
- [0x1D421] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h
- [0x1D424] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k
- [0x1D425] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l
- [0x1D42A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q
- [0x1D42B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r
- [0x1D42C] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s
- -- [0x1D482] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a
- -- [0x1D483] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b
- -- [0x1D484] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c
- -- [0x1D485] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d
- -- [0x1D486] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e
- -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f
- -- [0x1D488] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g
- -- [0x1D489] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h
- -- [0x1D48A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i
- -- [0x1D48B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j
- -- [0x1D48C] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k
- -- [0x1D48D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l
- -- [0x1D492] = { xoffset = 0, width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q
- -- [0x1D493] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r
- -- [0x1D497] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v
- -- [0x1D499] = { xoffset = 0, width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x
- -- [0x1D49A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y
- -- [0x1D49B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z
- [0x1D743] = { xoffset = 0, width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi
- [0x1D435] = { anchor = 1.05 }, -- italic B
- [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C
- [0x1D437] = { anchor = 1.25 }, -- italic D
- [0x1D43A] = { anchor = 0.8 }, -- italic G
- [0x1D442] = { anchor = 0.85 }, -- italic O
- [0x1D443] = { anchor = 1.1 }, -- italic P
- [0x1D444] = { anchor = 0.85 }, -- italic Q
- [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R
- [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S
- [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T
- [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U
- [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V
- [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W
- [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y
-
["lowercasefraktur"] = {
width = 1.25,
extend = 1.25,
@@ -195,71 +151,28 @@ return {
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- bottomright = -0.2,
- },
- ["0x2F.variants.*"] = {
- topleft = -0.2,
- bottomright = -0.2,
- },
- -- [0x28] = { -- left parenthesis. No!
- -- topleft = -0.1,
- -- bottomleft = -0.1,
- -- },
- -- [0x29] = { -- right parenthesis. No!
- -- topright = -0.1,
- -- bottomright = -0.1,
- -- all = true,
- -- },
- [0x7D] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right brace variants
- ["0x7D.variants.*"] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right brace variants
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- [0x29] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right parenthesis variants
- ["0x29.variants.*"] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right parenthesis variants
- ["0x29.parts.top"] = {
- topright = -0.15,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right parenthesis bottom
- -- radical
- [0x221A] = {
- topright = 0.2,
- bottomright = 0.2,
- },
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- },
- ["0x221A.parts.top"] = {
- topright = 0.2,
- },
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- },
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x002F.variants.*"] = { topleft = -0.2, bottomright = -0.2 },
+ -- No!
+ -- [0x0028] = { topleft = -0.1, bottomleft = -0.1 }, -- left parenthesis
+ -- [0x0029] = { topright = -0.1, bottomright = -0.1, all = true }, -- right parenthesis
+ --
+ [0x007D] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ [0x0029] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants
+ ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants
+ ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom -- radical
+ [0x221A] = { topright = 0.2, bottomright = 0.2 },
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 },
+ ["0x221A.parts.top"] = { topright = 0.2, },
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 },
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
--
[0x222B] = integral_variants, ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
[0x222C] = integral_variants, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
@@ -270,10 +183,8 @@ return {
[0x2231] = integral_variants, ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom,
[0x2232] = integral_variants, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom,
[0x2233] = integral_variants, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom,
-
},
},
-
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
-- and then need to tweak the width (which is auto set because it was zero with a large
-- accent anchor offset). First we copy and fix.
@@ -321,183 +232,143 @@ return {
tweak = "copyaccents",
},
-- So far for the accents.
-
{
- -- For upright alphabets, we unset the anchor.
- -- This means that accents are placed
- -- centered over the character.
- -- Should be on top
- tweak = "wipeanchors",
- list = {
- "digitsbold",
- "digitsdoublestruck",
- "digitsmonospace",
- "digitsnormal",
- "digitssansserifbold",
- "digitssansserifnormal",
- "lowercasebold",
- "lowercaseboldfraktur",
- "lowercasedoublestruck",
- "lowercasefraktur",
- "lowercasegreekbold",
- "lowercasegreeknormal",
- "lowercasegreeksansserifbold",
- "lowercasemonospace",
- "lowercasenormal",
- "lowercasesansserifbold",
- "lowercasesansserifnormal",
- "uppercasebold",
- "uppercaseboldfraktur",
- "uppercasedoublestruck",
- "uppercasefraktur",
- "uppercasegreekbold",
- "uppercasegreeknormal",
- "uppercasegreeksansserifbold",
- "uppercasemonospace",
- "uppercasenormal",
- "uppercasesansserifbold",
- "uppercasesansserifnormal",
- },
- },
- {
- -- For non-italic alphabets we remove italic correction.
- tweak = "wipeitalics",
- list = {
- "digitsbold",
- "digitsdoublestruck",
- "digitsmonospace",
- "digitsnormal",
- "digitssansserifbold",
- "digitssansserifnormal",
- "lowercasebold",
- "lowercaseboldfraktur",
- "lowercasedoublestruck",
- "lowercasefraktur",
- "lowercasemonospace",
- -- "lowercasenormal",
- "lowercasesansserifbold",
- -- "lowercasesansserifnormal",
- "lowercasegreeknormal",
- "uppercasebold",
- "uppercaseboldfraktur",
- "uppercasedoublestruck",
- "uppercasefraktur",
- "uppercasegreekbold",
- "uppercasegreeknormal",
- "uppercasegreeksansserifbold",
- "uppercasemonospace",
- "uppercasesansserifbold",
- "uppercasesanserifnormal", -- some remain
+ -- For upright alphabets, we unset the anchor. This means that accents are placed
+ -- centered over the character. Should be on top.
+ tweak = "wipeanchors",
+ list = {
+ "digitsbold",
+ "digitsdoublestruck",
+ "digitsmonospace",
+ "digitsnormal",
+ "digitssansserifbold",
+ "digitssansserifnormal",
+ "lowercasebold",
+ "lowercaseboldfraktur",
+ "lowercasedoublestruck",
+ "lowercasefraktur",
+ "lowercasegreekbold",
+ "lowercasegreeknormal",
+ "lowercasegreeksansserifbold",
+ "lowercasemonospace",
+-- "lowercasenormal",
+ "lowercasesansserifbold",
+ "lowercasesansserifnormal",
+ "uppercasebold",
+ "uppercaseboldfraktur",
+ "uppercasedoublestruck",
+ "uppercasefraktur",
+ "uppercasegreekbold",
+ "uppercasegreeknormal",
+ "uppercasegreeksansserifbold",
+ "uppercasemonospace",
+ "uppercasenormal",
+ "uppercasesansserifbold",
+ "uppercasesansserifnormal",
},
- },
- {
- -- This one fakes margins to get larger/smaller accents
- -- with for example \widetilde.
+ },
+ {
+ -- This one fakes margins to get larger/smaller accents with for example the
+ -- \widetilde.
tweak = "margins",
list = {
- [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4
-
- [0x1D712] = { left = -.1, right = -.1 }, -- italic chi
- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi
- [0x1D714] = { left = -.1, right = -.1 }, -- italic omega
-
- [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha
- [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma
- [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa
- [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu
- [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi
- [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma
- [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon
- [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi
- [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi
- [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega
+ [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4
+
+ [0x1D712] = { left = -.1, right = -.1 }, -- italic chi
+ [0x1D713] = { left = -.1, right = -.1 }, -- italic psi
+ [0x1D714] = { left = -.1, right = -.1 }, -- italic omega
+
+ [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha
+ [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma
+ [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa
+ [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu
+ [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi
+ [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma
+ [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon
+ [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi
+ [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi
+ [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega
-- Greek lowercase sans (bold, italic) can be improved
- [0x1D451] = { left = -.1, right = -.1 }, -- italic d
- [0x1D453] = { left = -.1, right = -.1 }, -- italic f
+ [0x1D451] = { left = -.1, right = -.1 }, -- italic d
+ [0x1D453] = { left = -.1, right = -.1 }, -- italic f
- [0x00394] = { left = .1, right = .1 }, -- upfight Delta
- [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma
+ [0x00394] = { left = .1, right = .1 }, -- upfight Delta
+ [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma
- -- [0x0004A] = { left = .1, right = .1 }, -- J
- [0x00046] = { left = .1, right = .1 }, -- F
- [0x0004C] = { left = .1, right = .1 }, -- L
- [0x00050] = { left = .1, right = .1 }, -- P
- [0x00053] = { left = .1, right = .1 }, -- S
- [0x00054] = { left = .1, right = .1 }, -- T
- [0x0005A] = { left = .1, right = .1 }, -- Z
+ -- [0x0004A] = { left = .1, right = .1 }, -- J
+ [0x00046] = { left = .1, right = .1 }, -- F
+ [0x0004C] = { left = .1, right = .1 }, -- L
+ [0x00050] = { left = .1, right = .1 }, -- P
+ [0x00053] = { left = .1, right = .1 }, -- S
+ [0x00054] = { left = .1, right = .1 }, -- T
+ [0x0005A] = { left = .1, right = .1 }, -- Z
[0x1D43D] = { left = -.1, right = -.1 }, -- italic J
-- [0x1D448] = { left = -.05, right = -.05 }, -- italic U
-- [0x1D449] = { left = -.05, right = -.05 }, -- italic V
[0x1D44B] = { left = -.05, right = -.05 }, -- italic X
- -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f
- -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h
- -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u
- -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x
-
- -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi
- -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi
-
- -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d
- -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g
-
- -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J
- -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S
-
- -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F
- -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I
- -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J
- -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z
-
- -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A
- -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B
- -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E
- -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F
- -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J
- -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K
- -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L
- -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P
- -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R
- -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S
- -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T
- -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V
- -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y
-
- -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C
-
- -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma
- -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta
-
- -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E
- -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F
- -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope
- -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L
- -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S
-
- -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S
-
- -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C
- -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E
- -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F
- -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope
- -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P
- -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S
- -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z
-
- -- [0x1D4A0] = { left = .1, right = .1 }, -- script E
- -- [0x1D4AE] = { left = .1, right = .1 }, -- script S
- -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y
+ -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f
+ -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h
+ -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u
+ -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x
+
+ -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi
+ -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi
+
+ -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d
+ -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g
+
+ -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J
+ -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S
+
+ -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F
+ -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I
+ -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J
+ -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z
+
+ -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A
+ -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B
+ -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E
+ -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F
+ -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J
+ -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K
+ -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L
+ -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P
+ -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R
+ -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S
+ -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T
+ -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V
+ -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y
+
+ -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C
+
+ -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma
+ -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta
+
+ -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E
+ -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F
+ -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope
+ -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L
+ -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S
+
+ -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S
+
+ -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C
+ -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E
+ -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F
+ -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope
+ -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P
+ -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S
+ -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z
+
+ -- [0x1D4A0] = { left = .1, right = .1 }, -- script E
+ -- [0x1D4AE] = { left = .1, right = .1 }, -- script S
+ -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y
},
},
- {
- tweak = "fixprimes",
- -- scale = 0.8,
- -- smaller = true,
- factor = 1,--1.1
- },
{
tweak = "addprivates",
-- list = {
@@ -531,6 +402,9 @@ return {
list = { [0x3D] = { squeeze = .85, yoffset = .0975 } }
},
{
+ -- Do we need these in the future?
+ -- Maybe a more general setup?
+ -- Maybe "reset llx"
tweak = "kernpairs",
list = {
[mathematics.tweaks.subsets.acenorsuvxz] = {
@@ -565,27 +439,23 @@ return {
[0x1D45F] = { -- r
[0x1D460] = -.1, -- s
},
--- [mathematics.tweaks.subsets.acenorsuvxz] = {
--- [mathematics.tweaks.subsets.acenorsuvxz] = 2,
--- },
--- [0x1D452] = {
--- [0x1D453] = -.05,
--- [0x1D465] = -.3,
--- },
--- [0x1D453] = {
--- [0x1D453] = -.1,
--- [0x1D454] = -.1,
--- [0x1D465] = -.3,
--- },
--- [0x1D465] = {
--- [0x1D465] = .1,
--- }
- }
+ -- [mathematics.tweaks.subsets.acenorsuvxz] = {
+ -- [mathematics.tweaks.subsets.acenorsuvxz] = 2,
+ -- },
+ -- [0x1D452] = {
+ -- [0x1D453] = -.05,
+ -- [0x1D465] = -.3,
+ -- },
+ -- [0x1D453] = {
+ -- [0x1D453] = -.1,
+ -- [0x1D454] = -.1,
+ -- [0x1D465] = -.3,
+ -- },
+ -- [0x1D465] = {
+ -- [0x1D465] = .1,
+ -- }
+ }
},
- -- {
- -- tweak = "fixanchors",
- -- factor = .5,
- -- },
{
tweak = "addbars",
advance = 0.275,
@@ -619,3 +489,124 @@ return {
-- \alpha is looking like an italic a. The one from Dejavu could perhaps be an alternative?
-- No hvariants in 772
+
+
+
+
+-- From the dimension tweak:
+-- [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma
+-- [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta
+-- [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta
+-- [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda
+-- [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi
+-- [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi
+-- [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma
+-- [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon
+-- [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi
+-- [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi
+-- [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega
+-- [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial
+-- [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G
+-- [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O
+-- [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q
+-- -- [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a
+-- -- [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b
+-- -- [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c
+-- -- [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d
+-- -- [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e
+-- -- [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f
+-- -- [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g
+-- -- [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h
+-- -- [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i
+-- -- [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j
+-- -- [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k
+-- -- [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l
+-- -- [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m
+-- -- [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n
+-- -- [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o
+-- -- [0x1D45D] = { width = 1.05, italic = 0 }, -- p
+-- -- [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q
+-- -- [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r
+-- -- [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s
+-- -- [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t
+-- -- [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u
+-- -- [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v
+-- -- [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w
+-- -- [0x1D465] = { width = 1.175, italic = 0, anchor = 0.9 }, -- x
+-- -- [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y
+-- -- [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z
+-- [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha
+-- [0x1D6FD] = { width = 0.9, italic = 0, anchor = 1.05 }, -- \beta
+-- [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma
+-- [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta
+-- [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon
+-- [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon
+-- [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta
+-- [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta
+-- [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta
+-- [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta
+-- [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota
+-- [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa
+-- [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda
+-- [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu
+-- [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu
+-- [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi
+-- [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron
+-- [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi
+-- [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi
+-- [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho
+-- [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho
+-- [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma
+-- [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma
+-- [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau
+-- [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon
+-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi
+-- [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi
+-- [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi
+-- [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi
+-- [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega
+-- -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa
+-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi
+-- [0x1D41B] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b
+-- [0x1D41D] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d
+-- [0x1D41F] = { width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f
+-- [0x1D420] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g
+-- [0x1D421] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h
+-- [0x1D424] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k
+-- [0x1D425] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l
+-- [0x1D42A] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q
+-- [0x1D42B] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r
+-- [0x1D42C] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s
+-- -- [0x1D482] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a
+-- -- [0x1D483] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b
+-- -- [0x1D484] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c
+-- -- [0x1D485] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d
+-- -- [0x1D486] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e
+-- -- [0x1D487] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f
+-- -- [0x1D488] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g
+-- -- [0x1D489] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h
+-- -- [0x1D48A] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i
+-- -- [0x1D48B] = { width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j
+-- -- [0x1D48C] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k
+-- -- [0x1D48D] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l
+-- -- [0x1D492] = { width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q
+-- -- [0x1D493] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r
+-- -- [0x1D497] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v
+-- -- [0x1D499] = { width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x
+-- -- [0x1D49A] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y
+-- -- [0x1D49B] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z
+-- [0x1D743] = { width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi
+-- -- [0x1D435] = { anchor = 1.05 }, -- italic B
+-- -- [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C
+-- -- [0x1D437] = { anchor = 1.25 }, -- italic D
+-- -- [0x1D43A] = { anchor = 0.8 }, -- italic G
+-- -- [0x1D442] = { anchor = 0.85 }, -- italic O
+-- -- [0x1D443] = { anchor = 1.1 }, -- italic P
+-- -- [0x1D444] = { anchor = 0.85 }, -- italic Q
+-- -- [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R
+-- -- [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S
+-- -- [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T
+-- -- [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U
+-- -- [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V
+-- -- [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W
+-- -- [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y
diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg
index 2207c0645..8f9cf73b9 100644
--- a/tex/context/fonts/mkiv/cambria-math.lfg
+++ b/tex/context/fonts/mkiv/cambria-math.lfg
@@ -46,11 +46,14 @@ end
-- local integral_top = { topright = 0.05 }
-- local integral_bottom = { bottomright = -0.30 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "cambria-math",
version = "1.00",
comment = "Goodies that complement cambria.",
- author = "Hans Hagen",
+ author = "Hans Hagen & Mikael Sundqvist",
copyright = "ConTeXt development team",
mathematics = {
parameters = {
@@ -72,38 +75,16 @@ return {
tweaks = {
aftercopying = {
{
- tweak = "dimensions",
- list = {
-
- -- [0x00060] = { yoffset = -0.1 }, -- grave
- -- [0x000B4] = { yoffset = -0.1 }, -- acute
- -- [0x002C6] = { yoffset = -0.1 }, -- hat
- -- [0x002DC] = { yoffset = -0.1 }, -- tilde
- -- [0x000AF] = { yoffset = -0.1 }, -- bar
- -- [0x002D8] = { yoffset = -0.15 }, -- breve
- -- [0x002D9] = { yoffset = -0.15 }, -- dot
- -- [0x000A8] = { yoffset = -0.1 }, -- ddot
- -- [0x020DB] = { yoffset = -0.05 }, -- dddot
- -- [0x002C7] = { yoffset = -0.1 }, -- check
- -- [0x020D7] = { yoffset = -0.05 }, -- vec
-
- -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave
- -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute
- -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat
- -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde
- -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar
- -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve
- -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot
- -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot
- -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot
- -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering
- -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck
-
- [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J
- [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f
- -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f
-
- },
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.97 },
+ presets.mathrsfscript { rscale = 0.97 },
+ presets.mathxitsarabic { rscale = 0.95 },
+ {
+ tweak = "simplifykerns",
+ },
+ presets.moveitalics {
+ correct = true
},
{
tweak = "kerns",
@@ -264,3 +245,40 @@ return {
kernpairs = kernpairs,
},
}
+
+
+-- Old
+ -- {
+ -- tweak = "dimensions",
+ -- list = {
+
+ -- -- [0x00060] = { yoffset = -0.1 }, -- grave
+ -- -- [0x000B4] = { yoffset = -0.1 }, -- acute
+ -- -- [0x002C6] = { yoffset = -0.1 }, -- hat
+ -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde
+ -- -- [0x000AF] = { yoffset = -0.1 }, -- bar
+ -- -- [0x002D8] = { yoffset = -0.15 }, -- breve
+ -- -- [0x002D9] = { yoffset = -0.15 }, -- dot
+ -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot
+ -- -- [0x020DB] = { yoffset = -0.05 }, -- dddot
+ -- -- [0x002C7] = { yoffset = -0.1 }, -- check
+ -- -- [0x020D7] = { yoffset = -0.05 }, -- vec
+
+ -- -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave
+ -- -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute
+ -- -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat
+ -- -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde
+ -- -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar
+ -- -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve
+ -- -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot
+ -- -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot
+ -- -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot
+ -- -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering
+ -- -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck
+
+ -- [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J
+ -- [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f
+ -- -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f
+
+ -- },
+ -- },
diff --git a/tex/context/fonts/mkiv/common-math.lfg b/tex/context/fonts/mkiv/common-math.lfg
new file mode 100644
index 000000000..d97511e76
--- /dev/null
+++ b/tex/context/fonts/mkiv/common-math.lfg
@@ -0,0 +1,106 @@
+return {
+ name = "common-math",
+ version = "1.00",
+ comment = "Goodies that complement pagella.",
+ author = "Hans Hagen & Mikael Sundqvist",
+ copyright = "ConTeXt development team",
+ mathematics = {
+ tweaks = {
+ presets = {
+ matheulercalligraphic = function(parameters)
+ return {
+ tweak = "replacealphabets",
+ feature = "matheulercalligraphic",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ filename = "euler.otf",
+ rscale = parameters.rscale,
+ },
+ {
+ source = "uppercaseboldscript",
+ target = "uppercaseboldcalligraphic",
+ filename = "euler.otf",
+ rscale = parameters.rscale,
+ },
+ },
+ }
+ end,
+ mathrsfscript = function(parameters)
+ return {
+ tweak = "replacealphabets",
+ feature = "mathrsfscript",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasescript",
+ filename = "ralphsmithsformalscript-companion.otf",
+ rscale = parameters.rscale,
+ feature = "ss01",
+ },
+ {
+ source = "uppercaseboldscript",
+ target = "uppercaseboldscript",
+ filename = "ralphsmithsformalscript-companion.otf",
+ rscale = parameters.rscale,
+ feature = "ss01",
+ },
+ },
+ }
+ end,
+ mathxitsarabic = function(parameters)
+ return {
+ tweak = "replacealphabets",
+ feature = "mathxitsarabic",
+ list = {
+ {
+ source = "arabicmathematicalalphabeticsymbols",
+ target = "arabicmathematicalalphabeticsymbols",
+ filename = "xitsmath-companion.otf",
+ rscale = parameters.rscale,
+ },
+ {
+ source = "digitsarabicindic",
+ target = "digitsarabicindic",
+ filename = "xitsmath-companion.otf",
+ rscale = parameters.rscale,
+ },
+ {
+ source = "digitsextendedarabicindic",
+ target = "digitsextendedarabicindic",
+ filename = "xitsmath-companion.otf",
+ rscale = parameters.rscale,
+ },
+ },
+ }
+ end,
+ moveitalics = function(parameters)
+ return {
+ tweak = "moveitalics",
+ correct = parameters.correct,
+ list = {
+ "lowercasenormal",
+ "lowercaseitalic",
+ "lowercasebold",
+ "lowercasebolditalic",
+ "lowercasegreeknormal",
+ "lowercasegreekitalic",
+ "lowercasegreekbold",
+ "lowercasegreekbolditalic",
+ "uppercasenormal",
+ "uppercaseitalic",
+ "uppercasebold",
+ "uppercasebolditalic",
+ "uppercasegreeknormal",
+ "uppercasegreekitalic",
+ "uppercasegreekbold",
+ "uppercasegreekbolditalic",
+ mathematics.tweaks.subsets.dotless,
+ }
+ }
+ end,
+ },
+ },
+ },
+}
diff --git a/tex/context/fonts/mkiv/concrete-math.lfg b/tex/context/fonts/mkiv/concrete-math.lfg
index ff55d353d..fd2d5caad 100644
--- a/tex/context/fonts/mkiv/concrete-math.lfg
+++ b/tex/context/fonts/mkiv/concrete-math.lfg
@@ -1,10 +1,13 @@
-- this file might go away and is for experiments only
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "concrete-math",
version = "1.00",
comment = "Goodies that complement concrete math.",
- author = "Hans Hagen",
+ author = "Hans Hagen & Mikael Sundqvist",
copyright = "ConTeXt development team",
mathematics = {
parameters = {
@@ -16,20 +19,21 @@ return {
},
tweaks = {
aftercopying = {
- -- {
- -- tweak = "fixprimes",
- -- factor = 0.9,
- -- },
{
- tweak = "kerns",
- list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
+ tweak = "fixprimes",
+ factor = 0.9,
},
+ -- there are circular variants
+-- {
+-- tweak = "addmirrors",
+-- },
+-- presets.matheulercalligraphic { rscale = 0.97 },
+-- presets.mathrsfscript { rscale = 0.95 },
+ {
+ tweak = "kerns",
+ list = {
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ },
},
{
tweak = "fixellipses",
@@ -44,10 +48,12 @@ return {
{
tweak = "addequals",
},
-
-
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
},
},
+ },
bigslots = {
1, 2, 3, 4
},
diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg
index c2e909aef..d18082b85 100644
--- a/tex/context/fonts/mkiv/dejavu-math.lfg
+++ b/tex/context/fonts/mkiv/dejavu-math.lfg
@@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then
end
--- When set this will bypass the italic correction hackery!
local integral_variants = { bottomright = -0.20 }
--- local integral_top = { topright = 0.05 }
local integral_bottom = { bottomright = -0.25 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "dejavu-math",
@@ -27,78 +27,55 @@ return {
NoLimitSupFactor = 0,
NoLimitSubFactor = 900,
FractionRuleThickness = 60,
- AccentTopShiftUp = -25,
- FlattenedAccentTopShiftUp = -25,
- -- AccentExtendMargin = 50,
+ AccentTopShiftUp = -25,
+ FlattenedAccentTopShiftUp = -25,
+ -- AccentExtendMargin = 50,
AccentBaseDepth = 30,
RadicalDegreeBottomRaisePercent = 62,
- RadicalRuleThickness = 46, -- 52 in font
+ RadicalRuleThickness = 46, -- 52 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1800, -- 1333 in font
- -- PrimeRaisePercent = 50, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ -- PrimeRaisePercent = 50, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
},
tweaks = {
aftercopying = {
{
tweak = "version",
expected = "Version 1.106",
+ },
+ {
+ tweak = "fixprimes",
+ scale = 0.85,
+ -- smaller = true,
+ factor = 1,
},
{
- tweak = "dimensions",
- list = {
- [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a
- -- [0x1D449] = { xoffset = 0, width = .8, italic = .2 },
- -- [0x1D44A] = { xoffset = 0, width = .8, italic = .2 },
- ["0x1D449:0x1D44A"] = { xoffset = 0, width = .8, italic = .2 },
- }
+ tweak = "addmirrors",
},
+ presets.matheulercalligraphic { rscale = 1.02 },
+ presets.mathrsfscript { rscale = 1.02 },
+ presets.mathxitsarabic { rscale = 1.05 },
+ presets.moveitalics { correct = true },
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.15,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
-
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ --
["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
@@ -125,9 +102,9 @@ return {
{
tweak = "dimensions",
list = {
- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
+ [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
+ [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
+ [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
[0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
@@ -136,20 +113,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -157,12 +132,10 @@ return {
{
tweak = "copyaccents",
},
- -- So far for the accents.
-
{
tweak = "fixprimes",
- -- scale = 0.9,
- -- smaller = true,
+ -- scale = 0.9,
+ -- smaller = true,
factor = 0.8,
},
{
@@ -191,7 +164,7 @@ return {
tweak = "addequals",
},
{
- tweak = "addfourier",
+ tweak = "addfourier",
variant = 1,
},
},
@@ -209,3 +182,16 @@ return {
kerns = kerns,
},
}
+
+
+
+-- Old
+ -- {
+ -- tweak = "dimensions",
+ -- list = {
+ -- [0x1D44E] = { width = 1, italic = 0, anchor = 0.9 }, -- a
+ -- -- [0x1D449] = { width = .8, italic = .2 },
+ -- -- [0x1D44A] = { width = .8, italic = .2 },
+ -- ["0x1D449:0x1D44A"] = { width = .8, italic = .2 },
+ -- }
+ -- },
diff --git a/tex/context/fonts/mkiv/erewhon-math.lfg b/tex/context/fonts/mkiv/erewhon-math.lfg
index 71ff64648..fe8bb7108 100644
--- a/tex/context/fonts/mkiv/erewhon-math.lfg
+++ b/tex/context/fonts/mkiv/erewhon-math.lfg
@@ -1,10 +1,13 @@
-- This file might go away and is for experiments only.
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "erewhon-math",
version = "1.00",
comment = "Goodies that complement erewhon math.",
- author = "Hans Hagen",
+ author = "Hans Hagen & Mikael Sundqvist",
copyright = "ConTeXt development team",
mathematics = {
parameters = {
@@ -21,60 +24,36 @@ return {
},
tweaks = {
aftercopying = {
- {
- tweak = "kerns",
- list = {
- [0x2F] = {
- topleft = -0.15,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.15,
- },
-
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.1,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.1,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
-
- },
- },
{
tweak = "fixprimes",
factor = 0.9,
scale = 0.9,
},
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.93 },
+ presets.mathrsfscript { rscale = 0.93 },
+ presets.mathxitsarabic { rscale = 0.90 },
+ {
+ tweak = "kerns",
+ list = {
+ [0x002F] = { topleft = -0.15, bottomright = -0.15 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ },
+ },
{
tweak = "checkspacing",
},
@@ -93,6 +72,10 @@ return {
{
tweak = "addequals",
},
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
+ },
},
},
bigslots = {
diff --git a/tex/context/fonts/mkiv/garamond-math.lfg b/tex/context/fonts/mkiv/garamond-math.lfg
index 7c1e7ab22..a0a0700f5 100644
--- a/tex/context/fonts/mkiv/garamond-math.lfg
+++ b/tex/context/fonts/mkiv/garamond-math.lfg
@@ -1,3 +1,6 @@
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "ebgaramond",
version = "1.00",
@@ -11,17 +14,17 @@ return {
FractionRuleThickness = 60,
OverbarRuleThickness = 60,
UnderbarRuleThickness = 60,
- AccentTopShiftUp = -75,
- FlattenedAccentTopShiftUp = -75,
- -- AccentExtendMargin = 50,
+ AccentTopShiftUp = -75,
+ FlattenedAccentTopShiftUp = -75,
+ -- AccentExtendMargin = 50,
-- AccentBaseHeight = 0,
AccentBaseDepth = 75,
- -- RadicalRuleThickness = 50, -- 50 in font
+ -- RadicalRuleThickness = 50, -- 50 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
-- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one)
- PrimeRaisePercent = 85, -- 50 default
- -- PrimeRaiseComposedPercent = 25, -- 25 default
+ PrimeRaisePercent = 85, -- 50 default
+ -- PrimeRaiseComposedPercent = 25, -- 25 default
},
tweaks = {
aftercopying = {
@@ -29,123 +32,118 @@ return {
tweak = "version",
expected = "Version 2019-08-16",
},
+ {
+ tweak = "fixprimes",
+ scale = 0.95,
+ -- smaller = true,
+ factor = 0.95,
+ -- fake = 0.75,
+ },
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.95 },
+ presets.mathrsfscript { rscale = 0.95 },
+ presets.mathxitsarabic { rscale = 0.80 },
+ {
+ tweak = "oldstylemath",
+ factor = 0,
+ },
+ {
+ tweak = "simplifykerns",
+ },
+ presets.moveitalics {
+ correct = true
+ },
+ {
+ tweak = "topanchors",
+ list = {
+ [0x1D453] = 0.88, -- italic f
+ },
+ },
+ {
+ tweak = "limits",
+ factor = 1.5,
+ list = mathematics.tweaks.subsets.integrals,
+ },
{
tweak = "dimensions",
list = {
- -- offset width italic
- -- -- [0x00060] = { yoffset = -0.1 }, -- grave
- -- -- [0x000B4] = { yoffset = -0.1 }, -- acute
- -- [0x002C6] = { yoffset = -0.1 }, -- hat
- -- [0x002DC] = { yoffset = -0.1 }, -- tilde
- -- -- [0x000AF] = { yoffset = -0.1 }, -- bar
- -- [0x002D8] = { yoffset = -0.15 }, -- breve
- -- [0x002D9] = { yoffset = -0.15 }, -- dot
- -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot
- -- [0x020DB] = { yoffset = -0.115 }, -- dddot
- -- [0x002C7] = { yoffset = -0.1 }, -- check
- -- [0x020D7] = { yoffset = -0.1 }, -- vec
-
- -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave
- -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute
- -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat
- -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde
- -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar
- -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve
- -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot
- -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot
- -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot
- -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering
- -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck
-
- -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat
-
- [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma
- -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult!
- [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi
- [0x02113] = { xoffset = 0, width = 1, italic = 0.075 }, -- \ell
- [0x1D436] = { xoffset = 0, width = 1, italic = 0.05 }, -- C
- [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J
- [0x1D44B] = { xoffset = 0, width = 1, italic = 0.05 }, -- X
- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- b
- [0x1D450] = { xoffset = 0, width = 1.1, italic = 0 }, -- c
- [0x1D451] = { xoffset = 0, width = 1, italic = 0.05, 0.8 }, -- d
- [0x1D452] = { xoffset = 0, width = 1.1, italic = 0.05 }, -- e
- [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, 1.2 }, -- f
- [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g
- [0x0210E] = { xoffset = 0, width = 1.1, italic = 0, 1.4 }, -- h
- [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j
- [0x1D458] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- k
- [0x1D459] = { xoffset = 0, width = 1, italic = 0.05 }, -- l
- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, 1.4 }, -- p
- [0x1D45E] = { xoffset = 0, width = 1.05, italic = 0 }, -- q
- [0x1D45F] = { xoffset = 0, width = 1.05, italic = 0 }, -- r
- [0x1D461] = { xoffset = 0, width = 1, italic = 0.1 }, -- t
- [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x
- [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, 1.35 }, -- y
- [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta
- [0x1D6FE] = { xoffset = 0, width = 1.05, italic = 0 }, -- \gamma
- [0x1D6FF] = { xoffset = 0, width = 1, italic = 0.1 }, -- \delta
- [0x1D716] = { xoffset = 0, width = 1.1, italic = 0 }, -- \epsilon
- [0x1D700] = { xoffset = 0, width = 1.1, italic = 0 }, -- \varepsilon
- [0x1D701] = { xoffset = 0, width = 1, italic = 0.15 }, -- \zeta
- [0x1D703] = { xoffset = 0, width = 1, italic = 0.1 }, -- \theta
- [0x1D705] = { xoffset = 0, width = 1, italic = 0.1 }, -- \kappa
- [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda
- [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu
- [0x1D708] = { xoffset = 0, width = 1.1, italic = 0 }, -- \nu
- [0x1D709] = { xoffset = 0, width = 1.1, italic = 0 }, -- \xi
- [0x1D70B] = { xoffset = 0, width = 1.05, italic = 0 }, -- \pi
- [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho
- [0x1D70E] = { xoffset = 0, width = 1, italic = 0.1 }, -- \sigma
- [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau
- [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi
- [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi
+ -- for older entries, see bottom of file
+ [0x1D453] = { width = 1.1, }, -- italic f
},
},
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.25,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.25,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.2,
- bottomright = -0.2,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants -- angle
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ },
+ },
+ {
+ -- to be considered
+ -- tweak = "kernpairs",
+ list = {
+ [mathematics.tweaks.subsets.gjqy] = {
+ [mathematics.tweaks.subsets.f] = -.1,
+ [0x1D70C] = -.1, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.bhklt] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.d] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.f] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ [mathematics.tweaks.subsets.gjqy] = -.25,
+ [mathematics.tweaks.subsets.bhklt] = -.1,
+ [mathematics.tweaks.subsets.d] = -.25,
+ [mathematics.tweaks.subsets.i] = -.25,
+ [mathematics.tweaks.subsets.mw] = -.25,
+ [mathematics.tweaks.subsets.p] = -.25,
+ [mathematics.tweaks.subsets.acenorsuvxz] = -.25,
+ [mathematics.tweaks.subsets.dotless] = -.25,
+ },
+ [mathematics.tweaks.subsets.i] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.mw] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.p] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.acenorsuvxz] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ [mathematics.tweaks.subsets.dotless] = {
+ [mathematics.tweaks.subsets.f] = -.25,
+ [0x1D70C] = -.25, -- italic \rho
+ },
+ -- "uppercaseitalic" = {
+ -- [mathematics.tweaks.subsets.f] = -.25,
+ -- [0x1D70C] = -.25, -- italic \rho
+ -- },
},
},
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
@@ -155,16 +153,16 @@ return {
tweak = "extendaccents",
},
{
- tweak = "fixaccents",
+ tweak = "fixanchors",
},
-- First we set the dimensions of the initial accent which started out as zero but we want
-- a proper width.
{
tweak = "dimensions",
list = {
- -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
- -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
- -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
+ -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
+ -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
+ -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
-- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
@@ -195,13 +193,37 @@ return {
tweak = "copyaccents",
},
-- So far for the accents.
-
{
- tweak = "fixprimes",
- scale = 0.9,
- -- smaller = true,
- factor = 0.9,
- -- fake = 0.75,
+ -- For non-italic alphabets we remove italic correction.
+ -- This one is/will become obsolete
+ -- tweak = "wipeitalics",
+ list = {
+ "digitsbold",
+ "digitsdoublestruck",
+ "digitsmonospace",
+ "digitsnormal",
+ "digitssansserifbold",
+ "digitssansserifnormal",
+ -- "lowercasebold",
+ "lowercaseboldfraktur",
+ "lowercasedoublestruck",
+ "lowercasefraktur",
+ "lowercasemonospace",
+ -- "lowercasenormal",
+ "lowercasesansserifbold",
+ -- "lowercasesansserifnormal",
+ -- "lowercasegreeknormal",
+ -- "uppercasebold",
+ "uppercaseboldfraktur",
+ "uppercasedoublestruck",
+ "uppercasefraktur",
+ "uppercasegreekbold",
+ "uppercasegreeknormal",
+ "uppercasegreeksansserifbold",
+ "uppercasemonospace",
+ "uppercasesansserifbold",
+ "uppercasesanserifnormal", -- some remain
+ },
},
{
tweak = "checkspacing",
@@ -229,6 +251,9 @@ return {
tweak = "addfourier",
variant = 1,
},
+ {
+ tweak = "diagnose",
+ },
},
},
alternates = {
@@ -248,3 +273,81 @@ return {
}
+
+
+-- Some old entries:
+
+ -- {
+ -- tweak = "dimensions",
+ -- list = {
+ -- -- offset width italic
+ -- -- -- [0x00060] = { yoffset = -0.1 }, -- grave
+ -- -- -- [0x000B4] = { yoffset = -0.1 }, -- acute
+ -- -- [0x002C6] = { yoffset = -0.1 }, -- hat
+ -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde
+ -- -- -- [0x000AF] = { yoffset = -0.1 }, -- bar
+ -- -- [0x002D8] = { yoffset = -0.15 }, -- breve
+ -- -- [0x002D9] = { yoffset = -0.15 }, -- dot
+ -- -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot
+ -- -- [0x020DB] = { yoffset = -0.115 }, -- dddot
+ -- -- [0x002C7] = { yoffset = -0.1 }, -- check
+ -- -- [0x020D7] = { yoffset = -0.1 }, -- vec
+
+ -- -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave
+ -- -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute
+ -- -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat
+ -- -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde
+ -- -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar
+ -- -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve
+ -- -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot
+ -- -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot
+ -- -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot
+ -- -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering
+ -- -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck
+
+ -- -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat
+
+ -- [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma
+ -- -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult!
+ -- [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi
+ -- [0x02113] = { width = 1, italic = 0.075 }, -- \ell
+ -- [0x1D436] = { width = 1, italic = 0.05 }, -- C
+ -- [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J
+ -- [0x1D44B] = { width = 1, italic = 0.05 }, -- X
+ -- [0x1D44F] = { width = 1, italic = 0, }, -- b
+ -- [0x1D450] = { width = 1.1, italic = 0 }, -- c
+ -- [0x1D451] = { width = 1, italic = 0.05, }, -- d
+ -- [0x1D452] = { width = 1.1, italic = 0.05 }, -- e
+ -- [0x00066] = { width = 1.4, italic = 0.0, }, -- f
+ -- [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, }, -- f
+ -- [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g
+ -- [0x0210E] = { width = 1.1, italic = 0, }, -- h
+ -- [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j
+ -- [0x1D458] = { width = 1, italic = 0, }, -- k
+ -- [0x1D459] = { width = 1, italic = 0.05 }, -- l
+ -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, }, -- p
+ -- [0x1D45E] = { width = 1.05, italic = 0 }, -- q
+ -- [0x1D45F] = { width = 1.05, italic = 0 }, -- r
+ -- [0x1D461] = { width = 1, italic = 0.1 }, -- t
+ -- [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x
+ -- [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, }, -- y
+ -- [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta
+ -- [0x1D6FE] = { width = 1.05, italic = 0 }, -- \gamma
+ -- [0x1D6FF] = { width = 1, italic = 0.1 }, -- \delta
+ -- [0x1D716] = { width = 1.1, italic = 0 }, -- \epsilon
+ -- [0x1D700] = { width = 1.1, italic = 0 }, -- \varepsilon
+ -- [0x1D701] = { width = 1, italic = 0.15 }, -- \zeta
+ -- [0x1D703] = { width = 1, italic = 0.1 }, -- \theta
+ -- [0x1D705] = { width = 1, italic = 0.1 }, -- \kappa
+ -- [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda
+ -- [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu
+ -- [0x1D708] = { width = 1.1, italic = 0 }, -- \nu
+ -- [0x1D709] = { width = 1.1, italic = 0 }, -- \xi
+ -- [0x1D70B] = { width = 1.05, italic = 0 }, -- \pi
+ -- [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho
+ -- [0x1D70E] = { width = 1, italic = 0.1 }, -- \sigma
+ -- [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau
+ -- [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi
+ -- [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi
+ -- },
+ -- },
diff --git a/tex/context/fonts/mkiv/generic-math.lfg b/tex/context/fonts/mkiv/generic-math.lfg
index 490ad1416..214e479e0 100644
--- a/tex/context/fonts/mkiv/generic-math.lfg
+++ b/tex/context/fonts/mkiv/generic-math.lfg
@@ -102,6 +102,17 @@ return {
-- [0x21CC] = false,
}
},
+-- {
+-- tweak = "limits",
+-- factor = 1.5,
+-- list = {
+-- [0x0222B] = true,
+-- [0x0222C] = 1.45,
+-- [0x0222D] = true,
+-- [0x0222E] = true,
+-- [0x0222F] = true,
+-- },
+-- },
{
-- For upright alphabets, we unset the anchor.
-- This means that accents are placed
@@ -171,6 +182,18 @@ return {
"uppercasesanserifnormal",
},
},
+ -- {
+ -- comment = "example"
+ -- tweak = "action",
+ -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters)
+ -- list = fixes, -- one of the parameters
+ -- },
+ -- {
+ -- comment = "example"
+ -- tweak = "action",
+ -- action = mathematics.tweaks.fixdimensions,
+ -- list = fixes, -- one of the parameters
+ -- },
{
-- This one fakes margins to get larger/smaller accents
-- with for example \widetilde.
@@ -179,6 +202,10 @@ return {
list = {
},
},
+ -- {
+ -- tweak = "fixanchors",
+ -- factor = .5,
+ -- },
{
tweak = "addrules",
},
diff --git a/tex/context/fonts/mkiv/kpfonts-math.lfg b/tex/context/fonts/mkiv/kpfonts-math.lfg
index c0b019f79..ed50baf3b 100644
--- a/tex/context/fonts/mkiv/kpfonts-math.lfg
+++ b/tex/context/fonts/mkiv/kpfonts-math.lfg
@@ -1,3 +1,6 @@
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "kpfonts-math",
version = "1.00",
@@ -11,12 +14,12 @@ return {
-- AccentBaseHeight = 0,
AccentBaseDepth = 30,
RadicalDegreeBottomRaisePercent = 70,
- -- RadicalRuleThickness = 50, -- 50 in font
+ -- RadicalRuleThickness = 50, -- 50 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
-- DisplayOperatorMinHeight = 1800, -- 1500 in font (only one)
- PrimeRaisePercent = 25, -- 50 default
- -- PrimeRaiseComposedPercent = 25, -- 25 default
+ PrimeRaisePercent = 25, -- 50 default
+ -- PrimeRaiseComposedPercent = 25, -- 25 default
},
tweaks = {
aftercopying = {
@@ -27,51 +30,22 @@ return {
{
tweak = "dimensions",
list = {
- [0x2A3F] = {
- factor = 0.84625,
- }
+ [0x2A3F] = { factor = 0.84625 }
},
},
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
-
- ["0x7D.parts.top"] = {
- topright = -0.25,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.25,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.05,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.05,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.05,
- bottomright = -0.05,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.25 }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.25 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.05 }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.05 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
},
},
@@ -83,6 +57,34 @@ return {
-- fake = 0.75, -- replace multiples with this width proportion
-- -- keep = true, -- keep the text size prime (aka minute)
-- },
+ {
+ tweak = "addmirrors",
+ },
+ {
+ -- kpfonts have calligraphic at private slots
+ tweak = "replacealphabets",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ },
+ {
+ source = { first = 0x0E7E1, last = 0x0E7FA },
+ target = "uppercasecalligraphic",
+ },
+ {
+ source = "uppercaseboldscript",
+ target = "uppercaseboldcalligraphic",
+ },
+ {
+ source = { first = 0x0E701, last = 0x0E71A },
+ target = "uppercaseboldcalligraphic",
+ },
+ },
+ },
+ presets.matheulercalligraphic { rscale = 0.95 },
+ presets.mathrsfscript { rscale = 0.95 },
+ presets.mathxitsarabic { rscale = 0.92 },
{
tweak = "checkspacing",
},
@@ -96,8 +98,9 @@ return {
tweak = "addrules",
},
{
+ -- This will be fixed. Check if new version comes out!
tweak = "addbars",
- advance = 0.025,
+ advance = 0.5,
},
{
tweak = "addactuarian",
@@ -105,6 +108,10 @@ return {
{
tweak = "addequals",
},
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
+ },
},
},
alternates = {
diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg
index 77d0161e3..ea6a27cad 100644
--- a/tex/context/fonts/mkiv/libertinus-math.lfg
+++ b/tex/context/fonts/mkiv/libertinus-math.lfg
@@ -4,6 +4,11 @@
-- fix-feature or just disable ssty, but we have to revert to a runtime fix. Lucky me that I didn't
-- remove that hardly needed 'tweaks' mechanism yet.
+-- The italic x has a rectangular piece in its eye (redundant point)
+
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "libertinus-math",
version = "1.00",
@@ -20,17 +25,17 @@ return {
UnderbarRuleThickness = 50,
AccentTopShiftUp = -35,
FlattenedAccentTopShiftUp = -35,
- -- AccentExtendMargin = 50,
+ -- AccentExtendMargin = 50,
-- AccentTopShiftUp = 0,
AccentBaseDepth = 10,
RadicalDegreeBottomRaisePercent = 60,
RadicalKernAfterDegree = -425,
- -- RadicalRuleThickness = 40, -- 40 in font
+ -- RadicalRuleThickness = 40, -- 40 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
-- DisplayOperatorMinHeight = 1800, -- 1250 in font (only one)
- PrimeRaisePercent = 70, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ PrimeRaisePercent = 70, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
},
tweaks = {
aftercopying = {
@@ -40,85 +45,56 @@ return {
expected = "Version 7.040",
},
{
- tweak = "dimensions",
- list = {
- -- [0x00060] = { yoffset = -0.075 }, -- grave
- -- [0x000B4] = { yoffset = -0.075 }, -- acute
- -- [0x002C6] = { yoffset = -0.075 }, -- hat
- -- [0x002DC] = { yoffset = -0.075 }, -- tilde
- -- -- [0x000AF] = { yoffset = -0.1 }, -- bar
- -- [0x002D8] = { yoffset = -0.075 }, -- breve
- -- [0x002D9] = { yoffset = -0.05 }, -- dot
- -- [0x000A8] = { yoffset = -0.02 }, -- ddot
- -- [0x020DB] = { yoffset = -0.02 }, -- dddot
- -- [0x002DA] = { yoffset = -0.1 }, -- ring
- -- -- [0x002C7] = { yoffset = -0.1 }, -- check
- -- [0x020D7] = { yoffset = -0.1 }, -- vec
-
- -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave
- -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute
- -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat
- -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde
- -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar
- -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve
- -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot
- -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot
- -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot
- -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering
- -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck
-
- -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8)
- -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8)
- -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8)
- -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8)
- },
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.92 },
+ presets.mathrsfscript { rscale = 0.92 },
+ presets.mathxitsarabic { rscale = 0.85 },
+ {
+ tweak = "simplifykerns",
+ },
+ {
+ -- When it makes sense we get rid of italics.
+ tweak = "moveitalics",
+ correct = true,
+ list = {
+ "lowercasenormal",
+ "lowercaseitalic",
+ "lowercasebold",
+ "lowercasebolditalic",
+ "lowercasegreeknormal",
+ "lowercasegreekitalic",
+ "lowercasegreekbold",
+ "lowercasegreekbolditalic",
+ "uppercasenormal",
+ "uppercaseitalic",
+ "uppercasebold",
+ "uppercasebolditalic",
+ "uppercasegreeknormal",
+ "uppercasegreekitalic",
+ "uppercasegreekbold",
+ "uppercasegreekbolditalic",
+ mathematics.tweaks.subsets.dotless,
+ }
},
+
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.15,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.15,
- },
-
- ["0x7D.parts.top"] = {
- topright = -0.2,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.2,
- }, -- right brace bottom
- -- ["0x7D.variants.*"] = {
- -- topright = -0.05,
- -- bottomright = -0.05,
- -- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.15,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.15,
- bottomright = -0.15,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x002F] = { topleft = -0.15, bottomright = -0.15 },
+ ["0x7D.parts.top"] = { topright = -0.2, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.2 }, -- right brace bottom
+ -- ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
},
},
@@ -148,19 +124,17 @@ return {
tweak = "dimensions",
list = {
-- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -169,8 +143,6 @@ return {
tweak = "copyaccents",
},
-- So far for the accents.
-
-
{
tweak = "fixprimes",
scale = 0.9,
@@ -203,6 +175,10 @@ return {
tweak = "addfourier",
variant = 1,
},
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
+ },
},
},
bigslots = {
@@ -210,3 +186,40 @@ return {
},
},
}
+
+-- Old values
+ -- {
+ -- tweak = "dimensions",
+ -- list = {
+ -- -- [0x00060] = { yoffset = -0.075 }, -- grave
+ -- -- [0x000B4] = { yoffset = -0.075 }, -- acute
+ -- -- [0x002C6] = { yoffset = -0.075 }, -- hat
+ -- -- [0x002DC] = { yoffset = -0.075 }, -- tilde
+ -- -- [0x000AF] = { yoffset = -0.1 }, -- bar
+ -- -- [0x002D8] = { yoffset = -0.075 }, -- breve
+ -- -- [0x002D9] = { yoffset = -0.05 }, -- dot
+ -- -- [0x000A8] = { yoffset = -0.02 }, -- ddot
+ -- -- [0x020DB] = { yoffset = -0.02 }, -- dddot
+ -- -- [0x002DA] = { yoffset = -0.1 }, -- ring
+ -- -- [0x002C7] = { yoffset = -0.1 }, -- check
+ -- -- [0x020D7] = { yoffset = -0.1 }, -- vec
+
+ -- -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave
+ -- -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute
+ -- -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat
+ -- -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde
+ -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar
+ -- -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve
+ -- -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot
+ -- -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot
+ -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot
+ -- -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering
+ -- -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck
+
+ -- -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8)
+ -- -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8)
+ -- -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8)
+ -- -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8)
+ -- },
+ -- },
+
diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg
index 1d81e0b77..355b583d1 100644
--- a/tex/context/fonts/mkiv/lm.lfg
+++ b/tex/context/fonts/mkiv/lm.lfg
@@ -1,6 +1,9 @@
-- In order to be able to use beta math fonts, we use our own file name and
-- always remap.
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
local dimensions, kerns if CONTEXTLMTXMODE == 0 then
local kern_150 = { bottomright = { { kern = -150 } } }
@@ -76,8 +79,14 @@ return {
DelimiterPercent = 90,
DelimiterShortfall = 400,
-- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one)
- PrimeRaisePercent = 60, -- 50 default
- PrimeRaiseComposedPercent = 15, -- 25 default
+ PrimeRaisePercent = 60,
+ PrimeRaiseComposedPercent = 15,
+ -- SubSuperscriptGapMin = 160, -- 160 in font
+ SuperscriptBaselineDropMax = 250, -- 250 in font
+ -- SuperscriptBottomMaxWithSubscript = 344, -- 344 in font
+ -- SuperscriptBottomMin = 108, -- 108 in font
+ SuperscriptShiftUp = 363, -- 363 in font
+ SuperscriptShiftUpCramped = 89, -- 289 in font
},
tweaks = {
aftercopying = {
@@ -85,6 +94,13 @@ return {
tweak = "version",
expected = "Version 1.958",
},
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 1 },
+ presets.mathrsfscript { rscale = 1 },
+ presets.mathxitsarabic { rscale = 0.88 },
+ presets.moveitalics { correct = true },
{
tweak = "dimensions",
list = {
@@ -447,7 +463,7 @@ return {
-- "lowercasedoublestruck",
-- "lowercasefraktur",
"lowercasemonospace",
- "lowercasenormal",
+ -- "lowercasenormal",
-- "lowercasesansserifbold",
-- "lowercasesansserifnormal",
-- "lowercasegreeknormal",
@@ -550,6 +566,9 @@ return {
{
tweak = "fixradicals",
},
+ {
+ tweak = "addprivates",
+ },
{
tweak = "addscripts",
},
diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg
index 372d8cce2..97cf97ab1 100644
--- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg
+++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg
@@ -1,3 +1,5 @@
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
local dimensions, kerns if CONTEXTLMTXMODE == 0 then
-- local kern_250 = { bottomright = { { kern = -250 } }, force = true }
@@ -42,75 +44,83 @@ return {
NoLimitSupFactor = 0,
NoLimitSubFactor = 900,
FractionRuleThickness = 55,
- -- AccentTopShiftUp = 0,
- -- FlattenedAccentTopShiftUp = 0,
- -- AccentExtendMargin = 50,
+ -- AccentTopShiftUp = 0,
+ -- FlattenedAccentTopShiftUp = 0,
+ -- AccentExtendMargin = 50,
-- AccentBaseHeight = 650,
AccentBaseDepth = 150,
RadicalDegreeBottomRaisePercent = 50,
RadicalKernAfterDegree = -600,
- -- RadicalRuleThickness = 35, -- 40 in font (46 in demi)
+ -- RadicalRuleThickness = 35, -- 40 in font (46 in demi)
DelimiterPercent = 90,
DelimiterShortfall = 400,
-- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one)
- PrimeRaisePercent = 60, -- 50 default
- PrimeRaiseComposedPercent = 50, -- 25 default
+ PrimeRaisePercent = 60, -- 50 default
+ PrimeRaiseComposedPercent = 50, -- 25 default
+-- AxisHeight = 325,
},
tweaks = {
aftercopying = {
{
tweak = "version",
- expected = "Version 1.802",
+ expected = "Version 1.803",
},
- -- {
- -- tweak = "substitutes",
- -- list = {
- -- [0x2264] = "ss03",
- -- [0x2265] = "ss03",
- -- }
- -- },
- -- \definefontfeature[mathlucida][copymathscripts=yes]
- -- \definefontfeature[mathlucida][copymathscripts=yes,ss04=yes]
- -- 0xFEOO should be chancery style, if present
{
- tweak = "variants",
- kind = "script",
- feature = "ss04",-- this changes to chancery style for lucida
- -- feature = false, -- use the saved ones (see typescript)
- selector = 0xFE00,
+ tweak = "fixoldschool",
+ version = "Version 1.802",
},
- -- 0xFEO1 should be roundhand style, if present
+-- {
+-- tweak = "showinfo",
+-- version = "Version 1.803",
+-- },
{
- tweak = "variants",
- kind = "script",
- selector = 0xFE01,
+ tweak = "addmirrors",
+ },
+ presets.mathxitsarabic {
+ rscale = 1.05
+ },
+ {
+ tweak = "replacealphabets",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ feature = "ss04",
+ },
+ },
+ },
+ {
+ tweak = "dimensions",
+ version = "Version 1.802",
+ list = {
+ -- The < and > are slightly too small. We scale them by 867/795
+ ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
+ ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
+ -- The = is too big if in ss03. We scale it by 795/867 (not working like this)
+ -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 },
+ },
},
{
tweak = "dimensions",
list = {
- -- these we fix here
+ -- these we fix here. Remove when we have new version of Lucida
["0x23DC.parts.1"] = { xoffset = -0.075, height = .4, yoffset = -0.6 },
["0x23DC.parts.2"] = { height = .4, yoffset = -0.6 },
["0x23DC.parts.3"] = { xoffset = 0.075, height = .4, yoffset = -0.6 },
["0x23DD.parts.1"] = { xoffset = -0.075, depth = .8, yoffset = 0.2 },
["0x23DD.parts.2"] = { depth = .8, yoffset = 0.2 },
["0x23DD.parts.3"] = { xoffset = 0.075, depth = .8, yoffset = 0.2 },
- -- The < and > are slightly too small. We scale them by 867/795
- ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
- ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 },
- -- The = is too big if in ss03. We scale it by 795/867 (not working like this)
- -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 },
-- these are done later using the AccentBase* parameters
-- [0x23DC] = { height = .2, yoffset = -0.8 },
-- [0x23DD] = { depth = .6, yoffset = 0.4 },
-
+ --
-- ["0x7C.variants.1"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
-- ["0x7C.variants.2"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
-- ["0x7C.variants.3"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
-- ["0x7C.variants.4"] = { squeeze = 0.75, height = 0.75, depth = 0.75 },
-- going zero makes them be ignored
- ["0x7C.variants.3"]={ squeeze = 0.90, height = 0.90, depth = 0.90 },
- ["0x7C.variants.4"]={ squeeze = 0.80, height = 0.80, depth = 0.80 },
+ ["0x7C.variants.3"] = { squeeze = 0.90, height = 0.90, depth = 0.90 },
+ ["0x7C.variants.4"] = { squeeze = 0.80, height = 0.80, depth = 0.80 },
},
},
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
@@ -127,10 +137,10 @@ return {
{
tweak = "dimensions",
list = {
- -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
- -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
- -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
- -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
+ -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
+ -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
+ -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
+ -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
-- Then we deal with all offsets and heights in one go. So we treat the initial accent
@@ -138,20 +148,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -173,50 +181,20 @@ return {
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
-
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.15,
- bottomright = -0.15,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.25,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.25,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.2,
- bottomright = -0.2,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.2, bottomright = -0.2 },
- ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 },
- [0x27EB] = { topright = -0.2, bottomright = -0.2 },
- ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 },
-
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15 }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.25 }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.2, bottomright = -0.2 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 },
+ [0x27EB] = { topright = -0.2, bottomright = -0.2 },
+ ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 },
["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
@@ -254,7 +232,7 @@ return {
},
{
tweak = "addfourier",
- -- scale = 1.5,
+ -- scale = 1.5,
variant = 1,
},
{
@@ -269,9 +247,9 @@ return {
[0x2192] = false,
[0x219E] = false,
[0x21A0] = false,
--- [0x21A6] = false,
--- [0x21CB] = false,
--- [0x21CC] = false,
+ -- [0x21A6] = false,
+ -- [0x21CB] = false,
+ -- [0x21CC] = false,
}
},
},
diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg
index 162b9f628..5216e1289 100644
--- a/tex/context/fonts/mkiv/minion-math.lfg
+++ b/tex/context/fonts/mkiv/minion-math.lfg
@@ -14,6 +14,9 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then
end
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
return {
name = "minion-math",
version = "1.00",
@@ -37,49 +40,51 @@ return {
parameters = {
NoLimitSupFactor = 0,
NoLimitSubFactor = 900,
- -- AccentTopShiftUp = -15,
- -- FlattenedAccentTopShiftUp = -15,
- -- -- AccentExtendMargin = 50,
- -- AccentBaseDepth = 50,
- -- RadicalDegreeBottomRaisePercent = 60,
- -- RadicalRuleThickness = 66, -- 72 in font
- -- DelimiterPercent = 90,
- -- DelimiterShortfall = 400,
- -- DisplayOperatorMinHeight = 1900, -- 1250 in font
- -- -- AccentSuperscriptDrop = 100,
- -- -- AccentSuperscriptPercent = 20,
- PrimeRaisePercent = 50, -- 50 default
- PrimeRaiseComposedPercent = 25, -- 25 default
- -- PrimeShiftUp = 0,
- -- PrimeBaselineDropMax = 0,
- RadicalKernAfterExtensible = 100, -- 0 default
- RadicalKernBeforeExtensible = 100, -- 0 default
+ -- AccentTopShiftUp = -15,
+ -- FlattenedAccentTopShiftUp = -15,
+ -- AccentExtendMargin = 50,
+ -- AccentBaseDepth = 50,
+ -- RadicalDegreeBottomRaisePercent = 60,
+ -- RadicalRuleThickness = 66, -- 72 in font
+ -- DelimiterPercent = 90,
+ -- DelimiterShortfall = 400,
+ -- DisplayOperatorMinHeight = 1900, -- 1250 in font
+ -- AccentSuperscriptDrop = 100,
+ -- AccentSuperscriptPercent = 20,
+ PrimeRaisePercent = 50, -- 50 default
+ PrimeRaiseComposedPercent = 25, -- 25 default
+ -- PrimeShiftUp = 0,
+ -- PrimeBaselineDropMax = 0,
+ RadicalKernAfterExtensible = 100, -- 0 default
+ RadicalKernBeforeExtensible = 100, -- 0 default
},
tweaks = {
aftercopying = {
-- {
-- tweak = "version",
- -- expected = "unknown",
+ -- expected = "unknown", -- todo
-- },
{
- tweak = "dimensions",
- -- smaller = true,
- list = dimensions,
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.95 },
+ presets.mathrsfscript { rscale = 0.95 },
+ presets.mathxitsarabic { rscale = 0.88 },
+ {
+ tweak = "simplifykerns",
+ },
+ presets.moveitalics {
+ correct = true
+ },
+ { -- Check!
+ tweak = "replacealphabets",
+ list = {
+ {
+ source = "uppercasecalligraphic",
+ target = "uppercasescript",
+ },
+ },
},
- -- {
- -- tweak = "variants",
- -- kind = "script",
- -- feature = "s_s_0",-- this changes to chancery style for lucida
- -- -- feature = false, -- use the saved ones (see typescript)
- -- selector = 0xFE00,
- -- },
- -- -- 0xFEO1 should be roundhand style, if present
- -- {
- -- tweak = "variants",
- -- kind = "script",
- -- selector = 0xFE01,
- -- },
-
{
tweak = "extendaccents",
},
@@ -94,18 +99,18 @@ return {
factor = 0.95,
scale = 0.9,
},
- -- {
- -- tweak = "checkspacing",
- -- },
- -- {
- -- tweak = "addscripts",
- -- },
- -- {
- -- tweak = "accentdimensions",
- -- },
- -- {
- -- tweak = "addrules",
- -- },
+ -- {
+ -- tweak = "checkspacing",
+ -- },
+ -- {
+ -- tweak = "addscripts",
+ -- },
+ -- {
+ -- tweak = "accentdimensions",
+ -- },
+ -- {
+ -- tweak = "addrules",
+ -- },
{
tweak = "addfourier",
variant = 1,
diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg
index 021bd2b7f..59eafeaaf 100644
--- a/tex/context/fonts/mkiv/pagella-math.lfg
+++ b/tex/context/fonts/mkiv/pagella-math.lfg
@@ -29,11 +29,13 @@ end
-- When set this will bypass the italic correction hackery!
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
+
local integral_variants = { bottomright = -0.20 }
----- integral_top = { topright = 0.05 }
local integral_bottom = { bottomright = -0.20 }
-
return {
name = "pagella-math",
version = "1.00",
@@ -45,20 +47,22 @@ return {
NoLimitSupFactor = 0,
NoLimitSubFactor = 900,
AccentTopShiftUp = 10,
- FlattenedAccentTopShiftUp = 10, -- now also set, the wide ones (so we can move in one go)
- -- AccentExtendMargin = 50,
+ FlattenedAccentTopShiftUp = 10,
+ -- AccentExtendMargin = 50,
-- AccentBaseHeight = 0,
AccentBaseDepth = 80,
-- SpaceAfterScript = 0,
-- SpaceAfterScript = 30,
RadicalDegreeBottomRaisePercent = 60,
RadicalKernAfterDegree = -500,
- RadicalRuleThickness = 54, -- 60 in font
+ RadicalRuleThickness = 54, -- 60 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1800, -- 1500 in font
- PrimeRaisePercent = 75, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ PrimeRaisePercent = 75, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
+ -- RadicalKernAfterExtensible = 0, -- 0 default
+ -- RadicalKernBeforeExtensible = 0, -- 0 default
},
tweaks = {
aftercopying = {
@@ -66,47 +70,58 @@ return {
tweak = "version",
expected = "Version 1.632",
},
- -- {
- -- comment = "example"
- -- tweak = "action",
- -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters)
- -- list = fixes, -- one of the parameters
- -- },
- -- {
- -- comment = "example"
- -- tweak = "action",
- -- action = mathematics.tweaks.fixdimensions,
- -- list = fixes, -- one of the parameters
- -- },
{
- tweak = "dimensions",
- list = { -- offset width italic
- [0x020D7] = { yoffset = -0.05 }, -- vec
- [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a
- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b
- [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c
- [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d
- [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e
- [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f
- [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g
- [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h
- [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k
- [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l
- [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q
- [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v
- [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w
- [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma
- [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda
- [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron
- [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma
- [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma
- [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau
- [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi
- [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi
- [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi
+ tweak = "fixprimes",
+ factor = 0.9,
+ -- smaller = true,
+ scale = 0.9,
+ -- fake = 0.65,
+ },
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 0.97 },
+ presets.mathrsfscript { rscale = 0.97 },
+ presets.mathxitsarabic { rscale = 0.95 },
+ {
+ -- When it makes sense we get rid of italics.
+ tweak = "moveitalics",
+ correct = true,
+ list = {
+ "lowercasenormal",
+ "lowercaseitalic",
+ "lowercasebold",
+ "lowercasebolditalic",
+ "lowercasegreeknormal",
+ "lowercasegreekitalic",
+ "lowercasegreekbold",
+ "lowercasegreekbolditalic",
+ "uppercasenormal",
+ "uppercaseitalic",
+ "uppercasebold",
+ "uppercasebolditalic",
+ "uppercasegreeknormal",
+ "uppercasegreekitalic",
+ "uppercasegreekbold",
+ "uppercasegreekbolditalic",
+ mathematics.tweaks.subsets.dotless,
+ }
+ },
+ {
+ tweak = "setovershoots",
+ list = {
+ {
+ target = "uppercasescript",
+ -- quad = true, -- to be decided
+ topovershoot = 0.05,
+ },
+ {
+ target = "uppercaseboldscript",
+ -- quad = true, -- to be decided
+ topovershoot = 0.05,
+ },
},
},
-
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
-- and then need to tweak the width (which is auto set because it was zero with a large
-- accent anchor offset). First we copy and fix.
@@ -126,7 +141,7 @@ return {
[0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
[0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
[0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
- [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering
+ [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering -- weird this one
[0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
@@ -135,20 +150,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -165,50 +178,24 @@ return {
{
tweak = "kerns",
list = {
- -- ["*:0x2F"] = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.15,
- bottomright = -0.15,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.25,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.25,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.2,
- bottomright = -0.2,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
+ -- ["*:0x2F"] = { ... }
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ --
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
-- angle
- [0x27E9] = { topright = -0.2, bottomright = -0.2 },
- ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 },
- [0x27EB] = { topright = -0.2, bottomright = -0.2 },
- ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 },
-
+ [0x27E9] = { topright = -0.2, bottomright = -0.2 },
+ ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 },
+ [0x27EB] = { topright = -0.2, bottomright = -0.2 },
+ ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 },
+ --
["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
@@ -218,17 +205,8 @@ return {
["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom,
["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom,
["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom,
-
-
},
},
- {
- tweak = "fixprimes",
- factor = 0.9,
- -- smaller = true,
- scale = 0.9,
- -- fake = 0.65,
- },
{
tweak = "checkspacing",
},
@@ -258,21 +236,19 @@ return {
tweak = "addequals",
},
{
- tweak = "addfourier",
+ tweak = "addfourier",
variant = 1,
},
-
-{
- tweak = "kernpairs",
- list = {
- -- beware: we kept the italic correction in spite of punctuation class
- [0x1D453] = { -- f
- [0x3A] = -.1,
- [0x3B] = -.1,
- },
- },
-},
-
+ {
+ tweak = "kernpairs",
+ list = {
+ -- beware: we kept the italic correction in spite of punctuation class
+ [0x1D453] = { -- f
+ [0x3A] = -.1,
+ [0x3B] = -.1,
+ },
+ },
+ },
},
},
bigslots = {
@@ -288,3 +264,38 @@ return {
kerns = kerns,
},
}
+
+
+
+
+
+-- Old values
+
+ -- {
+ -- tweak = "dimensions",
+ -- list = { -- offset width italic
+ -- [0x020D7] = { yoffset = -0.05 }, -- vec
+ -- [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a
+ -- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b
+ -- [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c
+ -- [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d
+ -- [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e
+ -- [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f
+ -- [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g
+ -- [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h
+ -- [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k
+ -- [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l
+ -- [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q
+ -- [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v
+ -- [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w
+ -- [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma
+ -- [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda
+ -- [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron
+ -- [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma
+ -- [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma
+ -- [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau
+ -- [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi
+ -- [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi
+ -- [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi
+ -- },
+ -- },
diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg
index cb992cd0b..54d24ffa3 100644
--- a/tex/context/fonts/mkiv/schola-math.lfg
+++ b/tex/context/fonts/mkiv/schola-math.lfg
@@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then
end
--- When set this will bypass the italic correction hackery!
local integral_variants = { bottomright = -0.20 }
--- local integral_top = { topright = 0.05 }
local integral_bottom = { bottomright = -0.20 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "schola-math",
@@ -28,17 +28,17 @@ return {
NoLimitSubFactor = 900,
AccentTopShiftUp = -15,
FlattenedAccentTopShiftUp = -15,
- -- AccentExtendMargin = 50,
+ -- AccentExtendMargin = 50,
-- AccentBaseHeight = 0,
AccentBaseDepth = 30,
RadicalDegreeBottomRaisePercent = 60,
RadicalKernAfterDegree = -500,
- RadicalRuleThickness = 64, -- 70 in font
+ RadicalRuleThickness = 64, -- 70 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1800, -- 1333 in font
- -- PrimeRaisePercent = 50, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ -- PrimeRaisePercent = 50, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
},
tweaks = {
aftercopying = {
@@ -47,58 +47,36 @@ return {
expected = "Version 1.533",
},
{
- tweak = "dimensions",
- list = {
- -- nothing yet
- }
+ tweak = "fixprimes",
+ scale = 0.85,
+ -- smaller = true,
+ factor = 1,
},
+ {
+ tweak = "addmirrors",
+ },
+ presets.matheulercalligraphic { rscale = 1 },
+ presets.mathrsfscript { rscale = 1 },
+ presets.mathxitsarabic { rscale = 0.93 },
+ presets.moveitalics { correct = true },
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.15,
- bottomright = -0.15,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.25,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.25,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.2,
- bottomright = -0.2,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
-
-
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ --
["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
@@ -126,9 +104,9 @@ return {
{
tweak = "dimensions",
list = {
- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
+ [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat
+ [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
+ [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
[0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
@@ -137,20 +115,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -158,16 +134,6 @@ return {
{
tweak = "copyaccents",
},
- -- So far for the accents.
-
-
-
- {
- tweak = "fixprimes",
- scale = 0.85,
- -- smaller = true,
- factor = 1,
- },
{
tweak = "checkspacing",
},
@@ -191,8 +157,8 @@ return {
tweak = "addequals",
},
{
- tweak = "addfourier",
- -- scale = 1.25,
+ tweak = "addfourier",
+ -- scale = 1.25,
variant = 1,
},
},
diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg
index b5e6daf29..8b03a7730 100644
--- a/tex/context/fonts/mkiv/stix-two-math.lfg
+++ b/tex/context/fonts/mkiv/stix-two-math.lfg
@@ -3,6 +3,8 @@ local integral_variants = { bottomright = -0.4 }
-- local integral_top = { topright = 0.05 }
local integral_bottom = { bottomright = -0.35 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "stix-two-math",
@@ -31,18 +33,18 @@ return {
NoLimitSubFactor = 1000,
-- AccentBaseHeight = 0,
AccentBaseDepth = 30,
- FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go)
- -- AccentExtendMargin = 50,
+ FlattenedAccentTopShiftUp = 0,
+ -- AccentExtendMargin = 50,
RadicalDegreeBottomRaisePercent = 65,
-- RadicalKernBeforeDegree = 500,
RadicalKernAfterDegree = -500,
RadicalVerticalGap = 10,
- -- RadicalRuleThickness = 68, -- 68 in font (but shifted down)
+ -- RadicalRuleThickness = 68, -- 68 in font (but shifted down)
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1800, -- 1800 in font
- PrimeRaisePercent = 75, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ PrimeRaisePercent = 75, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
},
tweaks = {
aftercopying = {
@@ -50,53 +52,40 @@ return {
tweak = "version",
expected = "Version 2.12 b168",
},
+ {
+ tweak = "fixprimes",
+ scale = 1,
+ -- smaller = true,
+ factor = 1,
+ },
+ {
+ tweak = "addmirrors",
+ },
+ presets.mathxitsarabic { rscale = 0.95 },
+ {
+ tweak = "simplifykerns",
+ },
+ presets.moveitalics {
+ correct = true
+ },
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
-
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- -- ["0x7D.variants.*"] = {
- -- topright = -0.15,
- -- bottomright = -0.15,
- -- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.1,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.1,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.2,
- bottomright = -0.2,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
-
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ -- ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ --
["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
@@ -106,23 +95,21 @@ return {
["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom,
["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom,
["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom,
-
-
},
},
- -- 0xFEOO should be chancery style, if present
{
- tweak = "variants",
- kind = "script",
- -- feature = false, -- use the saved ones (see typescript)
- selector = 0xFE00,
- },
- -- 0xFEO1 should be roundhand style, if present
- {
- tweak = "variants",
- kind = "script",
- feature = "ss01",-- this changes to roundhand style for stixtwo
- selector = 0xFE01,
+ tweak = "replacealphabets",
+ list = {
+ {
+ source = "uppercasescript",
+ target = "uppercasecalligraphic",
+ },
+ {
+ source = "uppercasescript",
+ target = "uppercasescript",
+ feature = "ss01",
+ },
+ },
},
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
-- and then need to tweak the width (which is auto set because it was zero with a large
@@ -138,9 +125,9 @@ return {
{
tweak = "dimensions",
list = {
- [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat
- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
+ [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat
+ [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde
+ [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve
[0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck
},
},
@@ -149,20 +136,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -171,13 +156,6 @@ return {
tweak = "copyaccents",
},
-- So far for the accents.
-
- {
- tweak = "fixprimes",
- scale = 1,
- -- smaller = true,
- factor = 1,
- },
{
tweak = "checkspacing",
},
@@ -204,21 +182,21 @@ return {
tweak = "addfourier",
variant = 1,
},
-{
- tweak = "addparts",
- list = {
- [0x21F4] = {
- horizontal = true,
- template = 0x2192,
- sequence = {
- { glyph = "first", factor = 2 },
- { glyph = 0x2022, },
- { glyph = "first", factor = 2 },
- { glyph = "last" },
- }
- }
- }
-},
+ {
+ tweak = "addparts",
+ list = {
+ [0x21F4] = {
+ horizontal = true,
+ template = 0x2192,
+ sequence = {
+ { glyph = "first", factor = 2 },
+ { glyph = 0x2022, },
+ { glyph = "first", factor = 2 },
+ { glyph = "last" },
+ }
+ }
+ }
+ },
},
},
bigslots = {
@@ -226,5 +204,3 @@ return {
},
},
}
-
-
diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg
index c5bcb3e84..6a54535df 100644
--- a/tex/context/fonts/mkiv/termes-math.lfg
+++ b/tex/context/fonts/mkiv/termes-math.lfg
@@ -17,11 +17,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then
end
--- When set this will bypass the italic correction hackery!
local integral_variants = { bottomright = -0.20 }
--- local integral_top = { topright = 0.05 }
local integral_bottom = { bottomright = -0.30 }
+local common = fonts.goodies.load("common-math.lfg")
+local presets = common.mathematics.tweaks.presets
return {
name = "termes-math",
@@ -35,16 +35,16 @@ return {
NoLimitSubFactor = 900,
AccentTopShiftUp = -15,
FlattenedAccentTopShiftUp = -15,
- -- AccentExtendMargin = 50,
+ -- AccentExtendMargin = 50,
-- AccentBaseHeight = 0,
AccentBaseDepth = 50,
RadicalDegreeBottomRaisePercent = 60,
- RadicalRuleThickness = 46, -- 52 in font
+ RadicalRuleThickness = 46, -- 52 in font
DelimiterPercent = 90,
DelimiterShortfall = 400,
DisplayOperatorMinHeight = 1800, -- 1300 in font (only one)
- PrimeRaisePercent = 60, -- 50 default
- PrimeRaiseComposedPercent = 10, -- 25 default
+ PrimeRaisePercent = 60, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
},
tweaks = {
aftercopying = {
@@ -53,81 +53,45 @@ return {
expected = "Version 1.543",
},
{
- tweak = "dimensions",
- list = {
- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b
- [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- d
- [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e
- [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h
- [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k
- [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f
- [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j
- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p
- [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q
- [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- w
- [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \gamma
- [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda
- [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron
- [0x1D70F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \tau
- },
+ tweak = "fixprimes",
+ scale = 0.85,
+ -- smaller = true,
+ factor = 0.95,
+ },
+ {
+ tweak = "addmirrors",
},
+ presets.matheulercalligraphic { rscale = 0.95 },
+ presets.mathrsfscript { rscale = 0.95 },
+ presets.mathxitsarabic { rscale = 0.88 },
+ presets.moveitalics { correct = true },
{
tweak = "kerns",
list = {
- [0x2F] = {
- topleft = -0.2,
- -- bottomleft = 0,
- -- topright = 0,
- bottomright = -0.2,
- },
-
-
- ["0x7D.parts.top"] = {
- topright = -0.15,
- }, -- right brace top
- ["0x7D.parts.bottom"] = {
- bottomright = -0.15,
- }, -- right brace bottom
- ["0x7D.variants.*"] = {
- topright = -0.1,
- bottomright = -0.1,
- }, -- right brace variants
- ["0x29.parts.top"] = {
- topright = -0.1,
- }, -- right parenthesis top
- ["0x29.parts.bottom"] = {
- bottomright = -0.1,
- }, -- right parenthesis bottom
- ["0x29.variants.*"] = {
- topright = -0.15,
- bottomright = -0.15,
- }, -- right parenthesis variants
- ["0x221A.parts.top"] = {
- topright = 0.2,
- }, -- right radical top
- ["0x221A.parts.bottom"] = {
- bottomright = 0.2,
- }, -- right radical bottom
- ["0x221A.variants.*"] = {
- topright = 0.2,
- bottomright = 0.2,
- }, -- right radical variants
-
- -- angle
- [0x27E9] = { topright = -0.1, bottomright = -0.1 },
- ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
- [0x27EB] = { topright = -0.1, bottomright = -0.1 },
- ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
-
- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
- ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
- ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
- ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom,
- ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom,
- ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom,
- ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom,
- ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom,
- ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom,
+ [0x002F] = { topleft = -0.2, bottomright = -0.2 },
+ ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top
+ ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom
+ ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants
+ ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top
+ ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom
+ ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants
+ ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top
+ ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom
+ ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants
+ [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle
+ ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ [0x27EB] = { topright = -0.1, bottomright = -0.1 },
+ ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 },
+ --
+ ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom,
+ ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom,
+ ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom,
+ ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom,
+ ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom,
+ ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom,
+ ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom,
+ ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom,
+ ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom,
},
},
-- Accents are a mess. We migrate the extensibles from the combiners to the base accent
@@ -155,20 +119,18 @@ return {
{
tweak = "dimensions",
list = {
- -- here we want to apply to all
- -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
- -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
- -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
- -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
- -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
- -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
- -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
-
- -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
-
- -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
- -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
- -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
+ -- here we want to apply to all
+ -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060
+ -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4
+ -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6
+ -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC
+ -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8
+ -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA
+ -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7
+ -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF
+ -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9
+ -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8
+ -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self)
},
},
-- We now copy these to the not wide slots so that we can set these to stretch as well,
@@ -177,13 +139,6 @@ return {
tweak = "copyaccents",
},
-- So far for the accents.
-
- {
- tweak = "fixprimes",
- scale = 0.85,
- -- smaller = true,
- factor = 0.95,
- },
{
tweak = "checkspacing",
},
@@ -225,3 +180,25 @@ return {
kerns = kerns,
},
}
+
+
+ -- Do a testrun with hats on these:
+ -- {
+ -- tweak = "dimensions",
+ -- list = {
+ -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.3 }, -- b
+ -- [0x1D451] = { width = 1, italic = 0, anchor = 0.8 }, -- d
+ -- [0x1D452] = { width = 1, italic = 0, anchor = 0.9 }, -- e
+ -- [0x0210E] = { width = 1, italic = 0, anchor = 1.3 }, -- h
+ -- [0x1D458] = { width = 1, italic = 0, anchor = 1.3 }, -- k
+ -- [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f
+ -- [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j
+ -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p
+ -- [0x1D45E] = { width = 1, italic = 0, anchor = 0.9 }, -- q
+ -- [0x1D464] = { width = 1, italic = 0, anchor = 1.1 }, -- w
+ -- [0x1D6FE] = { width = 1, italic = 0, anchor = 1.1 }, -- \gamma
+ -- [0x1D706] = { width = 1, italic = 0, anchor = 1.05 }, -- \lambda
+ -- [0x1D70A] = { width = 1, italic = 0, anchor = 1.2 }, -- \omicron
+ -- [0x1D70F] = { width = 1, italic = 0, anchor = 1.05 }, -- \tau
+ -- },
+ -- },
diff --git a/tex/context/fonts/mkiv/type-imp-concrete.mkiv b/tex/context/fonts/mkiv/type-imp-concrete.mkiv
index 72b0141a5..5e4e6bc76 100644
--- a/tex/context/fonts/mkiv/type-imp-concrete.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-concrete.mkiv
@@ -1,50 +1,62 @@
+%D \module
+%D [ file=type-imp-erewhon,
+%D version=2022.30.09, % a bit older
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=\TEX Gyre Fonts,
+%D author=Mikael Sundqvist,
+%D date=\currentdate,
+%D copyright={\CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
%\loadtypescriptfile[texgyre]
%\resetfontfallback [concrete-euler-fix]
%\definefontfallback[concrete-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes]
-
\starttypescriptcollection[concrete]
%\definefontfeature[default-slanted-concrete][default][slant=.2]
%\definefontfeature[none-slanted-concrete] [none] [slant=.2]
\starttypescript [\s!serif] [concrete-serif]
- \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default]
- \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default]
- \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete]
- \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBoldSlanted][\s!file:cmunobx] [\s!features=default-slanted-concrete]
+ \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete]
+ \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldSlanted] [\s!file:cmunobx] [\s!features=default-slanted-concrete]
\stoptypescript
\starttypescript [\s!sans] [concrete-sans]
- \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default]
- \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default]
- \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete]
- \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default]
- \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default]
- \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete]
+ \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default]
+ \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete]
+ \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete]
\stoptypescript
\starttypescript [\s!mono] [concrete-mono]
- \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none]
- \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none]
- \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none]
- \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none]
- \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none]
- \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete]
+ \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none]
+ \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete]
\stoptypescript
\starttypescript [\s!math] [concrete-math] [\s!name]
\loadfontgoodies[concrete-math]
- \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=concrete-math]
+ \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features={\s!math\mathsizesuffix,mathextra,concrete:mathextra},\s!goodies=concrete-math]
\stoptypescript
\starttypescript [concrete]
\definetypeface [concrete] [\s!rm] [\s!serif] [concrete-serif] [\s!default]
- \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default]
- \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default]
- \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default]
+ \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default]
+ \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default]
+ \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default]
\quittypescriptscanning
\stoptypescript
diff --git a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv
index b8efcd7f9..8f38fb8b0 100644
--- a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv
@@ -1,44 +1,56 @@
+%D \module
+%D [ file=type-imp-erewhon,
+%D version=2022.30.09, % a bit older
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=\TEX Gyre Fonts,
+%D author=Mikael Sundqvist,
+%D date=\currentdate,
+%D copyright={\CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
%\loadtypescriptfile[texgyre]
-%\resetfontfallback [erewhon-euler-fix]
+%\resetfontfallback [erewhon-euler-fix]
%\definefontfallback[erewhon-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes]
-
\starttypescriptcollection[erewhon]
%\definefontfeature[default-slanted-erewhon][default][slant=.2]
%\definefontfeature[none-slanted-erewhon] [none] [slant=.2]
\starttypescript [\s!serif] [erewhon-serif]
- \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default]
- \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default]
- \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted][\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default]
\definefontsynonym [\s!SerifBoldSlanted][\s!file:Erewhon-BoldSlanted] [\s!features=\s!default]
\stoptypescript
\starttypescript [\s!sans] [cabin-sans]
- \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default]
- \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default]
- \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default]
- \definefontsynonym [\s!SansBoldItalic] [\s!file:Cabin-SemiBoldItalic] [\s!features=\s!default]
+ \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic][\s!file:Cabin-SemiBoldItalic][\s!features=\s!default]
\stoptypescript
\starttypescript [\s!mono] [inconsolata-mono]
- \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular] [\s!features=\s!none]
- \definefontsynonym [\s!MonoBold] [\s!file:Inconsolatazi4-Bold] [\s!features=\s!none]
+ \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular][\s!features=\s!none]
+ \definefontsynonym [\s!MonoBold][\s!file:Inconsolatazi4-Bold] [\s!features=\s!none]
\stoptypescript
\starttypescript [\s!math] [erewhon-math] [\s!name]
\loadfontgoodies[erewhon-math]
- \definefontsynonym[\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=erewhon-math]
+ \definefontsynonym [\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features={\s!math\mathsizesuffix,erewhon:mathextra,mathextra},\s!goodies=erewhon-math]
\stoptypescript
\starttypescript [erewhon]
- \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default]
- \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default]
+ \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default]
+ \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default]
\definetypeface [erewhon] [\s!tt] [\s!mono] [inconsolata-mono] [\s!default] [\s!rscale=1.1]
- \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default]
+ \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default]
\quittypescriptscanning
\stoptypescript
diff --git a/tex/context/fonts/mkiv/type-imp-euler.mkiv b/tex/context/fonts/mkiv/type-imp-euler.mkiv
index 00df63458..1aea88aae 100644
--- a/tex/context/fonts/mkiv/type-imp-euler.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-euler.mkiv
@@ -66,15 +66,11 @@
\stoptypescript
\starttypescript [\s!math] [euleroverpagella] [\s!name]
- \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella%
- ,\s!goodies=pagella-with-euler-math%
- ]
+ \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella,\s!goodies=pagella-with-euler-math]
\stoptypescript
\starttypescript [\s!math] [pagellaovereuler] [\s!name]
- \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler%
- ,\s!goodies=euler-with-pagella-math%
- ]
+ \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler,\s!goodies=euler-with-pagella-math]
\stoptypescript
\starttypescript [pagella-with-euler]
diff --git a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
index cf5052c82..e8e8e353b 100644
--- a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv
@@ -181,8 +181,8 @@
\starttypescript [\s!math] [modern,latin-modern]
\loadfontgoodies[lm]
- \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm]
- \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math-bold,lm-math,mathextra},\s!goodies=lm]
+ \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math,mathextra},\s!goodies=lm]
+ \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math-bold,lm-math,mathextra},\s!goodies=lm]
\stoptypescript
\starttypescript [modern-designsize-virtual]
diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv
index 1c9788a98..73f7c4dbf 100644
--- a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv
@@ -50,7 +50,7 @@
\starttypescript [\s!math][newcomputermodern] [\s!name]
% \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math
\definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm]
- \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}\s!goodies=lm]
+ \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra},\s!goodies=lm]
\stoptypescript
\starttypescript [\s!serif] [newcomputermodern-book] [\s!name]
diff --git a/tex/context/fonts/mkiv/type-imp-stix.mkiv b/tex/context/fonts/mkiv/type-imp-stix.mkiv
index b76b1d09b..ed2b63909 100644
--- a/tex/context/fonts/mkiv/type-imp-stix.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-stix.mkiv
@@ -35,32 +35,11 @@
\starttypescriptcollection[stix]
- % version one
-
- \starttypescript [\s!math] [stix] [\s!name]
- \definefontsynonym[MathRoman][\s!file:stixmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}]
- \stoptypescript
-
- \starttypescript [\s!serif] [stix] [\s!name]
- \setups[\s!font:\s!fallback:\s!serif]
- \definefontsynonym[\s!Serif] [\s!file:stix-regular.otf] [\s!features=\s!default]
- \definefontsynonym[\s!SerifBold] [\s!file:stix-bold.otf] [\s!features=\s!default]
- \definefontsynonym[\s!SerifItalic] [\s!file:stix-italic.otf] [\s!features=\s!default]
- \definefontsynonym[\s!SerifBoldItalic][\s!file:stix-bolditalic.otf][\s!features=\s!default]
- \stoptypescript
-
- \starttypescript[stix]
- \definetypeface [stix] [\s!rm] [\s!serif] [stix] [\s!default]
- \definetypeface [stix] [\s!mm] [\s!math] [stix] [\s!default]
- \stoptypescript
-
- % version two
-
- \starttypescript [\s!math] [stixtwo] [\s!name]
- \definefontsynonym[MathRoman][\s!file:stixtwomath-regular.otf] [\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math]
+ \starttypescript [\s!math] [stix,stixtwo,xits] [\s!name]
+ \definefontsynonym[\s!MathRoman][\s!file:stixtwomath-regular.otf][\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math]
\stoptypescript
- \starttypescript [\s!serif] [stixtwo] [\s!name]
+ \starttypescript [\s!serif] [stix,stixtwo,xits] [\s!name]
\setups[\s!font:\s!fallback:\s!serif]
\definefontsynonym[\s!Serif] [\s!file:stixtwotext-regular.otf] [\s!features=\s!default]
\definefontsynonym[\s!SerifBold] [\s!file:stixtwotext-bold.otf] [\s!features=\s!default]
@@ -68,11 +47,11 @@
\definefontsynonym[\s!SerifBoldItalic][\s!file:stixtwotext-bolditalic.otf][\s!features=\s!default]
\stoptypescript
- \starttypescript[stixtwo]
+ \starttypescript[stix,stixtwo,xits]
\definetypeface [\typescriptone] [\s!rm] [\s!serif] [stixtwo] [\s!default]
\definetypeface [\typescriptone] [\s!ss] [\s!serif] [stixtwo] [\s!default]
\definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.895]
- \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default]
+ \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default] [\s!direction=\s!both]
\stoptypescript
\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
index 24b982bb5..c6b0ab28b 100644
--- a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv
@@ -229,7 +229,14 @@
\stoptypescriptcollection
-% tricky: we cannot mix now as the file is loaded only once
+% We no longer support tx and px in LMTX. These fonts were used in the transition from
+% traditional (type one) fonts to the new gyre fonts. The LMTX distribution no longer
+% ships these fonts anyway.
+
+\ifcase\contextlmtxmode \else
+ \disablemode[pxmath]
+ \disablemode[txmath]
+\fi
\startmode[txmath]
@@ -252,8 +259,8 @@
\starttypescript [\s!math][times,termes][\s!all]
% \loadfontgoodies[texgyre]
% \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
- \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=termes-math]
- \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes-math-bold,mathextra},\s!goodies=termes-math]
+ \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,mathextra},\s!goodies=termes-math]
+ \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,termes-math-bold,mathextra},\s!goodies=termes-math]
\stoptypescript
\stoptypescriptcollection
@@ -281,8 +288,8 @@
\starttypescript [\s!math][palatino,pagella][\s!all]
% \loadfontgoodies[texgyre]
% \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
- \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=pagella-math]
- \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella-math-bold,mathextra},\s!goodies=pagella-math]
+ \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,mathextra},\s!goodies=pagella-math]
+ \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,pagella-math-bold,mathextra},\s!goodies=pagella-math]
\stoptypescript
\stoptypescriptcollection
@@ -294,8 +301,8 @@
\starttypescript [\s!math][bookman,bonum][\s!all]
% \loadfontgoodies[texgyre]
% \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
- \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=bonum-math]
- \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum-math-bold,mathextra},\s!goodies=bonum-math]
+ \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,mathextra},\s!goodies=bonum-math]
+ \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,bonum-math-bold,mathextra},\s!goodies=bonum-math]
\stoptypescript
\stoptypescriptcollection
@@ -305,8 +312,8 @@
\starttypescript [\s!math][schoolbook,schola][\s!all]
% \loadfontgoodies[texgyre]
% \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre]
- \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=schola-math]
- \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola-math-bold,mathextra},\s!goodies=schola-math]
+ \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,mathextra},\s!goodies=schola-math]
+ \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,schola-math-bold,mathextra},\s!goodies=schola-math]
\stoptypescript
\stoptypescriptcollection
diff --git a/tex/context/fonts/mkiv/type-imp-xits.mkiv b/tex/context/fonts/mkiv/type-imp-xits.mkiv
index f2d3e83c3..ce8d4209d 100644
--- a/tex/context/fonts/mkiv/type-imp-xits.mkiv
+++ b/tex/context/fonts/mkiv/type-imp-xits.mkiv
@@ -25,10 +25,10 @@
\starttypescript [\s!math] [xits,xitsbidi] [\s!name]
\loadfontgoodies[xits-math]
- \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math]
\definefontsynonym[\s!MathRoman L2R][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math]
\definefontsynonym[\s!MathRoman R2L][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math]
- \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math]
+ \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math]
\definefontsynonym[\s!MathRomanBold L2R][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math]
\definefontsynonym[\s!MathRomanBold R2L][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math]
\stoptypescript
diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg
index cf3050369..374f03a0e 100644
--- a/tex/context/fonts/mkiv/xits-math.lfg
+++ b/tex/context/fonts/mkiv/xits-math.lfg
@@ -1,3 +1,7 @@
+-- When testing XITS in LMTX one has to do this:
+--
+-- \definefilesynonym [type-imp-xits.mkiv] [type-imp-xits.mkiv]
+
return {
name = "xits-math",
version = "1.00",
@@ -15,6 +19,25 @@ return {
},
},
mathematics = {
+ parameters = {
+ NoLimitSupFactor = 0,
+ NoLimitSubFactor = 1000,
+ -- AccentBaseHeight = 0,
+ AccentBaseDepth = 30,
+ FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go)
+ -- AccentExtendMargin = 50,
+ RadicalDegreeBottomRaisePercent = 65,
+ -- RadicalKernBeforeDegree = 500,
+ RadicalKernAfterDegree = -500,
+ RadicalVerticalGap = 10,
+ -- RadicalRuleThickness = 68, -- 68 in font (but shifted down)
+ DelimiterPercent = 90,
+ DelimiterShortfall = 400,
+ DisplayOperatorMinHeight = 1800, -- 1800 in font
+ PrimeRaisePercent = 75, -- 50 default
+ PrimeRaiseComposedPercent = 10, -- 25 default
+
+ },
tweaks = {
aftercopying = {
{
@@ -69,6 +92,10 @@ return {
{
tweak = "addrules",
},
+ {
+ tweak = "setoptions",
+ set = { "ignorekerndimensions" }
+ },
},
},
alternates = {
diff --git a/tex/context/modules/mkiv/s-fonts-charts.mkiv b/tex/context/modules/mkiv/s-fonts-charts.mkiv
index b7fcc9f9e..6fe58c899 100644
--- a/tex/context/modules/mkiv/s-fonts-charts.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-charts.mkiv
@@ -172,10 +172,10 @@
\starttext
-% \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all]
+ \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all]
- \showfontchart[filename=danlan.otf] % ,page=yes,option=all]
- \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all]
+% \showfontchart[filename=danlan.otf] % ,page=yes,option=all]
+% \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all]
% \showfontchart[filename=aegean,page=yes]
% \showfontchart[filename=veramono.ttf,page=yes]
diff --git a/tex/context/modules/mkiv/s-fonts-coverage.mkiv b/tex/context/modules/mkiv/s-fonts-coverage.mkiv
index 2d1870842..a4ae9d211 100644
--- a/tex/context/modules/mkiv/s-fonts-coverage.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-coverage.mkiv
@@ -31,16 +31,18 @@
\continueifinputfile{s-fonts-coverage.mkiv}
+% \usemodule[fonts-coverage]
+
\usemodule[art-01]
\starttext
- \showfontcomparison
- [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf},
- pattern=ogonek]
-
% \showfontcomparison
-% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}]
+% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf},
+% pattern=ogonek]
+
+ \showfontcomparison
+ [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}]
\page
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.lua b/tex/context/modules/mkiv/s-fonts-shapes.lua
index 868c22da1..d55b1198e 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.lua
+++ b/tex/context/modules/mkiv/s-fonts-shapes.lua
@@ -83,16 +83,21 @@ local function showglyphshape(specification)
local characters = tfmdata.characters
local descriptions = tfmdata.descriptions
local parameters = tfmdata.parameters
+ local tfmfactor = parameters.scaledpoints/10
+-- inspect(tfmdata.parameters)
+-- inspect(tfmdata.properties)
local anchors = fonts.helpers.collectanchors(tfmdata)
- local function showonecharacter(unicode)
+ local function showonecharacter(unicode,krn,tight)
local c = characters [unicode]
local d = descriptions[unicode]
if c and d then
local factor = (parameters.size/parameters.units)*((7200/7227)/65536)
local llx, lly, urx, ury = unpack(d.boundingbox)
+ local height = ury
+ local depth = lly
llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor
- local width = (d.width or 0)*factor
+ local width = (d.width or 0)*factor
context.start()
context.dontleavehmode()
context.obeyMPboxdepth()
@@ -110,76 +115,52 @@ local function showglyphshape(specification)
context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;')
context("defaultscale := 0.05 ; ")
-- inefficient but non critical
- local slant = {
- function(v,dx,dy,txt,xsign,ysign,loc,labloc)
- local n = #v
- if n > 0 then
- local l = { }
- for i=1,n do
- local c = v[i]
- local h = c.height or 0
- local k = c.kern or 0
- l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
- end
- context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1])
- context("draw laddered (%..t) withcolor .5white ;",l) -- why not "--"
- context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l])
- for i=1,n do
- context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i])
+ function slant(v,dx,dy,txt,xsign,ysign,loc,labloc,shift)
+ local n = #v
+ if n > 0 then
+ local l = { }
+ local t = { }
+ for i=1,n do
+ local c = v[i]
+ local h = c.height or height or 0
+ local d = depth or 0
+ local k = c.kern or 0
+ if i == 1 then
+ l[1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,d*factor,dx,dy)
+ t[1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,d,l[1],shift,shift);
end
+ l[i+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
+ t[i+1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,h,l[i+1],shift,shift);
end
- end,
- function(v,dx,dy,txt,xsign,ysign,loc,labloc)
- local n = #v
- if n > 0 then
- local l = { }
- for i=1,n do
- local c = v[i]
- local h = c.height or 0
- local k = c.kern or 0
- l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy)
- end
- if loc == "top" then
- context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[n])
- else
- context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1])
- end
- for i=1,n do
- local c = v[i]
- local h = c.height or 0
- local k = c.kern or 0
- context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[i])
- end
+ context("draw laddered (%--t) withcolor .5white ;",l)
+ for i=1,#l do
+ context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i])
+ context(t[i])
end
- end,
- }
+ end
+ end
--
local math = d.math
if math then
local kerns = math.kerns
if kerns then
- for i=1,#slant do
- local s = slant[i]
- for k, v in next, kerns do
- if k == "topright" then
- -- s(v,width+italic,0,k,1,1,"top","ulft")
- s(v,width,0,k,1,1,"top","ulft")
- elseif k == "bottomright" then
- s(v,width,0,k,1,1,"bot","lrt")
- elseif k == "topleft" then
- s(v,0,0,k,-1,1,"top","ulft")
- elseif k == "bottomleft" then
- s(v,0,0,k,-1,1,"bot","lrt")
- end
+ for k, v in next, kerns do
+ if k == "topright" and (krn == "all" or krn == k) then
+ slant(v,width,0,k,1,1,"top","lrt",1)
+ elseif k == "bottomright" and (krn == "all" or krn == k) then
+ slant(v,width,0,k,1,1,"bot","ulft",-1)
+ elseif k == "topleft" and (krn == "all" or krn == k) then
+ slant(v,0,0,k,-1,1,"top","lrt",1)
+ elseif k == "bottomleft" and (krn == "all" or krn == k) then
+ slant(v,0,0,k,-1,1,"bot","ulft",-1)
end
end
end
- local accent = math.accent
+ local accent = math.topanchor or math.accent
if accent and accent ~= 0 then
local a = accent * factor
- context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',a,ury,a,ury)
- context('label.bot("\\type{%s}",(%s,%s+1bp));',"accent",a,ury)
- context('label.top("%s",(%s,%s-1bp));',math.accent,a,ury)
+ context('draw (%s,%s+1/4)--(%s,%s-1/4) withcolor blue;',a,ury,a,ury)
+ context('draw textext.top("\\tttf%s") scaled .025 shifted (%s,%s+2/4);',accent,a,ury)
end
end
--
@@ -215,7 +196,29 @@ local function showglyphshape(specification)
context('label.rt("%s",(%s-2bp,%s-1bp));',italic,width+i,ury)
end
context('draw origin withcolor red withpen pencircle scaled 2lw;')
- context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
+ local kern = c.topright
+ if kern and kern ~= 0 then
+ local k = kern * factor / tfmfactor
+ context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,ury)
+ end
+ local kern = c.bottomright
+ if kern and kern ~= 0 then
+ local k = kern * factor / tfmfactor
+ context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,lly)
+ end
+ local kern = c.topleft
+ if kern and kern ~= 0 then
+ local k = kern * factor / tfmfactor
+ context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,ury)
+ end
+ local kern = c.bottomleft
+ if kern and kern ~= 0 then
+ local k = kern * factor / tfmfactor
+ context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,lly)
+ end
+ if not tight then
+ context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;")
+ end
context("currentpicture := currentpicture scaled 8 ;")
context.stopMPcode()
context.stop()
@@ -226,16 +229,28 @@ local function showglyphshape(specification)
fonts.helpers.nametoslot(specification.character)
if unicode then
- showonecharacter(unicode)
+ showonecharacter(unicode,"all",true)
else
context.modulefontsstartshowglyphshapes()
for unicode, description in fonts.iterators.descriptions(tfmdata) do
if unicode >= 0x110000 then
break
end
+ local kerns = specification.kerns
+ if kerns then
+ local k = description and description.math and description.math.kerns
+ if k then
+ if not (kerns == "all" or k[kerns]) then
+ goto DONE
+ end
+ else
+ goto DONE
+ end
+ end
context.modulefontsstartshowglyphshape(unicode,description.name or "",description.index or 0)
- showonecharacter(unicode)
+ showonecharacter(unicode,kerns,false)
context.modulefontsstopshowglyphshape()
+ ::DONE::
end
context.modulefontsstopshowglyphshapes()
end
diff --git a/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
index 7dd39c07d..97fcbfa6c 100644
--- a/tex/context/modules/mkiv/s-fonts-shapes.mkiv
+++ b/tex/context/modules/mkiv/s-fonts-shapes.mkiv
@@ -30,7 +30,7 @@
\startsetups module:showallglyphshapes:start
\unexpanded\def\modulefontsstartshowglyphshape##1##2##3{
- \startTEXpage[\c!offset=\exheight] % ,\c!frame=\v!on]
+ \startTEXpage[\c!offset=\exheight]% ,\c!frame=\v!on]
\edef\lastshownglyphshapefieldunicode{##1}%
\edef\lastshownglyphshapefieldname {##2}%
\edef\lastshownglyphshapefieldindex {##3}%
@@ -106,8 +106,11 @@
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage
% \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage
- \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage
+% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage
+
+% \definefontfeature[tg][goodies=pagella-math]
+% \startTEXpage[offset=0pt]\ShowGlyphShape{file:texgyrepagella-math.otf*tg}{20bp}{0x002F}\stopTEXpage
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage
% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage
@@ -126,7 +129,12 @@
% \startTEXpage[offset=0pt]\ShowGlyphShape{file:husayninotebold.ttf}{50bp}{0x006DD}\stopTEXpage
% \startTEXpage[offset=0pt]\ShowGlyphShape{file:arabtype.ttf}{50bp}{0x0FCA1}\stopTEXpage
-% \showallglyphshapes[name=name:cambria-math,size=100bp]
+\showallglyphshapes[name=name:cambria-math,size=100bp,kerns=bottomright]
+% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D6FD}\stopTEXpage
+
+% \showallglyphshapes[name=file:lucidabrightmathot,size=100bp,kerns=all]
+% \showallglyphshapes[name=file:garamondmath,size=100bp,kerns=bottomright]
+
% \showallglyphshapes[name=name:arabtype,size=100bp]
% \showallglyphshapes[name=file:husayninotebold.ttf,size=100bp]
% \showallglyphshapes[name=name:dejavuserif,size=100bp]
diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua
index b634a203f..a967f7934 100644
--- a/tex/context/modules/mkiv/s-math-characters.lua
+++ b/tex/context/modules/mkiv/s-math-characters.lua
@@ -185,7 +185,7 @@ function moduledata.math.characters.showlist(specification)
round(char.height or 0),
round(char.depth or 0),
round(char.italic or 0),
- round(char.topaccent or 0)
+ round(char.topanchor or char.topaccent or 0)
)
end
if virtual and commands then
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index c539d886c..c87c4ee52 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 2022-09-16 14:39
+-- merge date : 2022-10-14 10:13
do -- begin closure to overcome local limits and interference
@@ -13418,10 +13418,10 @@ do
result.familyotherblues={ unpack(stack,1,top) }
top=0
end+P("\10")/function()
- result.strhw=stack[top]
+ result.stdhw=stack[top]
top=0
end+P("\11")/function()
- result.strvw=stack[top]
+ result.stdvw=stack[top]
top=0
end+P("\13")/function()
result.uniqueid=stack[top]
@@ -13493,7 +13493,7 @@ do
result.bluescale=stack[top]
top=0
end+P("\10")/function()
- result.bluesnap=stack[top]
+ result.blueshift=stack[top]
top=0
end+P("\11")/function()
result.bluefuzz=stack[top]
@@ -13547,7 +13547,7 @@ do
top=0
end
)
- local remap={
+ local remap_1={
["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0",
["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="1.",["\x1B"]="1E",["\x1C"]="1E-",["\x1D"]="1",["\x1E"]="1-",["\x1F"]="1",
["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="2.",["\x2B"]="2E",["\x2C"]="2E-",["\x2D"]="2",["\x2E"]="2-",["\x2F"]="2",
@@ -13563,8 +13563,13 @@ do
["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-",
["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-",
}
- local p_last=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")+R("\xF0\xFF")
- local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0*(P(1)/remap))/function(n)
+ local remap_2={
+ ["\x0F"]="0",["\x1F"]="1",["\x2F"]="2",["\x3F"]="3",["\x4F"]="4",
+ ["\x5F"]="5",["\x6F"]="6",["\x7F"]="7",["\x8F"]="8",["\x9F"]="9",
+ }
+ local p_last_1=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")
+ local p_last_2=R("\xF0\xFF")
+ local p_nibbles=P("\30")*Cs(((1-(p_last_1+p_last_2))/remap_1)^0*(p_last_1/remap_2+p_last_2/""))/function(n)
top=top+1
stack[top]=tonumber(n) or 0
end
@@ -15378,6 +15383,8 @@ function readers.cff(f,fontdata,specification)
cffinfo.bluefuzz=data.bluefuzz
cffinfo.stdhw=data.stdhw
cffinfo.stdvw=data.stdvw
+ cffinfo.stemsnaph=data.stemsnaph
+ cffinfo.stemsnapv=data.stemsnapv
end
end
cleanup(data,dictionaries)
@@ -18461,6 +18468,7 @@ do
local noflookups=#lookups
local lookupprefix=sub(what,2,2)
local usedlookups=false
+ local allsteps={}
for lookupid=1,noflookups do
local lookup=lookups[lookupid]
local lookuptype=lookup.type
@@ -18495,6 +18503,7 @@ do
steps[nofsteps]=step
local rules=step.rules
if rules then
+ allsteps[#allsteps+1]=step
for i=1,#rules do
local rule=rules[i]
local before=rule.before
@@ -18600,11 +18609,8 @@ do
reported[name]=true
end
end
- for i=lastsequence+1,nofsequences do
- local sequence=sequences[i]
- local steps=sequence.steps
- for i=1,#steps do
- local step=steps[i]
+ for i=1,#allsteps do
+ local step=allsteps[i]
local rules=step.rules
if rules then
for i=1,#rules do
@@ -18674,7 +18680,6 @@ do
end
end
end
- end
for i,n in sortedhash(sublookupcheck) do
local l=lookups[i]
local t=l.type
@@ -19097,7 +19102,7 @@ local function readmathglyphinfo(f,fontdata,offset)
if not math then
glyph.math={ accent=accent }
else
- math.accent=accent
+ math.accent=accent
end
end
end
@@ -21289,7 +21294,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_d
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
-otf.version=3.120
+otf.version=3.121
otf.cache=containers.define("fonts","otl",otf.version,true)
otf.svgcache=containers.define("fonts","svg",otf.version,true)
otf.pngcache=containers.define("fonts","png",otf.version,true)
@@ -27329,12 +27334,8 @@ local trace_testruns=false registertracker("otf.testruns",function(v) trace_tes
local forcediscretionaries=false
local forcepairadvance=false
local repeatablemultiples=context or false
-directives.register("otf.forcediscretionaries",function(v)
- forcediscretionaries=v
-end)
-directives.register("otf.forcepairadvance",function(v)
- forcepairadvance=v
-end)
+directives.register("otf.forcediscretionaries",function(v) forcediscretionaries=v end)
+directives.register("otf.forcepairadvance",function(v) forcepairadvance=v end)
local report_direct=logs.reporter("fonts","otf direct")
local report_subchain=logs.reporter("fonts","otf subchain")
local report_chain=logs.reporter("fonts","otf chain")
@@ -27356,7 +27357,6 @@ local setboth=nuts.setboth
local getid=nuts.getid
local getstate=nuts.getstate
local getsubtype=nuts.getsubtype
-local setsubtype=nuts.setsubtype
local getchar=nuts.getchar
local setchar=nuts.setchar
local getdisc=nuts.getdisc
@@ -27376,10 +27376,10 @@ local flushcomponents=components.flush
local ischar=nuts.ischar
local usesfont=nuts.usesfont
local insertnodeafter=nuts.insertafter
-local copy_node=nuts.copy
-local copy_node_list=nuts.copylist
-local remove_node=nuts.remove
-local find_node_tail=nuts.tail
+local copynode=nuts.copy
+local copynodelist=nuts.copylist
+local removenode=nuts.remove
+local findnodetail=nuts.tail
local flushnodelist=nuts.flushlist
local flushnode=nuts.flushnode
local endofmath=nuts.endofmath
@@ -27389,7 +27389,6 @@ local setmetatableindex=table.setmetatableindex
local nextnode=nuts.traversers.node
local nodecodes=nodes.nodecodes
local glyphcodes=nodes.glyphcodes
-local disccodes=nodes.disccodes
local glyph_code=nodecodes.glyph
local glue_code=nodecodes.glue
local disc_code=nodecodes.disc
@@ -27398,8 +27397,7 @@ local dir_code=nodecodes.dir
local par_code=nodecodes.par
local lefttoright_code=nodes.dirvalues.lefttoright
local righttoleft_code=nodes.dirvalues.righttoleft
-local discretionarydisc_code=disccodes.discretionary
-local ligatureglyph_code=glyphcodes.ligature
+local discretionarydisc_code=nodes.disccodes.discretionary
local a_noligature=attributes.private("noligature")
local injections=nodes.injections
local setmark=injections.setmark
@@ -27490,7 +27488,7 @@ local function cref(dataset,sequence,index)
return "no valid dataset"
end
local merged=sequence.merged and "merged " or ""
- if index then
+ if index and index>1 then
return formatters["feature %a, type %a, %schain lookup %a, index %a"](
dataset[4],sequence.type,merged,sequence.name,index)
else
@@ -27547,7 +27545,7 @@ end
local function appenddisc(disc,list)
local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true)
local posthead=list
- local replacehead=copy_node_list(list)
+ local replacehead=copynodelist(list)
if post then
setlink(posttail,posthead)
else
@@ -27574,7 +27572,6 @@ local function markstoligature(head,start,stop,char)
end
resetinjection(base)
setchar(base,char)
- setsubtype(base,ligatureglyph_code)
setcomponents(base,start)
setlink(prev,base,next)
flushcomponents(start)
@@ -27612,7 +27609,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
end
resetinjection(base)
setchar(base,char)
- setsubtype(base,ligatureglyph_code)
setcomponents(base,comp)
setlink(prev,base,next)
if not discfound then
@@ -27632,7 +27628,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou
if trace_marks then
logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start))
end
- local n=copy_node(start)
+ local n=copynode(start)
copyinjection(n,start)
head,current=insertnodeafter(head,current,n)
elseif trace_marks then
@@ -27696,57 +27692,57 @@ end
local function multiple_glyphs(head,start,multiple,skiphash,what,stop)
local nofmultiples=#multiple
if nofmultiples>0 then
+ local first=start
resetinjection(start)
setchar(start,multiple[1])
if nofmultiples>1 then
- local sn=getnext(start)
- for k=2,nofmultiples do
- local n=copy_node(start)
+ for i=2,nofmultiples do
+ local n=copynode(start)
resetinjection(n)
- setchar(n,multiple[k])
+ setchar(n,multiple[i])
insertnodeafter(head,start,n)
start=n
end
- if what~=true and repeatablemultiples then
- local kind=type(what)
- local m,f,l
- if kind=="string" then
- local what,n=string.match(what,"^repeat(.-)[:=](%d+)$")
- if what=="middle" then
- m=tonumber(n)
- elseif what=="first" then
- f=tonumber(n)
- elseif what=="last" then
- l=tonumber(n)
- end
- elseif kind=="table" then
- m=what.middle
- f=what.first
- l=what.last
- end
- if f or m or l then
- if m and m>1 and nofmultiples==3 then
- local middle=getnext(first)
- for i=2,m do
- local n=copynode(middle)
- resetinjection(n)
- insertnodeafter(head,first,n)
- end
- end
- if f and f>1 then
- for i=2,f do
- local n=copynode(first)
- resetinjection(n)
- insertnodeafter(head,first,n)
- end
- end
- if l and l>1 then
- for i=2,l do
- local n=copynode(start)
- resetinjection(n)
- insertnodeafter(head,start,n)
- start=n
- end
+ end
+ if what~=true and repeatablemultiples then
+ local kind=type(what)
+ local m,f,l
+ if kind=="string" then
+ local what,n=string.match(what,"^repeat(.-)[:=](%d+)$")
+ if what=="middle" then
+ m=tonumber(n)
+ elseif what=="first" then
+ f=tonumber(n)
+ elseif what=="last" then
+ l=tonumber(n)
+ end
+ elseif kind=="table" then
+ m=what.middle
+ f=what.first
+ l=what.last
+ end
+ if f or m or l then
+ if m and m>1 and nofmultiples==3 then
+ local middle=getnext(first)
+ for i=2,m do
+ local n=copynode(middle)
+ resetinjection(n)
+ insertnodeafter(head,first,n)
+ end
+ end
+ if f and f>1 then
+ for i=2,f do
+ local n=copynode(first)
+ resetinjection(n)
+ insertnodeafter(head,first,n)
+ end
+ end
+ if l and l>1 then
+ for i=2,l do
+ local n=copynode(start)
+ resetinjection(n)
+ insertnodeafter(head,start,n)
+ start=n
end
end
end
@@ -27918,9 +27914,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip
local prev=getprev(start)
if stop then
setnext(stop)
- local copy=copy_node_list(start)
+ local copy=copynodelist(start)
local tail=stop
- local liat=find_node_tail(copy)
+ local liat=findnodetail(copy)
if pre then
setlink(liat,pre)
end
@@ -27931,7 +27927,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip
replace=start
else
setnext(start)
- local copy=copy_node(start)
+ local copy=copynode(start)
if pre then
setlink(copy,pre)
end
@@ -28308,7 +28304,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r
if trace_chains then
logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start)))
end
- head,start=remove_node(head,start,true)
+ head,start=removenode(head,start,true)
return head,getprev(start),true
end
function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex)
@@ -28821,7 +28817,7 @@ do if not userkern then
local thekern=nuts.new("kern",1)
local setkern=nuts.setkern
userkern=function(k)
- local n=copy_node(thekern)
+ local n=copynode(thekern)
setkern(n,k)
return n
end
@@ -28858,26 +28854,33 @@ local function setdiscchecked(d,pre,post,replace)
setdisc(d,pre,post,replace)
end
local noflags={ false,false,false,false }
-local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where)
local size=ck[5]-ck[4]+1
local chainlookups=ck[6]
local done=false
if chainlookups then
if size==1 then
local chainlookup=chainlookups[1]
- for j=1,#chainlookup do
- local chainstep=chainlookup[j]
- local chainkind=chainstep.type
- local chainproc=chainprocs[chainkind]
- if chainproc then
- local ok
- head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
- if ok then
- done=true
+ if chainlookup then
+ for j=1,#chainlookup do
+ local chainstep=chainlookup[j]
+ if chainstep then
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok
+ head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1)
+ if ok then
+ done=true
+ end
+ else
+ logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
+ end
+ else
+ logprocess("%s: has an issue (1)",cref(dataset,sequence))
end
- else
- logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind)
end
+ else
end
else
local i=1
@@ -28902,20 +28905,24 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
if chainlookup then
for j=1,#chainlookup do
local chainstep=chainlookup[j]
- local chainkind=chainstep.type
- local chainproc=chainprocs[chainkind]
- if chainproc then
- local ok,n
- head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
- if ok then
- done=true
- if n and n>1 and i+n>nofchainlookups then
- i=size
- break
+ if chainstep then
+ local chainkind=chainstep.type
+ local chainproc=chainprocs[chainkind]
+ if chainproc then
+ local ok,n
+ head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i)
+ if ok then
+ done=true
+ if n and n>1 and i+n>nofchainlookups then
+ i=size
+ break
+ end
end
+ else
+ logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
end
else
- logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind)
+ logprocess("%s: has an issue (2)",cref(dataset,sequence))
end
end
else
@@ -28939,7 +28946,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
else
done=true
if trace_contexts then
- logprocess("%s: skipping match",cref(dataset,sequence))
+ logprocess("%s: skipping match @ %i",cref(dataset,sequence),where)
end
end
end
@@ -28966,6 +28973,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
local last=start
local prev=getprev(start)
local hasglue=false
+ local useddisc=nil
+ local usedstart=start
local i=f
while i<=l do
local id=getid(current)
@@ -29028,7 +29037,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
tail=prev
setprev(current,sweepnode)
else
- tail=find_node_tail(head)
+ tail=findnodetail(head)
end
setnext(sweepnode,current)
setprev(head)
@@ -29139,13 +29148,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
head=lookaheaddisc
end
local pre,post,replace=getdisc(lookaheaddisc)
- local new=copy_node_list(cf)
+ local new=copynodelist(cf)
local cnew=new
if pre then
- setlink(find_node_tail(cf),pre)
+ setlink(findnodetail(cf),pre)
end
if replace then
- local tail=find_node_tail(new)
+ local tail=findnodetail(new)
setlink(tail,replace)
end
for i=1,insertedmarks do
@@ -29159,14 +29168,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpre[lookaheaddisc] then
local ok=false
- cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck)
+ cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1)
if ok then
done=true
end
end
if not notmatchreplace[lookaheaddisc] then
local ok=false
- new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2)
if ok then
done=true
end
@@ -29177,6 +29186,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(lookaheaddisc,cf,post,new)
end
start=getprev(lookaheaddisc)
+ useddisc=lookaheaddisc
sweephead[cf]=getnext(clast) or false
sweephead[new]=getnext(cl) or false
elseif backtrackdisc then
@@ -29198,8 +29208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setprev(cf)
setnext(cl)
local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true)
- local new=copy_node_list(cf)
- local cnew=find_node_tail(new)
+ local new=copynodelist(cf)
+ local cnew=findnodetail(new)
for i=1,insertedmarks do
cnew=getprev(cnew)
end
@@ -29209,14 +29219,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
if not notmatchpost[backtrackdisc] then
local ok=false
- cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck)
+ cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3)
if ok then
done=true
end
end
if not notmatchreplace[backtrackdisc] then
local ok=false
- new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck)
+ new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4)
if ok then
done=true
end
@@ -29237,30 +29247,55 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
setdisc(backtrackdisc,pre,post,replace)
end
start=getprev(backtrackdisc)
+ useddisc=backtrackdisc
sweephead[post]=getnext(clast) or false
sweephead[replace]=getnext(last) or false
else
local ok=false
- head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck)
+ head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5)
if ok then
done=true
end
end
- return head,start,done
-end
-local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
- local rule=ck[1]
- local lookuptype=ck[8] or ck[2]
- local nofseq=#ck[3]
- local first=ck[4]
- local last=ck[5]
- local char=getchar(start)
- logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
- cref(dataset,sequence),rule,match and "matches" or "nomatch",
- gref(char),first-1,last-first+1,nofseq-last,lookuptype,
- discseen and "" or "no ",sweepnode and "" or "not ")
+ if useddisc and start~=usedstart then
+ start=getnext(start)
+ end
+ return head,start,done,useddisc
+end
+local chaintrac do
+ local level=0
+ local last={}
+ chaintrac=function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode)
+ if dataset then
+ level=level+1
+ last[level]=start
+ local rule=ck[1]
+ local lookuptype=ck[8] or ck[2]
+ local nofseq=#ck[3]
+ local first=ck[4]
+ local last=ck[5]
+ local char=getchar(start)
+ logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping",
+ level,cref(dataset,sequence),rule,match and "matches" or "nomatch",
+ gref(char),first-1,last-first+1,nofseq-last,lookuptype,
+ discseen and "" or "no ",sweepnode and "" or "not ")
+ else
+ local what=start and "done" or "continue"
+ local where=head==last[level] and "same" or "different"
+ local char=getchar(head)
+ if char then
+ logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where)
+ else
+ logwarning("- %i : %s, %s node",level,what,where)
+ end
+ level=level-1
+ end
+ end
end
local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash)
+ if not contexts then
+ return head,start,false
+ end
local sweepnode=sweepnode
local sweeptype=sweeptype
local postreplace
@@ -29288,7 +29323,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s
local ck=contexts[k]
local seq=ck[3]
local f=ck[4]
-local last=start
+ local last=start
if not startchar or not seq[f][startchar] then
goto next
end
@@ -29399,7 +29434,6 @@ local last=start
end
end
if f>1 then
- if startprev then
local prev=startprev
if prereplace and prev==checkdisc then
prev=getprev(sweepnode)
@@ -29514,9 +29548,6 @@ local last=start
else
goto next
end
- else
- goto next
- end
end
if s>l then
local current=last and getnext(last)
@@ -29640,12 +29671,15 @@ local last=start
if discseen or sweepnode then
head,start,done=chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck)
else
- head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck)
+ head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6)
+ end
+ if trace_contexts then
+ chaintrac(start,done)
end
if done then
break
end
- ::next::
+ ::next::
end
if discseen then
notmatchpre={}
@@ -29662,15 +29696,26 @@ handlers.gpos_context=handle_contextchain
local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash)
local steps=currentlookup.steps
local nofsteps=currentlookup.nofsteps
- if nofsteps>1 then
- reportmoresteps(dataset,sequence)
- end
- local l=steps[1].coverage[getchar(start)]
- if l then
- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ local char=getchar(start)
+ if nofsteps==1 then
+ local s=steps[1]
+ local l=s.coverage[char]
+ if l then
+ return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ end
else
- return head,start,false
+ for i=1,nofsteps do
+ local s=steps[i]
+ local l=s.coverage[char]
+ if l then
+ local h,s,d=handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash)
+ if d then
+ return h,s,d
+ end
+ end
+ end
end
+ return head,start,false
end
chainprocs.gsub_context=chained_contextchain
chainprocs.gsub_contextchain=chained_contextchain
@@ -29853,7 +29898,7 @@ local function kernrun(disc,k_run,font,attr,...)
if done and trace_testruns then
report_disc("done",disc)
end
- return nextstart,done
+ return nextstart
end
local function comprun(disc,c_run,...)
if trace_compruns then
@@ -29896,8 +29941,12 @@ local function comprun(disc,c_run,...)
end
setdisc(disc,pre,post,replace)
end
- return getnext(disc),renewed
+ return getnext(disc)
end
+local test_flatten_start=2
+directives.register("otf.testrun.forceflatten",function(v)
+ test_flatten_start=v and 1 or 2
+end)
local function testrun(disc,t_run,c_run,...)
if trace_testruns then
report_disc("test",disc)
@@ -29925,7 +29974,7 @@ local function testrun(disc,t_run,c_run,...)
local d=d_replace>d_post and d_replace or d_post
local head=getnext(disc)
local tail=head
- for i=2,d do
+ for i=test_flatten_start,d do
local nx=getnext(tail)
local id=getid(nx)
if id==disc_code then
@@ -29939,7 +29988,7 @@ local function testrun(disc,t_run,c_run,...)
next=getnext(tail)
setnext(tail)
setprev(head)
- local new=copy_node_list(head)
+ local new=copynodelist(head)
if posttail then
setlink(posttail,head)
else
@@ -30002,7 +30051,7 @@ local function testrun(disc,t_run,c_run,...)
report_disc("done",disc)
end
end
- return getnext(disc),renewed
+ return getnext(disc)
end
local nesting=0
local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
@@ -30420,7 +30469,7 @@ do
head=h
end
elseif typ=="gsub_reversecontextchain" then
- local start=find_node_tail(head)
+ local start=findnodetail(head)
local rlmode=0
local merged=steps.merged
while start do
@@ -30498,13 +30547,12 @@ do
start=getnext(start)
elseif id==disc_code then
if not discs or discs[start]==true then
- local ok
if gpossing then
- start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
- start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
else
- start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
+ start=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler)
end
else
start=getnext(start)
@@ -30568,13 +30616,12 @@ do
start=getnext(start)
elseif id==disc_code then
if not discs or discs[start]==true then
- local ok
if gpossing then
- start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
elseif forcetestrun then
- start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
else
- start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
+ start=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler)
end
else
start=getnext(start)
@@ -31074,6 +31121,10 @@ local function addfeature(data,feature,specifications,prepareonly)
end
local descriptions=data.descriptions
local resources=data.resources
+ if not descriptions or not resources then
+ report_otf("missing specification")
+ return
+ end
local features=resources.features
local sequences=resources.sequences
if not features or not sequences then
@@ -33297,7 +33348,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
local subpos=nil
local postpos=nil
reorderreph.coverage={}
- rephbase[font]={}
+ rephbase[font]={}
for i=1,#seqsubset do
local subset=seqsubset[i]
local kind=subset[1]
@@ -33418,7 +33469,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
end
end
end
- local current,base,firstcons=start,nil,nil
+ local current,base,firstcons,subnotafterbase,postnotafterbase=start,nil,nil,nil,nil
if getstate(start,s_rphf) then
current=getnext(getnext(start))
end
@@ -33474,7 +33525,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
logprocess("reorder two, handle nbsp")
end
end
- else
+ else
local last=getnext(stop)
while current~=last do
local next=getnext(current)
@@ -33537,8 +33588,8 @@ local function reorder_two(head,start,stop,font,attr,nbspaces)
logprocess("reorder two, handle matra")
end
end
- if dependent_vowel[char] then
- if pre_mark[char] then
+ if not moved[current] and dependent_vowel[char] then
+ if pre_mark[char] then
moved[current]=true
local prev,next=getboth(current)
setlink(prev,next)
@@ -34012,11 +34063,11 @@ local function analyze_next_chars_two(c,font)
if pre_mark[v] and not already_pre_mark then
already_pre_mark=true
elseif post_mark[v] and not already_post_mark then
- if devanagarihash[font].conjuncts=="mixed" then
- return c
- else
- already_post_mark=true
- end
+ if devanagarihash[font].conjuncts=="mixed" then
+ return c
+ else
+ already_post_mark=true
+ end
elseif below_mark[v] and not already_below_mark then
already_below_mark=true
elseif above_mark[v] and not already_above_mark then
@@ -37079,7 +37130,7 @@ local afm=fonts.handlers.afm
local pfb=fonts.handlers.pfb
local hashes=fonts.hashes
local identifiers=hashes.identifiers
-local version=otf.version or 0.011
+local version=otf.version or 0.013
local shapescache=containers.define("fonts","shapes",version,true)
local streamscache=containers.define("fonts","streams",version,true)
local compact_streams=false
@@ -37926,17 +37977,19 @@ if not modules then modules={} end modules ['font-imp-italics']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local next=next
+local next,tonumber=next,tonumber
local fonts=fonts
local handlers=fonts.handlers
local registerotffeature=handlers.otf.features.register
local registerafmfeature=handlers.afm.features.register
local function initialize(tfmdata,key,value)
+ local factor=tonumber(value) or 1
for unicode,character in next,tfmdata.characters do
local olditalic=character.italic
if olditalic and olditalic~=0 then
character.width=character.width+olditalic
character.italic=0
+ character.bottomright=-factor*olditalic
end
end
end
--
cgit v1.2.3