diff options
Diffstat (limited to 'tex')
114 files changed, 7134 insertions, 3141 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 545627d07..6bcff2af2 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 90eea4118..e02334f8d 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2022.09.16 14:39} +\edef\contextversion{2022.10.14 10:13} %D For those who want to use this: diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index 57061735b..a5a21687b 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -45,6 +45,43 @@ local variants_dotted={ [0xFE00]="dotted form", } +local variants_90={ + [0xFE00]="rotated 90 degrees", +} + +local variants_180={ + [0xFE01]="rotated 180 degrees", +} + +local variants_270={ + [0xFE02]="rotated 270 degrees", +} + +local variants_expanded={ + [0xFE00]="expanded", +} + +local variants_90_180={ + [0xFE00]="rotated 90 degrees", + [0xFE01]="rotated 180 degrees", +} + +local variants_90_180_270={ + [0xFE00]="rotated 90 degrees", + [0xFE01]="rotated 180 degrees", + [0xFE02]="rotated 270 degrees", +} + +local variants_180_270={ + [0xFE01]="rotated 180 degrees", + [0xFE02]="rotated 270 degrees", +} + +local variants_90_270={ + [0xFE00]="rotated 90 degrees", + [0xFE02]="rotated 270 degrees", +} + characters = characters or { } characters.data={ @@ -480,9 +517,9 @@ characters.data={ direction="es", linebreak="hy", mathclass="ordinary", - mathgroup="binary arithmetic", mathextensible="h", mathfiller="relfill", + mathgroup="binary arithmetic", mathname="mathhyphen", mathsymbol=0x2212, synonyms={ "hyphen or minus sign", "hyphus" }, @@ -701,8 +738,8 @@ characters.data={ }, { class="relation", - name="Relbar", comment="useless", + name="Relbar", }, }, unicodeslot=0x3D, @@ -1048,8 +1085,8 @@ characters.data={ { adobename="asciicircum", category="sk", - comment="the Hat looks rediculous in most fonts", cjkwd="na", + comment="the Hat looks rediculous in most fonts", contextname="textasciicircum", description="CIRCUMFLEX ACCENT", direction="on", @@ -23219,6 +23256,7 @@ characters.data={ direction="l", indic="c", linebreak="al", + synonyms={ "bangla khanda ta" }, unicodeslot=0x9CE, }, [0x9D7]={ @@ -28096,6 +28134,13 @@ characters.data={ linebreak="al", unicodeslot=0xCF2, }, + [0xCF3]={ + category="mc", + description="KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT", + direction="l", + linebreak="cm", + unicodeslot=0xCF3, + }, [0xD00]={ category="mn", description="MALAYALAM SIGN COMBINING ANUSVARA ABOVE", @@ -30909,6 +30954,13 @@ characters.data={ linebreak="sa", unicodeslot=0xECD, }, + [0xECE]={ + category="mn", + description="LAO YAMAKKAN", + direction="nsm", + linebreak="sa", + unicodeslot=0xECE, + }, [0xED0]={ category="nd", description="LAO DIGIT ZERO", @@ -56408,7 +56460,7 @@ characters.data={ combining=0xEA, description="COMBINING DOUBLE CIRCUMFLEX ABOVE", direction="nsm", - linebreak="cm", + linebreak="gl", unicodeslot=0x1DCD, }, [0x1DCE]={ @@ -56784,7 +56836,7 @@ characters.data={ combining=0xE9, description="COMBINING DOUBLE INVERTED BREVE BELOW", direction="nsm", - linebreak="cm", + linebreak="gl", unicodeslot=0x1DFC, }, [0x1DFD]={ @@ -63092,7 +63144,7 @@ characters.data={ category="po", description="QUADRUPLE PRIME", direction="on", - linebreak="al", + linebreak="po", mathclass="prime", mathname="quadrupleprime", specials={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 }, @@ -63195,6 +63247,7 @@ characters.data={ linebreak="al", mathclass="ghost", mathname="invisiblecomma", + synonyms={ "invisible comma" }, unicodeslot=0x2063, }, [0x2064]={ @@ -66926,8 +66979,8 @@ characters.data={ description="EMPTY SET", direction="on", linebreak="al", - mathgroup="constant set", mathclass="ordinary", + mathgroup="constant set", mathname="emptyset", synonyms={ "null set" }, unicodeslot=0x2205, @@ -67102,8 +67155,8 @@ characters.data={ }, { class="relation", - name="relbar", comment="useless", + name="relbar", }, }, unicodeslot=0x2212, @@ -159588,6 +159641,30 @@ characters.data={ linebreak="al", unicodeslot=0x10EB1, }, + [0x10EFD]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD SAKTA", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFD, + }, + [0x10EFE]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD QASR", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFE, + }, + [0x10EFF]={ + category="mn", + combining=0xDC, + description="ARABIC SMALL LOW WORD MADDA", + direction="nsm", + linebreak="cm", + unicodeslot=0x10EFF, + }, [0x10F00]={ category="lo", description="OLD SOGDIAN LETTER ALEPH", @@ -164352,6 +164429,27 @@ characters.data={ linebreak="cm", unicodeslot=0x1123E, }, + [0x1123F]={ + category="lo", + description="KHOJKI LETTER QA", + direction="l", + linebreak="al", + unicodeslot=0x1123F, + }, + [0x11240]={ + category="lo", + description="KHOJKI LETTER SHORT I", + direction="l", + linebreak="al", + unicodeslot=0x11240, + }, + [0x11241]={ + category="mn", + description="KHOJKI VOWEL SIGN VOCALIC R", + direction="nsm", + linebreak="cm", + unicodeslot=0x11241, + }, [0x11280]={ category="lo", description="MULTANI LETTER A", @@ -172828,6 +172926,76 @@ characters.data={ linebreak="al", unicodeslot=0x11AF8, }, + [0x11B00]={ + category="po", + description="DEVANAGARI HEAD MARK", + direction="l", + linebreak="bb", + unicodeslot=0x11B00, + }, + [0x11B01]={ + category="po", + description="DEVANAGARI HEAD MARK WITH HEADSTROKE", + direction="l", + linebreak="bb", + unicodeslot=0x11B01, + }, + [0x11B02]={ + category="po", + description="DEVANAGARI SIGN BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B02, + }, + [0x11B03]={ + category="po", + description="DEVANAGARI SIGN BHALE WITH HOOK", + direction="l", + linebreak="bb", + unicodeslot=0x11B03, + }, + [0x11B04]={ + category="po", + description="DEVANAGARI SIGN EXTENDED BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B04, + }, + [0x11B05]={ + category="po", + description="DEVANAGARI SIGN EXTENDED BHALE WITH HOOK", + direction="l", + linebreak="bb", + unicodeslot=0x11B05, + }, + [0x11B06]={ + category="po", + description="DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B06, + }, + [0x11B07]={ + category="po", + description="DEVANAGARI SIGN WESTERN NINE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B07, + }, + [0x11B08]={ + category="po", + description="DEVANAGARI SIGN REVERSED NINE-LIKE BHALE", + direction="l", + linebreak="bb", + unicodeslot=0x11B08, + }, + [0x11B09]={ + category="po", + description="DEVANAGARI SIGN MINDU", + direction="l", + linebreak="bb", + unicodeslot=0x11B09, + }, [0x11C00]={ category="lo", description="BHAIKSUKI LETTER A", @@ -175129,6 +175297,610 @@ characters.data={ linebreak="al", unicodeslot=0x11EF8, }, + [0x11F00]={ + category="mn", + description="KAWI SIGN CANDRABINDU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F00, + }, + [0x11F01]={ + category="mn", + description="KAWI SIGN ANUSVARA", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F01, + }, + [0x11F02]={ + category="lo", + description="KAWI SIGN REPHA", + direction="l", + linebreak="al", + unicodeslot=0x11F02, + }, + [0x11F03]={ + category="mc", + description="KAWI SIGN VISARGA", + direction="l", + linebreak="cm", + unicodeslot=0x11F03, + }, + [0x11F04]={ + category="lo", + description="KAWI LETTER A", + direction="l", + linebreak="al", + unicodeslot=0x11F04, + }, + [0x11F05]={ + category="lo", + description="KAWI LETTER AA", + direction="l", + linebreak="al", + unicodeslot=0x11F05, + }, + [0x11F06]={ + category="lo", + description="KAWI LETTER I", + direction="l", + linebreak="al", + unicodeslot=0x11F06, + }, + [0x11F07]={ + category="lo", + description="KAWI LETTER II", + direction="l", + linebreak="al", + unicodeslot=0x11F07, + }, + [0x11F08]={ + category="lo", + description="KAWI LETTER U", + direction="l", + linebreak="al", + unicodeslot=0x11F08, + }, + [0x11F09]={ + category="lo", + description="KAWI LETTER UU", + direction="l", + linebreak="al", + unicodeslot=0x11F09, + }, + [0x11F0A]={ + category="lo", + description="KAWI LETTER VOCALIC R", + direction="l", + linebreak="al", + unicodeslot=0x11F0A, + }, + [0x11F0B]={ + category="lo", + description="KAWI LETTER VOCALIC RR", + direction="l", + linebreak="al", + unicodeslot=0x11F0B, + }, + [0x11F0C]={ + category="lo", + description="KAWI LETTER VOCALIC L", + direction="l", + linebreak="al", + unicodeslot=0x11F0C, + }, + [0x11F0D]={ + category="lo", + description="KAWI LETTER VOCALIC LL", + direction="l", + linebreak="al", + unicodeslot=0x11F0D, + }, + [0x11F0E]={ + category="lo", + description="KAWI LETTER E", + direction="l", + linebreak="al", + unicodeslot=0x11F0E, + }, + [0x11F0F]={ + category="lo", + description="KAWI LETTER AI", + direction="l", + linebreak="al", + unicodeslot=0x11F0F, + }, + [0x11F10]={ + category="lo", + description="KAWI LETTER O", + direction="l", + linebreak="al", + unicodeslot=0x11F10, + }, + [0x11F12]={ + category="lo", + description="KAWI LETTER KA", + direction="l", + linebreak="al", + unicodeslot=0x11F12, + }, + [0x11F13]={ + category="lo", + description="KAWI LETTER KHA", + direction="l", + linebreak="al", + unicodeslot=0x11F13, + }, + [0x11F14]={ + category="lo", + description="KAWI LETTER GA", + direction="l", + linebreak="al", + unicodeslot=0x11F14, + }, + [0x11F15]={ + category="lo", + description="KAWI LETTER GHA", + direction="l", + linebreak="al", + unicodeslot=0x11F15, + }, + [0x11F16]={ + category="lo", + description="KAWI LETTER NGA", + direction="l", + linebreak="al", + unicodeslot=0x11F16, + }, + [0x11F17]={ + category="lo", + description="KAWI LETTER CA", + direction="l", + linebreak="al", + unicodeslot=0x11F17, + }, + [0x11F18]={ + category="lo", + description="KAWI LETTER CHA", + direction="l", + linebreak="al", + unicodeslot=0x11F18, + }, + [0x11F19]={ + category="lo", + description="KAWI LETTER JA", + direction="l", + linebreak="al", + unicodeslot=0x11F19, + }, + [0x11F1A]={ + category="lo", + description="KAWI LETTER JHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1A, + }, + [0x11F1B]={ + category="lo", + description="KAWI LETTER NYA", + direction="l", + linebreak="al", + unicodeslot=0x11F1B, + }, + [0x11F1C]={ + category="lo", + description="KAWI LETTER TTA", + direction="l", + linebreak="al", + unicodeslot=0x11F1C, + }, + [0x11F1D]={ + category="lo", + description="KAWI LETTER TTHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1D, + }, + [0x11F1E]={ + category="lo", + description="KAWI LETTER DDA", + direction="l", + linebreak="al", + unicodeslot=0x11F1E, + }, + [0x11F1F]={ + category="lo", + description="KAWI LETTER DDHA", + direction="l", + linebreak="al", + unicodeslot=0x11F1F, + }, + [0x11F20]={ + category="lo", + description="KAWI LETTER NNA", + direction="l", + linebreak="al", + unicodeslot=0x11F20, + }, + [0x11F21]={ + category="lo", + description="KAWI LETTER TA", + direction="l", + linebreak="al", + unicodeslot=0x11F21, + }, + [0x11F22]={ + category="lo", + description="KAWI LETTER THA", + direction="l", + linebreak="al", + unicodeslot=0x11F22, + }, + [0x11F23]={ + category="lo", + description="KAWI LETTER DA", + direction="l", + linebreak="al", + unicodeslot=0x11F23, + }, + [0x11F24]={ + category="lo", + description="KAWI LETTER DHA", + direction="l", + linebreak="al", + unicodeslot=0x11F24, + }, + [0x11F25]={ + category="lo", + description="KAWI LETTER NA", + direction="l", + linebreak="al", + unicodeslot=0x11F25, + }, + [0x11F26]={ + category="lo", + description="KAWI LETTER PA", + direction="l", + linebreak="al", + unicodeslot=0x11F26, + }, + [0x11F27]={ + category="lo", + description="KAWI LETTER PHA", + direction="l", + linebreak="al", + unicodeslot=0x11F27, + }, + [0x11F28]={ + category="lo", + description="KAWI LETTER BA", + direction="l", + linebreak="al", + unicodeslot=0x11F28, + }, + [0x11F29]={ + category="lo", + description="KAWI LETTER BHA", + direction="l", + linebreak="al", + unicodeslot=0x11F29, + }, + [0x11F2A]={ + category="lo", + description="KAWI LETTER MA", + direction="l", + linebreak="al", + unicodeslot=0x11F2A, + }, + [0x11F2B]={ + category="lo", + description="KAWI LETTER YA", + direction="l", + linebreak="al", + unicodeslot=0x11F2B, + }, + [0x11F2C]={ + category="lo", + description="KAWI LETTER RA", + direction="l", + linebreak="al", + unicodeslot=0x11F2C, + }, + [0x11F2D]={ + category="lo", + description="KAWI LETTER LA", + direction="l", + linebreak="al", + unicodeslot=0x11F2D, + }, + [0x11F2E]={ + category="lo", + description="KAWI LETTER WA", + direction="l", + linebreak="al", + unicodeslot=0x11F2E, + }, + [0x11F2F]={ + category="lo", + description="KAWI LETTER SHA", + direction="l", + linebreak="al", + unicodeslot=0x11F2F, + }, + [0x11F30]={ + category="lo", + description="KAWI LETTER SSA", + direction="l", + linebreak="al", + unicodeslot=0x11F30, + }, + [0x11F31]={ + category="lo", + description="KAWI LETTER SA", + direction="l", + linebreak="al", + unicodeslot=0x11F31, + }, + [0x11F32]={ + category="lo", + description="KAWI LETTER HA", + direction="l", + linebreak="al", + unicodeslot=0x11F32, + }, + [0x11F33]={ + category="lo", + description="KAWI LETTER JNYA", + direction="l", + linebreak="al", + unicodeslot=0x11F33, + }, + [0x11F34]={ + category="mc", + description="KAWI VOWEL SIGN AA", + direction="l", + linebreak="cm", + unicodeslot=0x11F34, + }, + [0x11F35]={ + category="mc", + description="KAWI VOWEL SIGN ALTERNATE AA", + direction="l", + linebreak="cm", + unicodeslot=0x11F35, + }, + [0x11F36]={ + category="mn", + description="KAWI VOWEL SIGN I", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F36, + }, + [0x11F37]={ + category="mn", + description="KAWI VOWEL SIGN II", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F37, + }, + [0x11F38]={ + category="mn", + description="KAWI VOWEL SIGN U", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F38, + }, + [0x11F39]={ + category="mn", + description="KAWI VOWEL SIGN UU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F39, + }, + [0x11F3A]={ + category="mn", + description="KAWI VOWEL SIGN VOCALIC R", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F3A, + }, + [0x11F3E]={ + category="mc", + description="KAWI VOWEL SIGN E", + direction="l", + linebreak="cm", + unicodeslot=0x11F3E, + }, + [0x11F3F]={ + category="mc", + description="KAWI VOWEL SIGN AI", + direction="l", + linebreak="cm", + unicodeslot=0x11F3F, + }, + [0x11F40]={ + category="mn", + description="KAWI VOWEL SIGN EU", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F40, + }, + [0x11F41]={ + category="mc", + combining=0x9, + description="KAWI SIGN KILLER", + direction="l", + linebreak="cm", + unicodeslot=0x11F41, + }, + [0x11F42]={ + category="mn", + combining=0x9, + description="KAWI CONJOINER", + direction="nsm", + linebreak="cm", + unicodeslot=0x11F42, + }, + [0x11F43]={ + category="po", + description="KAWI DANDA", + direction="l", + linebreak="ba", + unicodeslot=0x11F43, + }, + [0x11F44]={ + category="po", + description="KAWI DOUBLE DANDA", + direction="l", + linebreak="ba", + unicodeslot=0x11F44, + }, + [0x11F45]={ + category="po", + description="KAWI PUNCTUATION SECTION MARKER", + direction="l", + linebreak="id", + unicodeslot=0x11F45, + }, + [0x11F46]={ + category="po", + description="KAWI PUNCTUATION ALTERNATE SECTION MARKER", + direction="l", + linebreak="id", + unicodeslot=0x11F46, + }, + [0x11F47]={ + category="po", + description="KAWI PUNCTUATION FLOWER", + direction="l", + linebreak="id", + unicodeslot=0x11F47, + }, + [0x11F48]={ + category="po", + description="KAWI PUNCTUATION SPACE FILLER", + direction="l", + linebreak="id", + unicodeslot=0x11F48, + }, + [0x11F49]={ + category="po", + description="KAWI PUNCTUATION DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F49, + }, + [0x11F4A]={ + category="po", + description="KAWI PUNCTUATION DOUBLE DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F4A, + }, + [0x11F4B]={ + category="po", + description="KAWI PUNCTUATION TRIPLE DOT", + direction="l", + linebreak="id", + unicodeslot=0x11F4B, + }, + [0x11F4C]={ + category="po", + description="KAWI PUNCTUATION CIRCLE", + direction="l", + linebreak="id", + unicodeslot=0x11F4C, + }, + [0x11F4D]={ + category="po", + description="KAWI PUNCTUATION FILLED CIRCLE", + direction="l", + linebreak="id", + unicodeslot=0x11F4D, + }, + [0x11F4E]={ + category="po", + description="KAWI PUNCTUATION SPIRAL", + direction="l", + linebreak="id", + unicodeslot=0x11F4E, + }, + [0x11F4F]={ + category="po", + description="KAWI PUNCTUATION CLOSING SPIRAL", + direction="l", + linebreak="id", + unicodeslot=0x11F4F, + }, + [0x11F50]={ + category="nd", + description="KAWI DIGIT ZERO", + direction="l", + linebreak="nu", + unicodeslot=0x11F50, + }, + [0x11F51]={ + category="nd", + description="KAWI DIGIT ONE", + direction="l", + linebreak="nu", + unicodeslot=0x11F51, + }, + [0x11F52]={ + category="nd", + description="KAWI DIGIT TWO", + direction="l", + linebreak="nu", + unicodeslot=0x11F52, + }, + [0x11F53]={ + category="nd", + description="KAWI DIGIT THREE", + direction="l", + linebreak="nu", + unicodeslot=0x11F53, + }, + [0x11F54]={ + category="nd", + description="KAWI DIGIT FOUR", + direction="l", + linebreak="nu", + unicodeslot=0x11F54, + }, + [0x11F55]={ + category="nd", + description="KAWI DIGIT FIVE", + direction="l", + linebreak="nu", + unicodeslot=0x11F55, + }, + [0x11F56]={ + category="nd", + description="KAWI DIGIT SIX", + direction="l", + linebreak="nu", + unicodeslot=0x11F56, + }, + [0x11F57]={ + category="nd", + description="KAWI DIGIT SEVEN", + direction="l", + linebreak="nu", + unicodeslot=0x11F57, + }, + [0x11F58]={ + category="nd", + description="KAWI DIGIT EIGHT", + direction="l", + linebreak="nu", + unicodeslot=0x11F58, + }, + [0x11F59]={ + category="nd", + description="KAWI DIGIT NINE", + direction="l", + linebreak="nu", + unicodeslot=0x11F59, + }, [0x11FB0]={ category="lo", description="LISU LETTER YHA", @@ -185847,6 +186619,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13091, + variants=variants_90, }, [0x13092]={ category="lo", @@ -185854,6 +186627,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13092, + variants=variants_90, }, [0x13093]={ category="lo", @@ -185861,6 +186635,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13093, + variants=variants_180, }, [0x13094]={ category="lo", @@ -186015,6 +186790,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x130A9, + variants=variants_180, }, [0x130AA]={ category="lo", @@ -186729,6 +187505,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1310F, + variants=variants_90, }, [0x13110]={ category="lo", @@ -186785,6 +187562,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13117, + variants=variants_270, }, [0x13118]={ category="lo", @@ -186820,6 +187598,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1311C, + variants=variants_90, }, [0x1311D]={ category="lo", @@ -186855,6 +187634,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13121, + variants=variants_90, }, [0x13122]={ category="lo", @@ -186897,6 +187677,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13127, + variants=variants_90, }, [0x13128]={ category="lo", @@ -187023,6 +187804,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13139, + variants=variants_90_270, }, [0x1313A]={ category="lo", @@ -187541,6 +188323,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13183, + variants=variants_270, }, [0x13184]={ category="lo", @@ -187569,6 +188352,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13187, + variants=variants_180, }, [0x13188]={ category="lo", @@ -187744,6 +188528,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131A0, + variants=variants_90_270, }, [0x131A1]={ category="lo", @@ -187863,6 +188648,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B1, + variants=variants_90_180, }, [0x131B2]={ category="lo", @@ -187912,6 +188698,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B8, + variants=variants_90, }, [0x131B9]={ category="lo", @@ -187919,6 +188706,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131B9, + variants=variants_90, }, [0x131BA]={ category="lo", @@ -187926,6 +188714,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131BA, + variants=variants_270, }, [0x131BB]={ category="lo", @@ -188045,6 +188834,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131CB, + variants=variants_90, }, [0x131CC]={ category="lo", @@ -188290,6 +189080,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131EE, + variants=variants_180_270, }, [0x131EF]={ category="lo", @@ -188360,6 +189151,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131F8, + variants=variants_180, }, [0x131F9]={ category="lo", @@ -188367,6 +189159,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131F9, + variants=variants_90_180, }, [0x131FA]={ category="lo", @@ -188374,6 +189167,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x131FA, + variants=variants_90_180, }, [0x131FB]={ category="lo", @@ -188570,6 +189364,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13216, + variants=variants_270, }, [0x13217]={ category="lo", @@ -189025,6 +189820,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13257, + variants=variants_180, }, [0x13258]={ category="lo", @@ -189277,6 +190073,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1327B, + variants=variants_270, }, [0x1327C]={ category="lo", @@ -189305,6 +190102,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1327F, + variants=variants_90_180, }, [0x13280]={ category="lo", @@ -189347,6 +190145,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13285, + variants=variants_90, }, [0x13286]={ category="lo", @@ -189396,6 +190195,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1328C, + variants=variants_90, }, [0x1328D]={ category="lo", @@ -189564,6 +190364,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132A4, + variants=variants_180_270, }, [0x132A5]={ category="lo", @@ -189606,6 +190407,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132AA, + variants=variants_90, }, [0x132AB]={ category="lo", @@ -189837,6 +190639,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132CB, + variants=variants_90, }, [0x132CC]={ category="lo", @@ -189956,6 +190759,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132DC, + variants=variants_90, }, [0x132DD]={ category="lo", @@ -190033,6 +190837,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132E7, + variants=variants_90_270, }, [0x132E8]={ category="lo", @@ -190047,6 +190852,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132E9, + variants=variants_270, }, [0x132EA]={ category="lo", @@ -190152,6 +190958,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132F8, + variants=variants_270, }, [0x132F9]={ category="lo", @@ -190187,6 +190994,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x132FD, + variants=variants_270, }, [0x132FE]={ category="lo", @@ -190222,6 +191030,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13302, + variants=variants_270, }, [0x13303]={ category="lo", @@ -190229,6 +191038,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13303, + variants=variants_270, }, [0x13304]={ category="lo", @@ -190257,6 +191067,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13307, + variants=variants_90, }, [0x13308]={ category="lo", @@ -190264,6 +191075,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13308, + variants=variants_180, }, [0x13309]={ category="lo", @@ -190320,6 +191132,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13310, + variants=variants_270, }, [0x13311]={ category="lo", @@ -190327,6 +191140,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13311, + variants=variants_270, }, [0x13312]={ category="lo", @@ -190334,6 +191148,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13312, + variants=variants_180_270, }, [0x13313]={ category="lo", @@ -190341,6 +191156,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13313, + variants=variants_180_270, }, [0x13314]={ category="lo", @@ -190348,6 +191164,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13314, + variants=variants_180_270, }, [0x13315]={ category="lo", @@ -190397,6 +191214,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1331B, + variants=variants_90_180, }, [0x1331C]={ category="lo", @@ -190404,6 +191222,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1331C, + variants=variants_270, }, [0x1331D]={ category="lo", @@ -190439,6 +191258,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13321, + variants=variants_180_270, }, [0x13322]={ category="lo", @@ -190446,6 +191266,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13322, + variants=variants_90_180, }, [0x13323]={ category="lo", @@ -190551,6 +191372,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13331, + variants=variants_180_270, }, [0x13332]={ category="lo", @@ -190621,6 +191443,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1333B, + variants=variants_90, }, [0x1333C]={ category="lo", @@ -190628,6 +191451,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1333C, + variants=variants_90, }, [0x1333D]={ category="lo", @@ -190726,6 +191550,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1334A, + variants=variants_270, }, [0x1334B]={ category="lo", @@ -190887,6 +191712,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13361, + variants=variants_270, }, [0x13362]={ category="lo", @@ -191013,6 +191839,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13373, + variants=variants_270, }, [0x13374]={ category="lo", @@ -191041,6 +191868,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13377, + variants=variants_90, }, [0x13378]={ category="lo", @@ -191048,6 +191876,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13378, + variants=variants_90, }, [0x13379]={ category="lo", @@ -191083,6 +191912,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1337D, + variants=variants_270, }, [0x1337E]={ category="lo", @@ -191139,6 +191969,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13385, + variants=variants_270, }, [0x13386]={ category="lo", @@ -191279,6 +192110,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13399, + variants=variants_90, }, [0x1339A]={ category="lo", @@ -191286,6 +192118,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1339A, + variants=variants_90, }, [0x1339B]={ category="lo", @@ -191433,6 +192266,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133AF, + variants=variants_270, }, [0x133B0]={ category="lo", @@ -191440,6 +192274,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133B0, + variants=variants_270, }, [0x133B1]={ category="lo", @@ -191545,6 +192380,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133BF, + variants=variants_270, }, [0x133C0]={ category="lo", @@ -191685,6 +192521,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133D3, + variants=variants_90, }, [0x133D4]={ category="lo", @@ -191755,6 +192592,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133DD, + variants=variants_270, }, [0x133DE]={ category="lo", @@ -191902,6 +192740,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F2, + variants=variants_90, }, [0x133F3]={ category="lo", @@ -191923,6 +192762,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F5, + variants=variants_90, }, [0x133F6]={ category="lo", @@ -191930,6 +192770,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x133F6, + variants=variants_90, }, [0x133F7]={ category="lo", @@ -192021,6 +192862,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13403, + variants=variants_90, }, [0x13404]={ category="lo", @@ -192154,6 +192996,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13416, + variants=variants_90, }, [0x13417]={ category="lo", @@ -192175,6 +193018,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13419, + variants=variants_90_180_270, }, [0x1341A]={ category="lo", @@ -192182,6 +193026,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1341A, + variants=variants_90, }, [0x1341B]={ category="lo", @@ -192245,6 +193090,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x13423, + variants=variants_90, }, [0x13424]={ category="lo", @@ -192308,6 +193154,7 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1342C, + variants=variants_270, }, [0x1342D]={ category="lo", @@ -192322,6 +193169,14 @@ characters.data={ direction="l", linebreak="al", unicodeslot=0x1342E, + variants=variants_270, + }, + [0x1342F]={ + category="lo", + description="EGYPTIAN HIEROGLYPH V011D", + direction="l", + linebreak="al", + unicodeslot=0x1342F, }, [0x13430]={ category="cf", @@ -192386,6 +193241,213 @@ characters.data={ linebreak="cl", unicodeslot=0x13438, }, + [0x13439]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT MIDDLE", + direction="l", + linebreak="gl", + unicodeslot=0x13439, + }, + [0x1343A]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT TOP", + direction="l", + linebreak="gl", + unicodeslot=0x1343A, + }, + [0x1343B]={ + category="cf", + description="EGYPTIAN HIEROGLYPH INSERT AT BOTTOM", + direction="l", + linebreak="gl", + unicodeslot=0x1343B, + }, + [0x1343C]={ + category="cf", + description="EGYPTIAN HIEROGLYPH BEGIN ENCLOSURE", + direction="l", + linebreak="op", + unicodeslot=0x1343C, + }, + [0x1343D]={ + category="cf", + description="EGYPTIAN HIEROGLYPH END ENCLOSURE", + direction="l", + linebreak="cl", + unicodeslot=0x1343D, + }, + [0x1343E]={ + category="cf", + description="EGYPTIAN HIEROGLYPH BEGIN WALLED ENCLOSURE", + direction="l", + linebreak="op", + unicodeslot=0x1343E, + }, + [0x1343F]={ + category="cf", + description="EGYPTIAN HIEROGLYPH END WALLED ENCLOSURE", + direction="l", + linebreak="cl", + unicodeslot=0x1343F, + }, + [0x13440]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY", + direction="nsm", + linebreak="cm", + unicodeslot=0x13440, + }, + [0x13441]={ + category="lo", + description="EGYPTIAN HIEROGLYPH FULL BLANK", + direction="l", + linebreak="al", + unicodeslot=0x13441, + }, + [0x13442]={ + category="lo", + description="EGYPTIAN HIEROGLYPH HALF BLANK", + direction="l", + linebreak="al", + unicodeslot=0x13442, + }, + [0x13443]={ + category="lo", + description="EGYPTIAN HIEROGLYPH LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13443, + variants=variants_expanded, + }, + [0x13444]={ + category="lo", + description="EGYPTIAN HIEROGLYPH HALF LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13444, + variants=variants_expanded, + }, + [0x13445]={ + category="lo", + description="EGYPTIAN HIEROGLYPH TALL LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13445, + variants=variants_expanded, + }, + [0x13446]={ + category="lo", + description="EGYPTIAN HIEROGLYPH WIDE LOST SIGN", + direction="l", + linebreak="al", + unicodeslot=0x13446, + variants=variants_expanded, + }, + [0x13447]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13447, + }, + [0x13448]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13448, + }, + [0x13449]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START", + direction="nsm", + linebreak="cm", + unicodeslot=0x13449, + }, + [0x1344A]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344A, + }, + [0x1344B]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344B, + }, + [0x1344C]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM START AND TOP END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344C, + }, + [0x1344D]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND TOP", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344D, + }, + [0x1344E]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344E, + }, + [0x1344F]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP START AND BOTTOM END", + direction="nsm", + linebreak="cm", + unicodeslot=0x1344F, + }, + [0x13450]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM", + direction="nsm", + linebreak="cm", + unicodeslot=0x13450, + }, + [0x13451]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM", + direction="nsm", + linebreak="cm", + unicodeslot=0x13451, + }, + [0x13452]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13452, + }, + [0x13453]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT TOP AND END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13453, + }, + [0x13454]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT BOTTOM AND END", + direction="nsm", + linebreak="cm", + unicodeslot=0x13454, + }, + [0x13455]={ + category="mn", + description="EGYPTIAN HIEROGLYPH MODIFIER DAMAGED", + direction="nsm", + linebreak="cm", + unicodeslot=0x13455, + }, [0x14400]={ category="lo", description="ANATOLIAN HIEROGLYPH A001", @@ -216633,6 +217695,14 @@ characters.data={ linebreak="id", unicodeslot=0x1B122, }, + [0x1B132]={ + category="lo", + cjkwd="w", + description="HIRAGANA LETTER SMALL KO", + direction="l", + linebreak="cj", + unicodeslot=0x1B132, + }, [0x1B150]={ category="lo", cjkwd="w", @@ -216657,6 +217727,14 @@ characters.data={ linebreak="cj", unicodeslot=0x1B152, }, + [0x1B155]={ + category="lo", + cjkwd="w", + description="KATAKANA LETTER SMALL KO", + direction="l", + linebreak="cj", + unicodeslot=0x1B155, + }, [0x1B164]={ category="lo", cjkwd="w", @@ -226073,6 +227151,146 @@ characters.data={ linebreak="al", unicodeslot=0x1D245, }, + [0x1D2C0]={ + category="no", + description="KAKTOVIK NUMERAL ZERO", + direction="l", + linebreak="al", + unicodeslot=0x1D2C0, + }, + [0x1D2C1]={ + category="no", + description="KAKTOVIK NUMERAL ONE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C1, + }, + [0x1D2C2]={ + category="no", + description="KAKTOVIK NUMERAL TWO", + direction="l", + linebreak="al", + unicodeslot=0x1D2C2, + }, + [0x1D2C3]={ + category="no", + description="KAKTOVIK NUMERAL THREE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C3, + }, + [0x1D2C4]={ + category="no", + description="KAKTOVIK NUMERAL FOUR", + direction="l", + linebreak="al", + unicodeslot=0x1D2C4, + }, + [0x1D2C5]={ + category="no", + description="KAKTOVIK NUMERAL FIVE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C5, + }, + [0x1D2C6]={ + category="no", + description="KAKTOVIK NUMERAL SIX", + direction="l", + linebreak="al", + unicodeslot=0x1D2C6, + }, + [0x1D2C7]={ + category="no", + description="KAKTOVIK NUMERAL SEVEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2C7, + }, + [0x1D2C8]={ + category="no", + description="KAKTOVIK NUMERAL EIGHT", + direction="l", + linebreak="al", + unicodeslot=0x1D2C8, + }, + [0x1D2C9]={ + category="no", + description="KAKTOVIK NUMERAL NINE", + direction="l", + linebreak="al", + unicodeslot=0x1D2C9, + }, + [0x1D2CA]={ + category="no", + description="KAKTOVIK NUMERAL TEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CA, + }, + [0x1D2CB]={ + category="no", + description="KAKTOVIK NUMERAL ELEVEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CB, + }, + [0x1D2CC]={ + category="no", + description="KAKTOVIK NUMERAL TWELVE", + direction="l", + linebreak="al", + unicodeslot=0x1D2CC, + }, + [0x1D2CD]={ + category="no", + description="KAKTOVIK NUMERAL THIRTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CD, + }, + [0x1D2CE]={ + category="no", + description="KAKTOVIK NUMERAL FOURTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CE, + }, + [0x1D2CF]={ + category="no", + description="KAKTOVIK NUMERAL FIFTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2CF, + }, + [0x1D2D0]={ + category="no", + description="KAKTOVIK NUMERAL SIXTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D0, + }, + [0x1D2D1]={ + category="no", + description="KAKTOVIK NUMERAL SEVENTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D1, + }, + [0x1D2D2]={ + category="no", + description="KAKTOVIK NUMERAL EIGHTEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D2, + }, + [0x1D2D3]={ + category="no", + description="KAKTOVIK NUMERAL NINETEEN", + direction="l", + linebreak="al", + unicodeslot=0x1D2D3, + }, [0x1D2E0]={ category="no", description="MAYAN NUMERAL ZERO", @@ -240727,6 +241945,48 @@ characters.data={ linebreak="al", unicodeslot=0x1DF1E, }, + [0x1DF25]={ + category="ll", + description="LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF25, + }, + [0x1DF26]={ + category="ll", + description="LATIN SMALL LETTER L WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF26, + }, + [0x1DF27]={ + category="ll", + description="LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF27, + }, + [0x1DF28]={ + category="ll", + description="LATIN SMALL LETTER R WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF28, + }, + [0x1DF29]={ + category="ll", + description="LATIN SMALL LETTER S WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF29, + }, + [0x1DF2A]={ + category="ll", + description="LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK", + direction="l", + linebreak="al", + unicodeslot=0x1DF2A, + }, [0x1E000]={ category="mn", combining=0xE6, @@ -241031,6 +242291,510 @@ characters.data={ linebreak="cm", unicodeslot=0x1E02A, }, + [0x1E030]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL A", + direction="l", + linebreak="al", + specials={ "super", 0x430 }, + unicodeslot=0x1E030, + }, + [0x1E031]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BE", + direction="l", + linebreak="al", + specials={ "super", 0x431 }, + unicodeslot=0x1E031, + }, + [0x1E032]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL VE", + direction="l", + linebreak="al", + specials={ "super", 0x432 }, + unicodeslot=0x1E032, + }, + [0x1E033]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL GHE", + direction="l", + linebreak="al", + specials={ "super", 0x433 }, + unicodeslot=0x1E033, + }, + [0x1E034]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL DE", + direction="l", + linebreak="al", + specials={ "super", 0x434 }, + unicodeslot=0x1E034, + }, + [0x1E035]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL IE", + direction="l", + linebreak="al", + specials={ "super", 0x435 }, + unicodeslot=0x1E035, + }, + [0x1E036]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ZHE", + direction="l", + linebreak="al", + specials={ "super", 0x436 }, + unicodeslot=0x1E036, + }, + [0x1E037]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ZE", + direction="l", + linebreak="al", + specials={ "super", 0x437 }, + unicodeslot=0x1E037, + }, + [0x1E038]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL I", + direction="l", + linebreak="al", + specials={ "super", 0x438 }, + unicodeslot=0x1E038, + }, + [0x1E039]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL KA", + direction="l", + linebreak="al", + specials={ "super", 0x43A }, + unicodeslot=0x1E039, + }, + [0x1E03A]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EL", + direction="l", + linebreak="al", + specials={ "super", 0x43B }, + unicodeslot=0x1E03A, + }, + [0x1E03B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EM", + direction="l", + linebreak="al", + specials={ "super", 0x43C }, + unicodeslot=0x1E03B, + }, + [0x1E03C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL O", + direction="l", + linebreak="al", + specials={ "super", 0x43E }, + unicodeslot=0x1E03C, + }, + [0x1E03D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL PE", + direction="l", + linebreak="al", + specials={ "super", 0x43F }, + unicodeslot=0x1E03D, + }, + [0x1E03E]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ER", + direction="l", + linebreak="al", + specials={ "super", 0x440 }, + unicodeslot=0x1E03E, + }, + [0x1E03F]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ES", + direction="l", + linebreak="al", + specials={ "super", 0x441 }, + unicodeslot=0x1E03F, + }, + [0x1E040]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL TE", + direction="l", + linebreak="al", + specials={ "super", 0x442 }, + unicodeslot=0x1E040, + }, + [0x1E041]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL U", + direction="l", + linebreak="al", + specials={ "super", 0x443 }, + unicodeslot=0x1E041, + }, + [0x1E042]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL EF", + direction="l", + linebreak="al", + specials={ "super", 0x444 }, + unicodeslot=0x1E042, + }, + [0x1E043]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL HA", + direction="l", + linebreak="al", + specials={ "super", 0x445 }, + unicodeslot=0x1E043, + }, + [0x1E044]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL TSE", + direction="l", + linebreak="al", + specials={ "super", 0x446 }, + unicodeslot=0x1E044, + }, + [0x1E045]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL CHE", + direction="l", + linebreak="al", + specials={ "super", 0x447 }, + unicodeslot=0x1E045, + }, + [0x1E046]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL SHA", + direction="l", + linebreak="al", + specials={ "super", 0x448 }, + unicodeslot=0x1E046, + }, + [0x1E047]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YERU", + direction="l", + linebreak="al", + specials={ "super", 0x44B }, + unicodeslot=0x1E047, + }, + [0x1E048]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL E", + direction="l", + linebreak="al", + specials={ "super", 0x44D }, + unicodeslot=0x1E048, + }, + [0x1E049]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YU", + direction="l", + linebreak="al", + specials={ "super", 0x44E }, + unicodeslot=0x1E049, + }, + [0x1E04A]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL DZZE", + direction="l", + linebreak="al", + specials={ "super", 0xA689 }, + unicodeslot=0x1E04A, + }, + [0x1E04B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL SCHWA", + direction="l", + linebreak="al", + specials={ "super", 0x4D9 }, + unicodeslot=0x1E04B, + }, + [0x1E04C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BYELORUSSIAN-UKRAINIAN I", + direction="l", + linebreak="al", + specials={ "super", 0x456 }, + unicodeslot=0x1E04C, + }, + [0x1E04D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL JE", + direction="l", + linebreak="al", + specials={ "super", 0x458 }, + unicodeslot=0x1E04D, + }, + [0x1E04E]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL BARRED O", + direction="l", + linebreak="al", + specials={ "super", 0x4E9 }, + unicodeslot=0x1E04E, + }, + [0x1E04F]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U", + direction="l", + linebreak="al", + specials={ "super", 0x4AF }, + unicodeslot=0x1E04F, + }, + [0x1E050]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL PALOCHKA", + direction="l", + linebreak="al", + specials={ "super", 0x4CF }, + unicodeslot=0x1E050, + }, + [0x1E051]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER A", + direction="l", + linebreak="al", + specials={ "sub", 0x430 }, + unicodeslot=0x1E051, + }, + [0x1E052]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER BE", + direction="l", + linebreak="al", + specials={ "sub", 0x431 }, + unicodeslot=0x1E052, + }, + [0x1E053]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER VE", + direction="l", + linebreak="al", + specials={ "sub", 0x432 }, + unicodeslot=0x1E053, + }, + [0x1E054]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER GHE", + direction="l", + linebreak="al", + specials={ "sub", 0x433 }, + unicodeslot=0x1E054, + }, + [0x1E055]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DE", + direction="l", + linebreak="al", + specials={ "sub", 0x434 }, + unicodeslot=0x1E055, + }, + [0x1E056]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER IE", + direction="l", + linebreak="al", + specials={ "sub", 0x435 }, + unicodeslot=0x1E056, + }, + [0x1E057]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ZHE", + direction="l", + linebreak="al", + specials={ "sub", 0x436 }, + unicodeslot=0x1E057, + }, + [0x1E058]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ZE", + direction="l", + linebreak="al", + specials={ "sub", 0x437 }, + unicodeslot=0x1E058, + }, + [0x1E059]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER I", + direction="l", + linebreak="al", + specials={ "sub", 0x438 }, + unicodeslot=0x1E059, + }, + [0x1E05A]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER KA", + direction="l", + linebreak="al", + specials={ "sub", 0x43A }, + unicodeslot=0x1E05A, + }, + [0x1E05B]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER EL", + direction="l", + linebreak="al", + specials={ "sub", 0x43B }, + unicodeslot=0x1E05B, + }, + [0x1E05C]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER O", + direction="l", + linebreak="al", + specials={ "sub", 0x43E }, + unicodeslot=0x1E05C, + }, + [0x1E05D]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER PE", + direction="l", + linebreak="al", + specials={ "sub", 0x43F }, + unicodeslot=0x1E05D, + }, + [0x1E05E]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER ES", + direction="l", + linebreak="al", + specials={ "sub", 0x441 }, + unicodeslot=0x1E05E, + }, + [0x1E05F]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER U", + direction="l", + linebreak="al", + specials={ "sub", 0x443 }, + unicodeslot=0x1E05F, + }, + [0x1E060]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER EF", + direction="l", + linebreak="al", + specials={ "sub", 0x444 }, + unicodeslot=0x1E060, + }, + [0x1E061]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER HA", + direction="l", + linebreak="al", + specials={ "sub", 0x445 }, + unicodeslot=0x1E061, + }, + [0x1E062]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER TSE", + direction="l", + linebreak="al", + specials={ "sub", 0x446 }, + unicodeslot=0x1E062, + }, + [0x1E063]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER CHE", + direction="l", + linebreak="al", + specials={ "sub", 0x447 }, + unicodeslot=0x1E063, + }, + [0x1E064]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER SHA", + direction="l", + linebreak="al", + specials={ "sub", 0x448 }, + unicodeslot=0x1E064, + }, + [0x1E065]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER HARD SIGN", + direction="l", + linebreak="al", + specials={ "sub", 0x44A }, + unicodeslot=0x1E065, + }, + [0x1E066]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER YERU", + direction="l", + linebreak="al", + specials={ "sub", 0x44B }, + unicodeslot=0x1E066, + }, + [0x1E067]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER GHE WITH UPTURN", + direction="l", + linebreak="al", + specials={ "sub", 0x491 }, + unicodeslot=0x1E067, + }, + [0x1E068]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER BYELORUSSIAN-UKRAINIAN I", + direction="l", + linebreak="al", + specials={ "sub", 0x456 }, + unicodeslot=0x1E068, + }, + [0x1E069]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DZE", + direction="l", + linebreak="al", + specials={ "sub", 0x455 }, + unicodeslot=0x1E069, + }, + [0x1E06A]={ + category="lm", + description="CYRILLIC SUBSCRIPT SMALL LETTER DZHE", + direction="l", + linebreak="al", + specials={ "sub", 0x45F }, + unicodeslot=0x1E06A, + }, + [0x1E06B]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL ES WITH DESCENDER", + direction="l", + linebreak="al", + specials={ "super", 0x4AB }, + unicodeslot=0x1E06B, + }, + [0x1E06C]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL YERU WITH BACK YER", + direction="l", + linebreak="al", + specials={ "super", 0xA651 }, + unicodeslot=0x1E06C, + }, + [0x1E06D]={ + category="lm", + description="MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE", + direction="l", + linebreak="al", + specials={ "super", 0x4B1 }, + unicodeslot=0x1E06D, + }, + [0x1E08F]={ + category="mn", + combining=0xE6, + description="COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E08F, + }, [0x1E100]={ category="lo", description="NYIAKENG PUACHUE HMONG LETTER MA", @@ -242170,6 +243934,304 @@ characters.data={ linebreak="pr", unicodeslot=0x1E2FF, }, + [0x1E4D0]={ + category="lo", + description="NAG MUNDARI LETTER O", + direction="l", + linebreak="al", + unicodeslot=0x1E4D0, + }, + [0x1E4D1]={ + category="lo", + description="NAG MUNDARI LETTER OP", + direction="l", + linebreak="al", + unicodeslot=0x1E4D1, + }, + [0x1E4D2]={ + category="lo", + description="NAG MUNDARI LETTER OL", + direction="l", + linebreak="al", + unicodeslot=0x1E4D2, + }, + [0x1E4D3]={ + category="lo", + description="NAG MUNDARI LETTER OY", + direction="l", + linebreak="al", + unicodeslot=0x1E4D3, + }, + [0x1E4D4]={ + category="lo", + description="NAG MUNDARI LETTER ONG", + direction="l", + linebreak="al", + unicodeslot=0x1E4D4, + }, + [0x1E4D5]={ + category="lo", + description="NAG MUNDARI LETTER A", + direction="l", + linebreak="al", + unicodeslot=0x1E4D5, + }, + [0x1E4D6]={ + category="lo", + description="NAG MUNDARI LETTER AJ", + direction="l", + linebreak="al", + unicodeslot=0x1E4D6, + }, + [0x1E4D7]={ + category="lo", + description="NAG MUNDARI LETTER AB", + direction="l", + linebreak="al", + unicodeslot=0x1E4D7, + }, + [0x1E4D8]={ + category="lo", + description="NAG MUNDARI LETTER ANY", + direction="l", + linebreak="al", + unicodeslot=0x1E4D8, + }, + [0x1E4D9]={ + category="lo", + description="NAG MUNDARI LETTER AH", + direction="l", + linebreak="al", + unicodeslot=0x1E4D9, + }, + [0x1E4DA]={ + category="lo", + description="NAG MUNDARI LETTER I", + direction="l", + linebreak="al", + unicodeslot=0x1E4DA, + }, + [0x1E4DB]={ + category="lo", + description="NAG MUNDARI LETTER IS", + direction="l", + linebreak="al", + unicodeslot=0x1E4DB, + }, + [0x1E4DC]={ + category="lo", + description="NAG MUNDARI LETTER IDD", + direction="l", + linebreak="al", + unicodeslot=0x1E4DC, + }, + [0x1E4DD]={ + category="lo", + description="NAG MUNDARI LETTER IT", + direction="l", + linebreak="al", + unicodeslot=0x1E4DD, + }, + [0x1E4DE]={ + category="lo", + description="NAG MUNDARI LETTER IH", + direction="l", + linebreak="al", + unicodeslot=0x1E4DE, + }, + [0x1E4DF]={ + category="lo", + description="NAG MUNDARI LETTER U", + direction="l", + linebreak="al", + unicodeslot=0x1E4DF, + }, + [0x1E4E0]={ + category="lo", + description="NAG MUNDARI LETTER UC", + direction="l", + linebreak="al", + unicodeslot=0x1E4E0, + }, + [0x1E4E1]={ + category="lo", + description="NAG MUNDARI LETTER UD", + direction="l", + linebreak="al", + unicodeslot=0x1E4E1, + }, + [0x1E4E2]={ + category="lo", + description="NAG MUNDARI LETTER UK", + direction="l", + linebreak="al", + unicodeslot=0x1E4E2, + }, + [0x1E4E3]={ + category="lo", + description="NAG MUNDARI LETTER UR", + direction="l", + linebreak="al", + unicodeslot=0x1E4E3, + }, + [0x1E4E4]={ + category="lo", + description="NAG MUNDARI LETTER E", + direction="l", + linebreak="al", + unicodeslot=0x1E4E4, + }, + [0x1E4E5]={ + category="lo", + description="NAG MUNDARI LETTER ENN", + direction="l", + linebreak="al", + unicodeslot=0x1E4E5, + }, + [0x1E4E6]={ + category="lo", + description="NAG MUNDARI LETTER EG", + direction="l", + linebreak="al", + unicodeslot=0x1E4E6, + }, + [0x1E4E7]={ + category="lo", + description="NAG MUNDARI LETTER EM", + direction="l", + linebreak="al", + unicodeslot=0x1E4E7, + }, + [0x1E4E8]={ + category="lo", + description="NAG MUNDARI LETTER EN", + direction="l", + linebreak="al", + unicodeslot=0x1E4E8, + }, + [0x1E4E9]={ + category="lo", + description="NAG MUNDARI LETTER ETT", + direction="l", + linebreak="al", + unicodeslot=0x1E4E9, + }, + [0x1E4EA]={ + category="lo", + description="NAG MUNDARI LETTER ELL", + direction="l", + linebreak="al", + unicodeslot=0x1E4EA, + }, + [0x1E4EB]={ + category="lm", + description="NAG MUNDARI SIGN OJOD", + direction="l", + linebreak="al", + unicodeslot=0x1E4EB, + }, + [0x1E4EC]={ + category="mn", + combining=0xE8, + description="NAG MUNDARI SIGN MUHOR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EC, + }, + [0x1E4ED]={ + category="mn", + combining=0xE8, + description="NAG MUNDARI SIGN TOYOR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4ED, + }, + [0x1E4EE]={ + category="mn", + combining=0xDC, + description="NAG MUNDARI SIGN IKIR", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EE, + }, + [0x1E4EF]={ + category="mn", + combining=0xE6, + description="NAG MUNDARI SIGN SUTUH", + direction="nsm", + linebreak="cm", + unicodeslot=0x1E4EF, + }, + [0x1E4F0]={ + category="nd", + description="NAG MUNDARI DIGIT ZERO", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F0, + }, + [0x1E4F1]={ + category="nd", + description="NAG MUNDARI DIGIT ONE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F1, + }, + [0x1E4F2]={ + category="nd", + description="NAG MUNDARI DIGIT TWO", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F2, + }, + [0x1E4F3]={ + category="nd", + description="NAG MUNDARI DIGIT THREE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F3, + }, + [0x1E4F4]={ + category="nd", + description="NAG MUNDARI DIGIT FOUR", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F4, + }, + [0x1E4F5]={ + category="nd", + description="NAG MUNDARI DIGIT FIVE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F5, + }, + [0x1E4F6]={ + category="nd", + description="NAG MUNDARI DIGIT SIX", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F6, + }, + [0x1E4F7]={ + category="nd", + description="NAG MUNDARI DIGIT SEVEN", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F7, + }, + [0x1E4F8]={ + category="nd", + description="NAG MUNDARI DIGIT EIGHT", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F8, + }, + [0x1E4F9]={ + category="nd", + description="NAG MUNDARI DIGIT NINE", + direction="l", + linebreak="nu", + unicodeslot=0x1E4F9, + }, [0x1E7E0]={ category="lo", description="ETHIOPIC SYLLABLE HHYA", @@ -258294,6 +260356,14 @@ characters.data={ linebreak="id", unicodeslot=0x1F6D7, }, + [0x1F6DC]={ + category="so", + cjkwd="w", + description="WIRELESS", + direction="on", + linebreak="id", + unicodeslot=0x1F6DC, + }, [0x1F6DD]={ category="so", cjkwd="w", @@ -259332,6 +261402,62 @@ characters.data={ linebreak="al", unicodeslot=0x1F773, }, + [0x1F774]={ + category="so", + description="LOT OF FORTUNE", + direction="on", + linebreak="id", + unicodeslot=0x1F774, + }, + [0x1F775]={ + category="so", + description="OCCULTATION", + direction="on", + linebreak="id", + unicodeslot=0x1F775, + }, + [0x1F776]={ + category="so", + description="LUNAR ECLIPSE", + direction="on", + linebreak="id", + unicodeslot=0x1F776, + }, + [0x1F77B]={ + category="so", + description="HAUMEA", + direction="on", + linebreak="id", + unicodeslot=0x1F77B, + }, + [0x1F77C]={ + category="so", + description="MAKEMAKE", + direction="on", + linebreak="id", + unicodeslot=0x1F77C, + }, + [0x1F77D]={ + category="so", + description="GONGGONG", + direction="on", + linebreak="id", + unicodeslot=0x1F77D, + }, + [0x1F77E]={ + category="so", + description="QUAOAR", + direction="on", + linebreak="id", + unicodeslot=0x1F77E, + }, + [0x1F77F]={ + category="so", + description="ORCUS", + direction="on", + linebreak="id", + unicodeslot=0x1F77F, + }, [0x1F780]={ category="so", description="BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE", @@ -259956,6 +262082,13 @@ characters.data={ linebreak="id", unicodeslot=0x1F7D8, }, + [0x1F7D9]={ + category="so", + description="NINE POINTED WHITE STAR", + direction="on", + linebreak="id", + unicodeslot=0x1F7D9, + }, [0x1F7E0]={ category="so", cjkwd="w", @@ -263879,6 +266012,30 @@ characters.data={ linebreak="id", unicodeslot=0x1FA74, }, + [0x1FA75]={ + category="so", + cjkwd="w", + description="LIGHT BLUE HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA75, + }, + [0x1FA76]={ + category="so", + cjkwd="w", + description="GREY HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA76, + }, + [0x1FA77]={ + category="so", + cjkwd="w", + description="PINK HEART", + direction="on", + linebreak="id", + unicodeslot=0x1FA77, + }, [0x1FA78]={ category="so", cjkwd="w", @@ -263975,6 +266132,22 @@ characters.data={ linebreak="id", unicodeslot=0x1FA86, }, + [0x1FA87]={ + category="so", + cjkwd="w", + description="MARACAS", + direction="on", + linebreak="id", + unicodeslot=0x1FA87, + }, + [0x1FA88]={ + category="so", + cjkwd="w", + description="FLUTE", + direction="on", + linebreak="id", + unicodeslot=0x1FA88, + }, [0x1FA90]={ category="so", cjkwd="w", @@ -264207,6 +266380,30 @@ characters.data={ linebreak="id", unicodeslot=0x1FAAC, }, + [0x1FAAD]={ + category="so", + cjkwd="w", + description="FOLDING HAND FAN", + direction="on", + linebreak="id", + unicodeslot=0x1FAAD, + }, + [0x1FAAE]={ + category="so", + cjkwd="w", + description="HAIR PICK", + direction="on", + linebreak="id", + unicodeslot=0x1FAAE, + }, + [0x1FAAF]={ + category="so", + cjkwd="w", + description="KHANDA", + direction="on", + linebreak="id", + unicodeslot=0x1FAAF, + }, [0x1FAB0]={ category="so", cjkwd="w", @@ -264295,6 +266492,38 @@ characters.data={ linebreak="id", unicodeslot=0x1FABA, }, + [0x1FABB]={ + category="so", + cjkwd="w", + description="HYACINTH", + direction="on", + linebreak="id", + unicodeslot=0x1FABB, + }, + [0x1FABC]={ + category="so", + cjkwd="w", + description="JELLYFISH", + direction="on", + linebreak="id", + unicodeslot=0x1FABC, + }, + [0x1FABD]={ + category="so", + cjkwd="w", + description="WING", + direction="on", + linebreak="id", + unicodeslot=0x1FABD, + }, + [0x1FABF]={ + category="so", + cjkwd="w", + description="GOOSE", + direction="on", + linebreak="id", + unicodeslot=0x1FABF, + }, [0x1FAC0]={ category="so", cjkwd="w", @@ -264343,6 +266572,22 @@ characters.data={ linebreak="eb", unicodeslot=0x1FAC5, }, + [0x1FACE]={ + category="so", + cjkwd="w", + description="MOOSE", + direction="on", + linebreak="id", + unicodeslot=0x1FACE, + }, + [0x1FACF]={ + category="so", + cjkwd="w", + description="DONKEY", + direction="on", + linebreak="id", + unicodeslot=0x1FACF, + }, [0x1FAD0]={ category="so", cjkwd="w", @@ -264423,6 +266668,22 @@ characters.data={ linebreak="id", unicodeslot=0x1FAD9, }, + [0x1FADA]={ + category="so", + cjkwd="w", + description="GINGER ROOT", + direction="on", + linebreak="id", + unicodeslot=0x1FADA, + }, + [0x1FADB]={ + category="so", + cjkwd="w", + description="PEA POD", + direction="on", + linebreak="id", + unicodeslot=0x1FADB, + }, [0x1FAE0]={ category="so", cjkwd="w", @@ -264487,6 +266748,14 @@ characters.data={ linebreak="id", unicodeslot=0x1FAE7, }, + [0x1FAE8]={ + category="so", + cjkwd="w", + description="SHAKING FACE", + direction="on", + linebreak="id", + unicodeslot=0x1FAE8, + }, [0x1FAF0]={ category="so", cjkwd="w", @@ -264543,6 +266812,22 @@ characters.data={ linebreak="eb", unicodeslot=0x1FAF6, }, + [0x1FAF7]={ + category="so", + cjkwd="w", + description="LEFTWARDS PUSHING HAND", + direction="on", + linebreak="eb", + unicodeslot=0x1FAF7, + }, + [0x1FAF8]={ + category="so", + cjkwd="w", + description="RIGHTWARDS PUSHING HAND", + direction="on", + linebreak="eb", + unicodeslot=0x1FAF8, + }, [0x1FB00]={ category="so", description="BLOCK SEXTANT-1", diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua index 9dcac8033..4deb21401 100644 --- a/tex/context/base/mkiv/char-ini.lua +++ b/tex/context/base/mkiv/char-ini.lua @@ -213,6 +213,7 @@ local blocks = allocate { ["arabic"] = { first = 0x00600, last = 0x006FF, otf="arab", description = "Arabic" }, ["arabicextendeda"] = { first = 0x008A0, last = 0x008FF, description = "Arabic Extended-A" }, ["arabicextendedb"] = { first = 0x00870, last = 0x0089F, description = "Arabic Extended-B" }, + ["arabicextendedc"] = { first = 0x10EC0, last = 0x10EFF, description = "Arabic Extended-C" }, ["arabicmathematicalalphabeticsymbols"] = { first = 0x1EE00, last = 0x1EEFF, description = "Arabic Mathematical Alphabetic Symbols" }, ["arabicpresentationformsa"] = { first = 0x0FB50, last = 0x0FDFF, otf="arab", description = "Arabic Presentation Forms-A" }, ["arabicpresentationformsb"] = { first = 0x0FE70, last = 0x0FEFF, otf="arab", description = "Arabic Presentation Forms-B" }, @@ -260,6 +261,7 @@ local blocks = allocate { ["cjkunifiedideographsextensione"] = { first = 0x2B820, last = 0x2CEAF, description = "CJK Unified Ideographs Extension E" }, ["cjkunifiedideographsextensionf"] = { first = 0x2CEB0, last = 0x2EBEF, description = "CJK Unified Ideographs Extension F" }, ["cjkunifiedideographsextensiong"] = { first = 0x30000, last = 0x3134F, description = "CJK Unified Ideographs Extension G" }, + ["cjkunifiedideographsextensionh"] = { first = 0x31350, last = 0x323AF, description = "CJK Unified Ideographs Extension H" }, ["combiningdiacriticalmarks"] = { first = 0x00300, last = 0x0036F, description = "Combining Diacritical Marks" }, ["combiningdiacriticalmarksextended"] = { first = 0x01AB0, last = 0x01AFF, description = "Combining Diacritical Marks Extended" }, ["combiningdiacriticalmarksforsymbols"] = { first = 0x020D0, last = 0x020FF, description = "Combining Diacritical Marks for Symbols" }, @@ -279,10 +281,12 @@ local blocks = allocate { ["cyrillicextendeda"] = { first = 0x02DE0, last = 0x02DFF, otf="cyrl", description = "Cyrillic Extended-A" }, ["cyrillicextendedb"] = { first = 0x0A640, last = 0x0A69F, otf="cyrl", description = "Cyrillic Extended-B" }, ["cyrillicextendedc"] = { first = 0x01C80, last = 0x01C8F, description = "Cyrillic Extended-C" }, + ["cyrillicextendedd"] = { first = 0x1E030, last = 0x1E08F, description = "Cyrillic Extended-D" }, ["cyrillicsupplement"] = { first = 0x00500, last = 0x0052F, otf="cyrl", description = "Cyrillic Supplement" }, ["deseret"] = { first = 0x10400, last = 0x1044F, otf="dsrt", description = "Deseret" }, ["devanagari"] = { first = 0x00900, last = 0x0097F, otf="deva", description = "Devanagari" }, ["devanagariextended"] = { first = 0x0A8E0, last = 0x0A8FF, description = "Devanagari Extended" }, + ["devanagariextendeda"] = { first = 0x11B00, last = 0x11B5F, description = "Devanagari Extended-A" }, ["digitsarabicindic"] = { first = 0x00660, last = 0x00669, math = true }, -- ["digitsbengali"] = { first = 0x009E6, last = 0x009EF, math = true }, ["digitsbold"] = { first = 0x1D7CE, last = 0x1D7D7, math = true }, @@ -314,7 +318,7 @@ local blocks = allocate { ["dominotiles"] = { first = 0x1F030, last = 0x1F09F, description = "Domino Tiles" }, ["duployan"] = { first = 0x1BC00, last = 0x1BC9F, description = "Duployan" }, ["earlydynasticcuneiform"] = { first = 0x12480, last = 0x1254F, description = "Early Dynastic Cuneiform" }, - ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1343F, description = "Egyptian Hieroglyph Format Controls" }, + ["egyptianhieroglyphformatcontrols"] = { first = 0x13430, last = 0x1345F, description = "Egyptian Hieroglyph Format Controls" }, ["egyptianhieroglyphs"] = { first = 0x13000, last = 0x1342F, description = "Egyptian Hieroglyphs" }, ["elbasan"] = { first = 0x10500, last = 0x1052F, description = "Elbasan" }, ["elymaic"] = { first = 0x10FE0, last = 0x10FFF, description = "Elymaic" }, @@ -365,6 +369,7 @@ local blocks = allocate { ["ipaextensions"] = { first = 0x00250, last = 0x002AF, description = "IPA Extensions" }, ["javanese"] = { first = 0x0A980, last = 0x0A9DF, description = "Javanese" }, ["kaithi"] = { first = 0x11080, last = 0x110CF, description = "Kaithi" }, + ["kaktoviknumerals"] = { first = 0x1D2C0, last = 0x1D2DF, description = "Kaktovik Numerals" }, ["kanaextendeda"] = { first = 0x1B100, last = 0x1B12F, description = "Kana Extended-A" }, ["kanaextendedb"] = { first = 0x1AFF0, last = 0x1AFFF, description = "Kana Extended-B" }, ["kanasupplement"] = { first = 0x1B000, last = 0x1B0FF, description = "Kana Supplement" }, @@ -374,6 +379,7 @@ local blocks = allocate { ["katakana"] = { first = 0x030A0, last = 0x030FF, otf="kana", description = "Katakana" }, ["katakanaphoneticextensions"] = { first = 0x031F0, last = 0x031FF, otf="kana", description = "Katakana Phonetic Extensions" }, ["kayahli"] = { first = 0x0A900, last = 0x0A92F, description = "Kayah Li" }, + ["kawi"] = { first = 0x11F00, last = 0x11F5F, description = "Kawi" }, ["kharoshthi"] = { first = 0x10A00, last = 0x10A5F, otf="khar", description = "Kharoshthi" }, ["khitansmallscript"] = { first = 0x18B00, last = 0x18CFF, description = "Khitan Small Script" }, ["khmer"] = { first = 0x01780, last = 0x017FF, otf="khmr", description = "Khmer" }, @@ -456,6 +462,7 @@ local blocks = allocate { ["myanmarextendeda"] = { first = 0x0AA60, last = 0x0AA7F, description = "Myanmar Extended-A" }, ["myanmarextendedb"] = { first = 0x0A9E0, last = 0x0A9FF, description = "Myanmar Extended-B" }, ["nabataean"] = { first = 0x10880, last = 0x108AF, description = "Nabataean" }, + ["nagmundari"] = { first = 0x1E4D0, last = 0x1E4FF, description = "Nag Mundari" }, ["nandinagari"] = { first = 0x119A0, last = 0x119FF, description = "Nandinagari" }, ["newa"] = { first = 0x11400, last = 0x1147F, description = "Newa" }, ["newtailue"] = { first = 0x01980, last = 0x019DF, description = "New Tai Lue" }, @@ -585,7 +592,20 @@ local blocks = allocate { ["yiradicals"] = { first = 0x0A490, last = 0x0A4CF, otf="yi", description = "Yi Radicals" }, ["yisyllables"] = { first = 0x0A000, last = 0x0A48F, otf="yi", description = "Yi Syllables" }, ["zanabazarsquare"] = { first = 0x11A00, last = 0x11A4F, description = "Zanabazar Square" }, - ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" } + ["znamennymusicalnotation"] = { first = 0x1CF00, last = 0x1CFCF, description = "Znamenny Musical Notation" }, + + -- we need this early on: + + ["lowercasecalligraphic"] = { first = 0x100000, last = 0x100019, math = true }, + ["uppercasecalligraphic"] = { first = 0x100020, last = 0x100039, math = true }, + ["lowercaseboldcalligraphic"] = { first = 0x100040, last = 0x100059, math = true }, + ["uppercaseboldcalligraphic"] = { first = 0x100060, last = 0x100079, math = true }, + -- ["lowercasesansgreek"] = { first = 0x100040, last = 0x100059, math = true }, -- reserved for future use + -- ["uppercasesansgreek"] = { first = 0x100060, last = 0x100079, math = true }, -- reserved for future use + -- ["lowercaseitalicsansgreek"] = { first = 0x100080, last = 0x100099, math = true }, -- reserved for future use + -- ["uppercaseitalicsansgreek"] = { first = 0x1000A0, last = 0x1000B9, math = true }, -- reserved for future use + -- ["lowercaseblackboarditalic"] = { first = 0x1000C0, last = 0x1000D9, math = true }, -- reserved for future use + -- ["uppercaseblackboarditalic"] = { first = 0x1000E0, last = 0x1000F9, math = true }, -- reserved for future use } -- moved from math-act.lua to here: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 40594ad05..688232bf2 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 1de2ec104..7b5df628c 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2022.09.16 14:39} +\edef\contextversion{2022.10.14 10:13} %D Kind of special: diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua index 114d7dd07..4b60cd6c0 100644 --- a/tex/context/base/mkiv/font-cff.lua +++ b/tex/context/base/mkiv/font-cff.lua @@ -348,11 +348,11 @@ do top = 0 end + P("\10") / function() - result.strhw = stack[top] + result.stdhw = stack[top] top = 0 end + P("\11") / function() - result.strvw = stack[top] + result.stdvw = stack[top] top = 0 end + P("\13") / function() @@ -453,7 +453,7 @@ do top = 0 end + P("\10") / function() - result.bluesnap = stack[top] + result.blueshift = stack[top] top = 0 end + P("\11") / function() @@ -528,7 +528,7 @@ do -- the second variant is much faster. Not that it matters much as we don't see -- such numbers often. - local remap = { + local remap_1 = { ["\x00"] = "00", ["\x01"] = "01", ["\x02"] = "02", ["\x03"] = "03", ["\x04"] = "04", ["\x05"] = "05", ["\x06"] = "06", ["\x07"] = "07", ["\x08"] = "08", ["\x09"] = "09", ["\x0A"] = "0.", ["\x0B"] = "0E", ["\x0C"] = "0E-", ["\x0D"] = "0", ["\x0E"] = "0-", ["\x0F"] = "0", ["\x10"] = "10", ["\x11"] = "11", ["\x12"] = "12", ["\x13"] = "13", ["\x14"] = "14", ["\x15"] = "15", ["\x16"] = "16", ["\x17"] = "17", ["\x18"] = "18", ["\x19"] = "19", ["\x1A"] = "1.", ["\x1B"] = "1E", ["\x1C"] = "1E-", ["\x1D"] = "1", ["\x1E"] = "1-", ["\x1F"] = "1", ["\x20"] = "20", ["\x21"] = "21", ["\x22"] = "22", ["\x23"] = "23", ["\x24"] = "24", ["\x25"] = "25", ["\x26"] = "26", ["\x27"] = "27", ["\x28"] = "28", ["\x29"] = "29", ["\x2A"] = "2.", ["\x2B"] = "2E", ["\x2C"] = "2E-", ["\x2D"] = "2", ["\x2E"] = "2-", ["\x2F"] = "2", @@ -544,11 +544,18 @@ do ["\xC0"] = "E-0", ["\xC1"] = "E-1", ["\xC2"] = "E-2", ["\xC3"] = "E-3", ["\xC4"] = "E-4", ["\xC5"] = "E-5", ["\xC6"] = "E-6", ["\xC7"] = "E-7", ["\xC8"] = "E-8", ["\xC9"] = "E-9", ["\xCA"] = "E-.", ["\xCB"] = "E-E", ["\xCC"] = "E-E-", ["\xCD"] = "E-", ["\xCE"] = "E--", ["\xCF"] = "E-", ["\xD0"] = "-0", ["\xD1"] = "-1", ["\xD2"] = "-2", ["\xD3"] = "-3", ["\xD4"] = "-4", ["\xD5"] = "-5", ["\xD6"] = "-6", ["\xD7"] = "-7", ["\xD8"] = "-8", ["\xD9"] = "-9", ["\xDA"] = "-.", ["\xDB"] = "-E", ["\xDC"] = "-E-", ["\xDD"] = "-", ["\xDE"] = "--", ["\xDF"] = "-", } + local remap_2 = { + ["\x0F"] = "0", ["\x1F"] = "1", ["\x2F"] = "2", ["\x3F"] = "3", ["\x4F"] = "4", + ["\x5F"] = "5", ["\x6F"] = "6", ["\x7F"] = "7", ["\x8F"] = "8", ["\x9F"] = "9", + } + + local p_last_1 = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") + local p_last_2 = R("\xF0\xFF") - local p_last = S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") - + R("\xF0\xFF") + -- tricky, we don't want to append last - local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n) + -- local p_nibbles = P("\30") * Cs(((1-p_last)/remap)^0 * (P(1)/remap)) / function(n) + local p_nibbles = P("\30") * Cs(((1-(p_last_1+p_last_2))/remap_1)^0 * (p_last_1/remap_2 + p_last_2/"")) / function(n) -- 0-9=digit a=. b=E c=E- d=reserved e=- f=finish top = top + 1 stack[top] = tonumber(n) or 0 @@ -2715,6 +2722,8 @@ function readers.cff(f,fontdata,specification) cffinfo.bluefuzz = data.bluefuzz cffinfo.stdhw = data.stdhw cffinfo.stdvw = data.stdvw + cffinfo.stemsnaph = data.stemsnaph + cffinfo.stemsnapv = data.stemsnapv end end cleanup(data,dictionaries) diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua index 8f65ed9d9..1735b4cdc 100644 --- a/tex/context/base/mkiv/font-dsp.lua +++ b/tex/context/base/mkiv/font-dsp.lua @@ -2177,6 +2177,8 @@ do -- local usedlookups = false -- setmetatableindex("number") -- + local allsteps = { } -- new per 2022-09-25 + for lookupid=1,noflookups do local lookup = lookups[lookupid] local lookuptype = lookup.type @@ -2214,6 +2216,7 @@ do steps[nofsteps] = step local rules = step.rules if rules then + allsteps[#allsteps+1] = step -- new per 2022-09-25 for i=1,#rules do local rule = rules[i] local before = rule.before @@ -2337,11 +2340,14 @@ do end end - for i=lastsequence+1,nofsequences do - local sequence = sequences[i] - local steps = sequence.steps - for i=1,#steps do - local step = steps[i] + -- for i=lastsequence+1,nofsequences do + -- local sequence = sequences[i] + -- local steps = sequence.steps + -- for i=1,#steps do + -- local step = steps[i] + + for i=1,#allsteps do -- new per 2022-09-25 + local step = allsteps[i] -- new per 2022-09-25 local rules = step.rules if rules then for i=1,#rules do @@ -2419,7 +2425,7 @@ do end end end - end + -- end -- new per 2022-09-25 for i, n in sortedhash(sublookupcheck) do local l = lookups[i] @@ -2881,7 +2887,7 @@ local function readmathglyphinfo(f,fontdata,offset) if not math then glyph.math = { accent = accent } else - math.accent = accent + math.accent = accent -- will become math.topanchor end end end diff --git a/tex/context/base/mkiv/font-imp-italics.lua b/tex/context/base/mkiv/font-imp-italics.lua index 6c432d7cf..10a419daf 100644 --- a/tex/context/base/mkiv/font-imp-italics.lua +++ b/tex/context/base/mkiv/font-imp-italics.lua @@ -6,7 +6,7 @@ if not modules then modules = { } end modules ['font-imp-italics'] = { license = "see context related readme files" } -local next = next +local next, tonumber = next, tonumber local fonts = fonts local handlers = fonts.handlers @@ -14,11 +14,13 @@ local registerotffeature = handlers.otf.features.register local registerafmfeature = handlers.afm.features.register local function initialize(tfmdata,key,value) + local factor = tonumber(value) or 1 for unicode, character in next, tfmdata.characters do local olditalic = character.italic if olditalic and olditalic ~= 0 then - character.width = character.width + olditalic - character.italic = 0 + character.width = character.width + olditalic + character.italic = 0 + character.bottomright = -factor * olditalic end end end diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua index c294bd638..5ae6659c5 100644 --- a/tex/context/base/mkiv/font-mis.lua +++ b/tex/context/base/mkiv/font-mis.lua @@ -21,7 +21,7 @@ local readers = otf.readers if readers then - otf.version = otf.version or 3.120 + otf.version = otf.version or 3.121 otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true) function fonts.helpers.getfeatures(name,save) diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua index ecf8009f9..f35be2cd1 100644 --- a/tex/context/base/mkiv/font-osd.lua +++ b/tex/context/base/mkiv/font-osd.lua @@ -6,16 +6,6 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag license = "see context related readme files" } --- local experiment1 = false --- local experiment2 = false --- local experiment2b1 = false --- local experiment2b2 = false - --- experiments.register("fonts.indic.experiment1", function(v) experiment1 = v end) --- experiments.register("fonts.indic.experiment2", function(v) experiment2 = v end) --- experiments.register("fonts.indic.experiment2b1", function(v) experiment2b1 = v end) --- experiments.register("fonts.indic.experiment2b2", function(v) experiment2b2 = v end) - -- we need to check nbsphash (context only) -- A few remarks: @@ -1392,16 +1382,13 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end if reph or vattu then --- print(">>> has reph or vattu") local current = start local cns = nil local done = false while current ~= stop do --- print("\t>>> current ~= stop yet") local c = current local n = getnext(current) if ra[getchar(current)] and halant[getchar(n)] then --- print("\t\t>>> current ra; next halant") c = n n = getnext(n) local b, bn = base, base @@ -1415,7 +1402,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) if getstate(current,s_rphf) then -- position Reph (Ra + H) after post-base 'matra' (if any) since these -- become marks on the 'matra', not on the base glyph --- print("\t\t\t>>> ra + halant form → reph") if b ~= current then if current == start then if head == start then @@ -1435,7 +1421,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end elseif cns and getnext(cns) ~= current then -- todo: optimize next -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants) --- print("\t\t\t>>> ra below base (vattu) → rkrf") local cp = getprev(current) local cnsn = getnext(cns) setlink(cp,n) @@ -1449,17 +1434,14 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) current = getprev(n) end else --- print("\t\t>>> NOT! current ra; next halant") local char = getchar(current) if consonant[char] then --- print("\t\t\t>>> is consonant") cns = current local next = getnext(cns) if halant[getchar(next)] then cns = next end if not vatucache[char] then --- print("\t\t\t\t>>> is in vatucache") next = getnext(cns) while dependent_vowel[getchar(next)] do cns = next @@ -1467,7 +1449,6 @@ local function reorder_one(head,start,stop,font,attr,nbspaces) end end elseif char == c_nbsp then --- print("\t\t\t>>> is nbsp") nbspaces = nbspaces + 1 cns = current local next = getnext(cns) @@ -1936,8 +1917,6 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas reorderreph.coverage = { } -- use local rephbase[font] = { } -- use local --- print("!!!!!! reorder two ") - for i=1,#seqsubset do -- this can be done more efficient, the last test and less getnext @@ -2064,7 +2043,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end - local current, base, firstcons = start, nil, nil + local current, base, firstcons, subnotafterbase, postnotafterbase = start, nil, nil, nil, nil if getstate(start,s_rphf) then -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants @@ -2125,10 +2104,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end else -- not Stand Alone cluster --- print("!!!! not standalone cluster") local last = getnext(stop) while current ~= last do -- find base consonant local next = getnext(current) +-- IF PATCHED THEN +-- if current == subpos then +-- subnotafterbase = current +-- end +-- if current == postpos then +-- postnotafterbase = current +-- end +-- END if consonant[getchar(current)] then if not (current ~= stop and next ~= stop and halant[getchar(next)] and getchar(getnext(next)) == c_zwj) then if not firstcons then @@ -2138,6 +2124,14 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas local a = getstate(current) if not (a == s_blwf or a == s_pstf or (a ~= s_rphf and a ~= s_blwf and ra[getchar(current)])) then base = current +-- IF PATCHED THEN +-- if subnotafterbase then +-- subpos = base +-- end +-- if postnotafterbase then +-- postpos = base +-- end +-- END end end end @@ -2195,12 +2189,17 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end -- --- print("char: " .. char) --- if not moved[current] and dependent_vowel[char] then - if dependent_vowel[char] then --- print(">>!! dependent vowel") +-- IF PATCHED THEN +-- if dependent_vowel[char] then +-- ELSE + if not moved[current] and dependent_vowel[char] then +-- END if pre_mark[char] then -- or: if before_main or before_half +-- IF PATCHED THEN +-- -- nothing +-- ELSE moved[current] = true +-- END -- can be helper to remove one node local prev, next = getboth(current) setlink(prev,next) @@ -2251,6 +2250,13 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end elseif above_mark[char] then -- after main consonant +-- IF PATCHED +-- target = subpos +-- if postpos == subpos then +-- postpos = current +-- end +-- subpos = current +-- ELSE target = basepos if subpos == basepos then subpos = current @@ -2259,6 +2265,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas postpos = current end basepos = current +-- END elseif below_mark[char] then -- after subjoined consonants target = subpos @@ -2502,12 +2509,16 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe if pre_mark[v] and not already_pre_mark then already_pre_mark = true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts == "mixed" then - -- for messy fonts - return c - else - already_post_mark = true - end +-- IF PATCHED THEN +-- already_post_mark = true +-- ELSE + if devanagarihash[font].conjuncts == "mixed" then + -- for messy fonts + return c + else + already_post_mark = true + end +-- END elseif below_mark[v] and not already_below_mark then already_below_mark = true elseif above_mark[v] and not already_above_mark then @@ -2710,10 +2721,6 @@ local function analyze_next_chars_two(c,font) for k=1,#vowels do local v = vowels[k] if pre_mark[v] and not already_pre_mark then --- print(">>> pre_mark") --- if dependent_vowel[v] then --- print(">>>> dependent vowel") --- end already_pre_mark = true elseif above_mark[v] and not already_above_mark then already_above_mark = true @@ -2731,12 +2738,16 @@ local function analyze_next_chars_two(c,font) if pre_mark[v] and not already_pre_mark then already_pre_mark = true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts == "mixed" then - -- for messy fonts - return c - else - already_post_mark = true - end +-- IF PATCHED THEN +-- already_post_mark = true +-- ELSE + if devanagarihash[font].conjuncts == "mixed" then + -- for messy fonts + return c + else + already_post_mark = true + end +-- END elseif below_mark[v] and not already_below_mark then already_below_mark = true elseif above_mark[v] and not already_above_mark then @@ -3068,15 +3079,12 @@ local function method_two(head,font,attr) end end if independent_vowel[char] then --- print("!!>>> independent_vowel") -- vowel-based syllable: [Ra+H]+V+[N]+[<[<ZWJ|ZWNJ>]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,1) syllableend = current else --- print("!!>>> dependent vowel") local standalone = char == c_nbsp if standalone then --- print("!!>>> standalone") nbspaces = nbspaces + 1 local p = getprev(current) if not p then @@ -3090,12 +3098,10 @@ local function method_two(head,font,attr) end end if standalone then --- print("!!>>>>>>> next standalone") -- Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[<ZWJ|ZWNJ>]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)] current = analyze_next_chars_one(c,font,2) syllableend = current elseif consonant[getchar(current)] then --- print("!!>>>>>>> a consonant") -- WHY current INSTEAD OF c ? -- Consonant syllable: {C+[N]+<H+[<ZWNJ|ZWJ>]|<ZWNJ|ZWJ>+H>} + C+[N]+[A] + [< H+[<ZWNJ|ZWJ>] | {M}+[N]+[H]>]+[SM]+[(VD)] current = analyze_next_chars_two(current,font) -- not c ! @@ -3104,7 +3110,6 @@ local function method_two(head,font,attr) end end if syllableend then --- print("!!!>>> syllable end") syllabe = syllabe + 1 local c = syllablestart local n = getnext(syllableend) diff --git a/tex/context/base/mkiv/font-otc.lua b/tex/context/base/mkiv/font-otc.lua index 67b77b111..f83c3e8ec 100644 --- a/tex/context/base/mkiv/font-otc.lua +++ b/tex/context/base/mkiv/font-otc.lua @@ -142,6 +142,12 @@ local function addfeature(data,feature,specifications,prepareonly) local descriptions = data.descriptions local resources = data.resources + + if not descriptions or not resources then + report_otf("missing specification") + return + end + local features = resources.features local sequences = resources.sequences diff --git a/tex/context/base/mkiv/font-otl.lua b/tex/context/base/mkiv/font-otl.lua index f36e533ca..9493bd03c 100644 --- a/tex/context/base/mkiv/font-otl.lua +++ b/tex/context/base/mkiv/font-otl.lua @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua index 7de108d4c..b3055976a 100644 --- a/tex/context/base/mkiv/font-ots.lua +++ b/tex/context/base/mkiv/font-ots.lua @@ -8,6 +8,11 @@ if not modules then modules = { } end modules ['font-ots'] = { -- sequences } --[[ldx-- +<p>I need to check the description at the microsoft site ... it has been improved +so maybe there are some interesting details there. Most below is based on old and +incomplete documentation and involved quite a bit of guesswork (checking with the +abstract uniscribe of those days. But changing things is tricky!</p> + <p>This module is a bit more split up that I'd like but since we also want to test with plain <l n='tex'/> it has to be so. This module is part of <l n='context'/> and discussion about improvements and functionality mostly happens on the @@ -165,13 +170,8 @@ local forcepairadvance = false -- for testing local repeatablemultiples = context or false -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries = v -end) - -directives.register("otf.forcepairadvance",function(v) - forcepairadvance = v -end) +directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end) +directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end) local report_direct = logs.reporter("fonts","otf direct") local report_subchain = logs.reporter("fonts","otf subchain") @@ -197,7 +197,6 @@ local setboth = nuts.setboth local getid = nuts.getid local getstate = nuts.getstate local getsubtype = nuts.getsubtype -local setsubtype = nuts.setsubtype local getchar = nuts.getchar local setchar = nuts.setchar local getdisc = nuts.getdisc @@ -229,10 +228,10 @@ local ischar = nuts.ischar local usesfont = nuts.usesfont local insertnodeafter = nuts.insertafter -local copy_node = nuts.copy -local copy_node_list = nuts.copylist -local remove_node = nuts.remove -local find_node_tail = nuts.tail +local copynode = nuts.copy +local copynodelist = nuts.copylist +local removenode = nuts.remove +local findnodetail = nuts.tail local flushnodelist = nuts.flushlist local flushnode = nuts.flushnode local endofmath = nuts.endofmath @@ -244,12 +243,8 @@ local setmetatableindex = table.setmetatableindex local nextnode = nuts.traversers.node ------ zwnj = 0x200C ------ zwj = 0x200D - local nodecodes = nodes.nodecodes local glyphcodes = nodes.glyphcodes -local disccodes = nodes.disccodes local glyph_code = nodecodes.glyph local glue_code = nodecodes.glue @@ -261,8 +256,7 @@ local par_code = nodecodes.par local lefttoright_code = nodes.dirvalues.lefttoright local righttoleft_code = nodes.dirvalues.righttoleft -local discretionarydisc_code = disccodes.discretionary -local ligatureglyph_code = glyphcodes.ligature +local discretionarydisc_code = nodes.disccodes.discretionary local a_noligature = attributes.private("noligature") @@ -377,7 +371,7 @@ local function cref(dataset,sequence,index) return "no valid dataset" end local merged = sequence.merged and "merged " or "" - if index then + if index and index > 1 then return formatters["feature %a, type %a, %schain lookup %a, index %a"]( dataset[4],sequence.type,merged,sequence.name,index) else @@ -455,7 +449,7 @@ end local function appenddisc(disc,list) local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true) local posthead = list - local replacehead = copy_node_list(list) + local replacehead = copynodelist(list) if post then setlink(posttail,posthead) else @@ -483,7 +477,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -536,7 +529,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -560,7 +552,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if trace_marks then logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start)) end - local n = copy_node(start) + local n = copynode(start) copyinjection(n,start) -- is this ok ? we position later anyway head, current = insertnodeafter(head,current,n) -- unlikely that mark has components elseif trace_marks then @@ -634,67 +626,68 @@ end local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what to do with skiphash matches here local nofmultiples = #multiple if nofmultiples > 0 then + local first = start resetinjection(start) setchar(start,multiple[1]) if nofmultiples > 1 then - local sn = getnext(start) - for k=2,nofmultiples do + -- local sn = getnext(start) + for i=2,nofmultiples do -- untested: -- -- while ignoremarks and marks[getchar(sn)] then -- local sn = getnext(sn) -- end - local n = copy_node(start) -- ignore components + local n = copynode(start) -- ignore components resetinjection(n) - setchar(n,multiple[k]) + setchar(n,multiple[i]) insertnodeafter(head,start,n) start = n end - if what ~= true and repeatablemultiples then - -- This is just some experimental code; we might introduce gsub_extensible - -- some day instead. Beware: when we have a feature that mixes alternates and - -- multiples we need to make sure we don't handle the alternate string values - -- here. This might eventually become an lmtx only feature. - local kind = type(what) - local m, f, l - if kind == "string" then - local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") - if what == "middle" then - m = tonumber(n) - elseif what == "first" then - f = tonumber(n) - elseif what == "last" then - l = tonumber(n) - end - elseif kind == "table" then - -- won't happen because currently we don't split these values - m = what.middle - f = what.first - l = what.last + end + if what ~= true and repeatablemultiples then + -- This is just some experimental code; we might introduce gsub_extensible + -- some day instead. Beware: when we have a feature that mixes alternates and + -- multiples we need to make sure we don't handle the alternate string values + -- here. + local kind = type(what) + local m, f, l + if kind == "string" then + local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") + if what == "middle" then + m = tonumber(n) + elseif what == "first" then + f = tonumber(n) + elseif what == "last" then + l = tonumber(n) end - if f or m or l then - if m and m > 1 and nofmultiples == 3 then - local middle = getnext(first) - for i=2,m do - local n = copynode(middle) -- ignore components - resetinjection(n) - insertnodeafter(head,first,n) - end + elseif kind == "table" then + -- won't happen because currently we don't split these values + m = what.middle + f = what.first + l = what.last + end + if f or m or l then + if m and m > 1 and nofmultiples == 3 then + local middle = getnext(first) + for i=2,m do + local n = copynode(middle) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) end - if f and f > 1 then - for i=2,f do - local n = copynode(first) -- ignore components - resetinjection(n) - insertnodeafter(head,first,n) - end + end + if f and f > 1 then + for i=2,f do + local n = copynode(first) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) end - if l and l > 1 then - for i=2,l do - local n = copynode(start) -- ignore components - resetinjection(n) - insertnodeafter(head,start,n) - start = n - end + end + if l and l > 1 then + for i=2,l do + local n = copynode(start) -- ignore components + resetinjection(n) + insertnodeafter(head,start,n) + start = n end end end @@ -894,9 +887,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local prev = getprev(start) if stop then setnext(stop) - local copy = copy_node_list(start) + local copy = copynodelist(start) local tail = stop -- was: getprev(stop) -- Kai: needs checking on your samples - local liat = find_node_tail(copy) + local liat = findnodetail(copy) if pre then setlink(liat,pre) end @@ -907,7 +900,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip replace = start else setnext(start) - local copy = copy_node(start) + local copy = copynode(start) if pre then setlink(copy,pre) end @@ -1321,7 +1314,7 @@ as less as needed but that would also make the code even more messy.</p> -- To be done (example needed): what if > 1 steps --- this is messy: do we need this disc checking also in alternaties? +-- this is messy: do we need this disc checking also in alternates? local function reportzerosteps(dataset,sequence) logwarning("%s: no steps",cref(dataset,sequence)) @@ -1357,7 +1350,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r if trace_chains then logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start))) end - head, start = remove_node(head,start,true) + head, start = removenode(head,start,true) return head, getprev(start), true end @@ -1952,7 +1945,7 @@ do if not userkern then -- generic local setkern = nuts.setkern -- not injections.setkern userkern = function(k) - local n = copy_node(thekern) + local n = copynode(thekern) setkern(n,k) return n end @@ -1994,12 +1987,11 @@ end local noflags = { false, false, false, false } -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size = ck[5] - ck[4] + 1 local chainlookups = ck[6] local done = false - -- current match if chainlookups then -- Lookups can be like { 1, false, 3 } or { false, 2 } or basically anything and @@ -2010,23 +2002,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) -- if nofchainlookups > size then -- -- bad rules -- end - local chainlookup = chainlookups[1] - for j=1,#chainlookup do - local chainstep = chainlookup[j] - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok - -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. - -- char + mark -> char where mark has to disappear - head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - if ok then - done = true + if chainlookup then + for j=1,#chainlookup do + local chainstep = chainlookup[j] + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok + -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. + -- char + mark -> char where mark has to disappear + head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + if ok then + done = true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + end + else + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end + else + -- whatever end else @@ -2067,23 +2066,28 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) if chainlookup then for j=1,#chainlookup do local chainstep = chainlookup[j] - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok, n - head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) - -- messy since last can be changed ! - if ok then - done = true - if n and n > 1 and i + n > nofchainlookups then - -- this is a safeguard, we just ignore the rest of the lookups - i = size -- prevents an advance - break + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok, n + head, start, ok, n = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) + -- messy since last can be changed ! + if ok then + done = true + if n and n > 1 and i + n > nofchainlookups then + -- this is a safeguard, we just ignore the rest of the lookups + i = size -- prevents an advance + break + end end + else + -- actually an error + logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) end else -- actually an error - logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (2)",cref(dataset,sequence)) end end else @@ -2111,7 +2115,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done = true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -2141,6 +2145,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last = start local prev = getprev(start) local hasglue = false + local useddisc = nil -- new 2022-09-25 + local usedstart = start -- new 2022-09-25 -- fishy: so we can overflow and then go on in the sweep? -- todo : id can also be glue_code as we checked spaces @@ -2211,7 +2217,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) tail = prev setprev(current,sweepnode) else - tail = find_node_tail(head) + tail = findnodetail(head) end setnext(sweepnode,current) setprev(head) @@ -2302,15 +2308,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end end end + local done = false if lookaheaddisc then - local cf = start local cl = getprev(lookaheaddisc) local cprev = getprev(start) local insertedmarks = 0 - while cprev do local char = ischar(cf,currentfont) if char and marks[char] then @@ -2329,13 +2334,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) head = lookaheaddisc end local pre, post, replace = getdisc(lookaheaddisc) - local new = copy_node_list(cf) -- br, how often does that happen + local new = copynodelist(cf) -- br, how often does that happen local cnew = new if pre then - setlink(find_node_tail(cf),pre) + setlink(findnodetail(cf),pre) end if replace then - local tail = find_node_tail(new) + local tail = findnodetail(new) setlink(tail,replace) end for i=1,insertedmarks do @@ -2349,14 +2354,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok = false - cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done = true end end if not notmatchreplace[lookaheaddisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done = true end @@ -2367,16 +2372,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start = getprev(lookaheaddisc) + useddisc = lookaheaddisc -- new 2022-09-25 sweephead[cf] = getnext(clast) or false sweephead[new] = getnext(cl) or false - elseif backtrackdisc then - local cf = getnext(backtrackdisc) local cl = start local cnext = getnext(start) local insertedmarks = 0 - while cnext do local char = ischar(cnext,currentfont) if char and marks[char] then @@ -2391,8 +2394,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setprev(cf) setnext(cl) local pre, post, replace, pretail, posttail, replacetail = getdisc(backtrackdisc,true) - local new = copy_node_list(cf) - local cnew = find_node_tail(new) + local new = copynodelist(cf) + local cnew = findnodetail(new) for i=1,insertedmarks do cnew = getprev(cnew) end @@ -2402,14 +2405,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok = false - cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done = true end end if not notmatchreplace[backtrackdisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done = true end @@ -2430,33 +2433,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start = getprev(backtrackdisc) + useddisc = backtrackdisc -- new 2022-09-25 sweephead[post] = getnext(clast) or false sweephead[replace] = getnext(last) or false - else local ok = false - head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done = true end end - - return head, start, done + if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25 + start = getnext(start) -- new 2022-09-25 + end -- new 2022-09-25 + return head, start, done, useddisc -- new 2022-09-25 end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule = ck[1] - local lookuptype = ck[8] or ck[2] - local nofseq = #ck[3] - local first = ck[4] - local last = ck[5] - local char = getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ", sweepnode and "" or "not ") +local chaintrac do + + local level = 0 + local last = { } + + chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level = level + 1 + last[level] = start + local rule = ck[1] + local lookuptype = ck[8] or ck[2] + local nofseq = #ck[3] -- ck[3].n + local first = ck[4] + local last = ck[5] + local char = getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ", sweepnode and "" or "not ") + else + -- (start,done) + local what = start and "done" or "continue" + local where = head == last[level] and "same" or "different" + local char = getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level = level - 1 + end + end + end -- The next one is quite optimized but still somewhat slow, fonts like ebgaramond @@ -2470,6 +2497,9 @@ end -- the previous disc .. such be it (<before><disc><current=fl><after> with only f done) local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head, start, false + end -- optimizing for rlmode gains nothing local sweepnode = sweepnode local sweeptype = sweeptype @@ -2510,10 +2540,10 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s for k=1,nofcontexts do -- does this disc mess work well with n > 1 - local ck = contexts[k] - local seq = ck[3] - local f = ck[4] -- first current -local last = start + local ck = contexts[k] + local seq = ck[3] + local f = ck[4] -- first current + local last = start if not startchar or not seq[f][startchar] then -- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts) goto next @@ -2524,7 +2554,7 @@ local last = start else local l = ck[5] -- last current local current = start --- local last = start + -- local last = start -- current match @@ -2638,7 +2668,7 @@ local last = start -- before if f > 1 then - if startprev then + -- if startprev then -- new 2022-09-25 local prev = startprev if prereplace and prev == checkdisc then prev = getprev(sweepnode) @@ -2762,9 +2792,9 @@ local last = start else goto next end - else - goto next - end + -- else -- new 2022-09-25 + -- goto next -- new 2022-09-25 + -- end -- new 2022-09-25 end -- after @@ -2888,24 +2918,25 @@ local last = start end end end - if trace_contexts then chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode) end if discseen or sweepnode then + -- When we process a disc we can collapse and therefore we backtrack one node (start) and + -- reprocess. This is needed because there might be more in the collapsed list. head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break -- else -- next context end - ::next:: - -- if trace_chains then - -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode) - -- end + ::next:: end if discseen then notmatchpre = { } @@ -2924,21 +2955,46 @@ handlers.gsub_reversecontextchain = handle_contextchain handlers.gpos_contextchain = handle_contextchain handlers.gpos_context = handle_contextchain --- this needs testing +-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) +-- local steps = currentlookup.steps +-- local nofsteps = currentlookup.nofsteps +-- if nofsteps > 1 then +-- reportmoresteps(dataset,sequence) +-- end +-- -- probably wrong +-- local l = steps[1].coverage[getchar(start)] +-- if l then +-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) +-- else +-- return head, start, false +-- end +-- end +-- new 2022-09-25 + local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps = currentlookup.steps local nofsteps = currentlookup.nofsteps - if nofsteps > 1 then - reportmoresteps(dataset,sequence) - end - -- probably wrong - local l = steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char = getchar(start) + if nofsteps == 1 then + local s = steps[1] + local l = s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head, start, false + for i=1,nofsteps do + local s = steps[i] + local l = s.coverage[char] + if l then + local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h, s, d + end + end + end end + return head, start, false end chainprocs.gsub_context = chained_contextchain @@ -3077,7 +3133,7 @@ do -- overcome local limit end -- Functions like kernrun, comprun etc evolved over time and in the end look rather --- complex. It's a bit of a compromis between extensive copying and creating subruns. +-- complex. It's a bit of a compromise between extensive copying and creating subruns. -- The logic has been improved a lot by Kai and Ivo who use complex fonts which -- really helped to identify border cases on the one hand and get insight in the diverse -- ways fonts implement features (not always that consistent and efficient). At the same @@ -3184,7 +3240,8 @@ local function kernrun(disc,k_run,font,attr,...) if done and trace_testruns then report_disc("done",disc) end - return nextstart, done + -- return nextstart, done + return nextstart end -- fonts like ebgaramond do ligatures this way (less efficient than e.g. dejavu which @@ -3237,12 +3294,19 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list setdisc(disc,pre,post,replace) end -- - return getnext(disc), renewed + -- return getnext(disc), renewed + return getnext(disc) end -- if we can hyphenate in a lig then unlikely a lig so we -- could have a option here to ignore lig +local test_flatten_start = 2 -- must start at 2 according to Kai + +directives.register("otf.testrun.forceflatten", function(v) + test_flatten_start = v and 1 or 2 +end) + local function testrun(disc,t_run,c_run,...) if trace_testruns then report_disc("test",disc) @@ -3271,7 +3335,7 @@ local function testrun(disc,t_run,c_run,...) local d = d_replace > d_post and d_replace or d_post local head = getnext(disc) -- is: next local tail = head - for i=2,d do -- must start at 2 according to Kai + for i=test_flatten_start,d do local nx = getnext(tail) local id = getid(nx) if id == disc_code then @@ -3286,7 +3350,7 @@ local function testrun(disc,t_run,c_run,...) next = getnext(tail) setnext(tail) setprev(head) - local new = copy_node_list(head) + local new = copynodelist(head) if posttail then setlink(posttail,head) else @@ -3359,7 +3423,8 @@ local function testrun(disc,t_run,c_run,...) end end -- next can have changed (copied list) - return getnext(disc), renewed + -- return getnext(disc), renewed + return getnext(disc) end -- 1{2{\oldstyle\discretionary{3}{4}{5}}6}7\par @@ -3882,7 +3947,7 @@ do -- the before and after lists in the loader. But first I need to see a font that uses multiple -- matches. -- - local start = find_node_tail(head) + local start = findnodetail(head) local rlmode = 0 -- how important is this .. do we need to check for dir? local merged = steps.merged while start do @@ -3968,17 +4033,13 @@ do start = getnext(start) elseif id == disc_code then if not discs or discs[start] == true then - local ok if gpossing then - start, ok = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = kernrun(start,k_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start, ok = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else - start, ok = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start = comprun(start,c_run_single, font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = getnext(start) end @@ -4052,17 +4113,13 @@ do start = getnext(start) elseif id == disc_code then if not discs or discs[start] == true then - local ok if gpossing then - start, ok = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = kernrun(start,k_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start, ok = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else - start, ok = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start = comprun(start,c_run_multiple, font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = getnext(start) end @@ -4184,7 +4241,7 @@ do start = getnext(start) -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = getnext(start) + -- start = nxt else start = getnext(start) end @@ -4274,8 +4331,8 @@ registerotffeature { } } --- Moved here (up) a bit. This doesn't really belong in generic so it will --- move to a context module some day. +-- Moved here (up) a bit. This doesn't really belong in generic so it will move to a +-- context module some day. local function markinitializer(tfmdata,value) local properties = tfmdata.properties diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua index 2ca3011a5..cab4b7540 100644 --- a/tex/context/base/mkiv/font-shp.lua +++ b/tex/context/base/mkiv/font-shp.lua @@ -17,7 +17,7 @@ local pfb = fonts.handlers.pfb local hashes = fonts.hashes local identifiers = hashes.identifiers -local version = otf.version or 0.011 +local version = otf.version or 0.013 local shapescache = containers.define("fonts", "shapes", version, true) local streamscache = containers.define("fonts", "streams", version, true) diff --git a/tex/context/base/mkiv/math-dir.lua b/tex/context/base/mkiv/math-dir.lua index f26324ed9..f0298d243 100644 --- a/tex/context/base/mkiv/math-dir.lua +++ b/tex/context/base/mkiv/math-dir.lua @@ -142,6 +142,7 @@ function directions.processmath(head) -- style, penalties return processmath(head) end end + return head end function directions.setmath(n) diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index e8ce240f0..e4566b7e4 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -101,9 +101,9 @@ return { "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", -- - "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", - "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", - "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", + -- "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", + -- "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", + -- "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", -- "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "applyordinarykernpairmathcontrolcode", @@ -112,10 +112,11 @@ return { "applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode", "checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode", "analyzescriptnucleuscharmathcontrolcode", "analyzescriptnucleuslistmathcontrolcode", "analyzescriptnucleusboxmathcontrolcode", + "accenttopskewwithoffsetmathcontrolcode", "ignorekerndimensionsmathcontrolcode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", - "noitaliccorrectionglyphoptioncode", + "noitaliccorrectionglyphoptioncode", "islargeoperatorglyphoptioncode", "hasitalicshapeglyphoptioncode", -- "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", @@ -217,6 +218,7 @@ return { "flattenclassoptioncode", "omitpenaltyclassoptioncode", "unpackclassoptioncode", "raiseprimeclassoptioncode", "carryoverlefttopkernclassoptioncode", "carryoverleftbottomkernclassoptioncode", "carryoverrighttopkernclassoptioncode", "carryoverrightbottomkernclassoptioncode", "preferdelimiterdimensionsclassoptioncode", "autoinjectclassoptioncode", "removeitaliccorrectionclassoptioncode", + "operatoritaliccorrectionclassoptioncode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 546b93af3..60fb704d4 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -164,6 +164,8 @@ return { "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", + "Umathradicalextensibleafter", + "Umathradicalextensiblebefore", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", @@ -256,12 +258,14 @@ return { "aligntab", "allcrampedstyles", "alldisplaystyles", + "allmainstyles", "allmathstyles", "allscriptscriptstyles", "allscriptstyles", "allsplitstyles", "alltextstyles", "alluncrampedstyles", + "allunsplitstyles", "atendofgroup", "atendofgrouped", "attribute", @@ -411,6 +415,8 @@ return { "ifparameters", "ifrelax", "iftok", + "ifzerodim", + "ifzeronum", "ignorearguments", "ignorepars", "immediate", diff --git a/tex/context/base/mkiv/pack-cut.mkiv b/tex/context/base/mkiv/pack-cut.mkiv index 84c14d648..533440efd 100644 --- a/tex/context/base/mkiv/pack-cut.mkiv +++ b/tex/context/base/mkiv/pack-cut.mkiv @@ -102,9 +102,8 @@ \vss}% \hss}} -\unexpanded\def\makecutbox#1% - {\bgroup - \d_pack_cutmarks_height\ht#1% +\unexpanded\def\makecutbox#1% not grouped ! + {\d_pack_cutmarks_height\ht#1% \d_pack_cutmarks_depth \dp#1% \d_pack_cutmarks_width \wd#1% \setbox#1\hpack @@ -155,8 +154,7 @@ \box#1}% \wd#1\d_pack_cutmarks_width \ht#1\d_pack_cutmarks_height - \dp#1\d_pack_cutmarks_depth - \egroup} + \dp#1\d_pack_cutmarks_depth} \unexpanded\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox} \unexpanded\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox} diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex fb4443218..982b677cd 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex d75e37cee..9469ffdf0 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/base/mkiv/strc-doc.lua b/tex/context/base/mkiv/strc-doc.lua index d613d1aa7..7a79a7121 100644 --- a/tex/context/base/mkiv/strc-doc.lua +++ b/tex/context/base/mkiv/strc-doc.lua @@ -168,9 +168,9 @@ end local lastsaved = 0 function sections.save(sectiondata) -local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier - local numberdata = sectiondata.numberdata - local ntobesaved = #tobesaved + local sectiondata = helpers.simplify(sectiondata) -- maybe done earlier + local numberdata = sectiondata.numberdata + local ntobesaved = #tobesaved if not numberdata or sectiondata.metadata.nolist then -- stay else diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua index 865c44624..4a190132b 100644 --- a/tex/context/base/mkiv/strc-lst.lua +++ b/tex/context/base/mkiv/strc-lst.lua @@ -263,6 +263,14 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end) if r and not r.section then r.section = structures.sections.currentid() end + local b = r and t.block + if r and not b then + local s = r.section + if s then + s = structures.sections.tobesaved[s] + r.block = s and s.block or nil + end + end local i = r and r.internal or 0 -- brrr if r and kind and name then local tag = tags.getid(kind,name) @@ -834,6 +842,7 @@ filters[v_default] = function(specification) -- is named for i=1,#collected do local v = collected[i] local r = v.references +-- inspect(v) if r and (not block or not r.block or pblock == r.block) then local sectionnumber = sections[r.section] if sectionnumber then diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv index 3447c4e6e..269d41966 100644 --- a/tex/context/base/mkiv/type-set.mkiv +++ b/tex/context/base/mkiv/type-set.mkiv @@ -132,6 +132,7 @@ \definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv] \definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv] +%definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv] diff --git a/tex/context/base/mkxl/anch-pgr.lmt b/tex/context/base/mkxl/anch-pgr.lmt index 5ef6ecacb..575d4e906 100644 --- a/tex/context/base/mkxl/anch-pgr.lmt +++ b/tex/context/base/mkxl/anch-pgr.lmt @@ -34,6 +34,7 @@ local context = context local implement = interfaces.implement local texgetcount = tex.getcount +local texiscount = tex.iscount local getmacro = tokens.getters.macro local expandasvalue = tex.expandasvalue @@ -61,6 +62,8 @@ local f_pair = formatters["(%p,%p)"] local f_path = formatters["%--t--cycle"] local f_pair_i = formatters["(%r,%r)"] -- rounded +local c_realpageno = texiscount("realpageno") + graphics = graphics or { } local backgrounds = { } graphics.backgrounds = backgrounds @@ -254,7 +257,7 @@ end nodes.handlers.textbackgrounds = function(head,where,parent) -- we have hlistdir and local dir -- todo enable action in register index = index + 1 - realpage = texgetcount("realpageno") + realpage = texgetcount(c_realpageno) return processranges(a_textbackground,flush,head,parent) end @@ -1214,7 +1217,7 @@ backgrounds.fetchmultipar = fetchmultipar local function getwhatever(action) local tags = scanmpstring() local anchor = scanmpstring() - local page = texgetcount("realpageno") + local page = texgetcount(c_realpageno) if tags == "self" then tags = expandasvalue(string_value,"mpcategoryparameter",true,"self") elseif type(tags) == "string" then diff --git a/tex/context/base/mkxl/anch-pos.lmt b/tex/context/base/mkxl/anch-pos.lmt index fc668f699..6488a2fd7 100644 --- a/tex/context/base/mkxl/anch-pos.lmt +++ b/tex/context/base/mkxl/anch-pos.lmt @@ -65,6 +65,8 @@ local tex = tex local texgetdimen = tex.getdimen local texgetcount = tex.getcount local texgetinteger = tex.getintegervalue or tex.getcount +local texiscount = tex.iscount +local texisdimen = tex.isdimen local texsetcount = tex.setcount local texget = tex.get local texsp = tex.sp @@ -133,15 +135,19 @@ local default = { -- not r and paragraphs etc } } -local f_b_tag = formatters["b:%s"] -local f_e_tag = formatters["e:%s"] -local f_p_tag = formatters["p:%s"] ------ f_w_tag = formatters["w:%s"] +local f_b_tag = formatters["b:%s"] +local f_e_tag = formatters["e:%s"] +local f_p_tag = formatters["p:%s"] +----- f_w_tag = formatters["w:%s"] -local f_region = formatters["region:%s"] +local f_region = formatters["region:%s"] -local f_tag_three = formatters["%s:%s:%s"] -local f_tag_two = formatters["%s:%s"] +local f_tag_three = formatters["%s:%s:%s"] +local f_tag_two = formatters["%s:%s"] + +local c_realpageno = texiscount("realpageno") +local d_strutht = texisdimen("strutht") +local d_strutdp = texisdimen("strutdp") -- Because positions are set with a delay we cannot yet make the tree -- so that -- is a finalizer step. But, we already have a dual split. @@ -902,7 +908,7 @@ local function enhance(data) data.y = y ~= 0 and y or nil end if data.p == true then - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) -- we should use a variable set in otr end if data.c == true then data.c = column @@ -1075,7 +1081,7 @@ local function b_region(specification) local x, y = getpos() last.x = x ~= 0 and x or nil last.y = y ~= 0 and y or nil - last.p = texgetcount("realpageno") + last.p = texgetcount(c_realpageno) insert(regions,tag) -- todo: fast stack region = tag end @@ -1117,7 +1123,7 @@ local function setregionbox(n,tag,index,k,lo,ro,to,bo,column) -- kind -- these auto regions (comning from framed). Too messy and the split in the -- setter is fast enough. tobesaved[tag] = { - -- p = texgetcount("realpageno"), -- we copy them + -- p = texgetcount(c_realpageno), -- we copy them x = 0, y = 0, w = w ~= 0 and w or nil, @@ -1191,6 +1197,8 @@ end do + local c_anch_positions_paragraph = texiscount("c_anch_positions_paragraph") + local nofparagraphs = 0 local function enhancepar_1(data) @@ -1205,7 +1213,7 @@ do if y ~= 0 then data.y = y end - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) -- we should use a variable set in otr if column then data.c = column end @@ -1253,7 +1261,7 @@ do if y ~= 0 then data.y = y end - data.p = texgetcount("realpageno") -- we should use a variable set in otr + data.p = texgetcount(c_realpageno) if column then data.c = column end @@ -1268,10 +1276,10 @@ do name = "parpos", actions = function() nofparagraphs = nofparagraphs + 1 - texsetcount("global","c_anch_positions_paragraph",nofparagraphs) + texsetcount("global",c_anch_positions_paragraph,nofparagraphs) local name = f_p_tag(nofparagraphs) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) -- local top = texgetnest("top","head") local nxt = top.next @@ -1429,8 +1437,8 @@ do public = true, protected = true, actions = function(name) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) local spec = { p = true, c = column, @@ -1453,8 +1461,8 @@ do public = true, protected = true, actions = function(name,kind) - local h = texgetdimen("strutht") - local d = texgetdimen("strutdp") + local h = texgetdimen(d_strutht) + local d = texgetdimen(d_strutdp) local spec = { k = kind, p = true, @@ -1476,7 +1484,7 @@ end function jobpositions.getreserved(tag,n) if tag == v_column then - local fulltag = f_tag_three(tag,texgetcount("realpageno"),n or 1) + local fulltag = f_tag_three(tag,texgetcount(c_realpageno),n or 1) local data = collected[fulltag] if data then return data, fulltag @@ -1484,7 +1492,7 @@ function jobpositions.getreserved(tag,n) tag = v_text end if tag == v_text then - local fulltag = f_tag_two(tag,texgetcount("realpageno")) + local fulltag = f_tag_two(tag,texgetcount(c_realpageno)) return collected[fulltag] or false, fulltag end return collected[tag] or false, tag @@ -2257,7 +2265,7 @@ implement { public = true, protected = true, actions = function(list) - doifelse(onsamepage(list,tostring(texgetcount("realpageno")))) + doifelse(onsamepage(list,tostring(texgetcount(c_realpageno)))) end } diff --git a/tex/context/base/mkxl/anch-pos.mkxl b/tex/context/base/mkxl/anch-pos.mkxl index fef8e54f6..f8891eb33 100644 --- a/tex/context/base/mkxl/anch-pos.mkxl +++ b/tex/context/base/mkxl/anch-pos.mkxl @@ -17,10 +17,19 @@ %D early, but starting in 2012 more dramatic changes started to happen, especially %D in relation to background graphics. It will probably take some time to settle. -\registerctxluafile{anch-pos}{autosuffix} - \unprotect +\newcount\c_anch_column % will be delegated to lua +\newcount\c_anch_text % will be delegated to lua +\newcount\c_anch_free +\newtoks \t_anch_positions_tracers +\newcount\c_anch_positions_paragraph + +\newbox \b_anch_position +\newif \ifpositioning % sort of public + +\registerctxluafile{anch-pos}{autosuffix} + %D The first application of positional information was embedded graphics. Since we %D are interacting with text, it made sense to take the current line height and %D depth into account too. This is why we have position macros for simple positions @@ -43,8 +52,8 @@ % \dosetpositionstrut #1 % defined at lua end % \dosetpositionstrutkind #1#2 % defined at lua end -\newbox\b_anch_position -\newif \ifpositioning % sort of public +% see top: \newbox\b_anch_position +% see top: \newif \ifpositioning % sort of public \mutable\let\currentposition \empty \mutable\let\currentpositionaction\empty @@ -282,8 +291,8 @@ \permanent\def\textanchor {text:\the\realpageno} \permanent\def\regionanchor{region:0} -\newcount\c_anch_column % will be delegated to lua -\newcount\c_anch_text % will be delegated to lua +% see top: \newcount\c_anch_column % will be delegated to lua +% see top: \newcount\c_anch_text % will be delegated to lua % beware we need to pass \somethingexpanded or { } @@ -336,7 +345,7 @@ \expandafter\gobblesixarguments \fi} -\newcount\c_anch_free +% see top: \newcount\c_anch_free \protected\def\anch_mark_tagged_box_free_yes#1#2#3#4#5#6% only needed when positions {\global\advance\c_anch_free\plusone % could be done at the lua end @@ -408,8 +417,8 @@ %D can keep track of them. This mechanism is activated automatically based on %D information collected in the previous pass. -\newtoks \t_anch_positions_tracers -\newcount\c_anch_positions_paragraph +% see top: \newtoks \t_anch_positions_tracers +% see top: \newcount\c_anch_positions_paragraph \permanent\protected\def\tracepositions {\the\t_anch_positions_tracers} diff --git a/tex/context/base/mkxl/buff-ini.lmt b/tex/context/base/mkxl/buff-ini.lmt index 985c834ff..1d4722531 100644 --- a/tex/context/base/mkxl/buff-ini.lmt +++ b/tex/context/base/mkxl/buff-ini.lmt @@ -573,7 +573,7 @@ local function savebuffer(list,name,prefix,option,directory) -- name is optional if directory ~= "" and dir.makedirs(directory) then name = file.join(directory,name) end - io.savedata(name,replacenewlines(content),"\n",option == v_append) + savedata(name,replacenewlines(content),"\n",option == v_append) end implement { diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 5fb6ae5b6..e8f8e5e2e 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.09.16 14:39} +\newcontextversion{2022.10.14 10:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index cd7075d5e..bf5dd9a07 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2022.09.16 14:39} +\immutable\edef\contextversion{2022.10.14 10:13} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/core-env.lmt b/tex/context/base/mkxl/core-env.lmt index 486beeec4..f5b382f12 100644 --- a/tex/context/base/mkxl/core-env.lmt +++ b/tex/context/base/mkxl/core-env.lmt @@ -135,30 +135,30 @@ end) tex.isdefined = isdefined -function tex.isdimen(name) - local hit = cache[name] - return hit.command == dimencode and hit.index or true -end - -function tex.iscount(name) - local hit = cache[name] - return hit.command == countcode and hit.index or true -end - -function tex.istoken(name) - local hit = cache[name] - return hit.command == tokencode and hit.index or true -end - -function tex.isskip(name) - local hit = cache[name] - return hit.command == skipcode and hit.index or true -end - -function tex.ismuskip(name) - local hit = cache[name] - return hit.command == muskipcode and hit.index or true -end +-- function tex.isdimen(name) +-- local hit = cache[name] +-- return hit.command == dimencode and hit.index or true +-- end +-- +-- function tex.iscount(name) +-- local hit = cache[name] +-- return hit.command == countcode and hit.index or true +-- end +-- +-- function tex.istoken(name) +-- local hit = cache[name] +-- return hit.command == tokencode and hit.index or true +-- end +-- +-- function tex.isskip(name) +-- local hit = cache[name] +-- return hit.command == skipcode and hit.index or true +-- end +-- +-- function tex.ismuskip(name) +-- local hit = cache[name] +-- return hit.command == muskipcode and hit.index or true +-- end function tex.type(name) return types[cache[name].command] or "macro" diff --git a/tex/context/base/mkxl/core-uti.lmt b/tex/context/base/mkxl/core-uti.lmt index 2266119de..d533de5f3 100644 --- a/tex/context/base/mkxl/core-uti.lmt +++ b/tex/context/base/mkxl/core-uti.lmt @@ -448,8 +448,8 @@ end) function statistics.formatruntime(runtime) if not environment.initex then -- else error when testing as not counters yet -- stoptiming(statistics) -- to be sure - local shipped = texgetcount('nofshipouts') - local pages = texgetcount('realpageno') + local shipped = texgetcount("nofshipouts") + local pages = texgetcount("realpageno") if pages > shipped then pages = shipped end diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt index ddaf8afb1..319d5fe48 100644 --- a/tex/context/base/mkxl/font-con.lmt +++ b/tex/context/base/mkxl/font-con.lmt @@ -533,12 +533,6 @@ function constructors.scale(tfmdata,specification) targetparameters.scriptscale = scriptscale targetparameters.scriptscriptscale = scriptscriptscale - -- todo: maybe retrofit to font-con.lua - - local oldmath = properties.oldmath - targetproperties.oldmath = oldmath - target.oldmath = oldmath - local mathcontrol = properties.mathcontrol targetproperties.mathcontrol = mathcontrol target.mathcontrol = mathcontrol @@ -706,10 +700,26 @@ function constructors.scale(tfmdata,specification) if vi and vi ~= 0 then chr.vitalic = vi*hdelta end - local va = character.accent +-- local va = character.accent +-- if va and not chr.topanchor then +-- chr.topanchor = va +-- end + local va = character.topanchor + if va then + chr.topanchor = va*vdelta + end + va = character.bottomanchor if va then - chr.topaccent = va*vdelta + chr.bottomanchor = va*vdelta end + local vo = character.topovershoot + if vo then + chr.topovershoot = vo*hdelta + end + -- vo = character.bottomovershoot + -- if vo then + -- chr.bottomovershoot = vo*hdelta + -- end if stackmath then -- not ok yet local mk = character.mathkerns if mk then @@ -755,6 +765,10 @@ function constructors.scale(tfmdata,specification) if sm then chr.smaller = sm end + local mi = character.mirror + if mi then + chr.mirror = mi + end local fa = character.flataccent if fa then chr.flataccent = fa diff --git a/tex/context/base/mkxl/font-ctx.lmt b/tex/context/base/mkxl/font-ctx.lmt index 585547cbf..75572e089 100644 --- a/tex/context/base/mkxl/font-ctx.lmt +++ b/tex/context/base/mkxl/font-ctx.lmt @@ -1221,23 +1221,23 @@ do -- else too many locals "integer", }, actions = function ( - global, -- \ifx\fontclass\empty\s!false\else\s!true\fi - cs, -- {#csname}% - str, -- \somefontfile - size, -- \d_font_scaled_font_size - inheritancemode, -- \c_font_feature_inheritance_mode - classfeatures, -- \m_font_class_features - fontfeatures, -- \m_font_features - classfallbacks, -- \m_font_class_fallbacks - fontfallbacks, -- \m_font_fallbacks - mathsize, -- \fontface - textsize, -- \d_font_scaled_text_face - classgoodies, -- \m_font_class_goodies - goodies, -- \m_font_goodies - classdesignsize, -- \m_font_class_designsize - fontdesignsize, -- \m_font_designsize - scaledfontmode -- \scaledfontmode - ) + global, -- \ifx\fontclass\empty\s!false\else\s!true\fi + cs, -- {#csname}% + str, -- \somefontfile + size, -- \d_font_scaled_font_size + inheritancemode, -- \c_font_feature_inheritance_mode + classfeatures, -- \m_font_class_features + fontfeatures, -- \m_font_features + classfallbacks, -- \m_font_class_fallbacks + fontfallbacks, -- \m_font_fallbacks + mathsize, -- \fontface + textsize, -- \d_font_scaled_text_face + classgoodies, -- \m_font_class_goodies + goodies, -- \m_font_goodies + classdesignsize, -- \m_font_class_designsize + fontdesignsize, -- \m_font_designsize + scaledfontmode -- \scaledfontmode + ) if trace_defining then report_defining("start stage two: %s, size %s, features %a & %a, mode %a",str,size,classfeatures,fontfeatures,inheritancemode) end @@ -1397,7 +1397,7 @@ do -- else too many locals busy = false mathematics.finishfallbacks(tfmdata,specification,fallbacks) tfmdata.original = specification.specification -constructors.beforepassingfonttotex(tfmdata) + constructors.beforepassingfonttotex(tfmdata) local id = definefont(tfmdata,properties.id) csnames[id] = specification.cs properties.id = id -- already set diff --git a/tex/context/base/mkxl/font-imp-effects.lmt b/tex/context/base/mkxl/font-imp-effects.lmt index 38d86498a..8dce81087 100644 --- a/tex/context/base/mkxl/font-imp-effects.lmt +++ b/tex/context/base/mkxl/font-imp-effects.lmt @@ -238,11 +238,12 @@ local function manipulateeffect(tfmdata) parameters.hshift = hshift parameters.vshift = vshift for unicode, character in next, characters do - local oldwidth = character.width - local oldheight = character.height - local olddepth = character.depth - local olditalic = character.italic - local oldtopaccent = character.topaccent + local oldwidth = character.width + local oldheight = character.height + local olddepth = character.depth + local olditalic = character.italic + local oldtopanchor = character.topanchor + local oldbottomanchor = character.bottomanchor if oldwidth and oldwidth > 0 then character.width = oldwidth + wdelta end @@ -252,13 +253,16 @@ local function manipulateeffect(tfmdata) if olddepth and olddepth > 0 then character.depth = olddepth + ddelta end - if olditalic or oldtopaccent then + if olditalic or oldtopaccent or oldbottomaccent then local factor = character.width / oldwidth if olditalic and olditalic > 0 then character.italic = olditalic * factor end - if oldtopaccent and oldtopaccent > 0 then - character.topaccent = oldtopaccent * factor + if oldtopanchor and oldtopanchor > 0 then + character.topanchor = oldtopanchor * factor + end + if oldbottomanchor and oldbottomanchor > 0 then + character.bottomanchor = oldbottomanchor * factor end end end diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt index 9811cb7c8..04fe5c04c 100644 --- a/tex/context/base/mkxl/font-imp-math.lmt +++ b/tex/context/base/mkxl/font-imp-math.lmt @@ -225,30 +225,6 @@ registerotffeature { -- end local function initialize(tfmdata,value) - if value then - local rawdata = tfmdata.shared.rawdata - local rawresources = rawdata and rawdata.resources - local mathconstants = rawresources.mathconstants - if mathconstants then - tfmdata.properties.oldmath = true - end - end -end - -registerotffeature { - name = "oldmath", - description = "deal with fake opentype fonts", - -- manipulators = { - -- base = manipulate, - -- node = manipulate, - -- }, - initializers = { - base = initialize, - node = initialize, - } -} - -local function initialize(tfmdata,value) if type(value) == "string" then local rawdata = tfmdata.shared.rawdata local rawresources = rawdata and rawdata.resources @@ -318,46 +294,45 @@ registerotffeature { -- is. So the quick and dirty solution is: -- -- add copies in private slots --- use a pseudo feature to acess those +-- use a pseudo feature to access those -- and optionally afterwards replace the original slots -local coverage = { } - -local function initialize(tfmdata,value) - if value then - if not next(coverage) then - for k, char in next, mathematics.alphabets.sr.tf.lcletters do - coverage[char] = 0xFE800 + k - end - for k, char in next, mathematics.alphabets.sr.tf.ucletters do - coverage[char] = 0xFE800 + k - end - fonts.handlers.otf.addfeature { - name = "savemathscripts", - type = "substitution", - data = coverage, - } - end - local characters = tfmdata.characters - local descriptions = tfmdata.descriptions - for char, private in next, coverage do - local data = characters[char] - if data and not characters[private] then - -- otherwise we need a virtual - characters [private] = copytable(data) - descriptions[private] = copytable(descriptions[char]) - end - end - end -end - -registerotffeature { - name = "copymathscripts", - description = "copy math script", - prepend = 1, - initializers = { - base = initialize, - node = initialize, - } -} - +-- local coverage = { } +-- +-- local function initialize(tfmdata,value) +-- if value then +-- if not next(coverage) then +-- for k, char in next, mathematics.alphabets.sr.tf.lcletters do +-- coverage[char] = 0xFE800 + k +-- end +-- for k, char in next, mathematics.alphabets.sr.tf.ucletters do +-- coverage[char] = 0xFE800 + k +-- end +-- fonts.handlers.otf.addfeature { +-- name = "savemathscripts", +-- type = "substitution", +-- data = coverage, +-- } +-- end +-- local characters = tfmdata.characters +-- local descriptions = tfmdata.descriptions +-- for char, private in next, coverage do +-- local data = characters[char] +-- if data and not characters[private] then +-- -- otherwise we need a virtual +-- characters [private] = copytable(data) +-- descriptions[private] = copytable(descriptions[char]) +-- end +-- end +-- end +-- end +-- +-- registerotffeature { +-- name = "copymathscripts", +-- description = "copy math script", +-- prepend = 1, +-- initializers = { +-- base = initialize, +-- node = initialize, +-- } +-- } diff --git a/tex/context/base/mkxl/font-ini.mklx b/tex/context/base/mkxl/font-ini.mklx index 473f37da2..67663b7db 100644 --- a/tex/context/base/mkxl/font-ini.mklx +++ b/tex/context/base/mkxl/font-ini.mklx @@ -657,8 +657,8 @@ % 4:x{\definedfont[Serif sa 4]x}\par % 5:x{\definedfont[Serif sa 5]x}\par -\permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax} -\permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax} +% \permanent\def\safontscale{\number\dimexpr\v_font_size_absolute\relax} +% \permanent\def\mofontscale{\number\dimexpr\font_basics_set_mapped_fontsize\v_font_size_absolute\relax} \mutable\let\somefontname \s!unknown \mutable\let\somefontspec \s!unknown @@ -991,7 +991,7 @@ \newif\ifskipfontcharacteristics \skipfontcharacteristicstrue -\tracingfonts\plussix % <id: name @ size> +% \tracingfonts\plussix % <id: name @ size> %D When fontclasses are used, we define the font global, since namespaces are %D used. Otherwise we parse the specs each time. diff --git a/tex/context/base/mkxl/font-mat.mklx b/tex/context/base/mkxl/font-mat.mklx index 20925157b..0f3a2a222 100644 --- a/tex/context/base/mkxl/font-mat.mklx +++ b/tex/context/base/mkxl/font-mat.mklx @@ -15,6 +15,26 @@ \unprotect +%D The original (\MKIV) approach to bidi is that we have two extra families for +%D regular, bold and pseudobold: +%D +%D regular normal=0 l2r=1 r2l=2 +%D bold normal=3 l2r=4 r2l=5 +%D pseudobold normal=6 l2r=7 r2l=8 +%D +%D where l2r is just an alias. Because we're now using the mirror lookup (like +%D we do a smaller lookup) in the engine we not just have: +%D +%D regular normal=0 +%D bold normal=3 +%D pseudobold normal=6 +%D +%D And when one can wonder if pseudobold is needed (just bolden); we can then +%D actually go down to only two families. It is one of these cases when it hurts +%D to throw away a nice old mechanism that worked quite well so here we keep it +%D commented. For what it's worth: this variant switches a bit faster too and +%D produces less logging but I doubt if anyone will notice that. + %D Be nice: \ifdefined\??fontinstanceready \else \installcorenamespace{fontinstanceready} \fi @@ -55,16 +75,16 @@ % todo: \c_font_fam_mr \aliased\let\c_font_fam_mr \zerocount % math regular -\aliased\let\c_font_fam_mr_lr\plusone % math regular l2r -\aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l +%aliased\let\c_font_fam_mr_lr\plusone % math regular l2r +%aliased\let\c_font_fam_mr_rl\plustwo % math regular r2l \aliased\let\c_font_fam_mb \plusthree % math bold -\aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r -\aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l +%aliased\let\c_font_fam_mb_lr\plusfour % math bold l2r +%aliased\let\c_font_fam_mb_rl\plusfive % math bold r2l \definesystemattribute[mathfamily][public] -\newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy +%newconditional\c_font_bidirectional_mathstrategy % can be default, not that much overhead: \settrue\c_font_bidirectional_mathstrategy \newconditional\c_font_complete_bold_mathstrategy \settrue\c_font_complete_bold_mathstrategy % \frozen ... @@ -106,9 +126,12 @@ \mutable\let\fontfamily\relax % for now public but it is a helper +\newconditional\c_math_last_family_set + \def\font_helpers_set_math_family_indeed_normal#mrtag#family% \fontface etc are also used later on {\let\savedfontbody\fontbody \let\fontfamily#family% + \settrue\c_math_last_family_set % the order is important as we depend on known id's when completing fonts % enabling is needed when we have fallbacks which spoils the families \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree @@ -139,6 +162,7 @@ \def\font_helpers_set_math_family_indeed_compact#mrtag#family% \fontface etc are also used later on {\let\savedfontbody\fontbody \let\fontfamily#family% + \settrue\c_math_last_family_set \font_helpers_set_math_family_set_scales_compact % the order is important as we depend on known id's when completing fonts % enabling is needed when we have fallbacks which spoils the families @@ -163,6 +187,7 @@ \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% + \settrue\c_math_last_family_set \font_helpers_set_math_family_set_scales_normal \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree \font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% defines @@ -183,6 +208,7 @@ \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% + \settrue\c_math_last_family_set \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% defines \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% enables @@ -309,77 +335,114 @@ \let\m_font_fallbacks\empty \let\m_font_goodies \empty -\appendtoks % can be analyzed once - % why here .. - %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% - \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}% - % ... - \ifx\m_font_class_direction\v!both - \settrue\c_font_bidirectional_mathstrategy - \else - \setfalse\c_font_bidirectional_mathstrategy - \fi -\to \t_font_math_strategies - -\def\font_helpers_bidirectional_mathstrategy_yes - {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr - \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl - \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else - \font_helpers_bidirectional_mathstrategy_yes_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_yes_changed - {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} - -\def\font_helpers_bidirectional_mathstrategy_nop - {\font_helpers_set_math_family\c_font_fam_mr\s!mr - \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else - \font_helpers_bidirectional_mathstrategy_nop_changed - \fi} - -\def\font_helpers_bidirectional_mathstrategy_nop_changed - {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr - \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr} +% \appendtoks % can be analyzed once +% % why here .. +% %\edef\m_font_class_direction{\ifcsname\??fontclass\fontclass\s!mm\s!direction\endcsname\csname\??fontclass\fontclass\s!mm\s!direction\endcsname\fi}% +% \edef\m_font_class_direction{\begincsname\??fontclass\fontclass\s!mm\s!direction\endcsname}% +% % ... +% \ifx\m_font_class_direction\v!both +% \settrue\c_font_bidirectional_mathstrategy +% \else +% \setfalse\c_font_bidirectional_mathstrategy +% \fi +% \to \t_font_math_strategies +% +% \def\font_helpers_bidirectional_mathstrategy_yes +% {\font_helpers_set_math_family\c_font_fam_mr_lr\s!mrlr +% \font_helpers_set_math_family\c_font_fam_mr_rl\s!mrrl +% \ifnum\fontid\textfont\c_font_fam_mr=\fontid\textfont\c_font_fam_mr_lr\else +% \font_helpers_bidirectional_mathstrategy_yes_changed +% \fi} +% +% \def\font_helpers_bidirectional_mathstrategy_yes_changed +% {\textfont \c_font_fam_mr\textfont \c_font_fam_mr_lr +% \scriptfont \c_font_fam_mr\scriptfont \c_font_fam_mr_lr +% \scriptscriptfont\c_font_fam_mr\scriptscriptfont\c_font_fam_mr_lr} +% +% \def\font_helpers_bidirectional_mathstrategy_nop +% {\font_helpers_set_math_family\c_font_fam_mr\s!mr +% \ifnum\fontid\textfont\c_font_fam_mr_rl=\fontid\textfont\c_font_fam_mr\else +% \font_helpers_bidirectional_mathstrategy_nop_changed +% \fi} +% +% \def\font_helpers_bidirectional_mathstrategy_nop +% {\font_helpers_set_math_family\c_font_fam_mr\s!mr} +% +% \def\font_helpers_bidirectional_mathstrategy_nop_changed +% {\textfont \c_font_fam_mr_lr\textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mr_lr\scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mr_lr\scriptscriptfont\c_font_fam_mr +% \textfont \c_font_fam_mr_rl\textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mr_rl\scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mr_rl\scriptscriptfont\c_font_fam_mr} +% +% \appendtoks +% \ifconditional\c_font_bidirectional_mathstrategy +% \font_helpers_bidirectional_mathstrategy_yes +% \else +% \font_helpers_bidirectional_mathstrategy_nop +% \fi +% \to \t_font_math_strategies \appendtoks - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_bidirectional_mathstrategy_yes - \else - \font_helpers_bidirectional_mathstrategy_nop - \fi + \font_helpers_set_math_family\c_font_fam_mr\s!mr \to \t_font_math_strategies -\def\font_helpers_complete_bold_mathstrategy_yes_bidi - {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr - \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl - \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else - \font_helpers_complete_bold_mathstrategy_yes_bidi_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed - {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr - \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr - \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} +% \def\font_helpers_complete_bold_mathstrategy_yes_bidi +% {\font_helpers_set_math_family_bold\c_font_fam_mb_lr\s!mblr\c_font_fam_mr_lr +% \font_helpers_set_math_family_bold\c_font_fam_mb_rl\s!mbrl\c_font_fam_mr_rl +% \ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mb_lr\else +% \font_helpers_complete_bold_mathstrategy_yes_bidi_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_yes_bidi_changed +% {\textfont \c_font_fam_mb\textfont \c_font_fam_mb_lr +% \scriptfont \c_font_fam_mb\scriptfont \c_font_fam_mb_lr +% \scriptscriptfont\c_font_fam_mb\scriptscriptfont\c_font_fam_mb_lr} +% +% \def\font_helpers_complete_bold_mathstrategy_yes +% {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax +% \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else +% \font_helpers_complete_bold_mathstrategy_yes_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_yes_changed +% {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb +% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb +% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb +% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb +% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb +% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} +% +% \def\font_helpers_complete_bold_mathstrategy_nop +% {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else +% \font_helpers_complete_bold_mathstrategy_nop_changed +% \fi} +% +% \def\font_helpers_complete_bold_mathstrategy_nop_changed +% {\textfont \c_font_fam_mb \textfont \c_font_fam_mr +% \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr +% \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr +% \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr +% \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr +% \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr +% \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl +% \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl +% \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl} +% +% \def\font_helpers_apply_complete_bold_mathstrategy +% {\ifconditional\c_font_complete_bold_mathstrategy +% \ifconditional\c_font_bidirectional_mathstrategy +% \font_helpers_complete_bold_mathstrategy_yes_bidi +% \else +% \font_helpers_complete_bold_mathstrategy_yes +% \fi +% \else +% \font_helpers_complete_bold_mathstrategy_nop +% \fi} \def\font_helpers_complete_bold_mathstrategy_yes - {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax - \ifnum\fontid\textfont\c_font_fam_mb_rl=\fontid\textfont\c_font_fam_mb\else - \font_helpers_complete_bold_mathstrategy_yes_changed - \fi} - -\def\font_helpers_complete_bold_mathstrategy_yes_changed - {\textfont \c_font_fam_mb_rl\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mb - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mb - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mb - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mb} + {\font_helpers_set_math_family_bold\c_font_fam_mb\s!mb\c_font_fam_mr\relax} \def\font_helpers_complete_bold_mathstrategy_nop {\ifnum\fontid\textfont\c_font_fam_mb=\fontid\textfont\c_font_fam_mr\else @@ -389,21 +452,11 @@ \def\font_helpers_complete_bold_mathstrategy_nop_changed {\textfont \c_font_fam_mb \textfont \c_font_fam_mr \scriptfont \c_font_fam_mb \scriptfont \c_font_fam_mr - \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr - \textfont \c_font_fam_mb_lr\textfont \c_font_fam_mr_lr - \scriptfont \c_font_fam_mb_lr\scriptfont \c_font_fam_mr_lr - \scriptscriptfont\c_font_fam_mb_lr\scriptscriptfont\c_font_fam_mr_lr - \textfont \c_font_fam_mb_rl\textfont \c_font_fam_mr_rl - \scriptfont \c_font_fam_mb_rl\scriptfont \c_font_fam_mr_rl - \scriptscriptfont\c_font_fam_mb_rl\scriptscriptfont\c_font_fam_mr_rl} + \scriptscriptfont\c_font_fam_mb \scriptscriptfont\c_font_fam_mr} \def\font_helpers_apply_complete_bold_mathstrategy {\ifconditional\c_font_complete_bold_mathstrategy - \ifconditional\c_font_bidirectional_mathstrategy - \font_helpers_complete_bold_mathstrategy_yes_bidi - \else - \font_helpers_complete_bold_mathstrategy_yes - \fi + \font_helpers_complete_bold_mathstrategy_yes \else \font_helpers_complete_bold_mathstrategy_nop \fi} @@ -420,27 +473,33 @@ \fam\zerocount % all characters and symbols are in this family \to \everymathematics +% \protected\def\font_helpers_synchronize_math_family_mr +% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy +% \ifconditional\c_math_right_to_left +% \plustwo +% \else +% \plusone +% \fi +% \else +% \zerocount +% \fi} +% +% \protected\def\font_helpers_synchronize_math_family_mb +% {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy +% \ifconditional\c_math_right_to_left +% \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi +% \else +% \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi +% \fi +% \else +% \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi +% \fi} + \protected\def\font_helpers_synchronize_math_family_mr - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \plustwo - \else - \plusone - \fi - \else - \zerocount - \fi} + {\c_attr_mathfamily\zerocount} \protected\def\font_helpers_synchronize_math_family_mb - {\c_attr_mathfamily\ifconditional\c_font_bidirectional_mathstrategy - \ifconditional\c_math_right_to_left - \ifconditional\c_font_pseudo_bold_math_state\pluseight\else\plusfive\fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plusseven\else\plusfour\fi - \fi - \else - \ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi - \fi} + {\c_attr_mathfamily\ifconditional\c_font_pseudo_bold_math_state\plussix\else\plusthree\fi} \installcorenamespace{fontmathsynchronizer} \installcorenamespace{fontmathstoredstrategy} @@ -471,7 +530,6 @@ \fi \to \t_font_math_strategies -%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname} \def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname} \newconditional\c_font_pseudo_bold_math_state @@ -569,4 +627,19 @@ \permanent\protected\def\setmscale#1{\ifmmode\scaledmathstyle\numericscale#1\relax\fi} +%D This is nasty, as the engine only stores the last set family parameters (per style) which +%D in our case can be bold. + +\def\font_helpers_synchronize_math_parameters + {\textfont \zerocount\textfont \zerocount + \scriptfont \zerocount\scriptfont \zerocount + \scriptscriptfont\zerocount\scriptscriptfont\zerocount + \setfalse\c_math_last_family_set} + +\appendtoks + \ifconditional\c_math_last_family_set + \font_helpers_synchronize_math_parameters + \fi +\to\everybodyfont + \protect \endinput diff --git a/tex/context/base/mkxl/font-mps.lmt b/tex/context/base/mkxl/font-mps.lmt index 9a123a25e..7afc48d0f 100644 --- a/tex/context/base/mkxl/font-mps.lmt +++ b/tex/context/base/mkxl/font-mps.lmt @@ -46,6 +46,14 @@ function metapost.boundingbox(d,factor) return f_boundingbox(llx,lly,urx,lly,urx,ury,llx,ury) end +function metapost.baseline(d,factor) + local bounds = d.boundingbox + local factor = factor or 1 + local llx = factor*bounds[1] + local urx = factor*bounds[3] + return f_vertical(llx,0,urx,0) +end + function metapost.widthline(d,factor) local bounds = d.boundingbox local factor = factor or 1 diff --git a/tex/context/base/mkxl/font-otl.lmt b/tex/context/base/mkxl/font-otl.lmt index 85b32470b..b7889fc05 100644 --- a/tex/context/base/mkxl/font-otl.lmt +++ b/tex/context/base/mkxl/font-otl.lmt @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.120 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.121 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) @@ -426,9 +426,9 @@ local function copytotfm(data,cache_id) character.vitalic = vitalic end -- - local accent = m.accent -- taccent? - if accent then - character.accent = accent + local topanchor = m.topanchor or m.accent -- for now + if topanchor then + character.topanchor = topanchor end -- local kerns = m.kerns @@ -766,14 +766,14 @@ end -- moved from font-oth.lua, todo: also afm -local function getgsub(tfmdata,k,kind,value) +local function getgsub(tfmdata,k,kind,value,script,language) local shared = tfmdata.shared local rawdata = shared and shared.rawdata if rawdata then local sequences = rawdata.resources.sequences if sequences then local properties = tfmdata.properties - local validlookups, lookuplist = otf.collectlookups(rawdata,kind,properties.script,properties.language) + local validlookups, lookuplist = otf.collectlookups(rawdata,kind,script or properties.script,language or properties.language) if validlookups then -- local choice = tonumber(value) or 1 -- no random here (yet) for i=1,#lookuplist do @@ -797,8 +797,8 @@ end otf.getgsub = getgsub -- returns value, gsub_kind -function otf.getsubstitution(tfmdata,k,kind,value) - local found, kind = getgsub(tfmdata,k,kind,value) +function otf.getsubstitution(tfmdata,k,kind,value,script,language) + local found, kind = getgsub(tfmdata,k,kind,value,script,language) if not found then -- elseif kind == "gsub_single" then @@ -812,16 +812,16 @@ end otf.getalternate = otf.getsubstitution -function otf.getmultiple(tfmdata,k,kind) - local found, kind = getgsub(tfmdata,k,kind) +function otf.getmultiple(tfmdata,k,kind,value,script,language) + local found, kind = getgsub(tfmdata,k,kind,value,script,language) if found and kind == "gsub_multiple" then return found end return { k } end -function otf.getkern(tfmdata,left,right,kind) - local kerns = getgsub(tfmdata,left,kind or "kern",true) -- for now we use getsub +function otf.getkern(tfmdata,left,right,kind,value,script,language) + local kerns = getgsub(tfmdata,left,kind or "kern",true,script,language) -- for now we use getsub if kerns then local found = kerns[right] local kind = type(found) diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index 2ab52a35a..73c9b7c56 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -169,13 +169,8 @@ local forcepairadvance = false -- for testing local repeatlastmultiple = context and true -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries = v -end) - -directives.register("otf.forcepairadvance",function(v) - forcepairadvance = v -end) +directives.register("otf.forcediscretionaries", function(v) forcediscretionaries = v end) +directives.register("otf.forcepairadvance", function(v) forcepairadvance = v end) local report_direct = logs.reporter("fonts","otf direct") local report_subchain = logs.reporter("fonts","otf subchain") @@ -200,7 +195,6 @@ local getboth = nuts.getboth local setboth = nuts.setboth local getid = nuts.getid local getstate = nuts.getstate -local setsubtype = nuts.setsubtype local getchar = nuts.getchar local setchar = nuts.setchar local getdisc = nuts.getdisc @@ -264,7 +258,6 @@ local lefttoright_code = nodes.dirvalues.lefttoright local righttoleft_code = nodes.dirvalues.righttoleft local discretionarydisc_code = nodes.disccodes.discretionary ------ ligatureglyph_code = glyphcodes.ligature local injections = nodes.injections local setmark = injections.setmark @@ -299,9 +292,9 @@ local marks = false local classes = false local currentfont = false local currentdynamic = false -local currentscale = 1000 -- false -local currentxscale = 1000 -- false -local currentyscale = 1000 -- false +local currentscale = 1000 +local currentxscale = 1000 +local currentyscale = 1000 local factor = 0 local threshold = 0 local checkmarks = false @@ -503,7 +496,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - -- setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -525,7 +517,7 @@ local glyphoptioncodes = tex.glyphoptioncodes local no_left_ligature_code = glyphoptioncodes.noleftligature local no_right_ligature_code = glyphoptioncodes.norightligature -local no_left_kern_code = glyphoptioncodes.noleftkern +----- no_left_kern_code = glyphoptioncodes.noleftkern local no_right_kern_code = glyphoptioncodes.norightkern local hasglyphoption = nuts.hasglyphoption @@ -558,7 +550,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if start == stop and getchar(start) == char and not hasmarks then resetinjection(start) setchar(start,char) --- fonts.collections.direct(start) + -- fonts.collections.direct(start) return head, start end if inhibited(start,stop) then @@ -575,9 +567,8 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) --- fonts.collections.direct(base) + -- fonts.collections.direct(base) setoptions(base,getoptions(start) | getoptions(stop)) -- maybe only lig options - -- setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -1379,7 +1370,7 @@ as less as needed but that would also make the code even more messy.</p> -- To be done (example needed): what if > 1 steps --- this is messy: do we need this disc checking also in alternaties? +-- this is messy: do we need this disc checking also in alternates? local function reportzerosteps(dataset,sequence) logwarning("%s: no steps",cref(dataset,sequence)) @@ -2058,9 +2049,7 @@ local function setdiscchecked(d,pre,post,replace) setdisc(d,pre,post,replace) end -local noflags = { false, false, false, false } - -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size = ck[5] - ck[4] + 1 local chainlookups = ck[6] @@ -2076,26 +2065,30 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) -- -- bad rules -- end local chainlookup = chainlookups[1] - for j=1,#chainlookup do - local chainstep = chainlookup[j] - if chainstep then - local chainkind = chainstep.type - local chainproc = chainprocs[chainkind] - if chainproc then - local ok - -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. - -- char + mark -> char where mark has to disappear - -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash) - if ok then - done = true + if chainlookup then + for j=1,#chainlookup do + local chainstep = chainlookup[j] + if chainstep then + local chainkind = chainstep.type + local chainproc = chainprocs[chainkind] + if chainproc then + local ok + -- HH: chainindex 1 added here (for KAI to check too), there are weird ligatures e.g. + -- char + mark -> char where mark has to disappear + -- head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + head, start, ok = chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash) + if ok then + done = true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: has an issue (1)",cref(dataset,sequence)) end + else + -- whatever end else @@ -2185,7 +2178,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done = true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -2215,6 +2208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last = start local prev = getprev(start) local hasglue = false + local useddisc = nil -- new 2022-09-25 + local usedstart = start -- new 2022-09-25 -- fishy: so we can overflow and then go on in the sweep? -- todo : id can also be glue_code as we checked spaces @@ -2376,15 +2371,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end end end + local done = false if lookaheaddisc then - local cf = start local cl = getprev(lookaheaddisc) local cprev = getprev(start) local insertedmarks = 0 - while cprev do local nxt, char = isnextchar(cf,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char and marks[char] then @@ -2423,14 +2417,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok = false - cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done = true end end if not notmatchreplace[lookaheaddisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done = true end @@ -2441,16 +2435,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start = getprev(lookaheaddisc) + useddisc = lookaheaddisc -- new 2022-09-25 sweephead[cf] = getnext(clast) or false sweephead[new] = getnext(cl) or false - elseif backtrackdisc then - local cf = getnext(backtrackdisc) local cl = start local cnext = getnext(start) local insertedmarks = 0 - while cnext do local nxt, char = isnextchar(cnext,currentfont,currentdynamic,currentscale,currentxscale,currentyscale) if char and marks[char] then @@ -2476,14 +2468,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok = false - cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf, start, ok = chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done = true end end if not notmatchreplace[backtrackdisc] then local ok = false - new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new, cnew, ok = chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done = true end @@ -2504,33 +2496,57 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start = getprev(backtrackdisc) + useddisc = backtrackdisc -- new 2022-09-25 sweephead[post] = getnext(clast) or false sweephead[replace] = getnext(last) or false - else local ok = false - head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head, start, ok = chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done = true end end - - return head, start, done + if useddisc and start ~= usedstart then -- make this option per font -- new 2022-09-25 + start = getnext(start) -- new 2022-09-25 + end -- new 2022-09-25 + return head, start, done, useddisc -- new 2022-09-25 end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule = ck[1] - local lookuptype = ck[8] or ck[2] - local nofseq = #ck[3] - local first = ck[4] - local last = ck[5] - local char = getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ", sweepnode and "" or "not ") +local chaintrac do + + local level = 0 + local last = { } + + chaintrac = function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level = level + 1 + last[level] = start + local rule = ck[1] + local lookuptype = ck[8] or ck[2] + local nofseq = #ck[3] -- ck[3].n + local first = ck[4] + local last = ck[5] + local char = getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ", sweepnode and "" or "not ") + else + -- (start,done) + local what = start and "done" or "continue" + local where = head == last[level] and "same" or "different" + local char = getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level = level - 1 + end + end + end -- The next one is quite optimized but still somewhat slow, fonts like ebgaramond @@ -2544,6 +2560,9 @@ end -- the previous disc .. such be it (<before><disc><current=fl><after> with only f done) local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head, start, false + end -- optimizing for rlmode gains nothing local sweepnode = sweepnode local sweeptype = sweeptype @@ -2579,17 +2598,17 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s -- fonts can have many steps (each doing one check) or many contexts -- todo: make a per-char cache so that we have small contexts (when we have a context - -- n == 1 and otherwise it can be more so we can even distingish n == 1 or more) + -- n == 1 and otherwise it can be more so we can even distinguish n == 1 or more) local nofcontexts = contexts.n -- #contexts local startchar = nofcontext == 1 or ischar(start,currentfont) -- already checked for k=1,nofcontexts do -- does this disc mess work well with n > 1 - local ck = contexts[k] - local seq = ck[3] - local f = ck[4] -- first current -local last = start + local ck = contexts[k] + local seq = ck[3] + local f = ck[4] -- first current + local last = start if not startchar or not seq[f][startchar] then -- report("no hit in %a at %i of %i contexts",sequence.type,k,nofcontexts) goto next @@ -2600,7 +2619,9 @@ local last = start else local l = ck[5] -- last current local current = start --- local last = start + -- local last = start + + -- current match if l > f then -- before/current/after | before/current | current/after @@ -2712,7 +2733,7 @@ local last = start -- before if f > 1 then - if startprev then + -- if startprev then -- new 2022-09-25 local prev = startprev if prereplace and prev == checkdisc then prev = getprev(sweepnode) @@ -2837,9 +2858,9 @@ local last = start else goto next end - else - goto next - end + -- else -- new 2022-09-25 + -- goto next -- new 2022-09-25 + -- end -- new 2022-09-25 end -- after @@ -2968,19 +2989,21 @@ local last = start chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,true,discseen,sweepnode) end if discseen or sweepnode then + -- When we process a disc we can collapse and therefore we backtrack one node (start) and + -- reprocess. This is needed because there might be more in the collapsed list. head, start, done = chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head, start, done = chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break -- else -- next context end - ::next:: - -- if trace_chains then - -- chaintrac(head,start,dataset,sequence,rlmode,skipped and skiphash,ck,false,discseen,sweepnode) - -- end + ::next:: end if discseen then notmatchpre = { } @@ -2999,21 +3022,46 @@ handlers.gsub_reversecontextchain = handle_contextchain handlers.gpos_contextchain = handle_contextchain handlers.gpos_context = handle_contextchain --- this needs testing +-- local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) +-- local steps = currentlookup.steps +-- local nofsteps = currentlookup.nofsteps +-- if nofsteps > 1 then +-- reportmoresteps(dataset,sequence) +-- end +-- -- probably wrong +-- local l = steps[1].coverage[getchar(start)] +-- if l then +-- return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) +-- else +-- return head, start, false +-- end +-- end +-- new 2022-09-25 + local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps = currentlookup.steps local nofsteps = currentlookup.nofsteps - if nofsteps > 1 then - reportmoresteps(dataset,sequence) - end - -- probably wrong - local l = steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char = getchar(start) + if nofsteps == 1 then + local s = steps[1] + local l = s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head, start, false + for i=1,nofsteps do + local s = steps[i] + local l = s.coverage[char] + if l then + local h, s, d = handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h, s, d + end + end + end end + return head, start, false end chainprocs.gsub_context = chained_contextchain @@ -3152,7 +3200,7 @@ do -- overcome local limit end -- Functions like kernrun, comprun etc evolved over time and in the end look rather --- complex. It's a bit of a compromis between extensive copying and creating subruns. +-- complex. It's a bit of a compromise between extensive copying and creating subruns. -- The logic has been improved a lot by Kai and Ivo who use complex fonts which -- really helped to identify border cases on the one hand and get insight in the diverse -- ways fonts implement features (not always that consistent and efficient). At the same @@ -3259,7 +3307,7 @@ local function kernrun(disc,k_run,...) if done and trace_testruns then report_disc("done",disc) end --- return nextstart, done + -- return nextstart, done return nextstart end @@ -3313,7 +3361,7 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list setdisc(disc,pre,post,replace) end -- --- return getnext(disc), renewed + -- return getnext(disc), renewed return getnext(disc) end @@ -3442,7 +3490,7 @@ local function testrun(disc,t_run,c_run,...) end end -- next can have changed (copied list) --- return getnext(disc), renewed + -- return getnext(disc), renewed return getnext(disc) end @@ -3978,20 +4026,13 @@ do start = nxt elseif id == disc_code then if not discs or discs[start] == true then --- local ok if gpossing then --- start, ok = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = kernrun(start,k_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then --- start, ok = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = testrun(start,t_run_single,c_run_single,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else --- start, ok = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) start = comprun(start,c_run_single, lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end - -- if ok then - -- done = true - -- end else start = nxt end @@ -4002,7 +4043,7 @@ do start = nxt -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = nxt + -- start = nxt else start = nxt end @@ -4051,15 +4092,11 @@ do start = nxt elseif id == disc_code then if not discs or discs[start] == true then --- local ok if gpossing then --- start, ok = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = kernrun(start,k_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then --- start, ok = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = testrun(start,t_run_multiple,c_run_multiple,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else --- start, ok = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) start = comprun(start,c_run_multiple, steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end else @@ -4098,9 +4135,6 @@ do currentfont = font currentdynamic = false --- currentscale = false --- currentxscale = false --- currentyscale = false currentscale = 1000 currentxscale = 1000 currentyscale = 1000 @@ -4191,7 +4225,7 @@ do start = nxt -- elseif id == par_code and startofpar(start) then -- rlparmode, rlmode = pardirstate(start) - -- start = nxt + -- start = nxt else start = nxt end diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl index 3c7a01857..8cb0b5b6c 100644 --- a/tex/context/base/mkxl/font-pre.mkxl +++ b/tex/context/base/mkxl/font-pre.mkxl @@ -427,10 +427,6 @@ language=dflt, script=math] -\definefontfeature - [oldmath] - [oldmath=yes] - \ifdefined\mathnolimitsmode \mathnolimitsmode\plusone % font driven (only opentype) \fi diff --git a/tex/context/base/mkxl/grph-trf.mkxl b/tex/context/base/mkxl/grph-trf.mkxl index a08cec904..0f1458873 100644 --- a/tex/context/base/mkxl/grph-trf.mkxl +++ b/tex/context/base/mkxl/grph-trf.mkxl @@ -117,7 +117,7 @@ \setupcurrentscale[#2]% \fi % - \dowithnextboxcs\grph_scale_finish\hbox} + \dowithnextboxcs\grph_scale_finish\naturalhbox} % intercept direction \def\grph_scale_finish {% todo: p_scale_ diff --git a/tex/context/base/mkxl/lpdf-ano.lmt b/tex/context/base/mkxl/lpdf-ano.lmt index 85fe050a2..b0d398457 100644 --- a/tex/context/base/mkxl/lpdf-ano.lmt +++ b/tex/context/base/mkxl/lpdf-ano.lmt @@ -386,6 +386,8 @@ local v_minheight = variables.minheight local v_fit = variables.fit local v_tight = variables.tight +local c_realpageno = tex.iscount("realpageno") + -- nicer is to create dictionaries and set properties but it's a bit overkill -- The problem with the following settings is that they are guesses: we never know @@ -466,7 +468,7 @@ end) local function flushdestination(specification) local names = specification.names local view = specification.view - local r = pdfpagereference(texgetcount("realpageno")) + local r = pdfpagereference(c_realpageno) if (references.innermethod ~= v_name) and (view == defaultview or not view or view == "") then r = pagedestinations[r] else @@ -1079,7 +1081,7 @@ end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then - p = references.checkedrealpage(p + texgetcount("realpageno")) + p = references.checkedrealpage(p + texgetcount(c_realpageno)) return pdflinkpage(p) end end diff --git a/tex/context/base/mkxl/lpdf-emb.lmt b/tex/context/base/mkxl/lpdf-emb.lmt index 6932879e7..3ce288b48 100644 --- a/tex/context/base/mkxl/lpdf-emb.lmt +++ b/tex/context/base/mkxl/lpdf-emb.lmt @@ -872,6 +872,7 @@ do FontName = basefont, Flags = 4, FontBBox = fontbbox, +-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 }, Ascent = scale(ascender), Descent = scale(descender), ItalicAngle = round(italicangle or 0), @@ -971,7 +972,6 @@ do return int4tag .. tointeger4(n) end - local e = false local z = byte("0") local dp = 10 local ep = 11 @@ -985,6 +985,7 @@ do local s = fg(v) local t = { [0] = realtag } local n = 0 + local e = false for s in gmatch(s,".") do if s == "e" or s == "E" then e = true @@ -1027,6 +1028,73 @@ do return t end + -- -- An alternative + -- + -- local fg = formatters["%0.14gE%i"] + -- + -- todictreal = function(v) + -- local E = 0 + -- if v >= 10.0 then + -- while v >= 10.0 do + -- v = v / 10.0 + -- E = E + 1 + -- end + -- elseif v < 1.0 then + -- while v < 1.0 do + -- v = v * 10.0 + -- E = E - 1 + -- end + -- end + -- local s = fg(v,E) + -- local t = { [0] = realtag } + -- local n = 0 + -- local e = false + -- for s in gmatch(s,".") do + -- if s == "e" or s == "E" then + -- e = true + -- elseif s == "+" then + -- -- skip + -- elseif s == "-" then + -- n = n + 1 + -- if e then + -- t[n] = em + -- e = false + -- else + -- t[n] = mn + -- end + -- else + -- if e then + -- n = n + 1 + -- t[n] = ep + -- e = false + -- end + -- n = n + 1 + -- if s == "." then + -- t[n] = dp + -- else + -- t[n] = byte(s) - z + -- end + -- end + -- end + -- n = n + 1 + -- t[n] = es + -- if (n % 2) ~= 0 then + -- n = n + 1 + -- t[n] = es + -- end + -- local j = 0 + -- for i=1,n,2 do + -- j = j + 1 + -- t[j] = char(t[i]*0x10+t[i+1]) + -- end + -- -- print(v,s) + -- -- for i=0,j do + -- -- print(string.format("%02X",utf.byte(t[i]))) + -- -- end + -- t = concat(t,"",0,j) + -- return t + -- end + todictnumber = function(n) if not n or n == 0 then return todictinteger(0) @@ -1063,7 +1131,8 @@ do local function todictdeltas(t) local r = { } for i=1,#t do - r[i] = todictnumber(t[i]-(t[i-1] or 0)) +-- r[i] = todictnumber(t[i]-(t[i-1] or 0)) + r[i] = todictnumber(t[i]+(t[i-1] or 0)) end return concat(r) end @@ -1140,7 +1209,7 @@ do -- local charstrings = fontfile.charstrings local nofglyphs = #charstrings + 1 - local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo +-- local fontmatrix = { 0.001, 0, 0, 0.001, 0, 0 } -- todo local fontbbox = fontfile.fontbbox local defaultwidth = cffinfo.defaultwidth or 0 local nominalwidth = cffinfo.nominalwidth or 0 @@ -1153,6 +1222,8 @@ do local bluefuzz = cffinfo.bluefuzz local stdhw = cffinfo.stdhw local stdvw = cffinfo.stdvw + local stemsnaph = cffinfo.stemsnaph + local stemsnapv = cffinfo.stemsnapv -- if defaultwidth == 0 then defaultwidth = nil end if nomimalwidth == 0 then nominalwidth = nil end @@ -1163,8 +1234,10 @@ do if bluescale then bluescale = todictnumber(bluescale) end if blueshift then blueshift = todictnumber(blueshift) end if bluefuzz then bluefuzz = todictnumber(bluefuzz) end - if stdhw then stdhw = todictdeltas(stdhw) end - if stdvw then stdvw = todictdeltas(stdvw) end + if stemsnaph then stemsnaph = todictarray(stemsnaph) end + if stemsnapv then stemsnapv = todictarray(stemsnapv) end + if stdhw then stdhw = todictnumber(stdhw) end + if stdvw then stdvw = todictnumber(stdvw) end -- local fontversion = todictstring(fontfile,fontheader.fontversion or "uknown version") local familyname = todictstring(fontfile,cffinfo.familyname or names.family or basefontname) @@ -1177,7 +1250,7 @@ do local underlineposition = todictnumber(cffinfo.underlineposition) local underlinethickness = todictnumber(cffinfo.underlinethickness) local charstringtype = todictnumber(2) - local fontmatrix = todictarray(fontmatrix) +-- local fontmatrix = todictarray(fontmatrix) local ros = todictstring(fontfile,"Adobe") -- registry .. todictstring(fontfile,"Identity") -- identity .. todictnumber(0) -- supplement @@ -1191,18 +1264,21 @@ do -- local defaultwidthx = todictnumber(defaultwidth) local nominalwidthx = todictnumber(nominalwidth) + -- the order of the blues is important! local private = "" - .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "") - .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "") - .. (bluevalues and (bluevalues .. todictkey(6)) or "") - .. (otherblues and (otherblues .. todictkey(7)) or "") - .. (familyblues and (familyblues .. todictkey(8)) or "") - .. (familyotherblues and (familyotherblues .. todictkey(9)) or "") - .. (bluescale and (bluescale .. todictkey(12,9)) or "") - .. (blueshift and (blueshift .. todictkey(12,10)) or "") - .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "") - .. (stdhw and (stdhw .. todictkey(12,12)) or "") - .. (stdvw and (stdvw .. todictkey(12,13)) or "") + .. (bluevalues and (bluevalues .. todictkey( 6)) or "") + .. (otherblues and (otherblues .. todictkey( 7)) or "") + .. (familyblues and (familyblues .. todictkey( 8)) or "") + .. (familyotherblues and (familyotherblues .. todictkey( 9)) or "") + .. (bluescale and (bluescale .. todictkey(12, 9)) or "") + .. (blueshift and (blueshift .. todictkey(12,10)) or "") + .. (bluefuzz and (bluefuzz .. todictkey(12,11)) or "") + .. (stdhw and (stdhw .. todictkey(10)) or "") + .. (stdvw and (stdvw .. todictkey(11)) or "") + .. (stemsnaph and (stemsnaph .. todictkey(12,12)) or "") + .. (stemsnapv and (stemsnapv .. todictkey(12,13)) or "") + .. (defaultwidthx and (defaultwidthx .. todictkey(20)) or "") + .. (nominalwidthx and (nominalwidthx .. todictkey(21)) or "") local privatesize = todictnumber(#private) local privatespec = privatesize .. privateoffset -- @@ -1245,7 +1321,7 @@ do .. underlineposition .. todictkey(12, 3) .. underlinethickness .. todictkey(12, 4) .. charstringtype .. todictkey(12, 6) - .. fontmatrix .. todictkey(12, 7) +-- .. fontmatrix .. todictkey(12, 7) .. strokewidth .. todictkey(12, 8) .. topvars } @@ -1272,6 +1348,10 @@ do -- -- fdselect -- + -- see printer mail thread / experiments with Leah Neukirchen: some printers + -- (probaby with an old GS on board) need this matrix because oitherwise they + -- accumulate the top one (resulting in very tiny invisible results) + -- local fdselect = tocardinal1(3) -- format .. tocardinal2(1) -- n of ranges @@ -1301,8 +1381,8 @@ do offset = writestring(target,private,offset,"private") -- local fdarray = { - fontname .. todictkey(12,38) - .. privatespec .. todictkey(18) + fontname .. todictkey(12,38) + .. privatespec .. todictkey(18) -- case 1 } fdarrayoffset = todictoffset(offset) offset = writeindex(target,fdarray,offset,"fdarray") @@ -1314,19 +1394,18 @@ do .. charsetoffset .. todictkey(15) .. fdarrayoffset .. todictkey(12,36) .. fdselectoffset .. todictkey(12,37) - .. privatespec .. todictkey(18) + .. privatespec .. todictkey(18) -- case 2 target[dictof] = topdict .. topvars -- target = concat(target) -- if trace_details then - -- local name = "temp.cff" - -- report_fonts("saving %a",name) - -- io.savedata(name,target) - -- inspect(fonts.handlers.otf.readers.cffcheck(name)) + -- local name = "temp.cff" + -- report_fonts("saving %a",name) + -- io.savedata(name,target) + -- inspect(fonts.handlers.otf.readers.cffcheck(name)) -- end return target end - end -- todo: check widths (missing a decimal) @@ -1468,6 +1547,7 @@ do FontName = basefont, Flags = 4, FontBBox = fontbbox, +-- FontMatrix = pdfarray { 0.001, 0, 0, 0.001, 0, 0 }, Ascent = scale(ascender), Descent = scale(descender), ItalicAngle = round(italicangle or 0), diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index bf1142119..d937e3dea 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -202,6 +202,7 @@ local usedfontstreams = { } local usedindices = setmetatableindex(function(t,k) local n = 0 +-- n = 31 local v = setmetatableindex(function(tt,kk) if n >= 0xFFFF then report_fonts("registering character index: overflow in hash %a, todo: use overflow font") @@ -2488,11 +2489,12 @@ end do - local names = { } - local cache = { } - local nofpages = 0 + local names = { } + local cache = { } + local nofpages = 0 - local texgetcount = tex.getcount + local texgetcount = tex.getcount + local c_realpageno = tex.iscount("realpageno") pdfreserveobject = function(name) nofobjects = nofobjects + 1 @@ -2511,7 +2513,7 @@ do pdfpagereference = function(n,complete) -- true | false | nil | n [true,false] if n == true or not n then complete = n - n = texgetcount("realpageno") + n = texgetcount(c_realpageno) end if n > nofpages then nofpages = n diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt index ca38dcaa8..2c8227be9 100644 --- a/tex/context/base/mkxl/lpdf-rul.lmt +++ b/tex/context/base/mkxl/lpdf-rul.lmt @@ -146,9 +146,7 @@ FakeRule(RuleWidth,RuleHeight,RuleDepth,RuleThickness,RuleColor); setdimen("d_rule_h", h) setdimen("d_rule_v", v) setdimen("d_rule_line", p.line or 65536) --- setdimen("d_rule_offset", p.offset or 0) setdimen("d_rule_offset", (p.offset or 0) * 65536) --- setmacro("m_rule_factor", (p.factor or 0) * bpfactor) -- needs checking setdimen("d_rule_factor", (p.factor or 0)) -- needs checking setmacro("m_rule_option", p.option or "") setmacro("m_rule_direction", p.direction or lefttoright_code) diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt index f0b132d66..7fb4f9b9f 100644 --- a/tex/context/base/mkxl/math-act.lmt +++ b/tex/context/base/mkxl/math-act.lmt @@ -23,6 +23,11 @@ local trace_tweaking = false trackers.register("math.tweaks", function(v) local report_math = logs.reporter("mathematics","initializing") local report_mathtweak = logs.reporter("mathematics","tweak") +local getfontoffamily = tex.getfontoffamily +local fontcharacters = fonts.hashes.characters +local chardata = characters.data +local extensibles = mathematics.extensibles + local context = context local commands = commands local mathematics = mathematics @@ -166,28 +171,6 @@ function mathematics.checkaccentbaseheight(target,original) end end --- function mathematics.checkprivateparameters(target,original) --- local mathparameters = target.mathparameters --- if mathparameters then --- local parameters = target.parameters --- local properties = target.properties --- if parameters then --- local size = parameters.size --- if size then --- -- gone --- elseif properties then --- report_math("invalid parameters in font %a",properties.fullname or "?") --- else --- report_math("invalid parameters in font") --- end --- elseif properties then --- report_math("no parameters in font %a",properties.fullname or "?") --- else --- report_math("no parameters and properties in font") --- end --- end --- end - function mathematics.overloadparameters(target,original) if use_math_goodies then local mathparameters = target.mathparameters @@ -200,6 +183,8 @@ function mathematics.overloadparameters(target,original) if mathematics then local parameters = mathematics.parameters local bigslots = mathematics.bigslots or mathematics.bigs +-- inspect(parameters) +-- print("before",mathparameters.AxisHeight) if parameters then if trace_defining then report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) @@ -222,6 +207,7 @@ function mathematics.overloadparameters(target,original) end mathparameters[name] = newvalue end +-- print("after ",mathparameters.AxisHeight) for name, value in next, parameters do local tvalue = type(value) if tvalue == "string" then @@ -265,7 +251,7 @@ local function report_tweak(fmt,target,original,...) (target and target .shared.rawdata.metadata) local parameters = target.parameters report_mathtweak( - "%a, size %p, math size %i, %s", + "%a, size %P, math size %i, %s", metadata and metadata.fontname or "unknown", parameters.size or 655360, parameters.mathsize or 1, @@ -276,6 +262,39 @@ local function report_tweak(fmt,target,original,...) end end +mathtweaks.subsets = { + acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 }, + bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 }, + d = { 0x1D451 }, + f = { 0x1D453 }, + gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 }, + i = { 0x1D456 }, + mw = { 0x1D45A, 0x1D464 }, + p = { 0x1D45D }, + dotless = { 0x00049, 0x0004A, 0x00131, 0x00237, 0x1D6A4, 0x1D6A5 }, + integrals = { 0x0222B, 0x0222C, 0x0222D, 0x0222E, 0x0222F, 0x02230, 0x02231, 0x02232, 0x02233, 0x02A0B, 0x02A0C, 0x02A0D, 0x02A0E, 0x02A0F, 0x02A10, 0x02A11, 0x02A12, 0x02A13, 0x02A14, 0x02A15, 0x02A16, 0x02A17, 0x02A18, 0x02A19, 0x02A1A, 0x02A1B, 0x02A1C }, +} + +local function getalso(target,original) + local also = target.tweakalso -- maybe + if not also then + also = { } + for k, v in sortedhash(target.characters) do + local u = v.unicode + if u and k ~= u then + local a = also[u] + if a then + a[#a+1] = k + else + also[u] = { k } + end + end + end + target.tweakalso = also + end + return also +end + -- { -- tweak = "dimensions", -- list = { @@ -398,32 +417,33 @@ do extend = factor, }, v) end - local original = v.original - if not original then + local originalslot = v.original + if not originalslot then local delta = v.delta if delta then - original = k + delta + originalslot = k + delta end end - if original then - original = mathgaps[original] or original - local data = targetcharacters[original] + if originalslot then + originalslot = mathgaps[originalslot] or originalslot + local data = targetcharacters[originalslot] if data then data = copytable(data) - data.unicode = original + data.unicode = originalslot targetcharacters[k] = data character = data else - report_mathtweak("no slot %U",original) + report_mathtweak("no slot %U",originalslot) return end end -- - local width = character.width - local height = character.height - local depth = character.depth - local italic = character.italic - local topaccent = character.topaccent + local width = character.width + local height = character.height + local depth = character.depth + local italic = character.italic + local topanchor = character.topanchor + local bottomanchor = character.bottomanchor -- local widthfactor = v.width local heightfactor = v.height @@ -442,7 +462,7 @@ do if advancefactor then character.advance = advancefactor * width else - character.advance = width -- so advance is oldwidth + character.advance = character.advance or width -- so advance is oldwidth end if widthfactor then character.width = widthfactor * width @@ -470,8 +490,11 @@ do end end if anchorfactor then - character.topaccent = anchorfactor * (topaccent or width) + character.topanchor = anchorfactor * (topanchor or width) end +-- if anchorfactor then +-- character.bottomaccent = anchorfactor * (bottomanchor or width) +-- end -- begin experiment local line = v.wline if line then @@ -575,12 +598,26 @@ end do + function mathtweaks.showinfo(target,original,parameters) + local mathparameters = target.mathparameters + for k, v in sortedhash(mathparameters) do + report_mathtweak("%s : %s",k,v) + end + end + +end + + +do + function mathtweaks.wipevariants(target,original,parameters) local list = parameters.list if list then local targetcharacters = target.characters -- local originalcharacters = original.characters local count = 0 + -- local also = getalso(target,original) + -- local done = { } for k, v in sortedhash(list) do local ori = targetcharacters[k] local nxt = ori.next @@ -675,17 +712,6 @@ do -- maybe we'll have a different name - mathtweaks.subsets = { - acenorsuvxz = { 0x1D44E, 0x1D450, 0x1D452, 0x1D45B, 0x1D45C, 0x1D45F, 0x1D460, 0x1D462, 0x1D463, 0x1D465, 0x1D467 }, - bhklt = { 0x1D44F, 0x1D455, 0x1D458, 0x1D459, 0x1D461 }, - d = { 0x1D451 }, - f = { 0x1D453 }, - gjqy = { 0x1D454, 0x1D457, 0x1D45E, 0x1D466 }, - i = { 0x1D456 }, - mw = { 0x1D45A, 0x1D464}, - p = { 0x1D45D }, - } - function mathtweaks.kernpairs(target,original,parameters) local list = parameters.list if list then @@ -749,37 +775,11 @@ end do - -- What a mess ... should be a different alphabet. - - local function expand(target,original,list,selector,feature) - if feature then - local getsubstitution = fonts.handlers.otf.getsubstitution - for _, char in next, list do - local variant = getsubstitution(original,char,feature,true) - if variant then - mathematics.addvariant(target,char,variant,selector) - end - end - else - for i, char in next, list do - mathematics.addvariant(target,char,0xFE800+i,selector) - end - end - end - function mathtweaks.variants(target,original,parameters) - local feature = parameters.feature - local selector = parameters.selector - local kind = parameters.kind - if kind == "script" then - if selector then - expand(target,original,mathematics.alphabets.sr.tf.lcletters,selector,feature) - expand(target,original,mathematics.alphabets.sr.tf.ucletters,selector,feature) - end - end + report_mathtweak("todo: remove 'variants' tweak from goodie file") end - mathtweaks.variant = mathtweaks.variants + mathtweaks.variant = mathtweaks.variants end @@ -1052,80 +1052,219 @@ do local factor = tonumber(parameters.factor) or 0 if factor ~= 0 then for k, v in next, targetcharacters do - local a = v.topaccent + local a = v.topanchor if a and a > 0 then - v.topaccent = a * factor + v.topanchor = a * factor end end end end - -- local default = { - -- "digitsnormal", - -- "lowercasedoublestruck", - -- "uppercasedoublestruck", - -- } + mathtweaks.fixaccents = mathtweaks.fixanchors + +end + +do + + -- actually this should be a an engine feature driven by category because we don't + -- want this in display mode .. only a test for MS and HH + + local issymbol = characters.is_symbol + + function mathtweaks.oldstylemath(target,original,parameters) + local characters = target.characters + local axis = target.mathparameters.AxisHeight + local delta = (parameters.factor or .1) * axis + target.mathparameters.AxisHeight = (axis - delta) + for k, v in sortedhash(characters) do + if issymbol[k] then -- quick hack, engine knows + v.yoffset = -delta + v.height = (v.height or 0) - delta + v.depth = (v.depth or 0) - delta + end + end + end - local function wipe(target,original,parameters,field) - local targetcharacters = target.characters +end + +do + + function mathtweaks.simplifykerns(target,original,parameters) + local characters = target.characters + local simplified = 0 + for k, v in sortedhash(characters) do + local mathkerns = v.mathkerns + if mathkerns then + local k = mathkerns.topleft + if k then + k = k[#k].kern + if k then + v.topleft = k + end + end + local k = mathkerns.topright + if k then + k = k[#k].kern + if k then + v.topright = k + end + end + local k = mathkerns.bottomleft + if k then + k = k[1].kern -- todo get value at baseline + if k then + v.bottomleft = k + end + end + local k = mathkerns.bottomright + if k then + k = k[1].kern -- todo get value at baseline + if k then + v.bottomright = k + end + end + v.mathkerns = nil + simplified = simplified + 1 + end + end + if simplified == 0 then + report_tweak("no need to simplify mathkerns",target,original) + elseif trace_tweaking then + report_tweak("%i mathkerns simplified",target,original,simplified) + end + end + +end + +do + + local function wipe(target,original,parameters,field,move,integrals) + local targetcharacters = target.characters + local targetdescriptions = target.descriptions + local factor = target.parameters.factor + local correct = parameters.correct + local function getllx(u) + local d = targetdescriptions[u] + if d then + local b = d.boundingbox + if b then + local llx = b[1] + if llx < 0 then + return - llx + end + end + end + return false + end local function step(s,l) - local done = false while s do - local c = targetcharacters[mathgaps[s] or s] + local u = mathgaps[s] or s + local c = targetcharacters[u] if c then - local v = c[field] - if v then - if trace_tweaking then - if l then - report_tweak("removing %a in range %a from %C",target,original,field,l,s) + if field == "topanchor" then + if c.topanchor then + c.topanchor = nil + else + goto smaller + end + else + local done = false + local italic = c.italic + if move then + local width = c.width or 0 + c.advance = width + if correct then + local llx = getllx(u) + if llx then + local topanchor = c.topanchor + llx = llx * factor + width = width + llx + c.xoffset = llx + if topanchor then + c.topanchor = topanchor + llx + end +-- if c.bottomleft or c.topleft then +-- print("BEFORE",c.bottomleft,c.topleft,llx) +-- c.bottomleft = (c.bottomleft or 0) - llx +-- c.topleft = (c.topleft or 0) - llx +-- print("AFTER",c.bottomleft,c.topleft,llx) +-- else + c.bottomleft = (c.bottomleft or 0) - llx + c.topleft = (c.topleft or 0) - llx +-- end + done = true + end + end + if italic and italic ~= 0 then + c.width = width + italic +-- print(">>>",bottomright) + c.bottomright = - italic +-- c.bottomright = c.bottomright - italic + done = true else - report_tweak("removing %a from %C",target,original,field,s) + c.width = width end end - c[field] = nil - done = true + if italic then + c.italic = nil + done = true + end + if not done then + goto smaller + end end + if trace_tweaking then + if l then + report_tweak("%s %a in range %a from %C","removing",target,original,field,l,s) + else + report_tweak("%s %a from %C","removing",target,original,field,s) + end + end + goto smaller + ::smaller:: s = c.smaller else break end end - return done end local list = parameters.list -- todo: ranges - -- if list == "default" then - -- list = default - -- else if type(list) == "string" then list = { list } end for i=1,#list do local l = list[i] - local r = blocks[l] - if r then - local done = false - for i=r.first,r.last do - if step(i,l) then - done = true - end - end - if not done and trace_tweaking then - report_mathtweak("there is no need to remove %a range %a",field,l) + if type(l) == "table" then + for i=1,#l do + step(i,l[i]) end else - stepper(l,step) + local r = blocks[l] + if r then + for i=r.first,r.last do + step(i,l) + end + else + stepper(l,step) + end end end end function mathtweaks.wipeanchors(target,original,parameters) - wipe(target,original,parameters,"topaccent") + wipe(target,original,parameters,"topanchor") end + mathtweaks.wipeaccents = mathtweaks.wipeanchors + function mathtweaks.wipeitalics(target,original,parameters) wipe(target,original,parameters,"italic") end + function mathtweaks.moveitalics(target,original,parameters) + wipe(target,original,parameters,"italic",true) + end + -- function mathtweaks.fixdigits(target,original,parameters) -- mathtweaks.fixanchors(target,original,{ list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }) -- end @@ -1134,6 +1273,88 @@ end do + function mathtweaks.topanchors(target,original,parameters) + local characters = target.characters + local list = parameters.list + if list then + for k, v in sortedhash(list) do + local c = characters[k] + if c then + local w = c.width + if w and w ~= 0 then + c.topanchor = v * w + if trace_tweaking then + -- todo + end + end + end + end + -- todo: small + end + end + + mathtweaks.topaccents = mathtweaks.topanchors + + function mathtweaks.limits(target,original,parameters) + local characters = target.characters + local list = parameters.list + if list then + local factor = parameters.factor or 1 + local also = getalso(target,original) + local done = { } + local function relocate(u,factor) + if done[u] then + return + end + done[u] = true + local c = characters[u] + if c then + local italic = c.italic + if italic and italic ~= 0 then + local width = c.width or 0 + local half = (italic/2) * factor + c.topanchor = width + half + c.bottomanchor = width - half + c.bottomright = - italic + c.italic = nil + if trace_tweaking then + -- todo + end + end + local s = c.smaller + if s then + relocate(s,factor) + end + local n = c.next + if n then + relocate(n,factor) + end + if also then + local a = also[u] + if a then + for i=1,#a do + relocate(a[i],factor) + end + end + end + end + end + if #list > 0 then + for i=1,#list do + relocate(list[i],factor) + end + else + for k, v in sortedhash(list) do + relocate(k,tonumber(v) or factor) + end + end + end + end + +end + +do + -- musical timestamp: March 2022, Antonio Sanches (Bad Hombre), live performance in NL function mathtweaks.kerns(target,original,parameters) @@ -1178,12 +1399,14 @@ do local characters = target.characters local function setone(unicode,data) local chardata = characters[mathgaps[unicode] or unicode] - local width = chardata.width or 0 - local total = (chardata.height or 0) + (chardata.depth or 0) - local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end - local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end - local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end - local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end + if chardata then + local width = chardata.width or 0 + local total = (chardata.height or 0) + (chardata.depth or 0) + local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end + local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end + local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end + local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end + end end for unicode, data in next, margins do setone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone) @@ -1398,39 +1621,39 @@ end do - local addprivate = fonts.helpers.addprivate - local privateslot = fonts.helpers.privateslot - - -- function mathtweaks.addrules(target,original,parameters) - -- local characters = target.characters - -- local height = target.mathparameters.OverbarRuleThickness - -- local depth = target.mathparameters.UnderbarRuleThickness - -- local width = target.parameters.emwidth/2 - -- local step = 0.8 * width - -- characters[0x203E] = { -- over - -- width = width, - -- height = height, - -- depth = 0, - -- unicode = 0x203E, - -- commands = { { "rule", height, width } }, - -- hparts = { - -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 }, - -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 }, - -- } - -- } - -- characters[0x0332] = { -- under - -- width = width, - -- height = 0, - -- depth = depth, - -- yoffset = -depth, - -- unicode = 0x0332, - -- commands = { { "rule", height, width } }, - -- hparts = { - -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 }, - -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 }, - -- } - -- } - -- end + local addprivate = fonts.helpers.addprivate + local privateslot = fonts.helpers.privateslot + + -- function mathtweaks.addrules(target,original,parameters) + -- local characters = target.characters + -- local height = target.mathparameters.OverbarRuleThickness + -- local depth = target.mathparameters.UnderbarRuleThickness + -- local width = target.parameters.emwidth/2 + -- local step = 0.8 * width + -- characters[0x203E] = { -- over + -- width = width, + -- height = height, + -- depth = 0, + -- unicode = 0x203E, + -- commands = { { "rule", height, width } }, + -- hparts = { + -- { advance = width, ["end"] = step, glyph = 0x203E, start = 0 }, + -- { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 }, + -- } + -- } + -- characters[0x0332] = { -- under + -- width = width, + -- height = 0, + -- depth = depth, + -- yoffset = -depth, + -- unicode = 0x0332, + -- commands = { { "rule", height, width } }, + -- hparts = { + -- { advance = width, ["end"] = step, glyph = 0x0332, start = 0 }, + -- { advance = width, ["end"] = 0, glyph = 0x0332, start = step, extender = 1 }, + -- } + -- } + -- end function mathtweaks.addrules(target,original,parameters) local characters = target.characters @@ -1787,6 +2010,9 @@ end do + -- mirror + -- smaller + local list = { 0x221A, } @@ -1802,11 +2028,19 @@ do end data.height = depth data.depth = height +if data.rorrim then + -- the original does the magic +else data.yoffset = depth - height +end + end + local smaller = data.smaller + if smaller then + fix(target,original,characters,smaller) end - local small = data.smaller - if small then - fix(target,original,characters,small) + local mirror = data.mirror + if mirror then + fix(target,original,characters,mirror) end end end @@ -1823,6 +2057,70 @@ end do + local done = nil + + local function fix(target,original,characters,unicode,axis) + if done[unicode] then + return + end + done[unicode] = true + local data = characters[unicode] + if data then + local height = data.height or 0 + local depth = data.depth or 0 + if trace_tweaking then + report_tweak("swapping height and depth of %U",target,original,unicode) + end + local half = (height + depth)/2 + if data.rorrim then + -- the original does the magic + else + data.yoffset = depth - (half - axis) + end + height = half + axis + depth = half - axis + data.height = height + data.depth = depth + local smaller = data.smaller + if smaller then + fix(target,original,characters,smaller,axis) + end + local mirror = data.mirror + if mirror then + fix(target,original,characters,mirror,axis) + end + local next = data.next + if next then + fix(target,original,characters,next,axis) + end + end + end + + function mathtweaks.fixoldschool(target,original,parameters) + local characters = target.characters + local list = mathtweaks.subsets.integrals + local also = getalso(target,original) + local axis = target.mathparameters.AxisHeight + done = { } + for i=1,#list do + local unicode = list[i] + fix(target,original,characters,unicode,axis) + end + if also then + local a = also[u] + if a then + for i=1,#a do + fix(target,original,characters,a[i],axis) + end + end + end + done = nil + end + +end + +do + local list = { 0x2061, 0x2062, 0x2063, 0x2064 } function mathtweaks.wipecues(target,original,parameters) @@ -1896,12 +2194,12 @@ characters[hat] = copytable(characters[0x0302]) -- TODO local alias = entry[1] local stretchingdata = characters[stretching] if stretchingdata and stretchingdata.width == 0 then - local topaccent = stretchingdata.topaccent or 0 - local width = -topaccent - topaccent = width/2 + local topanchor = stretchingdata.topanchor or 0 + local width = -topanchor + topanchor = width/2 stretchingdata.width = width - stretchingdata.topaccent = topaccent - stretchingdata.commands = { rightcommand[width + topaccent], charcommand[stretching] } + stretchingdata.topanchor = topanchor + stretchingdata.commands = { rightcommand[width + topanchor], charcommand[stretching] } if trace_tweaking then report_tweak("width of initial extensible accent %U set",target,original,stretching) end @@ -1925,7 +2223,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO local flataccent = last.flataccent if flataccent then characters[flataccent].extensible = true - end + end break end end @@ -1947,7 +2245,7 @@ characters[hat] = copytable(characters[0x0302]) -- TODO depth = stretchingdata.depth, next = stretchingdata.next, commands = { charcommand[stretching] }, - topaccent = stretchingdata.topaccent, + topanchor = stretchingdata.topanchor, -- unicode = stretching, -- when we aliasize to combiners unicode = alias, -- when we keep the original } @@ -2018,7 +2316,9 @@ do local linewidth = target.MathConstants.RadicalRuleThickness -- make option local basechar = characters[radical] local baseheight = basechar.height +/2 local basedepth = basechar.depth +/2 local basetotal = baseheight + basedepth local used = baseheight -- @@ -2188,7 +2488,7 @@ do } } if trace_tweaking then - report_tweak("fourier %U added using %U",target,original,basecode,fourier) + report_tweak("fourier %U added using %U",target,original,basecode,fouriercode) end end end @@ -2284,17 +2584,17 @@ do function mathtweaks.fixellipses(target,original,parameters) local characters = target.characters local function fix(normal,raised) - local normalone = characters[normal] - if normalone then - local raisedone = copytable(normalone) - characters[raised] = raisedone - raisedone.unicode = weird - local height = raisedone.height + local normaldata = characters[normal] + if normaldata then + local raiseddata = copytable(normaldata) + characters[raised] = raiseddata + raiseddata.unicode = raised + local height = raiseddata.height local yoffset = (parameters.yoffset or 2) * height - raisedone.yoffset = yoffset - raisedone.height = height + yoffset + raiseddata.yoffset = yoffset + raiseddata.height = height + yoffset if trace_tweaking then - report_tweak("taking %U from %U",target,original,weird,normal) + report_tweak("taking %U from %U",target,original,raised,normal) end end end @@ -2358,6 +2658,163 @@ end do + -- We started with the list that xits has in rtlm but most of them can be derived from + -- the database, and others need to be added. + + -- Checked while watching/listening to Dave Matthews Band: The Central Park Concert + -- (with superb solos by Warren Haynes), a DVD I bought around when we started with the + -- LUATEX advanture. + + local mirrors = { + + [0x0002F] = true, -- slashes + [0x0005C] = true, + [0x000F7] = true, + + [0x02032] = true, -- primes + [0x02033] = true, + [0x02034] = true, + [0x02057] = true, + [0x02035] = true, + [0x02036] = true, + [0x02037] = true, + + [0x0221A] = true, -- radicals + [0x0221B] = true, + [0x0221C] = true, + [0x0221D] = true, + + [0x0222B] = true, -- integrals + [0x0222C] = true, + [0x0222D] = true, + [0x0222E] = true, + [0x0222F] = true, + [0x02230] = true, + [0x02231] = true, + [0x02232] = true, + [0x02233] = true, + + [0x02A0A] = true, -- seen in xits (to be checked) + [0x02A0B] = true, + [0x02A0C] = true, + [0x02A0D] = true, + [0x02A0E] = true, + + [0x02140] = true, + [0x02201] = true, + [0x02202] = true, + [0x02203] = true, + [0x02204] = true, + [0x02211] = true, + + [0x02239] = true, + [0x0225F] = true, + [0x0228C] = true, + [0x022A7] = true, + [0x022AA] = true, + [0x022AC] = true, + [0x022AD] = true, + [0x022AE] = true, + [0x022AF] = true, + [0x022F5] = true, + [0x022F8] = true, + [0x022F9] = true, + [0x022FF] = true, + [0x02320] = true, + [0x02321] = true, + [0x027C0] = true, + [0x029DC] = true, + [0x029F4] = true, + + [0x02A0F] = true, + [0x02A10] = true, + [0x02A11] = true, + [0x02A12] = true, + [0x02A13] = true, + [0x02A14] = true, + [0x02A15] = true, + [0x02A16] = true, + [0x02A17] = true, + [0x02A18] = true, + [0x02A19] = true, + [0x02A1A] = true, + [0x02A1B] = true, + [0x02A1C] = true, + [0x02A20] = true, + + [0x02A74] = true, + [0x02AA3] = true, + [0x02AE2] = true, + [0x02AE6] = true, + [0x1D715] = true, + } + + local new = fonts.helpers.newprivateslot + + local function add(target,original,characters,unicode,what) + local data = characters[unicode] + if data then + if not data.mirror then + local slot = new("mirror."..unicode) + local mirror = copytable(data) + data.mirror = slot + mirror.rorrim = unicode -- so we can check later + mirror.commands = { + { "offset", data.width, 0, unicode, -1, 1 } + } + if trace_tweaking then + report_tweak("adding mirror %U (%s)",target,original,unicode,what) + end + characters[slot] = mirror + elseif trace_tweaking then + report_tweak("skipping mirror %U (%s)",target,original,unicode,what) + end + local hparts = data.hparts + if hparts then + for i=1,#hparts do + add(target,original,characters,hparts[i],"hpart") + end + end + local vparts = data.vparts + if vparts then + for i=1,#vparts do + add(target,original,characters,vparts[i],"vpart") + end + end + local smaller = data.smaller + if smaller then + add(target,original,characters,"smaller") + end + local next = data.next + if next then + add(target,original,characters,next,"next") + end + end + end + + -- todo: also check the rtlm table if present + + function mathtweaks.addmirrors(target,original,parameters) + local characters = target.characters + for unicode, detail in sortedhash(characters) do + local data = chardata[unicode] + if data and data.mirror then + add(target,original,characters,unicode,"mirror") + end + end + for unicode, detail in sortedhash(mirrors) do + if characters[unicode] then + add(target,original,characters,unicode,"character") + elseif trace_tweaking then + report_tweak("ignoring mirror %U (%s)",target,original,unicode,what) + end + end + end + +end + +do + local reported = { } function mathtweaks.version(target,original,parameters) @@ -2380,6 +2837,215 @@ do report_tweak() end reported[fontname] = true + target.tweakversion = version + end + end + end + +end + +do + + function mathtweaks.diagnose(target,original,parameters) + local characters = target.characters + for k, v in sortedhash(characters) do + local italic = v.italic + if italic then + report_tweak("italics: %U %p",target,original,k,italic) + end + end +-- inspect(characters[0xF0929]) + end + +end + +do + + function mathtweaks.setoptions(target,original,parameters) + local setlist = parameters.set or parameters.list + local resetlist = parameters.reset + if setlist or resetlist then + local properties = target.properties + local codes = tex.mathcontrolcodes + local oldcontrol = tex.get("mathfontcontrol") + local newcontrol = oldcontrol + -- todo: reset + if resetlist then + for i=1,#resetlist do + local v = tonumber(codes[resetlist[i]]) + if v then + newcontrol = newcontrol & (not v) + end + end + end + if setlist then + for i=1,#setlist do + local v = tonumber(codes[setlist[i]]) + if v then + newcontrol = newcontrol | v + end + end + end + newcontrol = newcontrol | codes.usefontcontrol + properties.mathcontrol = newcontrol + target.mathcontrol = newcontrol + if trace_tweaking then + report_tweak("forcing math font options 0x%08X instead of 0x08X",target,original,newcontrol,oldcontrol) + end + end + end + +end + +do + + function mathtweaks.setovershoots(target,original,parameters) + local list = parameters.list + if list then + local characters = target.characters + local emwidth = target.parameters.quad + for i=1,#list do + local entry = list[i] + local target = entry.target + local top = entry.topovershoot + local quad = entry.quad + if target and top then + local range = blocks[target] + if range then + if quad then + quad = emwidth + end + for r = range.first, range.last do + local unicode = mathgaps[r] or r + local data = characters[unicode] + if data then + data.topovershoot = top * (quad or data.width or 0) + end + end + if trace_tweaking then + report_mathtweak("setting overshoots for %a",target) + end + end + end + end + end + end + + -- there is no real need for thios but let's play nice with memory anyway + + local efindex = 0 + local effects = setmetatableindex (function (t,k) + efindex = efindex + 1 + local v = "tweakreplacealphabets" .. efindex + local e = fonts.specifiers.presetcontext(v,"",k) + -- print(k,v,e) + t[k] = v + return v + end) + + function mathtweaks.replacealphabets(target,original,parameters) + local feature = parameters.feature + local features = target.specification.features.normal + if not feature or features[feature] == true then + local list = parameters.list + if list then + local definedfont = fonts.definers.internal + local copiedglyph = fonts.handlers.vf.math.copy_glyph +-- does a deep copy, including parts and so + local getsubstitution = fonts.handlers.otf.getsubstitution + local fontdata = fonts.hashes.identifiers + -- + local fonts = target.fonts + local size = target.size + local characters = target.characters + -- compact: size = 655360 + if not fonts then + fonts = { } + target.fonts = fonts + end + if #fonts == 0 then + fonts[1] = { id = 0, size = size } -- self, will be resolved later + end + for i=1,#list do + local entry = list[i] + local filename = entry.filename + local feature = entry.feature + local thesource = entry.source + local thetarget = entry.target or thesource + if thesource and thetarget then + local sourcerange = type(thesource) == "table" and thesource or blocks[thesource] -- .gaps + local targetrange = type(thetarget) == "table" and thetarget or blocks[thetarget] -- .gaps + if sourcerange and targetrange then + local firsttarget = targetrange.first + local firstsource = sourcerange.first + local lastsource = sourcerange.last or firstsource + if firstsource and firsttarget then + local offset = firsttarget - firstsource + local topovershoot = entry.topovershoot + if filename then + local rscale = entry.rscale or 1 -- todo + size = size * rscale -- maybe use scale in vf command + -- load font, todo: set language and script, the effect hack is ugly + local fullname = filename + local effect = features.effect + if effect then + fullname = fullname .. "*" .. effects["effect={"..effect.."}"] + end + local id = definedfont { + name = fullname, + size = size, + } + local chars = fontchars[id] + local dropin = fontdata[id] + local index = #fonts + 1 + fonts[index] = { id = id, size = size } + -- copy characters + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + if feature then + sourceunicode = getsubstitution(dropin,sourceunicode,feature,true,"math","dflt") or sourceunicode + end + if trace_tweaking then + report_mathtweak("copying %s %U from file %a to %s %U",thesource,sourceunicode,filename,thetarget,targetunicode) + end + characters[targetunicode] = copiedglyph(target,characters,chars,sourceunicode,index) + end + elseif feature then + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + local variant = getsubstitution(original,sourceunicode,feature,true,"math","dflt") + local data = characters[variant] + if data then + if trace_tweaking then + report_mathtweak("copying %s %U from feature %a to %s %U",thesource,sourceunicode,feature,thetarget,targetunicode) + end + characters[targetunicode] = copytable(data) + end + end + else + for s=firstsource,lastsource do + local t = s + offset + local sourceunicode = mathgaps[s] or s + local targetunicode = mathgaps[t] or t + local data = characters[sourceunicode] + if data then + if trace_tweaking then + report_mathtweak("copying %s %U to %s %U",thesource,sourceunicode,thetarget,targetunicode) + end + characters[targetunicode] = copytable(data) + end + end + end + else + -- error + end + end + end + end end end end @@ -2418,7 +3084,10 @@ local function applytweaks(when,target,original) if type(tweak) == "table" then local action = mathtweaks[tweak.tweak or ""] if action then - if original then + local version = tweak.version + if version and version ~= target.tweakversion then + report_math("skipping tweak %a version %a",tweak.tweak,version) + elseif original then action(target,original,tweak) else action(target,tweak) @@ -2456,6 +3125,65 @@ function mathematics.tweakaftercopyingfont(target,original) end end +do + + local defaults = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = "lowercasescript", + target = "lowercasecalligraphic", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + }, + { + source = "lowercaseboldscript", + target = "lowercaseboldcalligraphic", + }, + } + + function mathematics.checkaftercopyingfont(target,original) + local mathparameters = target.mathparameters -- why not hasmath + if mathparameters then + local characters = target.characters + -- + for i=1,#defaults do + -- we assume no ssty here yet .. todo + local default = defaults[i] + local block = blocks[default.target] + local first = block.first + local last = block.last + if not characters[mathgaps[first] or last] then + mathtweaks.replacealphabets(target,original,{ + tweak = "replacealphabets", + list = { default } + }) + end + end + -- + local addvariant = mathematics.addvariant + local function register(old,new) + for i, cold in next, old do + local cnew = new[i] + addvariant(target,cold,cold,0xFE00) + addvariant(target,cnew,cnew,0xFE01) + addvariant(target,cnew,cold,0xFE00) + addvariant(target,cold,cnew,0xFE01) + end + end + local sr = mathematics.alphabets.sr.tf + local ca = mathematics.alphabets.ca.tf + register(sr.ucletters,ca.ucletters) + register(sr.lcletters,ca.lcletters) + end + end + +end + function mathematics.beforepassingfonttotex(target) if use_math_goodies then local mathparameters = target.mathparameters -- why not hasmath @@ -2472,20 +3200,13 @@ sequencers.appendaction("mathparameters","system","mathematics.checkaccentbasehe sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont") sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont") +sequencers.appendaction("aftercopyingcharacters", "system","mathematics.checkaftercopyingfont") sequencers.appendaction("beforepassingfonttotex", "system","mathematics.beforepassingfonttotex") -- no, it's a feature now (see good-mth): -- -- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.overloaddimensions") --- helpers - -local getfontoffamily = tex.getfontoffamily - -local fontcharacters = fonts.hashes.characters -local chardata = characters.data -local extensibles = mathematics.extensibles - -- we use numbers at the tex end (otherwise we could stick to chars) local e_left = extensibles.left @@ -2657,7 +3378,7 @@ function mathematics.finishfallbacks(target,specification,fallbacks) if trace_collecting then report_math("adding fallback characters to font %a",specification.hash) end - local definedfont = fonts.definers.internal + ----- definedfont = fonts.definers.internal local copiedglyph = fonts.handlers.vf.math.copy_glyph local fonts = target.fonts local size = specification.size -- target.size diff --git a/tex/context/base/mkxl/math-ali.mkxl b/tex/context/base/mkxl/math-ali.mkxl index b6b037117..af6b48cee 100644 --- a/tex/context/base/mkxl/math-ali.mkxl +++ b/tex/context/base/mkxl/math-ali.mkxl @@ -1011,12 +1011,12 @@ \ifmmode\stopimath\fi \hfil \aligntab - \hskip\mathcasesparameter\c!distance\relax + \kern\mathcasesparameter\c!distance\relax % hskip \math_cases_strut % looks better \aligncontent \hfil \aligntab - \hskip\mathcasesparameter\c!numberdistance\relax + \kern\mathcasesparameter\c!numberdistance\relax % hskip \span\math_text_in_eqalign{\aligncontent}% \crcr} % todo: number @@ -1286,7 +1286,7 @@ \math_matrix_anchor % \ifdim\d_math_eqalign_distance>\zeropoint % \ifbitwiseand\c_math_matrix_anchor_mode\plustwo - % \hskip.5\d_math_eqalign_distance + % \kern.5\d_math_eqalign_distance % \fi % \fi \fi} @@ -1296,7 +1296,7 @@ \ifcase\c_math_matrix_anchor_mode\else % \ifdim\d_math_eqalign_distance>\zeropoint % \ifbitwiseand\c_math_matrix_anchor_mode\plusfour - % \hskip.5\d_math_eqalign_distance + % \kern.5\d_math_eqalign_distance % \fi % \fi \math_matrix_anchor @@ -1312,7 +1312,7 @@ \aligntab \aligntab \math_matrix_anchor - \hskip.5\d_math_eqalign_distance % kern + \kern.5\d_math_eqalign_distance % hskip \aligncontent \aligntab \global\advance\c_math_eqalign_column\plusone @@ -1358,27 +1358,40 @@ \dousecolorparameter\p_rulecolor \fi} -% \noaligned\permanent\tolerant\protected\def\math_matrix_HL[#1]#*% -% {\noalign\bgroup -% \math_matrix_check_rule[#1]% -% \divide\scratchdimen\plustwo -% \autorule\s!height\scratchdimen\s!depth\scratchdimen\relax -% \egroup} -% -% \permanent\tolerant\protected\def\math_matrix_VL[#1]#*% -% {\NC -% \math_matrix_check_rule[#1]% -% \divide\d_math_eqalign_distance\plustwo -% \hskip-\d_math_eqalign_distance -% \autorule\s!width\scratchdimen\relax -% \hskip-\d_math_eqalign_distance -% \NC} - % These offset are an experiment so we abuse some existing keys or we have to % cook up new ones. Maybe we then should provide small medium big halfline etc. % but all depends on actual demand for this feature. +% Musical timestamp VL, NL, SL: Bad Hombre II by Antonio Sanches +% +% \startformula +% \startmatrix[left=\left(,right=\right)] +% \NC 0 \NL 0 \NC 0 \NC 2x \NC 1 \NC 0 \NC 0 \NL \NR +% \NC 0 \VL 0 \NC 0 \NC 0 \NC 2x \NC 0 \NC 0 \NL \NR +% \NC 0 \VL 0 \NC 0 \NC 0 \NC 0 \NC 3x \NC 0 \NL \NR +% \NC 0 \NL 0 \NC 0 \NC 0 \NC 0 \NC 0 \NC 4x \VL \NR +% \stopmatrix +% \stopformula +% +% \startformula +% \startmatrix[left=\left(,right=\right)] +% \SL[3] \NL \NL \NL \NL \NL \NR +% \VL 2x \NL 1 \NL 0 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \VL 0 \NL 2x \NL 1 \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \VL 0 \NL 0 \NL 2x \VL 0 \NL 0 \NL 0 \NL 0 \NL \NR +% \SL[5] \NL \NL \NL \NR +% \NL 0 \NL 0 \NL 0 \VL 2x \NL 1 \VL 0 \NL 0 \NL \NR +% \NL 0 \NL 0 \NL 0 \VL 0 \NL 2x \VL 0 \NL 0 \NL \NR +% \NL \NL \NL \SL[3] \NL \NL \NR +% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL 0 \NL \NR +% \NL \NL \NL \NL \NL \SL[2] \NL \NR +% \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \NL 0 \VL 3x \VL \NR +% \NL \NL \NL \NL \NL \NL \SL[1] \NL \NR +% \stopmatrix +% \stopformula + \definesystemattribute[mathalignmentvrule][public] +\definesystemattribute[mathalignmenthrule][public] \setupmathmatrix [%c!toffset=\zeropoint, @@ -1417,32 +1430,136 @@ \fi \egroup} -\protected\def\math_matrix_vertical_rule#1% - {\math_matrix_check_rule[#1]% +\protected\def\math_matrix_vertical_rule_indeed#1#2% + {\math_matrix_check_rule[#2]% \enablematrixrules - \vrule + #1 \s!attr \mathalignmentvruleattribute\plusone \s!width \scratchdimen \s!top -\dimexpr\mathmatrixparameter\c!toffset\relax \s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax \relax} +\protected\def\math_matrix_vertical_rule_yes{\math_matrix_vertical_rule_indeed\vrule } +\protected\def\math_matrix_vertical_rule_nop{\math_matrix_vertical_rule_indeed\novrule} + +\installcorenamespace{mathmatrixrulealternative} + +\newboundary\c_math_matrix_vl_boundary +%newboundary\c_math_matrix_sl_boundary + +\protected\def\math_matrix_horizontal_rule_indeed#1#2% + {\math_matrix_check_rule[#2]% + \global\setfalse\c_math_matrix_first + \global\settrue\c_math_matrix_sl_seen + \enablematrixrules + \leaders#1% + \s!attr \mathalignmenthruleattribute\plusone + \s!height .5\scratchdimen + \s!depth .5\scratchdimen + % \s!top -\dimexpr\mathmatrixparameter\c!toffset\relax + % \s!bottom-\dimexpr\mathmatrixparameter\c!boffset\relax + \hfilll + \kern\dimexpr.5\d_math_eqalign_distance\relax + \aligntab} + +\protected\def\math_matrix_horizontal_rule_yes{\math_matrix_horizontal_rule_indeed\hrule } +\protected\def\math_matrix_horizontal_rule_nop{\math_matrix_horizontal_rule_indeed\nohrule} + +\def\math_matrix_hrule_progress_rest#1% + {\expandedloop + \plusone + \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi)*\plustwo+\minusone\relax + \plusone + {\span\omit}}% + +\def\math_matrix_hrule_progress_first#1% + {\expandedloop + \plusone + \numexpr(\ifchknum#1\or#1\else\c_math_matrix_columns\fi+\minusone)*\plustwo+\plusone\relax + \plusone + {\span\omit}}% + +\def\math_matrix_hrule_progress + {\NL + \ifconditional\c_math_matrix_first + \expandafter\math_matrix_hrule_progress_first + \else + \expandafter\math_matrix_hrule_progress_rest + \fi} + +\tolerant\permanent\protected\def\SL[#1]#*[#2]#*% [n] [name] | [name] | [n] + {\ifcsname\??mathmatrixrulealternative#2\endcsname + \lastnamedcs{#1}{#2}% + \orelse\ifcsname\??mathmatrixrulealternative#1\endcsname + \lastnamedcs{#2}{#1}% + \else + \csname\??mathmatrixrulealternative\v!auto\endcsname{#1}{#2}% + \fi} + +\defcsname\??mathmatrixrulealternative\v!auto\endcsname#1#2% + {\math_matrix_hrule_progress{#1}% + \ifnum\c_math_matrix_first=\zerocount + \kern-\dimexpr\linewidth\relax + \else + \kern-\dimexpr.5\d_math_eqalign_distance+\linewidth\relax + \fi + \math_matrix_horizontal_rule_yes{#2}% + %boundary\c_math_matrix_sl_boundary + \enforced\let\NR\math_matrix_NL_NR} \permanent\tolerant\protected\def\math_matrix_VL[#1]#*% {\span\omit - \hskip.5\d_math_eqalign_distance - \math_matrix_vertical_rule{#1}% - \hskip.5\d_math_eqalign_distance - \aligntab} + \ifconditional\c_math_matrix_first\else + \kern.5\d_math_eqalign_distance % hskip + \fi + \math_matrix_vertical_rule_yes{#1}% + \kern.5\d_math_eqalign_distance % hskip + \global\setfalse\c_math_matrix_first + \aligntab + \boundary\c_math_matrix_vl_boundary + \enforced\let\NR\math_matrix_NL_NR + } + +\permanent\tolerant\protected\def\math_matrix_NL[#1]#*% + {\span\omit + \ifconditional\c_math_matrix_first\else + \kern.5\d_math_eqalign_distance % hskip + \fi + \math_matrix_vertical_rule_nop{#1}% + \kern.5\d_math_eqalign_distance % hskip + \global\setfalse\c_math_matrix_first + \aligntab + \boundary\c_math_matrix_vl_boundary + \enforced\let\NR\math_matrix_NL_NR} + +\permanent\protected\def\math_matrix_NL_NR + {\ifnum\lastboundary=\c_math_matrix_vl_boundary + \ifconditional \c_math_matrix_sl_seen + \kern-1.5\d_math_eqalign_distance % hskip + \else + \kern-.5\d_math_eqalign_distance % hskip + \fi + \fi + \math_matrix_anchor_last + \math_matrix_stop_row + \math_matrix_pickup + \crcr + \math_matrix_start_row} + +\appendtoks + \enforced\let\NL\math_matrix_NL + \global\setfalse\c_math_matrix_sl_seen +\to \everymathmatrix \permanent\tolerant\protected\def\math_matrix_VC[#1]#*% {\NC - \math_matrix_vertical_rule{#1}% + \math_matrix_vertical_rule_yes{#1}% \NC} \permanent\tolerant\protected\def\math_matrix_VT[#1]#*% {\span\omit - \math_matrix_vertical_rule{#1}% + \math_matrix_vertical_rule_yes{#1}% \aligntab} \def\math_matrix_start_row @@ -1531,6 +1648,7 @@ callback \s!attr \mathmatrixornamentattribute "10 \s!attr \mathalignmentvruleattribute \plusone + \s!attr \mathalignmenthruleattribute \plusone \bgroup % preamble \span\math_matrix_preamble @@ -2300,7 +2418,7 @@ \hpack to \displaywidth\bgroup \hss \strc_math_flush_number_box - \hskip\d_framed_locator_ro + \kern\d_framed_locator_ro \egroup \egroup \strc_math_flush_box_framed_fit_inline} @@ -2308,7 +2426,7 @@ \def\strc_math_number_left_overflow_inside {\setbox\b_strc_math_display\vpack\bgroup \hpack to \displaywidth\bgroup - % \hskip\d_framed_locator_lo + % \kern\d_framed_locator_lo \strc_math_flush_number_box \hss \egroup @@ -2722,7 +2840,7 @@ \ifzeropt\scratchdimen\else\kern\scratchdimen\fi \setbox\scratchbox\hbox{\mathsimplealignparameter\c!text}% \ifvoid\scratchbox\else - \hskip\mathsimplealignparameter\c!textdistance + \kern\mathsimplealignparameter\c!textdistance % hskip \vcenter{\box\scratchbox}% \fi \egroup diff --git a/tex/context/base/mkxl/math-del.mklx b/tex/context/base/mkxl/math-del.mklx index edfd77de2..cfb8dc5d2 100644 --- a/tex/context/base/mkxl/math-del.mklx +++ b/tex/context/base/mkxl/math-del.mklx @@ -105,6 +105,13 @@ [fourier] [\c!right=\delimitedrighttildeuc] +% \definemathdelimited +% [bannuity] +% [%topoffset=.2\exheight, +% \c!strut=no, +% \c!rightmargin=.05\emwidth, +% \c!right=\delimitedrightanutityuc] + % $ \autofences \fourier{(z+\frac12)} + \courier{(z+\frac12)} + \xourier{(z+\frac12)} $ \protect \endinput diff --git a/tex/context/base/mkxl/math-fbk.lmt b/tex/context/base/mkxl/math-fbk.lmt index 185bb0d55..052f15f50 100644 --- a/tex/context/base/mkxl/math-fbk.lmt +++ b/tex/context/base/mkxl/math-fbk.lmt @@ -168,7 +168,7 @@ end -- a few examples: -local addextra = mathematics.extras.add +-- local addextra = mathematics.extras.add -- addextra(0xFE350) -- MATHEMATICAL DOUBLE ARROW LEFT END -- addextra(0xFE351) -- MATHEMATICAL DOUBLE ARROW MIDDLE PART @@ -395,7 +395,7 @@ local addextra = mathematics.extras.add -- local height = target.parameters.xheight / 2 -- local c, done = accent_to_extensible(target,private,data.original,unicode,height,0,nil,-height,unicode) -- if done then --- c.topaccent = nil -- or maybe also all the others +-- c.topanchor = nil -- or maybe also all the others -- end -- return c -- end diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index 7cb775294..b3c85070f 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -53,6 +53,7 @@ \c!source=\zerocount, \c!height=\zeropoint, \c!depth=\zeropoint, + \c!distance=\zerocount, \c!factor=\v!auto] \appendtoks @@ -314,7 +315,66 @@ \installlocalcurrenthandler \??mathfences {mathfence} -\tolerant\protected\def\math_fenced_fenced#1#*[#2]% +%D The horizontal text variant was introduced for Alan Braslau. Because this is not +%D used that often we only support double text arguments. +%D +%D Musical timestamp: I am The Moon by Tedeschi Trucks Band + +% \definemathfence [tupdownarrows] [text] [\c!left="2191,\c!right="2193] + +\protected\def\math_fenced_horizontal_common#1#2#3#4% \Uwhatever class symbol source + {\c_math_fenced_class\mathfenceparameter#2\relax + \edef\p_fence{#3}% + #1% \Uleft \Umiddle \Uleft + \usedcolorparameterattributes{\mathfenceparameter\c!color}% + \s!leftclass \mathunspacedcode + \s!rightclass \mathunspacedcode + \s!class \mathunspacedcode + \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax + \Udelimiter\mathghostcode\fam\p_fence} + +\tolerant\protected\def\math_fenced_horizontal#1#*[#2]#:#*#3#4% + {% \csname math\mathfenceparameter\c!mathclass\endcsname + \mathord \bgroup % class here + \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}% + \setupcurrentmathfence[#2]% + % \usemathstyleparameter\mathfenceparameter\c!mathstyle + \setmathsmalltextbox\scratchboxone\hbox{\usemathfencestyleandcolor\c!leftstyle \c!leftcolor #3}% + \setmathsmalltextbox\scratchboxtwo\hbox{\usemathfencestyleandcolor\c!rightstyle\c!rightcolor#4}% + \let\math_fenced_common\math_fenced_horizontal_common + \edef\p_fenced_middle{\mathfenceparameter\c!middle}% + \ifempty\p_fenced_middle\else + \letmathfenceparameter\c!left \p_fenced_middle + \letmathfenceparameter\c!right\zerocount + \fi + \scratchdistance\mathfenceparameter\c!distance + \box\scratchboxone + \kern\scratchdistance + \math_fenced_fenced_start\currentmathfence + \math_fenced_fenced_stop \currentmathfence + \kern\scratchdistance + \box\scratchboxtwo + \egroup} + +\tolerant\protected\def\math_fenced_fenced#1% + {\ifcstok{\namedmathfenceparameter{#1}\c!text}\v!yes % not the best keyword + \expandafter\math_fenced_horizontal + \else + \expandafter\math_fenced_vertical + \fi{#1}} + +% two step because we don't want to define text itself as command + +\definemathfence + [\v!text] + +\setupmathfence + [\v!text] + [\c!text=\v!yes, + \c!command=\v!yes, + \c!distance=.125\emwidth] + +\tolerant\protected\def\math_fenced_vertical#1#*[#2]% {\begingroup %{\beginmathgroup \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}% @@ -1129,4 +1189,14 @@ \setmathoptions\mathmiddlecode bor \autoinjectclassoptioncode \relax} +%D New (to be completed): + +% $x + \tupdownarrows{left}{right} + x$ +% $x + \tdownuparrows{left}{right} + x$ +% $x + \tupanddownarrows[color=red,leftcolor=green,rightcolor=blue]{left}{right} + x$ + +\definemathfence [tupanddownarrows] [\v!text] [\c!left="2191,\c!right="2193] +\definemathfence [tupdownarrows] [\v!text] [\c!left="21C5,\c!right=0] +\definemathfence [tdownuparrows] [\v!text] [\c!middle="21F5] + \protect diff --git a/tex/context/base/mkxl/math-fnt.lmt b/tex/context/base/mkxl/math-fnt.lmt index 1901d79ae..cd4976900 100644 --- a/tex/context/base/mkxl/math-fnt.lmt +++ b/tex/context/base/mkxl/math-fnt.lmt @@ -50,13 +50,15 @@ local function register_extensible(font,char,style,box) local private = fonts.helpers.setboxdirectly(font,unicode,box) -- we saved a scaled glyph stream so we now use an unscaled one ... local g = new_glyph(font,private,al) + if fonts.hashes.properties[font].compactmath then + nuts.setscales(g,1000,1000,1000) + end local n = new_hlist(g) -- if newcommands then oldchar.commands = newcommands end -- - -- local newchar = { -- unicode = unicode, -- width = wd, @@ -77,7 +79,6 @@ local function register_extensible(font,char,style,box) -- end -- end -- addcharacters(font, { [private] = newchar }) - -- so the dimensions of the box don't match the glyph scale! setwhd(n,wd,ht,dp) setattrlst(n,al) diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl index c0ef58c27..42e665f75 100644 --- a/tex/context/base/mkxl/math-frc.mkxl +++ b/tex/context/base/mkxl/math-frc.mkxl @@ -269,8 +269,8 @@ \Udelimiter\zerocount\fam\scratchcountertwo} \defcsname\??fractionmethods\v!vertical \v!auto \v!none\endcsname{\Uover} \defcsname\??fractionmethods\v!vertical \v!auto \endcsname{\Uoverwithdelims - \Udelimiter\zerocount\fam\scratchcounterone - \Udelimiter\zerocount\fam\scratchcountertwo} + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo} \defcsname\??fractionmethods\v!vertical \v!symbol \v!none\endcsname{\Ustretched \Udelimiter\zerocount\fam\scratchcounterthree} \defcsname\??fractionmethods\v!vertical \v!symbol \endcsname{\Ustretchedwithdelims @@ -452,34 +452,20 @@ \to \everysetupmathfraction \def\math_fraction_set_threshold_inline_auto - {\Umathfractiondelsize\textstyle \maxdimen - \Umathfractiondelsize\scriptstyle \maxdimen - \Umathfractiondelsize\scriptscriptstyle\maxdimen -\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle -\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle -\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle - } + {\Umathfractiondelsize\allmathstyles\maxdimen} \def\math_fraction_set_threshold_display_auto - {\Umathfractiondelsize\displaystyle \maxdimen -\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle - } + {\Umathfractiondelsize\alldisplaystyles\maxdimen} \def\math_fraction_set_threshold_inline_ratio {\edef\p_threshold{\mathfractionparameter\c!inlinethreshold}% - \Umathfractiondelsize\textstyle \p_threshold\dimexpr\textface\relax - \Umathfractiondelsize\scriptstyle \p_threshold\dimexpr\scriptface\relax - \Umathfractiondelsize\scriptscriptstyle\p_threshold\dimexpr\scriptscriptface\relax -\Umathfractiondelsize\crampedtextstyle \Umathfractiondelsize\textstyle -\Umathfractiondelsize\crampedscriptstyle \Umathfractiondelsize\scriptstyle -\Umathfractiondelsize\crampedscriptscriptstyle\Umathfractiondelsize\scriptscriptstyle - } + \Umathfractiondelsize\alltextstyles \p_threshold\dimexpr\textface\relax + \Umathfractiondelsize\allscriptstyles \p_threshold\dimexpr\scriptface\relax + \Umathfractiondelsize\allscriptscriptstyles\p_threshold\dimexpr\scriptscriptface\relax} \def\math_fraction_set_threshold_display_ratio {\edef\p_threshold{\mathfractionparameter\c!displaythreshold}% - \Umathfractiondelsize\displaystyle \p_threshold\dimexpr\textface\relax -\Umathfractiondelsize\crampeddisplaystyle \Umathfractiondelsize\displaystyle - } + \Umathfractiondelsize\alldisplaystyles\p_threshold\dimexpr\textface\relax} \setupmathfractions [\c!inlinethreshold=.25, % no unit but fraction diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl index bf674068a..d13c2447c 100644 --- a/tex/context/base/mkxl/math-ini.mkxl +++ b/tex/context/base/mkxl/math-ini.mkxl @@ -55,7 +55,7 @@ \registerctxluafile{math-ini}{autosuffix} \registerctxluafile{math-dim}{autosuffix} -% \registerctxluafile{math-act}{autosuffix} +%registerctxluafile{math-act}{autosuffix} \registerctxluafile{math-ext}{} \registerctxluafile{math-vfu}{autosuffix} \registerctxluafile{math-ttv}{} @@ -65,7 +65,7 @@ \registerctxluafile{math-noa}{autosuffix} \registerctxluafile{math-tag}{autosuffix} \registerctxluafile{math-fbk}{autosuffix} -\registerctxluafile{math-dir}{} +%registerctxluafile{math-dir}{} \registerctxluafile{math-spa}{autosuffix} \registerctxluafile{math-fnt}{autosuffix} \registerctxluafile{math-pre}{autosuffix} @@ -107,6 +107,8 @@ +\analyzescriptnucleuscharmathcontrolcode +\analyzescriptnucleuslistmathcontrolcode +\analyzescriptnucleusboxmathcontrolcode + +\accenttopskewwithoffsetmathcontrolcode + % +\ignorekerndimensionsmathcontrolcode % xits needs this (bad depth of fences) \relax % \mathpenaltiesmode\plusone @@ -513,8 +515,22 @@ \defaultmathclassoptions % +\checkligatureclassoptioncode +\checkkernpairclassoptioncode + % up to Mikael to decide, ok with italic chars, maybe less so with raw ints: + % +\operatoritaliccorrectionclassoptioncode \relax +% we tweak away weird italics so only special cases see this: +% +% \def\IntOr{\Umathchar\mathordinarycode"00"00222B } +% \def\IntOp{\Umathchar\mathoperatorcode"00"00222B } +% +% \showglyphs \showfontitalics +% $\IntOp\limits x \quad \IntOp\limits^1_2 x \quad \IntOp\nolimits^1_2 x $\blank +% $\IntOr\limits x \quad \IntOr\limits^1_2 x \quad \IntOr\nolimits^1_2 x $\blank +% +% $\mathop{f} (x) \quad \mathop{f}\limits (x) \quad \mathop{f}\nolimits (x)$\blank +% $\mathop{f}^a_b (x) \quad \mathop{f}\limits^a_b (x) \quad \mathop{f}\nolimits^a_b (x)$\blank + \setmathoptions\mathbinarycode\numexpr \defaultmathclassoptions +\lookaheadforendclassoptioncode @@ -1099,318 +1115,317 @@ \startsetups math:spacing:presets \resetmathspacing % - % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathordinarycode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathordinarycode \mathfractioncode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space - % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allscriptstyles \pettymuskip % 220705 Results in an unwanted space - % - \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip - % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \ zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip + % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathordinarycode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathordinarycode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allunsplitstyles \pettymuskip % 220705 Results in an unwanted space % - \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip - %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip + % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip % - \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allscriptstyles \pettymuskip - %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allscriptstyles \thinmuskip - % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip + %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathradicalcode \allunsplitstyles \pettymuskip % - % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip - % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allunsplitstyles \pettymuskip + %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allunsplitstyles \thinmuskip + % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathclosecode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathclosecode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles\thinmuskip - \inherited\setmathspacing \mathclosecode \mathopencode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathfractioncode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathbinarycode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathrelationcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathopencode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip + % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allscriptstyles \thinmuskip - % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathopencode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allscriptstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allscriptstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathclosecode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathclosecode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathopencode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathfractioncode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathconstructcode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathconstructcode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allunsplitstyles \thinmuskip + % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathopencode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allunsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allunsplitstyles \thinmuskip % - \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allunsplitstyles \pettymuskip % + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathfractioncode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathopencode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfractioncode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathfractioncode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathopencode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathradicalcode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathradicalcode \mathrelationcode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allscriptstyles \pettymuskip - % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathradicalcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathradicalcode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathradicalcode \mathrelationcode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allunsplitstyles \pettymuskip + % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allunsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allunsplitstyles \pettymuskip % - \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathclosecode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathopencode \allsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathclosecode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathclosecode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \pettymuskip % - \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip % - \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip % - \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \pettymuskip - \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allunsplitstyles \pettymuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allunsplitstyles \pettymuskip % % \im{1\unit{hour} 20 \unit{minute} 56 \unit{second}} % - \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip + \inherited\setmathspacing \mathdimensioncode \mathdigitcode \allmathstyles \thickmuskip + % + \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip % - \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip % - \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip - \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip - - \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathoperatorcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathopencode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathconstructcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathellipsiscode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathdifferentialcode \mathtextpunctuationcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathtextpunctuationcode \allmathstyles \tinymuskip \stopsetups \directsetup{math:spacing:default} @@ -1506,10 +1521,12 @@ \permanent\protected\def\math_upright {\setmathattribute\s!regular\s!tf\setmathfontstylealternate\s!tf} \permanent\protected\def\math_italic {\setmathattribute\s!regular\s!it\setmathfontstylealternate\s!it} -\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting} -\permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy} -\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} -\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard\setmathfontstylealternate\s!blackboard} +%permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!handwriting} +%permanent\protected\def\math_calligraphic{\setmathalphabet \s!script \setmathfontstylealternate\s!script\setmathvariant\s!calligraphy} +\permanent\protected\def\math_script {\setmathalphabet \s!script \setmathfontstylealternate\s!script} +\permanent\protected\def\math_calligraphic{\setmathalphabet \s!calligraphic\setmathfontstylealternate\s!calligraphic} +\permanent\protected\def\math_fraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} +\permanent\protected\def\math_blackboard {\setmathalphabet \s!blackboard \setmathfontstylealternate\s!blackboard} \permanent\protected\def\mathupright {\mathgroupedcommandcs\math_upright } \permanent\protected\def\mathitalic {\mathgroupedcommandcs\math_italic } @@ -1804,14 +1821,12 @@ % using \s!font \mathstylefontid\mathstyle\fam would needs expansion and guesswork \appendtoks - \Umathruleheight\alltextstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount - \Umathruledepth \alltextstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount + \Umathruleheight\allmainstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount + \Umathruledepth \allmainstyles \strutdepthfactor \fontspecifiedsize\textfont \zerocount \Umathruleheight\allscriptstyles \strutheightfactor\fontspecifiedsize\scriptfont \zerocount \Umathruledepth \allscriptstyles \strutdepthfactor \fontspecifiedsize\scriptfont \zerocount \Umathruleheight\allscriptscriptstyles\strutheightfactor\fontspecifiedsize\scriptscriptfont\zerocount \Umathruledepth \allscriptscriptstyles\strutdepthfactor \fontspecifiedsize\scriptscriptfont\zerocount - \Umathruleheight\alldisplaystyles \Umathruleheight\textstyle - \Umathruledepth \alldisplaystyles \Umathruledepth \textstyle \to \everybodyfont \protected\def\math_strut @@ -2364,26 +2379,26 @@ \math_basics_synchronize_direction \to \everyswitchmathematics -% experimental (needed for an article) - -\installcorenamespace {mathbidi} - -\newcount\c_math_bidi - -\def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone} -\def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue} - -\letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable -\letcsname\??mathbidi\v!no \endcsname\math_bidi_disable - -\appendtoks - \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ? - \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi -\to \everysetupmathematics +% experimental (needed for an article) .. this is is no longer neded -\appendtoks - \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi -\to \everyswitchmathematics +% \installcorenamespace {mathbidi} +% +% \newcount\c_math_bidi +% +% \def\math_bidi_enable {\clf_setmathdirection\plusone \relax\c_math_bidi\plusone} +% \def\math_bidi_disable{\clf_setmathdirection\zerocount\relax\c_math_bidi\attributeunsetvalue} +% +% \letcsname\??mathbidi\v!yes\endcsname\math_bidi_enable +% \letcsname\??mathbidi\v!no \endcsname\math_bidi_disable +% +% \appendtoks +% \edef\p_bidi{\mathematicsparameter\c!bidi}% still needed ? +% \ifcsname\??mathbidi\p_bidi\endcsname\lastnamedcs\else\math_bidi_disable\fi +% \to \everysetupmathematics +% +% \appendtoks +% \c_attr_mathbidi\ifconditional\c_math_right_to_left\c_math_bidi\else\attributeunsetvalue\fi +% \to \everyswitchmathematics %D Delayed: greek. %D diff --git a/tex/context/base/mkxl/math-map.lmt b/tex/context/base/mkxl/math-map.lmt index f411505f2..d0a1410a1 100644 --- a/tex/context/base/mkxl/math-map.lmt +++ b/tex/context/base/mkxl/math-map.lmt @@ -66,7 +66,7 @@ local context = context -- todo: allocate -mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "blackboard" } +mathematics.styles = allocate { "regular", "sansserif", "monospaced", "fraktur", "script", "calligraphic", "blackboard" } mathematics.alternatives = allocate { "normal", "bold", "italic", "bolditalic" } mathematics.sets = allocate { "ucletters", "lcletters", "digits", "ucgreek", "lcgreek", "symbols" } @@ -520,58 +520,95 @@ local script = { bi = script_bf, } +local calligraphic_tf = { + digits = tovector(regular_tf.digits), + ucletters = toupper(0x100020), + lcletters = tolower(0x100000), + lcgreek = tovector(regular_tf.lcgreek), + ucgreek = tovector(regular_tf.ucgreek), + symbols = tovector(regular_tf.symbols), +} + +local calligraphic_bf = { + digits = tovector(regular_bf.digits), + ucletters = toupper(0x100060), + lcletters = tolower(0x100040), + lcgreek = tovector(regular_bf.lcgreek), + ucgreek = tovector(regular_bf.ucgreek), + symbols = tovector(regular_bf.symbols), +} + +local calligraphic = { + tf = calligraphic_tf, + bf = calligraphic_bf, + it = calligraphic_tf, + bi = calligraphic_bf, +} + local alphabets = allocate { - regular = regular, - sansserif = sansserif, - monospaced = monospaced, - blackboard = blackboard, - fraktur = fraktur, - script = script, -} - -alphabets.tt = tovector(monospaced) -alphabets.ss = tovector(sansserif) -alphabets.rm = tovector(regular) -alphabets.bb = tovector(blackboard) -alphabets.fr = tovector(fraktur) -alphabets.sr = tovector(script) - -monospaced.normal = tovector(monospaced_tf) -monospaced.italic = tovector(monospaced_it) -monospaced.bold = tovector(monospaced_bf) -monospaced.bolditalic = tovector(monospaced_bi) - -sansserif.normal = tovector(sansserif_tf) -sansserif.italic = tovector(sansserif_it) -sansserif.bold = tovector(sansserif_bf) -sansserif.bolditalic = tovector(sansserif_bi) - -regular.normal = tovector(regular_tf) -regular.italic = tovector(regular_it) -regular.bold = tovector(regular_bf) -regular.bolditalic = tovector(regular_bi) - -blackboard.normal = tovector(blackboard_tf) -blackboard.italic = tovector(blackboard_tf) -blackboard.bold = tovector(blackboard_tf) -blackboard.bolditalic = tovector(blackboard_tf) - -fraktur.normal = tovector(fraktur_tf) -fraktur.italic = tovector(fraktur_bf) -fraktur.bold = tovector(fraktur_tf) -fraktur.bolditalic = tovector(fraktur_bf) - -alphabets.serif = tovector(regular) -alphabets.type = tovector(monospaced) -alphabets.teletype = tovector(monospaced) - -mathematics.alphabets = alphabets - -local mathremap = allocate { } -mathematics.mapremap = mathremap - -local boldmap = allocate { } -mathematics.boldmap = boldmap + regular = regular, + sansserif = sansserif, + monospaced = monospaced, + blackboard = blackboard, + fraktur = fraktur, + script = script, + calligraphic = calligraphic, +} + +alphabets.tt = tovector(monospaced) +alphabets.ss = tovector(sansserif) +alphabets.rm = tovector(regular) +alphabets.bb = tovector(blackboard) +alphabets.fr = tovector(fraktur) +alphabets.sr = tovector(script) +alphabets.ca = tovector(calligraphic) + +monospaced.normal = tovector(monospaced_tf) +monospaced.italic = tovector(monospaced_it) +monospaced.bold = tovector(monospaced_bf) +monospaced.bolditalic = tovector(monospaced_bi) + +sansserif.normal = tovector(sansserif_tf) +sansserif.italic = tovector(sansserif_it) +sansserif.bold = tovector(sansserif_bf) +sansserif.bolditalic = tovector(sansserif_bi) + +regular.normal = tovector(regular_tf) +regular.italic = tovector(regular_it) +regular.bold = tovector(regular_bf) +regular.bolditalic = tovector(regular_bi) + +blackboard.normal = tovector(blackboard_tf) +blackboard.italic = tovector(blackboard_tf) +blackboard.bold = tovector(blackboard_tf) +blackboard.bolditalic = tovector(blackboard_tf) + +fraktur.normal = tovector(fraktur_tf) +fraktur.italic = tovector(fraktur_bf) +fraktur.bold = tovector(fraktur_tf) +fraktur.bolditalic = tovector(fraktur_bf) + +script.normal = tovector(script_tf) +script.italic = tovector(script_bf) +script.bold = tovector(script_tf) +script.bolditalic = tovector(script_bf) + +calligraphic.normal = tovector(calligraphic_tf) +calligraphic.italic = tovector(calligraphic_bf) +calligraphic.bold = tovector(calligraphic_tf) +calligraphic.bolditalic = tovector(calligraphic_bf) + +alphabets.serif = tovector(regular) +alphabets.type = tovector(monospaced) +alphabets.teletype = tovector(monospaced) + +mathematics.alphabets = alphabets + +local mathremap = allocate { } +mathematics.mapremap = mathremap + +local boldmap = allocate { } +mathematics.boldmap = boldmap -- all math (a bit of redundancy here) (sorted for tracing) @@ -704,10 +741,11 @@ implement { actions = function(alphabet) if texgetmode() == mathmode_code then -- local r = mathremap[mathalphabet] - local r = mathremap[texgetattribute(mathalphabet)] + local a = texgetattribute(mathalphabet) + local r = mathremap[a] local style = r and r.style or "tf" local data = alphabets[alphabet][style] - texsetattribute(mathalphabet,data and data.attribute or texattribute[mathalphabet]) + texsetattribute(mathalphabet,data and data.attribute or a) end end } @@ -805,7 +843,7 @@ end -- begin of experiment -local fallback = { +local stylefallbacks = { tf = "bf", it = "bi", bf = "tf", @@ -813,12 +851,12 @@ local fallback = { } function mathematics.fallbackstyleattr(attribute) - local r = mathremap[attribute] - local alphabet = r.alphabet or "regular" - local style = r.style or "tf" - local fback = fallback[style] - if fback then - local data = alphabets[alphabet][fback] + local redirect = mathremap[attribute] + local alphabet = redirect.alphabet or "regular" + local style = redirect.style or "tf" + local fallback = stylefallbacks[style] + if fallback then + local data = alphabets[alphabet][fallback] if data then local attr = data.attribute return attribute ~= attr and attr diff --git a/tex/context/base/mkxl/math-noa.lmt b/tex/context/base/mkxl/math-noa.lmt index a754f6f39..30b7b0448 100644 --- a/tex/context/base/mkxl/math-noa.lmt +++ b/tex/context/base/mkxl/math-noa.lmt @@ -683,13 +683,14 @@ end do - local a_mathalphabet = privateattribute("mathalphabet") - local a_mathgreek = privateattribute("mathgreek") + local a_mathalphabet = privateattribute("mathalphabet") + local a_mathgreek = privateattribute("mathgreek") - local relocate = { } + local relocate = { } - local remapalphabets = mathematics.remapalphabets - local fallbackstyleattr = mathematics.fallbackstyleattr + local remapalphabets = mathematics.remapalphabets + local fallbackstyleattr = mathematics.fallbackstyleattr + local fallbackalphabetattr = mathematics.fallbackalphabetattr local function report_remap(tag,id,old,new,extra) if new then diff --git a/tex/context/base/mkxl/math-rad.mklx b/tex/context/base/mkxl/math-rad.mklx index 04d6bfbba..9dfc80d13 100644 --- a/tex/context/base/mkxl/math-rad.mklx +++ b/tex/context/base/mkxl/math-rad.mklx @@ -242,13 +242,13 @@ \scratchdimen \wd\scratchbox \scratchtopoffset \dimexpr\scratchoffset+\dp\nextbox\relax \scratchbottomoffset\dimexpr\scratchoffset+\ht\nextbox/2\relax - \hpack to \scratchdimen{\hss\box\nextbox\hskip\scratchoffset}% - \hskip-\scratchdimen + \hpack to \scratchdimen{\hss\box\nextbox\kern\scratchoffset}% + \kern-\scratchdimen \lower\dimexpr\scratchtopoffset\box\scratchbox% \ifx\currentmathradicaldegree\empty \else \setbox\scratchbox\mathstylehbox{\scriptscriptstyle\currentmathradicaldegree\hss}% \wd\scratchbox\scratchdimen - \hskip-\scratchdimen + \kern-\scratchdimen \raise\dimexpr\scratchbottomoffset\box\scratchbox \fi \endgroup} @@ -296,7 +296,7 @@ % the width of the graphic determines the width of the final result \setbox\scratchbox\hpack{\uniqueMPgraphic{\p_mp}}% todo: add code key + tag \hpack to \wd\scratchbox{\hss\box\nextbox\hss}% - \hskip-\wd\scratchbox + \kern-\wd\scratchbox \box\scratchbox \endgroup} diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx index 2ddfa24fd..828115f83 100644 --- a/tex/context/base/mkxl/math-stc.mklx +++ b/tex/context/base/mkxl/math-stc.mklx @@ -75,6 +75,9 @@ % at the lua end and some checking: use \mathhorizontalcode or \mathextensiblecode % but in practice arrows etc are not used that often +% At some point we can consider to use the more natural \LUAMETATEX\ features but the +% problem is that we lack proper support in fonts and we also have less control. + \installcorenamespace {mathextensiblefallbacks} % currently no italic correction ... problem is that we don't know yet if we have an italic @@ -1059,6 +1062,7 @@ \definemathextensible [\v!reverse] [xrightharpoondown] ["21C1] \definemathextensible [\v!reverse] [xrightharpoonup] ["21C0] \definemathextensible [\v!reverse] [xrightoverleftarrow] ["21C4] +\definemathextensible [\v!reverse] [xleftoverrightarrow] ["21C6] \definemathextensible [\v!reverse] [xleftrightharpoons] ["21CB] \definemathextensible [\v!reverse] [xrightleftharpoons] ["21CC] \definemathextensible [\v!reverse] [xtriplerel] ["2261] @@ -1081,6 +1085,7 @@ \definemathextensible [\v!mathematics] [mrightharpoondown] ["21C1] \definemathextensible [\v!mathematics] [mrightharpoonup] ["21C0] \definemathextensible [\v!mathematics] [mrightoverleftarrow] ["21C4] +\definemathextensible [\v!mathematics] [mleftoverrightarrow] ["21C6] \definemathextensible [\v!mathematics] [mleftrightharpoons] ["21CB] \definemathextensible [\v!mathematics] [mrightleftharpoons] ["21CC] \definemathextensible [\v!mathematics] [mtriplerel] ["2261] @@ -1103,6 +1108,7 @@ \definemathextensible [\v!text] [trightharpoondown] ["21C1] \definemathextensible [\v!text] [trightharpoonup] ["21C0] \definemathextensible [\v!text] [trightoverleftarrow] ["21C4] +\definemathextensible [\v!text] [tleftoverrightarrow] ["21C6] \definemathextensible [\v!text] [tleftrightharpoons] ["21CB] \definemathextensible [\v!text] [trightleftharpoons] ["21CC] \definemathextensible [\v!text] [ttriplerel] ["2261] @@ -1184,6 +1190,7 @@ \definemathextensible [\v!chemistry] [cleftarrow] ["2190] \definemathextensible [\v!chemistry] [crightarrow] ["2192] \definemathextensible [\v!chemistry] [crightoverleftarrow] ["21C4] +\definemathextensible [\v!chemistry] [cleftoverrightarrow] ["21C6] % for the moment: @@ -1208,6 +1215,7 @@ \immutable\protected\def\rightarrowfill {\math_stackers_hacked_fill \relbar \relbar \rightarrow} \immutable\protected\def\leftarrowfill {\math_stackers_hacked_fill \leftarrow \relbar \relbar } \immutable\protected\def\rightoverleftarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillleftend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillrightend} +\immutable\protected\def\leftoverrightarrowfill{\math_stackers_hacked_fill \ctxdoublearrowfillrightend\ctxdoublearrowfillmiddlepart\ctxdoublearrowfillleftend} \immutable\protected\def\equalfill {\math_stackers_hacked_fill \Relbar \Relbar \Relbar} \immutable\protected\def\Rightarrowfill {\math_stackers_hacked_fill \Relbar \Relbar \Rightarrow} \immutable\protected\def\Leftarrowfill {\math_stackers_hacked_fill \Leftarrow \Relbar \Relbar} @@ -1247,6 +1255,7 @@ \defineextensiblefiller [rightharpoondownfill] ["21C1] \defineextensiblefiller [rightharpoonupfill] ["21C0] \defineextensiblefiller [rightoverleftarrowfill] ["21C4] +\defineextensiblefiller [leftoverrightarrowfill] ["21C6] %defineextensiblefiller [leftrightharpoonsfill] ["21CB] % yet undefined %defineextensiblefiller [rightleftharpoonsfill] ["21CC] % yet undefined \defineextensiblefiller [triplerelfill] ["2261] @@ -1303,7 +1312,7 @@ [\v!symbol] [\c!voffset=-.3\mathexheight, \c!hoffset=\zeropoint, - \c!mathclass=ord, + \c!mathclass=\s!ordinary, \c!topoffset=.4\mathemwidth, % poor man's italic correction \c!middlecommand=\mathematics] diff --git a/tex/context/base/mkxl/math-vfu.lmt b/tex/context/base/mkxl/math-vfu.lmt index c58906a10..906c9ccf6 100644 --- a/tex/context/base/mkxl/math-vfu.lmt +++ b/tex/context/base/mkxl/math-vfu.lmt @@ -631,8 +631,9 @@ local function copy_glyph(main,target,original,unicode,slot) height = olddata.height, depth = olddata.depth, italic = olddata.italic, - topaccent = olddata.topaccent, + topanchor = olddata.topanchor, kerns = olddata.kerns, + mathkerns = olddata.mathkerns, tounicode = olddata.tounicode, commands = { { "slot", slot, unicode } }, } @@ -646,7 +647,9 @@ local function copy_glyph(main,target,original,unicode,slot) height = oldnextdata.height, depth = oldnextdata.depth, italic = oldnextdata.italic, - topaccent = oldnextdata.topaccent, + topanchor = oldnextdata.topanchor, + kerns = olddata.kerns, + mathkerns = olddata.mathkerns, tounicode = olddata.tounicode, commands = { { "slot", slot, nextglyph } }, } @@ -982,7 +985,7 @@ function vfmath.define(specification,set,goodies) if skewchar then local k = kerns[skewchar] if k then - t.topaccent = width/2 + k + t.topanchor = width/2 + k end end characters[unicode] = t @@ -1131,8 +1134,6 @@ function vfmath.define(specification,set,goodies) report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start) end -- - -- main.oldmath = true - -- -- We bypass the scaler so ... -- main.MathConstants = main.mathconstants diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 38d2c0633..636c15363 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -160,6 +160,7 @@ \definesystemconstant {class} \definesystemconstant {leftclass} \definesystemconstant {rightclass} +\definesystemconstant {calligraphic} \definesystemconstant {clone} \definesystemconstant {close} \definesystemconstant {cmyk} diff --git a/tex/context/base/mkxl/node-ali.lmt b/tex/context/base/mkxl/node-ali.lmt index 9209a520b..4b52f2d4b 100644 --- a/tex/context/base/mkxl/node-ali.lmt +++ b/tex/context/base/mkxl/node-ali.lmt @@ -30,6 +30,7 @@ local getlist = nuts.getlist local setlist = nuts.setlist local setattrlist = nuts.setattrlist local setprop = nuts.setprop +local getprop = nuts.getprop local getfont = nuts.getfont local getchar = nuts.getchar local addmargins = nuts.addmargins @@ -626,16 +627,24 @@ deltas = { } do local a_mathalignmentvrule = attributes.private("mathalignmentvrule") + local a_mathalignmenthrule = attributes.private("mathalignmenthrule") - local function first_pass(head,attr,preamble) + -- these loops will be combined + + local dp = { } + local ht = { } + + local function vrule_pass(head,attr,preamble) + local i = 0 for row, id, subtype, list in nextlist, head do if id == hlist_code and subtype == row_code then + i = i + 1 + local prv, nxt = getboth(row) for cell, id, subtype, list in nextlist, list do if list then for n, id, subtype in nextrule, list do local signal = getattr(n,a_mathalignmentvrule) if signal then - local prv, nxt = getboth(row) if prv then if getid(prv) ~= rule_code or not getattr(prv,a_mathalignmentvrule) then prv = nil @@ -646,20 +655,65 @@ do nxt = nil end end - setoffsets(n,nil,nil,not prv and 0 or nil,not nxt and 0 or nil) + local top = not prv and 0 or nil + local bot = not nxt and 0 or nil + setoffsets(n,nil,nil,d and -d or top,h and -h or bot) + end + end + end + end + end + end + end + + local function hrule_pass(head,attr,preamble) + local i = 0 + for row, id, subtype, list in nextlist, head do + if id == hlist_code and subtype == row_code then + i = i + 1 + local height = 0 + local depth = 0 + local done = false + for cell, id, subtype, list in nextlist, list do + if list then + for n, id, subtype in nextglue, list do + local signal = getattr(n,a_mathalignmenthrule) + if signal then + local w, h, d = getwhd(n) + if h and d then + if h > height then + height = h + end + if d > depth then + depth = d + end + done = true + end end end end end + if done then + setheight(row,height) + setdepth(row,depth) + dp[i] = height + ht[i] = depth + end end end end function nodes.handlers.mathmatrixrules(head,where,attr,preamble) if where == "wrapup" then + dp = { } + ht = { } + local signal = getattr(attr,a_mathalignmenthrule) + if signal == 0x01 then -- matrix + hrule_pass(head,attr,preamble) + end local signal = getattr(attr,a_mathalignmentvrule) - if signal == 1 then -- matrix - first_pass(head,attr,preamble) + if signal == 0x01 then -- matrix + vrule_pass(head,attr,preamble) end end end diff --git a/tex/context/base/mkxl/node-ini.lmt b/tex/context/base/mkxl/node-ini.lmt index 53bd082af..34028fa2e 100644 --- a/tex/context/base/mkxl/node-ini.lmt +++ b/tex/context/base/mkxl/node-ini.lmt @@ -226,6 +226,8 @@ local texsetintegervalue = tex.setintegervalue for i=0,nodecodes.glyph do texsetintegervalue(nodecodes[i] .. "nodecode",i,"immutable") end +texsetintegervalue("tempnodecode",nodecodes.temp,"immutable") -- can happen in tables + for i=0,#gluecodes do texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable") end diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl index 28c1a42f0..ecd793056 100644 --- a/tex/context/base/mkxl/pack-box.mkxl +++ b/tex/context/base/mkxl/pack-box.mkxl @@ -1199,7 +1199,7 @@ \fi \global\setbox\scratchcounterone\hpack\bgroup \unhbox\scratchcounterone - \hskip-\wd\nextbox + \kern-\wd\nextbox \box\nextbox \egroup \endgroup}} diff --git a/tex/context/base/mkxl/pack-cut.mkxl b/tex/context/base/mkxl/pack-cut.mkxl index 0cd06ed43..1e23a97e3 100644 --- a/tex/context/base/mkxl/pack-cut.mkxl +++ b/tex/context/base/mkxl/pack-cut.mkxl @@ -13,6 +13,8 @@ \unprotect +% to be redone in a more modern way + %D \macros %D {makecutbox, cuthbox, cutvbox, cutvtop} %D @@ -101,9 +103,8 @@ \vss}% \hss}} -\permanent\protected\def\makecutbox#1% - {\bgroup - \d_pack_cutmarks_height\ht#1% +\permanent\protected\def\makecutbox#1% not grouped ! + {\d_pack_cutmarks_height\ht#1% \d_pack_cutmarks_depth \dp#1% \d_pack_cutmarks_width \wd#1% \setbox#1\hpack @@ -155,7 +156,7 @@ \wd#1\d_pack_cutmarks_width \ht#1\d_pack_cutmarks_height \dp#1\d_pack_cutmarks_depth - \egroup} + \box#1} \permanent\protected\def\cuthbox{\hpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\hbox} \permanent\protected\def\cutvbox{\vpack\bgroup\dowithnextbox{\makecutbox\nextbox\flushnextbox\egroup}\vbox} diff --git a/tex/context/base/mkxl/pack-mrl.mkxl b/tex/context/base/mkxl/pack-mrl.mkxl index 7a04f3904..b4339b0b2 100644 --- a/tex/context/base/mkxl/pack-mrl.mkxl +++ b/tex/context/base/mkxl/pack-mrl.mkxl @@ -181,7 +181,7 @@ \s!depth \scratchdepth \relax \ifzeropt\scratchdistance\else - \hskip\scratchdistance + \kern\scratchdistance % hskip \fi} \installcorenamespace{blackruletype} @@ -648,7 +648,7 @@ {\llap {\usetextrulesstyleandcolor\c!style\c!color #1% - \hskip\leftmargindistance}} + \kern\leftmargindistance}} % hskip {\color[\directtextrulesparameter\c!rulecolor] {\vrule \s!height\scratchheight @@ -794,7 +794,7 @@ \strut #2% \hfill\directfillinrulesparameter\c!separator - \hskip\scratchdistance + \kern\scratchdistance % hskip \egroup \fi \setupwhitespace[\v!big]% diff --git a/tex/context/base/mkxl/pack-pos.mkxl b/tex/context/base/mkxl/pack-pos.mkxl index aee22081f..e2fd1c8f8 100644 --- a/tex/context/base/mkxl/pack-pos.mkxl +++ b/tex/context/base/mkxl/pack-pos.mkxl @@ -90,7 +90,7 @@ \vbox to \d_pack_positioning_y_dimension {\vskip\d_pack_positioning_y_offset \hbox to \d_pack_positioning_x_dimension - {\hskip\d_pack_positioning_x_offset + {\kern\d_pack_positioning_x_offset \box\b_pack_positioning \hfill} \vfill}% @@ -145,7 +145,7 @@ {\offinterlineskip % else we get an empty line \vskip\d_pack_positioning_y_position \hbox to \zeropoint - {\hskip\d_pack_positioning_x_position + {\kern\d_pack_positioning_x_position \box\nextbox \hss} \vss}% diff --git a/tex/context/base/mkxl/pack-rul.lmt b/tex/context/base/mkxl/pack-rul.lmt index f81a672d2..c2183c1ad 100644 --- a/tex/context/base/mkxl/pack-rul.lmt +++ b/tex/context/base/mkxl/pack-rul.lmt @@ -35,6 +35,8 @@ local equationlist_code = listcodes.equation local texsetdimen = tex.setdimen local texsetcount = tex.setcount +local texisdimen = tex.isdimen +local texiscount = tex.iscount local implement = interfaces.implement @@ -52,8 +54,6 @@ local getdirection = nuts.getdirection local setshift = nuts.setshift local setwidth = nuts.setwidth local getwidth = nuts.getwidth --- local setboxglue = nuts.setboxglue --- local getboxglue = nuts.getboxglue local setboxglue = nuts.setglue local getboxglue = nuts.getglue @@ -73,6 +73,13 @@ directives.register("framed.checkmath",function(v) checkformath = v end) -- expe -- beware: dir nodes and pseudostruts can end up on lines of their own +local c_framednoflines = texiscount("framednoflines") +local d_framedfirstheight = texisdimen("framedfirstheight") +local d_framedlastdepth = texisdimen("framedlastdepth") +local d_framedminwidth = texisdimen("framedminwidth") +local d_framedmaxwidth = texisdimen("framedmaxwidth") +local d_framedaveragewidth = texisdimen("framedaveragewidth") + local function doreshapeframedbox(n,resync) if resync then resync = drivers.converters.resyncbox @@ -148,7 +155,7 @@ local function doreshapeframedbox(n,resync) setlist(p) flushnode(p) elseif checkformath and subtype == equationlist_code then - -- display formulas use a shift + -- display formulas use a shift .. actually we never have display mode if nofnonzero == 1 then setshift(h,0) end @@ -172,12 +179,12 @@ local function doreshapeframedbox(n,resync) end end end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) -- also signal - texsetdimen("global","framedlastdepth",lastdepth or 0) - texsetdimen("global","framedminwidth",minwidth) - texsetdimen("global","framedmaxwidth",maxwidth) - texsetdimen("global","framedaveragewidth",averagewidth) + texsetcount("global",c_framednoflines,noflines) + texsetdimen("global",d_framedfirstheight,firstheight or 0) -- also signal + texsetdimen("global",d_framedlastdepth,lastdepth or 0) + texsetdimen("global",d_framedminwidth,minwidth) + texsetdimen("global",d_framedmaxwidth,maxwidth) + texsetdimen("global",d_framedaveragewidth,averagewidth) end local function doanalyzeframedbox(n) @@ -206,9 +213,9 @@ local function doanalyzeframedbox(n) end end end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) - texsetdimen("global","framedlastdepth",lastdepth or 0) + texsetcount("global",c_framednoflines,noflines) + texsetdimen("global",d_framedfirstheight,firstheight or 0) + texsetdimen("global",d_framedlastdepth,lastdepth or 0) end implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments = "integer" } diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl index 803d83bf3..b06e8f57c 100644 --- a/tex/context/base/mkxl/pack-rul.mkxl +++ b/tex/context/base/mkxl/pack-rul.mkxl @@ -18,6 +18,13 @@ %D packaging and expansion we also keep tracing reasonable. For instance, multiple %D stacked backgrounds can slow down a run if not optimized this way. +\newcount\framednoflines +\newdimen\framedfirstheight +\newdimen\framedlastdepth +\newdimen\framedminwidth +\newdimen\framedmaxwidth +\newdimen\framedaveragewidth + \registerctxluafile{pack-rul}{autosuffix,optimize} \unprotect @@ -703,7 +710,7 @@ \def\pack_framed_stroked_box_normal_closed {\hpack\bgroup \scratchdimen.5\d_framed_linewidth - \hskip\scratchdimen + \kern\scratchdimen \clf_framedoutline \dimexpr\d_framed_target_wd-\d_framed_linewidth\relax \dimexpr\d_framed_target_ht-\scratchdimen\relax @@ -2323,12 +2330,12 @@ %D It is possible to let the frame macro calculate the width of a centered box %D automatically (\type {fit}). When doing so, we need to reshape the box: -\newcount\framednoflines -\newdimen\framedfirstheight -\newdimen\framedlastdepth -\newdimen\framedminwidth -\newdimen\framedmaxwidth -\newdimen\framedaveragewidth +% \newcount\framednoflines +% \newdimen\framedfirstheight +% \newdimen\framedlastdepth +% \newdimen\framedminwidth +% \newdimen\framedmaxwidth +% \newdimen\framedaveragewidth \def\pack_framed_reshape_reset {\framednoflines \zerocount diff --git a/tex/context/base/mkxl/page-box.mklx b/tex/context/base/mkxl/page-box.mklx index 56cb73f7a..a65989222 100644 --- a/tex/context/base/mkxl/page-box.mklx +++ b/tex/context/base/mkxl/page-box.mklx @@ -79,10 +79,19 @@ % {\boxxoffset#box\dimexpr\boxxoffset#box\doifbothsides++-\backoffset\relax % \boxyoffset#box\dimexpr\boxyoffset#box-\topoffset\relax} +% \def\page_boxes_apply_offset % #box +% {\unless\ifzeropt\topoffset % we can't do an unless here +% \expandafter\page_boxes_apply_offset_indeed +% \orunless\ifzeropt\backoffset +% \expandafter\page_boxes_apply_offset_indeed +% \else +% \expandafter\gobbleoneargument +% \fi} + \def\page_boxes_apply_offset % #box - {\unless\ifzeropt\topoffset + {\unless\ifdim\topoffset=\zeropoint \expandafter\page_boxes_apply_offset_indeed - \orunless\ifzeropt\backoffset + \orunless\ifdim\backoffset=\zeropoint \expandafter\page_boxes_apply_offset_indeed \else \expandafter\gobbleoneargument @@ -100,9 +109,9 @@ \def\page_boxes_apply_replicate_indeed#box% {\setbox#box\vpack {\offinterlineskip - \dorecurse{\layoutparameter\c!ny} + \dorecurse{\layoutparameter\c!ny}% {\hpack{\dorecurse{\layoutparameter\c!nx}{\copy#box\kern\layoutparameter\c!dx}\unskip}% - \vskip\layoutparameter\c!dy} + \vskip\layoutparameter\c!dy}% \unskip}} \def\page_boxes_apply_orientate_paper#box% diff --git a/tex/context/base/mkxl/spac-ver.lmt b/tex/context/base/mkxl/spac-ver.lmt index 7884a111c..283109f03 100644 --- a/tex/context/base/mkxl/spac-ver.lmt +++ b/tex/context/base/mkxl/spac-ver.lmt @@ -56,6 +56,8 @@ local texsetcount = tex.setcount local texnest = tex.nest local texgetbox = tex.getbox +local tg = texgetdimen + local buildpage = tex.triggerbuildpage local variables = interfaces.variables @@ -69,13 +71,6 @@ local v_split = variables.split local v_min = variables.min local v_max = variables.max local v_none = variables.none -local v_line = variables.line -local v_noheight = variables.noheight -local v_nodepth = variables.nodepth -local v_line = variables.line -local v_halfline = variables.halfline -local v_line_m = "-" .. v_line -local v_halfline_m = "-" .. v_halfline local v_first = variables.first local v_last = variables.last local v_top = variables.top @@ -115,6 +110,11 @@ local a_skiporder = attributes.private('skiporder') local a_snapmethod = attributes.private('snapmethod') local a_snapvbox = attributes.private('snapvbox') +local d_bodyfontstrutheight = tex.isdimen("bodyfontstrutheight") +local d_bodyfontstrutdepth = tex.isdimen("bodyfontstrutdepth") +local d_globalbodyfontstrutheight = tex.isdimen("globalbodyfontstrutheight") +local d_globalbodyfontstrutdepth = tex.isdimen("globalbodyfontstrutdepth") + local nuts = nodes.nuts local tonut = nuts.tonut @@ -357,6 +357,13 @@ end local snap_hlist do + local v_noheight = variables.noheight + local v_nodepth = variables.nodepth + local v_line = variables.line + local v_halfline = variables.halfline + local v_line_m = "-" .. v_line + local v_halfline_m = "-" .. v_halfline + local floor = math.floor local ceil = math.ceil @@ -397,24 +404,24 @@ local snap_hlist do local snapht, snapdp if method[v_local] then -- snapping is done immediately here - snapht = texgetdimen("bodyfontstrutheight") - snapdp = texgetdimen("bodyfontstrutdepth") + snapht = texgetdimen(d_bodyfontstrutheight) + snapdp = texgetdimen(d_bodyfontstrutdepth) if t then t[#t+1] = formatters["local: snapht %p snapdp %p"](snapht,snapdp) end elseif method[v_global] then - snapht = texgetdimen("globalbodyfontstrutheight") - snapdp = texgetdimen("globalbodyfontstrutdepth") + snapht = texgetdimen(d_globalbodyfontstrutheight) + snapdp = texgetdimen(d_globalbodyfontstrutdepth) if t then t[#t+1] = formatters["global: snapht %p snapdp %p"](snapht,snapdp) end else -- maybe autolocal -- snapping might happen later in the otr - snapht = texgetdimen("globalbodyfontstrutheight") - snapdp = texgetdimen("globalbodyfontstrutdepth") - local lsnapht = texgetdimen("bodyfontstrutheight") - local lsnapdp = texgetdimen("bodyfontstrutdepth") + snapht = texgetdimen(d_globalbodyfontstrutheight) + snapdp = texgetdimen(d_globalbodyfontstrutdepth) + local lsnapht = texgetdimen(d_bodyfontstrutheight) + local lsnapdp = texgetdimen(d_bodyfontstrutdepth) if snapht ~= lsnapht and snapdp ~= lsnapdp then snapht, snapdp = lsnapht, lsnapdp end @@ -672,7 +679,7 @@ local snap_hlist do local lines = (ch+cd)/snaphtdp if t then local original = (h+d)/snaphtdp - local whatever = (ch+cd)/(texgetdimen("globalbodyfontstrutheight") + texgetdimen("globalbodyfontstrutdepth")) + local whatever = (ch+cd)/(texgetdimen(d_globalbodyfontstrutheight) + texgetdimen(d_globalbodyfontstrutdepth)) t[#t+1] = formatters["final lines : %p -> %p (%p)"](original,lines,whatever) t[#t+1] = formatters["final height: %p -> %p"](h,ch) t[#t+1] = formatters["final depth : %p -> %p"](d,cd) @@ -1699,10 +1706,10 @@ do -- if trace_vsnapping then report_snapper("global ht/dp = %p/%p, local ht/dp = %p/%p", - texgetdimen("globalbodyfontstrutheight"), - texgetdimen("globalbodyfontstrutdepth"), - texgetdimen("bodyfontstrutheight"), - texgetdimen("bodyfontstrutdepth") + texgetdimen(d_globalbodyfontstrutheight), + texgetdimen(d_globalbodyfontstrutdepth), + texgetdimen(d_bodyfontstrutheight), + texgetdimen(d_bodyfontstrutdepth) ) end if trace then diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index 28a1151fb..7ab80d6a9 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -15,6 +15,14 @@ \unprotect +\newskip \bodyfontlineheight % why a skip +\newdimen \bodyfontstrutheight +\newdimen \bodyfontstrutdepth + +\newskip \globalbodyfontlineheight % why a skip +\newdimen \globalbodyfontstrutheight +\newdimen \globalbodyfontstrutdepth + \registerctxluafile{spac-ver}{autosuffix,optimize} % todo: use usernodes ? @@ -1396,13 +1404,13 @@ \installcorenamespace{gridsnapperattributes} \installcorenamespace{gridsnappersets} -\newskip \bodyfontlineheight -\newdimen \bodyfontstrutheight -\newdimen \bodyfontstrutdepth +% \newskip \bodyfontlineheight % see top +% \newdimen \bodyfontstrutheight % see top +% \newdimen \bodyfontstrutdepth % see top -\newskip \globalbodyfontlineheight % why a skip -\newdimen \globalbodyfontstrutheight -\newdimen \globalbodyfontstrutdepth +% \newskip \globalbodyfontlineheight % see top +% \newdimen \globalbodyfontstrutheight % see top +% \newdimen \globalbodyfontstrutdepth % see top \permanent\def\snappedvboxattribute{\ifgridsnapping attr\snapvboxattribute\c_attr_snapmethod\fi} \permanent\def\setlocalgridsnapping{\ifgridsnapping \c_attr_snapvbox \c_attr_snapmethod\fi} diff --git a/tex/context/base/mkxl/strc-lst.mklx b/tex/context/base/mkxl/strc-lst.mklx index 785d566cf..c04d68fa7 100644 --- a/tex/context/base/mkxl/strc-lst.mklx +++ b/tex/context/base/mkxl/strc-lst.mklx @@ -146,7 +146,7 @@ \scratchcounter\clf_addtolist references { internal \locationcount - % block {\currentsectionblock} + % block {\currentsectionblock} % needed for publications (can be get from section) % section structures.sections.currentid() % location {\p_location} } diff --git a/tex/context/base/mkxl/strc-ref.lmt b/tex/context/base/mkxl/strc-ref.lmt index 7ad20fa34..32c2a5429 100644 --- a/tex/context/base/mkxl/strc-ref.lmt +++ b/tex/context/base/mkxl/strc-ref.lmt @@ -54,6 +54,7 @@ local implement = interfaces.implement local ctx_latelua = context.latelua +local texiscount = tex.iscount local texgetcount = tex.getcount local texsetcount = tex.setcount local texconditionals = tex.conditionals @@ -124,6 +125,11 @@ local currentreference = nil local txtcatcodes = catcodes.numbers.txtcatcodes -- or just use "txtcatcodes" +local c_realpageno = texiscount("realpageno") +local c_locationcount = texiscount("locationcount") +local c_locationorder = texiscount("locationorder") +local c_lastdestinationattribute = texiscount("lastdestinationattribute") + local context = context local ctx_pushcatcodes = context.pushcatcodes @@ -294,7 +300,7 @@ local function referredpage(n) end end -- fallback - return texgetcount("realpageno") + return texgetcount(c_realpageno) end references.referredpage = referredpage @@ -304,7 +310,7 @@ function references.registerpage(n) -- called in the backend code if n > maxreferred then maxreferred = n end - tobereferred[n] = texgetcount("realpageno") + tobereferred[n] = texgetcount(c_realpageno) end end @@ -323,14 +329,14 @@ local function setnextorder(kind,name) lastorder = (ok[name] or 0) + 1 ok[name] = lastorder end - texsetcount("global","locationorder",lastorder) + texsetcount("global",c_locationorder,lastorder) end local function setnextinternal(kind,name) setnextorder(kind,name) -- always incremented with internal - local n = texgetcount("locationcount") + 1 - texsetcount("global","locationcount",n) + local n = texgetcount(c_locationcount) + 1 + texsetcount("global",c_locationcount,n) return n end @@ -433,12 +439,12 @@ end -- function references.enhance(prefix,tag) -- local l = tobesaved[prefix][tag] -- if l then --- l.references.realpage = texgetcount("realpageno") +-- l.references.realpage = texgetcount(c_realpageno) -- end -- end local function synchronizepage(reference) -- non public helper - reference.realpage = texgetcount("realpageno") + reference.realpage = texgetcount(c_realpageno) if jobpositions.used() then reference.x, reference.y = getpos() end @@ -2040,7 +2046,7 @@ local function setinternalreference(specification) if internal then -- new destinationattributes[internal] = destination end - texsetcount("lastdestinationattribute",destination) + texsetcount(c_lastdestinationattribute,destination) return destination end @@ -2107,7 +2113,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically } or unsetvalue end end - texsetcount("lastdestinationattribute",attr) + texsetcount(c_lastdestinationattribute,attr) return attr end @@ -2685,7 +2691,7 @@ function references.checkedrealpage(r) realpageofpage(r) -- just initialize end if not r then - return texgetcount("realpageno") + return texgetcount(c_realpageno) elseif r < 1 then return 1 elseif r > nofrealpages then @@ -2780,7 +2786,7 @@ end function specials.deltapage(var,actions) local p = tonumber(var.operation) if p then - p = references.checkedrealpage(p + texgetcount("realpageno")) + p = references.checkedrealpage(p + texgetcount(c_realpageno)) var.r = p actions.realpage = actions.realpage or p -- first wins end diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx index 07c8c2c1b..012d9d92d 100644 --- a/tex/context/base/mkxl/strc-ref.mklx +++ b/tex/context/base/mkxl/strc-ref.mklx @@ -27,6 +27,14 @@ \writestatus{loading}{ConTeXt Structure Macros / Cross Referencing} +\newif \iflocation +\newcount\locationcount +\newcount\locationorder +\newbox \locationbox + +\newcount\lastreferenceattribute +\newcount\lastdestinationattribute + \registerctxluafile{strc-rsc}{autosuffix} \registerctxluafile{strc-ref}{autosuffix} \registerctxluafile{node-ref}{autosuffix,optimize} @@ -137,8 +145,8 @@ %D Actually there is not much difference between a text and a full reference, but %D it's the concept that counts. The low level implementation is: -\newcount\lastreferenceattribute -\newcount\lastdestinationattribute +% sett top : \newcount\lastreferenceattribute +% sett top : \newcount\lastdestinationattribute \def\strc_references_finish#prefix#reference#internal% gets expanded anyway {\normalexpanded{\clf_deferredenhancereference{#prefix}{#reference}}} @@ -803,10 +811,10 @@ %D %D We could do this in \LUA\ \unknown -\newif \iflocation -\newcount\locationcount -\newcount\locationorder -\newbox \locationbox +% seet top: \newif \iflocation +% seet top: \newcount\locationcount +% seet top: \newcount\locationorder +% seet top: \newbox \locationbox \appendtoks \locationfalse diff --git a/tex/context/base/mkxl/strc-reg.lmt b/tex/context/base/mkxl/strc-reg.lmt index a45f23bf0..85198a151 100644 --- a/tex/context/base/mkxl/strc-reg.lmt +++ b/tex/context/base/mkxl/strc-reg.lmt @@ -34,6 +34,7 @@ local processors = typesetters.processors local splitprocessor = processors.split local texgetcount = tex.getcount +local texiscount = tex.iscount local variables = interfaces.variables local v_forward = variables.forward @@ -67,6 +68,9 @@ local setmetatableindex = table.setmetatableindex local absmaxlevel = 5 -- \c_strc_registers_maxlevel +local c_realpageno = texiscount("realpageno") +local c_locationcount = texiscount("locationcount") + local h_prefixpage = helpers.prefixpage local h_prefixlastpage = helpers.prefixlastpage local h_title = helpers.title @@ -564,7 +568,7 @@ local function storeregister(rawdata) -- metadata, references, entries -- local internal = references.internal if not internal then - internal = texgetcount("locationcount") -- we assume that it has been set + internal = texgetcount(c_locationcount) -- we assume that it has been set references.internal = internal end -- @@ -606,7 +610,7 @@ local function enhanceregister(specification) local data = saved.metadata.notsaved and collected[name] or saved local entry = data.entries[n] if entry then - entry.references.realpage = texgetcount("realpageno") + entry.references.realpage = texgetcount(c_realpageno) end end @@ -621,7 +625,7 @@ local function extendregister(name,tag,rawdata) -- maybe do lastsection internal local entry = data.entries[tag] if entry then local references = entry.references - references.lastrealpage = texgetcount("realpageno") + references.lastrealpage = texgetcount(c_realpageno) references.lastsection = currentid() if rawdata then local userdata = rawdata.userdata diff --git a/tex/context/base/mkxl/strc-reg.mkxl b/tex/context/base/mkxl/strc-reg.mkxl index 22b1202db..b0f50ecfd 100644 --- a/tex/context/base/mkxl/strc-reg.mkxl +++ b/tex/context/base/mkxl/strc-reg.mkxl @@ -1068,11 +1068,14 @@ % \applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}% % \fi} +\let\currentregisterrealpage\!!zerocount % todo: more general accessor + \permanent\protected\def\withregisterpagecommand#1#2#3#4% {\ifcase#3\relax {\tt [entry\space not\space flushed]}% \else \def\currentregisterpageindex{#2}% + \def\currentregisterrealpage{#3}% \iflocation \strc_references_goto_internal{\applyprocessor{#1}{\registerparameter\c!pagecommand{#4}}}[internal(#2)]% \else diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index 0c5251373..96bdde764 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -990,7 +990,8 @@ %D \ifzeropt \somedimen ... \else ... \fi %D \stoptyping -\aliased\let\ifzeropt\ifcase +\aliased\let\ifzeropt\ifzerodim % was \let\ifzeropt\ifcase +\aliased\let\ifzero \ifzeronum % was \let\ifzeropt\ifcase % these token list helpers might move to syst-aux.mkiv % @@ -1254,8 +1255,8 @@ %D For a while we will keep these useless numbers as for instance tikz checks for them: -\immutable\integerdef\eTeXversion 2 -\immutable\def \eTeXrevision {2} +\immutable\integerdef\eTeXversion 2 +\immutable\def \eTeXrevision {.2} % there is a funny period here % %D Just in case users use this (or some styles still have it): diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl index 4d4037ff6..851984bea 100644 --- a/tex/context/base/mkxl/tabl-tbl.mkxl +++ b/tex/context/base/mkxl/tabl-tbl.mkxl @@ -407,11 +407,11 @@ % \protected % we can expand this one \def\tabl_tabulate_inject_pre_skip#1% {\ifdim#1>\zeropoint - \kern#1\relax % was \hskip + \kern#1\relax % hskip \orelse\ifnum\c_tabl_tabulate_column=\zerocount \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_first\else - \kern\s_tabl_tabulate_first\relax % was \hskip + \kern\s_tabl_tabulate_first\relax % hskip \fi \fi \fi} @@ -423,7 +423,7 @@ \orelse\ifnum\c_tabl_tabulate_columns=\c_tabl_tabulate_nofcolumns \ifconditional\c_tabl_tabulate_autorulespacing \ifcase\c_tabl_tabulate_has_rule_spec_last\else - \kern\s_tabl_tabulate_last\relax % was \hskip + \kern\s_tabl_tabulate_last\relax % hskip \fi \fi \fi} diff --git a/tex/context/base/mkxl/task-ini.lmt b/tex/context/base/mkxl/task-ini.lmt index 9c90aba02..17555d7e2 100644 --- a/tex/context/base/mkxl/task-ini.lmt +++ b/tex/context/base/mkxl/task-ini.lmt @@ -122,7 +122,7 @@ appendaction("math", "normalizers", "noads.handlers.dictionaries", appendaction("math", "normalizers", "noads.handlers.suspicious", nil, "nonut", "enabled" ) appendaction("math", "builders", "builders.kernel.mlisttohlist", nil, "nut", "enabled" ) -- mandate -appendaction("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" ) +------------("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" ) appendaction("math", "builders", "noads.handlers.makeup", nil, "nonut", "disabled" ) ------------("math", "builders", "noads.handlers.align", nil, "nonut", "enabled" ) diff --git a/tex/context/base/mkxl/type-set.mkxl b/tex/context/base/mkxl/type-set.mkxl index a14a99630..ae07bd914 100644 --- a/tex/context/base/mkxl/type-set.mkxl +++ b/tex/context/base/mkxl/type-set.mkxl @@ -134,6 +134,7 @@ \definefilesynonym [type-imp-coloredsheep.mkiv] [type-imp-koeielettersot.mkiv] \definefilesynonym [type-imp-koeieletters.mkiv] [type-imp-koeielettersot.mkiv] +\definefilesynonym [type-imp-xits.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-stixtwo.mkiv] [type-imp-stix.mkiv] \definefilesynonym [type-imp-ibmplex.mkiv] [type-imp-plex.mkiv] diff --git a/tex/context/fonts/mkiv/asana-math.lfg b/tex/context/fonts/mkiv/asana-math.lfg index 934f9e0f0..379dd014f 100644 --- a/tex/context/fonts/mkiv/asana-math.lfg +++ b/tex/context/fonts/mkiv/asana-math.lfg @@ -30,6 +30,8 @@ -- local integral_top = { topright = 0.05 } -- local integral_bottom = { bottomright = -0.25 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "asana-math", @@ -49,7 +51,7 @@ return { -- StretchStackGapAboveMin = less, -- StretchStackGapBelowMin = less, -- StretchStackTopShiftUp = less, - NoLimitSupFactor = -200, + NoLimitSupFactor = 200, NoLimitSubFactor = 1200, AccentBaseDepth = 300, RadicalDegreeBottomRaisePercent = 70, @@ -66,6 +68,12 @@ return { message = "this font is not supported", }, { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.95 }, + { tweak = "dimensions", list = { -- nothing yet @@ -103,7 +111,10 @@ return { { tweak = "fixellipses", }, - + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg index c09b55c20..508293f19 100644 --- a/tex/context/fonts/mkiv/bonum-math.lfg +++ b/tex/context/fonts/mkiv/bonum-math.lfg @@ -17,10 +17,12 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! -local integral_variants = { bottomright = -0.20 } -local integral_top = { topright = 0.05 } -local integral_bottom = { bottomright = -0.30 } +local integral_variants = { bottomright = -0.20 } +local integral_top = { topright = 0.05 } +local integral_bottom = { bottomright = -0.30 } + +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "bonum-math", @@ -34,19 +36,19 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, AccentBaseDepth = 50, RadicalDegreeBottomRaisePercent = 60, - RadicalRuleThickness = 66, -- 72 in font + RadicalRuleThickness = 66, -- 72 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1900, -- 1250 in font -- AccentSuperscriptDrop = 100, - -- AccentSuperscriptPercent = 20, - -- PrimeRaisePercent = 50, - PrimeRaiseComposedPercent = 0, - -- PrimeShiftUp = 0, - -- PrimeBaselineDropMax = 0, + -- AccentSuperscriptPercent = 20, + -- PrimeRaisePercent = 50, + PrimeRaiseComposedPercent = 0, + -- PrimeShiftUp = 0, + -- PrimeBaselineDropMax = 0, }, tweaks = { aftercopying = { @@ -55,125 +57,79 @@ return { expected = "Version 1.005", }, { + tweak = "fixprimes", + -- scale = 0.8, + -- smaller = true, + factor = 1,--1.1 + }, + { + tweak = "addmirrors", + }, + { + tweak = "replacealphabets", + -- feature = "mathbeta", -- we always replace + list = { + { + source = { first = 0x003B1 }, + filename = "texgyrebonummath-companion.otf", + }, + { + source = { first = 0x1D6FC }, + filename = "texgyrebonummath-companion.otf", + }, + }, + }, + presets.matheulercalligraphic { rscale = 0.98 }, + presets.mathrsfscript { rscale = 0.98 }, + presets.mathxitsarabic { rscale = 1 }, + presets.moveitalics { correct = true }, + { + -- For some alphabets we remove italic correction. + -- tweak = "wipeitalics", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasemonospace", + -- "lowercasenormal", + "lowercasesansserifbold", + -- "lowercasesansserifnormal", + "lowercasegreeknormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", -- some remain + }, + }, + { + -- tweak = "topaccents", + list = { + [0x1D453] = 0.7, -- f + }, + }, + { + tweak = "limits", + list = { + [0x0222B] = 1.5, + }, + }, + { + -- We need to check these, are the tweaks necessary or not? tweak = "dimensions", list = { - [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma - [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta - [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta - [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda - [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi - [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi - [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma - [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon - [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi - [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi - [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega - [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial - [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G - [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O - [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q - [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a - [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b - [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c - [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d - [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e - [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f - [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g - [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h - [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i - [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j - [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k - [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l - [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m - [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n - [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o - [0x1D45D] = { xoffset = 0, width = 1.05, italic = 0 }, -- p - [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q - [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r - [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s - [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t - [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u - [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v - [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w - [0x1D465] = { xoffset = 0, width = 1.175, italic = 0, anchor = 0.9 }, -- x - [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y - [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z - [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha - [0x1D6FD] = { xoffset = 0, width = 0.9, italic = 0, anchor = 1.05 }, -- \beta - [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma - [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta - [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon - [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon - [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta - [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta - [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta - [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta - [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota - [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa - [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu - [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu - [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi - [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron - [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi - [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi - [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho - [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho - [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma - [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma - [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau - [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon - [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi - [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi - [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi - [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi - [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega - -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa - [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi - [0x1D41B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b - [0x1D41D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d - [0x1D41F] = { xoffset = 0, width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f - [0x1D420] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g - [0x1D421] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h - [0x1D424] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k - [0x1D425] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l - [0x1D42A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q - [0x1D42B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r - [0x1D42C] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s - -- [0x1D482] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a - -- [0x1D483] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b - -- [0x1D484] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c - -- [0x1D485] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d - -- [0x1D486] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e - -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f - -- [0x1D488] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g - -- [0x1D489] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h - -- [0x1D48A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i - -- [0x1D48B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j - -- [0x1D48C] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k - -- [0x1D48D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l - -- [0x1D492] = { xoffset = 0, width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q - -- [0x1D493] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r - -- [0x1D497] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v - -- [0x1D499] = { xoffset = 0, width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x - -- [0x1D49A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y - -- [0x1D49B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z - [0x1D743] = { xoffset = 0, width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi - [0x1D435] = { anchor = 1.05 }, -- italic B - [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C - [0x1D437] = { anchor = 1.25 }, -- italic D - [0x1D43A] = { anchor = 0.8 }, -- italic G - [0x1D442] = { anchor = 0.85 }, -- italic O - [0x1D443] = { anchor = 1.1 }, -- italic P - [0x1D444] = { anchor = 0.85 }, -- italic Q - [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R - [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S - [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T - [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U - [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V - [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W - [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y - ["lowercasefraktur"] = { width = 1.25, extend = 1.25, @@ -195,71 +151,28 @@ return { { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - bottomright = -0.2, - }, - ["0x2F.variants.*"] = { - topleft = -0.2, - bottomright = -0.2, - }, - -- [0x28] = { -- left parenthesis. No! - -- topleft = -0.1, - -- bottomleft = -0.1, - -- }, - -- [0x29] = { -- right parenthesis. No! - -- topright = -0.1, - -- bottomright = -0.1, - -- all = true, - -- }, - [0x7D] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - [0x29] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - -- radical - [0x221A] = { - topright = 0.2, - bottomright = 0.2, - }, - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, - ["0x221A.parts.top"] = { - topright = 0.2, - }, - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x002F.variants.*"] = { topleft = -0.2, bottomright = -0.2 }, + -- No! + -- [0x0028] = { topleft = -0.1, bottomleft = -0.1 }, -- left parenthesis + -- [0x0029] = { topright = -0.1, bottomright = -0.1, all = true }, -- right parenthesis + -- + [0x007D] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + [0x0029] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom -- radical + [0x221A] = { topright = 0.2, bottomright = 0.2 }, + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, + ["0x221A.parts.top"] = { topright = 0.2, }, + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- [0x222B] = integral_variants, ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, [0x222C] = integral_variants, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, @@ -270,10 +183,8 @@ return { [0x2231] = integral_variants, ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, [0x2232] = integral_variants, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, [0x2233] = integral_variants, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - }, }, - -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large -- accent anchor offset). First we copy and fix. @@ -321,184 +232,144 @@ return { tweak = "copyaccents", }, -- So far for the accents. - { - -- For upright alphabets, we unset the anchor. - -- This means that accents are placed - -- centered over the character. - -- Should be on top - tweak = "wipeanchors", - list = { - "digitsbold", - "digitsdoublestruck", - "digitsmonospace", - "digitsnormal", - "digitssansserifbold", - "digitssansserifnormal", - "lowercasebold", - "lowercaseboldfraktur", - "lowercasedoublestruck", - "lowercasefraktur", - "lowercasegreekbold", - "lowercasegreeknormal", - "lowercasegreeksansserifbold", - "lowercasemonospace", - "lowercasenormal", - "lowercasesansserifbold", - "lowercasesansserifnormal", - "uppercasebold", - "uppercaseboldfraktur", - "uppercasedoublestruck", - "uppercasefraktur", - "uppercasegreekbold", - "uppercasegreeknormal", - "uppercasegreeksansserifbold", - "uppercasemonospace", - "uppercasenormal", - "uppercasesansserifbold", - "uppercasesansserifnormal", - }, - }, - { - -- For non-italic alphabets we remove italic correction. - tweak = "wipeitalics", - list = { - "digitsbold", - "digitsdoublestruck", - "digitsmonospace", - "digitsnormal", - "digitssansserifbold", - "digitssansserifnormal", - "lowercasebold", - "lowercaseboldfraktur", - "lowercasedoublestruck", - "lowercasefraktur", - "lowercasemonospace", - -- "lowercasenormal", - "lowercasesansserifbold", - -- "lowercasesansserifnormal", - "lowercasegreeknormal", - "uppercasebold", - "uppercaseboldfraktur", - "uppercasedoublestruck", - "uppercasefraktur", - "uppercasegreekbold", - "uppercasegreeknormal", - "uppercasegreeksansserifbold", - "uppercasemonospace", - "uppercasesansserifbold", - "uppercasesanserifnormal", -- some remain + -- For upright alphabets, we unset the anchor. This means that accents are placed + -- centered over the character. Should be on top. + tweak = "wipeanchors", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasegreekbold", + "lowercasegreeknormal", + "lowercasegreeksansserifbold", + "lowercasemonospace", +-- "lowercasenormal", + "lowercasesansserifbold", + "lowercasesansserifnormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasenormal", + "uppercasesansserifbold", + "uppercasesansserifnormal", }, - }, - { - -- This one fakes margins to get larger/smaller accents - -- with for example \widetilde. + }, + { + -- This one fakes margins to get larger/smaller accents with for example the + -- \widetilde. tweak = "margins", list = { - [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4 - - [0x1D712] = { left = -.1, right = -.1 }, -- italic chi - [0x1D713] = { left = -.1, right = -.1 }, -- italic psi - [0x1D714] = { left = -.1, right = -.1 }, -- italic omega - - [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha - [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma - [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa - [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu - [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi - [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma - [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon - [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi - [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi - [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega + [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4 + + [0x1D712] = { left = -.1, right = -.1 }, -- italic chi + [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + [0x1D714] = { left = -.1, right = -.1 }, -- italic omega + + [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha + [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma + [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa + [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu + [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi + [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma + [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon + [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi + [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi + [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega -- Greek lowercase sans (bold, italic) can be improved - [0x1D451] = { left = -.1, right = -.1 }, -- italic d - [0x1D453] = { left = -.1, right = -.1 }, -- italic f + [0x1D451] = { left = -.1, right = -.1 }, -- italic d + [0x1D453] = { left = -.1, right = -.1 }, -- italic f - [0x00394] = { left = .1, right = .1 }, -- upfight Delta - [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma + [0x00394] = { left = .1, right = .1 }, -- upfight Delta + [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma - -- [0x0004A] = { left = .1, right = .1 }, -- J - [0x00046] = { left = .1, right = .1 }, -- F - [0x0004C] = { left = .1, right = .1 }, -- L - [0x00050] = { left = .1, right = .1 }, -- P - [0x00053] = { left = .1, right = .1 }, -- S - [0x00054] = { left = .1, right = .1 }, -- T - [0x0005A] = { left = .1, right = .1 }, -- Z + -- [0x0004A] = { left = .1, right = .1 }, -- J + [0x00046] = { left = .1, right = .1 }, -- F + [0x0004C] = { left = .1, right = .1 }, -- L + [0x00050] = { left = .1, right = .1 }, -- P + [0x00053] = { left = .1, right = .1 }, -- S + [0x00054] = { left = .1, right = .1 }, -- T + [0x0005A] = { left = .1, right = .1 }, -- Z [0x1D43D] = { left = -.1, right = -.1 }, -- italic J -- [0x1D448] = { left = -.05, right = -.05 }, -- italic U -- [0x1D449] = { left = -.05, right = -.05 }, -- italic V [0x1D44B] = { left = -.05, right = -.05 }, -- italic X - -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f - -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h - -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u - -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x - - -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi - -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi - - -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d - -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g - - -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J - -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S - - -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F - -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I - -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J - -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z - - -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A - -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B - -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E - -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F - -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J - -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K - -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L - -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P - -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R - -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S - -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T - -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V - -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y - - -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C - - -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma - -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta - - -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E - -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F - -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope - -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L - -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S - - -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S - - -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C - -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E - -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F - -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope - -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P - -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S - -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z - - -- [0x1D4A0] = { left = .1, right = .1 }, -- script E - -- [0x1D4AE] = { left = .1, right = .1 }, -- script S - -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y + -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f + -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h + -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u + -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x + + -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi + -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + + -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d + -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g + + -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J + -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S + + -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F + -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I + -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J + -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z + + -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A + -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B + -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E + -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F + -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J + -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K + -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L + -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P + -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R + -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S + -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T + -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V + -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y + + -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C + + -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma + -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta + + -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E + -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F + -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope + -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L + -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S + + -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S + + -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C + -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E + -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F + -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope + -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P + -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S + -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z + + -- [0x1D4A0] = { left = .1, right = .1 }, -- script E + -- [0x1D4AE] = { left = .1, right = .1 }, -- script S + -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y }, }, { - tweak = "fixprimes", - -- scale = 0.8, - -- smaller = true, - factor = 1,--1.1 - }, - { tweak = "addprivates", -- list = { -- -- for specific parameters see act file @@ -531,6 +402,9 @@ return { list = { [0x3D] = { squeeze = .85, yoffset = .0975 } } }, { + -- Do we need these in the future? + -- Maybe a more general setup? + -- Maybe "reset llx" tweak = "kernpairs", list = { [mathematics.tweaks.subsets.acenorsuvxz] = { @@ -565,27 +439,23 @@ return { [0x1D45F] = { -- r [0x1D460] = -.1, -- s }, --- [mathematics.tweaks.subsets.acenorsuvxz] = { --- [mathematics.tweaks.subsets.acenorsuvxz] = 2, --- }, --- [0x1D452] = { --- [0x1D453] = -.05, --- [0x1D465] = -.3, --- }, --- [0x1D453] = { --- [0x1D453] = -.1, --- [0x1D454] = -.1, --- [0x1D465] = -.3, --- }, --- [0x1D465] = { --- [0x1D465] = .1, --- } - } + -- [mathematics.tweaks.subsets.acenorsuvxz] = { + -- [mathematics.tweaks.subsets.acenorsuvxz] = 2, + -- }, + -- [0x1D452] = { + -- [0x1D453] = -.05, + -- [0x1D465] = -.3, + -- }, + -- [0x1D453] = { + -- [0x1D453] = -.1, + -- [0x1D454] = -.1, + -- [0x1D465] = -.3, + -- }, + -- [0x1D465] = { + -- [0x1D465] = .1, + -- } + } }, - -- { - -- tweak = "fixanchors", - -- factor = .5, - -- }, { tweak = "addbars", advance = 0.275, @@ -619,3 +489,124 @@ return { -- \alpha is looking like an italic a. The one from Dejavu could perhaps be an alternative? -- No hvariants in 772 + + + + +-- From the dimension tweak: +-- [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma +-- [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta +-- [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta +-- [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda +-- [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi +-- [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi +-- [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma +-- [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon +-- [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi +-- [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi +-- [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega +-- [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial +-- [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G +-- [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O +-- [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q +-- -- [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a +-- -- [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b +-- -- [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c +-- -- [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d +-- -- [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e +-- -- [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45, anchor = 1.1 }, -- f +-- -- [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g +-- -- [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h +-- -- [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i +-- -- [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j +-- -- [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k +-- -- [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l +-- -- [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m +-- -- [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n +-- -- [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o +-- -- [0x1D45D] = { width = 1.05, italic = 0 }, -- p +-- -- [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q +-- -- [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r +-- -- [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s +-- -- [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t +-- -- [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u +-- -- [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v +-- -- [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w +-- -- [0x1D465] = { width = 1.175, italic = 0, anchor = 0.9 }, -- x +-- -- [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y +-- -- [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z +-- [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha +-- [0x1D6FD] = { width = 0.9, italic = 0, anchor = 1.05 }, -- \beta +-- [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma +-- [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta +-- [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon +-- [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon +-- [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta +-- [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta +-- [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta +-- [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta +-- [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota +-- [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa +-- [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda +-- [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu +-- [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu +-- [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi +-- [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron +-- [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi +-- [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi +-- [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho +-- [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho +-- [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma +-- [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma +-- [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau +-- [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon +-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi +-- [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi +-- [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi +-- [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi +-- [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega +-- -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa +-- [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi +-- [0x1D41B] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b +-- [0x1D41D] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d +-- [0x1D41F] = { width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f +-- [0x1D420] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g +-- [0x1D421] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h +-- [0x1D424] = { width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k +-- [0x1D425] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l +-- [0x1D42A] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q +-- [0x1D42B] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r +-- [0x1D42C] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s +-- -- [0x1D482] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a +-- -- [0x1D483] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b +-- -- [0x1D484] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c +-- -- [0x1D485] = { width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d +-- -- [0x1D486] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e +-- -- [0x1D487] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f +-- -- [0x1D488] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g +-- -- [0x1D489] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h +-- -- [0x1D48A] = { width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i +-- -- [0x1D48B] = { width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j +-- -- [0x1D48C] = { width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k +-- -- [0x1D48D] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l +-- -- [0x1D492] = { width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q +-- -- [0x1D493] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r +-- -- [0x1D497] = { width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v +-- -- [0x1D499] = { width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x +-- -- [0x1D49A] = { width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y +-- -- [0x1D49B] = { width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z +-- [0x1D743] = { width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi +-- -- [0x1D435] = { anchor = 1.05 }, -- italic B +-- -- [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C +-- -- [0x1D437] = { anchor = 1.25 }, -- italic D +-- -- [0x1D43A] = { anchor = 0.8 }, -- italic G +-- -- [0x1D442] = { anchor = 0.85 }, -- italic O +-- -- [0x1D443] = { anchor = 1.1 }, -- italic P +-- -- [0x1D444] = { anchor = 0.85 }, -- italic Q +-- -- [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R +-- -- [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S +-- -- [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T +-- -- [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U +-- -- [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V +-- -- [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W +-- -- [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg index 2207c0645..8f9cf73b9 100644 --- a/tex/context/fonts/mkiv/cambria-math.lfg +++ b/tex/context/fonts/mkiv/cambria-math.lfg @@ -46,11 +46,14 @@ end -- local integral_top = { topright = 0.05 } -- local integral_bottom = { bottomright = -0.30 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "cambria-math", version = "1.00", comment = "Goodies that complement cambria.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -72,38 +75,16 @@ return { tweaks = { aftercopying = { { - tweak = "dimensions", - list = { - - -- [0x00060] = { yoffset = -0.1 }, -- grave - -- [0x000B4] = { yoffset = -0.1 }, -- acute - -- [0x002C6] = { yoffset = -0.1 }, -- hat - -- [0x002DC] = { yoffset = -0.1 }, -- tilde - -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.15 }, -- breve - -- [0x002D9] = { yoffset = -0.15 }, -- dot - -- [0x000A8] = { yoffset = -0.1 }, -- ddot - -- [0x020DB] = { yoffset = -0.05 }, -- dddot - -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.05 }, -- vec - - -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave - -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute - -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat - -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde - -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar - -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve - -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot - -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot - -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering - -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck - - [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J - [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f - -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f - - }, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.97 }, + presets.mathrsfscript { rscale = 0.97 }, + presets.mathxitsarabic { rscale = 0.95 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true }, { tweak = "kerns", @@ -264,3 +245,40 @@ return { kernpairs = kernpairs, }, } + + +-- Old + -- { + -- tweak = "dimensions", + -- list = { + + -- -- [0x00060] = { yoffset = -0.1 }, -- grave + -- -- [0x000B4] = { yoffset = -0.1 }, -- acute + -- -- [0x002C6] = { yoffset = -0.1 }, -- hat + -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde + -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.15 }, -- breve + -- -- [0x002D9] = { yoffset = -0.15 }, -- dot + -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.05 }, -- dddot + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.05 }, -- vec + + -- -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat + -- -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar + -- -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.025, all=true }, -- widedot + -- -- [0x00308] = { yoffset = -0.025, all=true }, -- wideddot + -- -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering + -- -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck + + -- [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J + -- [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f + -- -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f + + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/common-math.lfg b/tex/context/fonts/mkiv/common-math.lfg new file mode 100644 index 000000000..d97511e76 --- /dev/null +++ b/tex/context/fonts/mkiv/common-math.lfg @@ -0,0 +1,106 @@ +return { + name = "common-math", + version = "1.00", + comment = "Goodies that complement pagella.", + author = "Hans Hagen & Mikael Sundqvist", + copyright = "ConTeXt development team", + mathematics = { + tweaks = { + presets = { + matheulercalligraphic = function(parameters) + return { + tweak = "replacealphabets", + feature = "matheulercalligraphic", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + filename = "euler.otf", + rscale = parameters.rscale, + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + filename = "euler.otf", + rscale = parameters.rscale, + }, + }, + } + end, + mathrsfscript = function(parameters) + return { + tweak = "replacealphabets", + feature = "mathrsfscript", + list = { + { + source = "uppercasescript", + target = "uppercasescript", + filename = "ralphsmithsformalscript-companion.otf", + rscale = parameters.rscale, + feature = "ss01", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldscript", + filename = "ralphsmithsformalscript-companion.otf", + rscale = parameters.rscale, + feature = "ss01", + }, + }, + } + end, + mathxitsarabic = function(parameters) + return { + tweak = "replacealphabets", + feature = "mathxitsarabic", + list = { + { + source = "arabicmathematicalalphabeticsymbols", + target = "arabicmathematicalalphabeticsymbols", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + { + source = "digitsarabicindic", + target = "digitsarabicindic", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + { + source = "digitsextendedarabicindic", + target = "digitsextendedarabicindic", + filename = "xitsmath-companion.otf", + rscale = parameters.rscale, + }, + }, + } + end, + moveitalics = function(parameters) + return { + tweak = "moveitalics", + correct = parameters.correct, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } + } + end, + }, + }, + }, +} diff --git a/tex/context/fonts/mkiv/concrete-math.lfg b/tex/context/fonts/mkiv/concrete-math.lfg index ff55d353d..fd2d5caad 100644 --- a/tex/context/fonts/mkiv/concrete-math.lfg +++ b/tex/context/fonts/mkiv/concrete-math.lfg @@ -1,10 +1,13 @@ -- this file might go away and is for experiments only +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "concrete-math", version = "1.00", comment = "Goodies that complement concrete math.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -16,20 +19,21 @@ return { }, tweaks = { aftercopying = { - -- { - -- tweak = "fixprimes", - -- factor = 0.9, - -- }, { - tweak = "kerns", - list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, + tweak = "fixprimes", + factor = 0.9, }, + -- there are circular variants +-- { +-- tweak = "addmirrors", +-- }, +-- presets.matheulercalligraphic { rscale = 0.97 }, +-- presets.mathrsfscript { rscale = 0.95 }, + { + tweak = "kerns", + list = { + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + }, }, { tweak = "fixellipses", @@ -44,10 +48,12 @@ return { { tweak = "addequals", }, - - + { + tweak = "setoptions", + set = { "ignorekerndimensions" } }, }, + }, bigslots = { 1, 2, 3, 4 }, diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg index c2e909aef..d18082b85 100644 --- a/tex/context/fonts/mkiv/dejavu-math.lfg +++ b/tex/context/fonts/mkiv/dejavu-math.lfg @@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.25 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "dejavu-math", @@ -27,17 +27,17 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, FractionRuleThickness = 60, - AccentTopShiftUp = -25, - FlattenedAccentTopShiftUp = -25, - -- AccentExtendMargin = 50, + AccentTopShiftUp = -25, + FlattenedAccentTopShiftUp = -25, + -- AccentExtendMargin = 50, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 62, - RadicalRuleThickness = 46, -- 52 in font + RadicalRuleThickness = 46, -- 52 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1333 in font - -- PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + -- PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -45,60 +45,37 @@ return { tweak = "version", expected = "Version 1.106", }, + { + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 1, + }, { - tweak = "dimensions", - list = { - [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a - -- [0x1D449] = { xoffset = 0, width = .8, italic = .2 }, - -- [0x1D44A] = { xoffset = 0, width = .8, italic = .2 }, - ["0x1D449:0x1D44A"] = { xoffset = 0, width = .8, italic = .2 }, - } + tweak = "addmirrors", }, + presets.matheulercalligraphic { rscale = 1.02 }, + presets.mathrsfscript { rscale = 1.02 }, + presets.mathxitsarabic { rscale = 1.05 }, + presets.moveitalics { correct = true }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -125,9 +102,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -136,20 +113,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = 0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -157,12 +132,10 @@ return { { tweak = "copyaccents", }, - -- So far for the accents. - { tweak = "fixprimes", - -- scale = 0.9, - -- smaller = true, + -- scale = 0.9, + -- smaller = true, factor = 0.8, }, { @@ -191,7 +164,7 @@ return { tweak = "addequals", }, { - tweak = "addfourier", + tweak = "addfourier", variant = 1, }, }, @@ -209,3 +182,16 @@ return { kerns = kerns, }, } + + + +-- Old + -- { + -- tweak = "dimensions", + -- list = { + -- [0x1D44E] = { width = 1, italic = 0, anchor = 0.9 }, -- a + -- -- [0x1D449] = { width = .8, italic = .2 }, + -- -- [0x1D44A] = { width = .8, italic = .2 }, + -- ["0x1D449:0x1D44A"] = { width = .8, italic = .2 }, + -- } + -- }, diff --git a/tex/context/fonts/mkiv/erewhon-math.lfg b/tex/context/fonts/mkiv/erewhon-math.lfg index 71ff64648..fe8bb7108 100644 --- a/tex/context/fonts/mkiv/erewhon-math.lfg +++ b/tex/context/fonts/mkiv/erewhon-math.lfg @@ -1,10 +1,13 @@ -- This file might go away and is for experiments only. +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "erewhon-math", version = "1.00", comment = "Goodies that complement erewhon math.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -22,60 +25,36 @@ return { tweaks = { aftercopying = { { - tweak = "kerns", - list = { - [0x2F] = { - topleft = -0.15, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.15, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - }, - }, - { tweak = "fixprimes", factor = 0.9, scale = 0.9, }, { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.93 }, + presets.mathrsfscript { rscale = 0.93 }, + presets.mathxitsarabic { rscale = 0.90 }, + { + tweak = "kerns", + list = { + [0x002F] = { topleft = -0.15, bottomright = -0.15 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + }, + }, + { tweak = "checkspacing", }, { @@ -93,6 +72,10 @@ return { { tweak = "addequals", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { diff --git a/tex/context/fonts/mkiv/garamond-math.lfg b/tex/context/fonts/mkiv/garamond-math.lfg index 7c1e7ab22..a0a0700f5 100644 --- a/tex/context/fonts/mkiv/garamond-math.lfg +++ b/tex/context/fonts/mkiv/garamond-math.lfg @@ -1,3 +1,6 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "ebgaramond", version = "1.00", @@ -11,17 +14,17 @@ return { FractionRuleThickness = 60, OverbarRuleThickness = 60, UnderbarRuleThickness = 60, - AccentTopShiftUp = -75, - FlattenedAccentTopShiftUp = -75, - -- AccentExtendMargin = 50, + AccentTopShiftUp = -75, + FlattenedAccentTopShiftUp = -75, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 75, - -- RadicalRuleThickness = 50, -- 50 in font + -- RadicalRuleThickness = 50, -- 50 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 85, -- 50 default - -- PrimeRaiseComposedPercent = 25, -- 25 default + PrimeRaisePercent = 85, -- 50 default + -- PrimeRaiseComposedPercent = 25, -- 25 default }, tweaks = { aftercopying = { @@ -30,122 +33,117 @@ return { expected = "Version 2019-08-16", }, { + tweak = "fixprimes", + scale = 0.95, + -- smaller = true, + factor = 0.95, + -- fake = 0.75, + }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.80 }, + { + tweak = "oldstylemath", + factor = 0, + }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, + { + tweak = "topanchors", + list = { + [0x1D453] = 0.88, -- italic f + }, + }, + { + tweak = "limits", + factor = 1.5, + list = mathematics.tweaks.subsets.integrals, + }, + { tweak = "dimensions", list = { - -- offset width italic - -- -- [0x00060] = { yoffset = -0.1 }, -- grave - -- -- [0x000B4] = { yoffset = -0.1 }, -- acute - -- [0x002C6] = { yoffset = -0.1 }, -- hat - -- [0x002DC] = { yoffset = -0.1 }, -- tilde - -- -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.15 }, -- breve - -- [0x002D9] = { yoffset = -0.15 }, -- dot - -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot - -- [0x020DB] = { yoffset = -0.115 }, -- dddot - -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.1 }, -- vec - - -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave - -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute - -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat - -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde - -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar - -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve - -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot - -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot - -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering - -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck - - -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat - - [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma - -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult! - [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi - [0x02113] = { xoffset = 0, width = 1, italic = 0.075 }, -- \ell - [0x1D436] = { xoffset = 0, width = 1, italic = 0.05 }, -- C - [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J - [0x1D44B] = { xoffset = 0, width = 1, italic = 0.05 }, -- X - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- b - [0x1D450] = { xoffset = 0, width = 1.1, italic = 0 }, -- c - [0x1D451] = { xoffset = 0, width = 1, italic = 0.05, 0.8 }, -- d - [0x1D452] = { xoffset = 0, width = 1.1, italic = 0.05 }, -- e - [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, 1.2 }, -- f - [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g - [0x0210E] = { xoffset = 0, width = 1.1, italic = 0, 1.4 }, -- h - [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j - [0x1D458] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- k - [0x1D459] = { xoffset = 0, width = 1, italic = 0.05 }, -- l - [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, 1.4 }, -- p - [0x1D45E] = { xoffset = 0, width = 1.05, italic = 0 }, -- q - [0x1D45F] = { xoffset = 0, width = 1.05, italic = 0 }, -- r - [0x1D461] = { xoffset = 0, width = 1, italic = 0.1 }, -- t - [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x - [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, 1.35 }, -- y - [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta - [0x1D6FE] = { xoffset = 0, width = 1.05, italic = 0 }, -- \gamma - [0x1D6FF] = { xoffset = 0, width = 1, italic = 0.1 }, -- \delta - [0x1D716] = { xoffset = 0, width = 1.1, italic = 0 }, -- \epsilon - [0x1D700] = { xoffset = 0, width = 1.1, italic = 0 }, -- \varepsilon - [0x1D701] = { xoffset = 0, width = 1, italic = 0.15 }, -- \zeta - [0x1D703] = { xoffset = 0, width = 1, italic = 0.1 }, -- \theta - [0x1D705] = { xoffset = 0, width = 1, italic = 0.1 }, -- \kappa - [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda - [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu - [0x1D708] = { xoffset = 0, width = 1.1, italic = 0 }, -- \nu - [0x1D709] = { xoffset = 0, width = 1.1, italic = 0 }, -- \xi - [0x1D70B] = { xoffset = 0, width = 1.05, italic = 0 }, -- \pi - [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho - [0x1D70E] = { xoffset = 0, width = 1, italic = 0.1 }, -- \sigma - [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau - [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi - [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi + -- for older entries, see bottom of file + [0x1D453] = { width = 1.1, }, -- italic f }, }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants -- angle + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + }, + }, + { + -- to be considered + -- tweak = "kernpairs", + list = { + [mathematics.tweaks.subsets.gjqy] = { + [mathematics.tweaks.subsets.f] = -.1, + [0x1D70C] = -.1, -- italic \rho + }, + [mathematics.tweaks.subsets.bhklt] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.d] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.f] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + [mathematics.tweaks.subsets.gjqy] = -.25, + [mathematics.tweaks.subsets.bhklt] = -.1, + [mathematics.tweaks.subsets.d] = -.25, + [mathematics.tweaks.subsets.i] = -.25, + [mathematics.tweaks.subsets.mw] = -.25, + [mathematics.tweaks.subsets.p] = -.25, + [mathematics.tweaks.subsets.acenorsuvxz] = -.25, + [mathematics.tweaks.subsets.dotless] = -.25, + }, + [mathematics.tweaks.subsets.i] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.mw] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.p] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.acenorsuvxz] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + [mathematics.tweaks.subsets.dotless] = { + [mathematics.tweaks.subsets.f] = -.25, + [0x1D70C] = -.25, -- italic \rho + }, + -- "uppercaseitalic" = { + -- [mathematics.tweaks.subsets.f] = -.25, + -- [0x1D70C] = -.25, -- italic \rho + -- }, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -155,16 +153,16 @@ return { tweak = "extendaccents", }, { - tweak = "fixaccents", + tweak = "fixanchors", }, -- First we set the dimensions of the initial accent which started out as zero but we want -- a proper width. { tweak = "dimensions", list = { - -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -195,13 +193,37 @@ return { tweak = "copyaccents", }, -- So far for the accents. - { - tweak = "fixprimes", - scale = 0.9, - -- smaller = true, - factor = 0.9, - -- fake = 0.75, + -- For non-italic alphabets we remove italic correction. + -- This one is/will become obsolete + -- tweak = "wipeitalics", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + -- "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasemonospace", + -- "lowercasenormal", + "lowercasesansserifbold", + -- "lowercasesansserifnormal", + -- "lowercasegreeknormal", + -- "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", -- some remain + }, }, { tweak = "checkspacing", @@ -229,6 +251,9 @@ return { tweak = "addfourier", variant = 1, }, + { + tweak = "diagnose", + }, }, }, alternates = { @@ -248,3 +273,81 @@ return { } + + +-- Some old entries: + + -- { + -- tweak = "dimensions", + -- list = { + -- -- offset width italic + -- -- -- [0x00060] = { yoffset = -0.1 }, -- grave + -- -- -- [0x000B4] = { yoffset = -0.1 }, -- acute + -- -- [0x002C6] = { yoffset = -0.1 }, -- hat + -- -- [0x002DC] = { yoffset = -0.1 }, -- tilde + -- -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.15 }, -- breve + -- -- [0x002D9] = { yoffset = -0.15 }, -- dot + -- -- -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.115 }, -- dddot + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.1 }, -- vec + + -- -- [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.12 , all = true }, -- widehat + -- -- [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12 , all = true }, -- widebar + -- -- [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.12 , all = true }, -- widedot + -- -- [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot + -- -- -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12 , all = true }, -- widering + -- -- [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck + + -- -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat + + -- [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma + -- -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult! + -- [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi + -- [0x02113] = { width = 1, italic = 0.075 }, -- \ell + -- [0x1D436] = { width = 1, italic = 0.05 }, -- C + -- [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J + -- [0x1D44B] = { width = 1, italic = 0.05 }, -- X + -- [0x1D44F] = { width = 1, italic = 0, }, -- b + -- [0x1D450] = { width = 1.1, italic = 0 }, -- c + -- [0x1D451] = { width = 1, italic = 0.05, }, -- d + -- [0x1D452] = { width = 1.1, italic = 0.05 }, -- e + -- [0x00066] = { width = 1.4, italic = 0.0, }, -- f + -- [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, }, -- f + -- [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g + -- [0x0210E] = { width = 1.1, italic = 0, }, -- h + -- [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j + -- [0x1D458] = { width = 1, italic = 0, }, -- k + -- [0x1D459] = { width = 1, italic = 0.05 }, -- l + -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, }, -- p + -- [0x1D45E] = { width = 1.05, italic = 0 }, -- q + -- [0x1D45F] = { width = 1.05, italic = 0 }, -- r + -- [0x1D461] = { width = 1, italic = 0.1 }, -- t + -- [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x + -- [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, }, -- y + -- [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta + -- [0x1D6FE] = { width = 1.05, italic = 0 }, -- \gamma + -- [0x1D6FF] = { width = 1, italic = 0.1 }, -- \delta + -- [0x1D716] = { width = 1.1, italic = 0 }, -- \epsilon + -- [0x1D700] = { width = 1.1, italic = 0 }, -- \varepsilon + -- [0x1D701] = { width = 1, italic = 0.15 }, -- \zeta + -- [0x1D703] = { width = 1, italic = 0.1 }, -- \theta + -- [0x1D705] = { width = 1, italic = 0.1 }, -- \kappa + -- [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda + -- [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu + -- [0x1D708] = { width = 1.1, italic = 0 }, -- \nu + -- [0x1D709] = { width = 1.1, italic = 0 }, -- \xi + -- [0x1D70B] = { width = 1.05, italic = 0 }, -- \pi + -- [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho + -- [0x1D70E] = { width = 1, italic = 0.1 }, -- \sigma + -- [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau + -- [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi + -- [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/generic-math.lfg b/tex/context/fonts/mkiv/generic-math.lfg index 490ad1416..214e479e0 100644 --- a/tex/context/fonts/mkiv/generic-math.lfg +++ b/tex/context/fonts/mkiv/generic-math.lfg @@ -102,6 +102,17 @@ return { -- [0x21CC] = false, } }, +-- { +-- tweak = "limits", +-- factor = 1.5, +-- list = { +-- [0x0222B] = true, +-- [0x0222C] = 1.45, +-- [0x0222D] = true, +-- [0x0222E] = true, +-- [0x0222F] = true, +-- }, +-- }, { -- For upright alphabets, we unset the anchor. -- This means that accents are placed @@ -171,6 +182,18 @@ return { "uppercasesanserifnormal", }, }, + -- { + -- comment = "example" + -- tweak = "action", + -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters) + -- list = fixes, -- one of the parameters + -- }, + -- { + -- comment = "example" + -- tweak = "action", + -- action = mathematics.tweaks.fixdimensions, + -- list = fixes, -- one of the parameters + -- }, { -- This one fakes margins to get larger/smaller accents -- with for example \widetilde. @@ -179,6 +202,10 @@ return { list = { }, }, + -- { + -- tweak = "fixanchors", + -- factor = .5, + -- }, { tweak = "addrules", }, diff --git a/tex/context/fonts/mkiv/kpfonts-math.lfg b/tex/context/fonts/mkiv/kpfonts-math.lfg index c0b019f79..ed50baf3b 100644 --- a/tex/context/fonts/mkiv/kpfonts-math.lfg +++ b/tex/context/fonts/mkiv/kpfonts-math.lfg @@ -1,3 +1,6 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "kpfonts-math", version = "1.00", @@ -11,12 +14,12 @@ return { -- AccentBaseHeight = 0, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 70, - -- RadicalRuleThickness = 50, -- 50 in font + -- RadicalRuleThickness = 50, -- 50 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1500 in font (only one) - PrimeRaisePercent = 25, -- 50 default - -- PrimeRaiseComposedPercent = 25, -- 25 default + PrimeRaisePercent = 25, -- 50 default + -- PrimeRaiseComposedPercent = 25, -- 25 default }, tweaks = { aftercopying = { @@ -27,51 +30,22 @@ return { { tweak = "dimensions", list = { - [0x2A3F] = { - factor = 0.84625, - } + [0x2A3F] = { factor = 0.84625 } }, }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.25, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.25, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.05, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.05, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.05, - bottomright = -0.05, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.25 }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.25 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.05 }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.05 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants }, }, @@ -84,6 +58,34 @@ return { -- -- keep = true, -- keep the text size prime (aka minute) -- }, { + tweak = "addmirrors", + }, + { + -- kpfonts have calligraphic at private slots + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = { first = 0x0E7E1, last = 0x0E7FA }, + target = "uppercasecalligraphic", + }, + { + source = "uppercaseboldscript", + target = "uppercaseboldcalligraphic", + }, + { + source = { first = 0x0E701, last = 0x0E71A }, + target = "uppercaseboldcalligraphic", + }, + }, + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.92 }, + { tweak = "checkspacing", }, { @@ -96,8 +98,9 @@ return { tweak = "addrules", }, { + -- This will be fixed. Check if new version comes out! tweak = "addbars", - advance = 0.025, + advance = 0.5, }, { tweak = "addactuarian", @@ -105,6 +108,10 @@ return { { tweak = "addequals", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, alternates = { diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg index 77d0161e3..ea6a27cad 100644 --- a/tex/context/fonts/mkiv/libertinus-math.lfg +++ b/tex/context/fonts/mkiv/libertinus-math.lfg @@ -4,6 +4,11 @@ -- fix-feature or just disable ssty, but we have to revert to a runtime fix. Lucky me that I didn't -- remove that hardly needed 'tweaks' mechanism yet. +-- The italic x has a rectangular piece in its eye (redundant point) + +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "libertinus-math", version = "1.00", @@ -20,17 +25,17 @@ return { UnderbarRuleThickness = 50, AccentTopShiftUp = -35, FlattenedAccentTopShiftUp = -35, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentTopShiftUp = 0, AccentBaseDepth = 10, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -425, - -- RadicalRuleThickness = 40, -- 40 in font + -- RadicalRuleThickness = 40, -- 40 in font DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1250 in font (only one) - PrimeRaisePercent = 70, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 70, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -40,85 +45,56 @@ return { expected = "Version 7.040", }, { - tweak = "dimensions", - list = { - -- [0x00060] = { yoffset = -0.075 }, -- grave - -- [0x000B4] = { yoffset = -0.075 }, -- acute - -- [0x002C6] = { yoffset = -0.075 }, -- hat - -- [0x002DC] = { yoffset = -0.075 }, -- tilde - -- -- [0x000AF] = { yoffset = -0.1 }, -- bar - -- [0x002D8] = { yoffset = -0.075 }, -- breve - -- [0x002D9] = { yoffset = -0.05 }, -- dot - -- [0x000A8] = { yoffset = -0.02 }, -- ddot - -- [0x020DB] = { yoffset = -0.02 }, -- dddot - -- [0x002DA] = { yoffset = -0.1 }, -- ring - -- -- [0x002C7] = { yoffset = -0.1 }, -- check - -- [0x020D7] = { yoffset = -0.1 }, -- vec - - -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave - -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute - -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat - -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde - -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar - -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve - -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot - -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot - -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering - -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck - - -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8) - -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8) - -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8) - -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8) - }, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.92 }, + presets.mathrsfscript { rscale = 0.92 }, + presets.mathxitsarabic { rscale = 0.85 }, + { + tweak = "simplifykerns", + }, + { + -- When it makes sense we get rid of italics. + tweak = "moveitalics", + correct = true, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } }, + { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.15, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.15, - }, - - ["0x7D.parts.top"] = { - topright = -0.2, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.2, - }, -- right brace bottom - -- ["0x7D.variants.*"] = { - -- topright = -0.05, - -- bottomright = -0.05, - -- }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.15, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.15, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x002F] = { topleft = -0.15, bottomright = -0.15 }, + ["0x7D.parts.top"] = { topright = -0.2, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.2 }, -- right brace bottom + -- ["0x7D.variants.*"] = { topright = -0.05, bottomright = -0.05 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.15, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.15 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, }, }, @@ -148,19 +124,17 @@ return { tweak = "dimensions", list = { -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -169,8 +143,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { tweak = "fixprimes", scale = 0.9, @@ -203,6 +175,10 @@ return { tweak = "addfourier", variant = 1, }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, bigslots = { @@ -210,3 +186,40 @@ return { }, }, } + +-- Old values + -- { + -- tweak = "dimensions", + -- list = { + -- -- [0x00060] = { yoffset = -0.075 }, -- grave + -- -- [0x000B4] = { yoffset = -0.075 }, -- acute + -- -- [0x002C6] = { yoffset = -0.075 }, -- hat + -- -- [0x002DC] = { yoffset = -0.075 }, -- tilde + -- -- [0x000AF] = { yoffset = -0.1 }, -- bar + -- -- [0x002D8] = { yoffset = -0.075 }, -- breve + -- -- [0x002D9] = { yoffset = -0.05 }, -- dot + -- -- [0x000A8] = { yoffset = -0.02 }, -- ddot + -- -- [0x020DB] = { yoffset = -0.02 }, -- dddot + -- -- [0x002DA] = { yoffset = -0.1 }, -- ring + -- -- [0x002C7] = { yoffset = -0.1 }, -- check + -- -- [0x020D7] = { yoffset = -0.1 }, -- vec + + -- -- [0x00300] = { yoffset = -0.1, all = true }, -- widegrave + -- -- [0x00301] = { yoffset = -0.1, all = true }, -- wideacute + -- -- [0x00302] = { yoffset = -0.1, all = true }, -- widehat + -- -- [0x00303] = { yoffset = -0.09, all = true }, -- widetilde + -- -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar + -- -- [0x00306] = { yoffset = -0.05, all = true }, -- widebreve + -- -- [0x00307] = { yoffset = -0.02, all = true }, -- widedot + -- -- [0x00308] = { yoffset = -0.02, all = true }, -- wideddot + -- -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot + -- -- [0x0030A] = { yoffset = -0.12, all = true }, -- widering + -- -- [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck + + -- -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8) + -- -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8) + -- -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8) + -- -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8) + -- }, + -- }, + diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg index 1d81e0b77..355b583d1 100644 --- a/tex/context/fonts/mkiv/lm.lfg +++ b/tex/context/fonts/mkiv/lm.lfg @@ -1,6 +1,9 @@ -- In order to be able to use beta math fonts, we use our own file name and -- always remap. +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + local dimensions, kerns if CONTEXTLMTXMODE == 0 then local kern_150 = { bottomright = { { kern = -150 } } } @@ -76,8 +79,14 @@ return { DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 15, -- 25 default + PrimeRaisePercent = 60, + PrimeRaiseComposedPercent = 15, + -- SubSuperscriptGapMin = 160, -- 160 in font + SuperscriptBaselineDropMax = 250, -- 250 in font + -- SuperscriptBottomMaxWithSubscript = 344, -- 344 in font + -- SuperscriptBottomMin = 108, -- 108 in font + SuperscriptShiftUp = 363, -- 363 in font + SuperscriptShiftUpCramped = 89, -- 289 in font }, tweaks = { aftercopying = { @@ -86,6 +95,13 @@ return { expected = "Version 1.958", }, { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.88 }, + presets.moveitalics { correct = true }, + { tweak = "dimensions", list = { -- [0x00060] = { yoffset = -0.05 }, -- grave @@ -447,7 +463,7 @@ return { -- "lowercasedoublestruck", -- "lowercasefraktur", "lowercasemonospace", - "lowercasenormal", + -- "lowercasenormal", -- "lowercasesansserifbold", -- "lowercasesansserifnormal", -- "lowercasegreeknormal", @@ -551,6 +567,9 @@ return { tweak = "fixradicals", }, { + tweak = "addprivates", + }, + { tweak = "addscripts", }, { diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg index 372d8cce2..97cf97ab1 100644 --- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg +++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg @@ -1,3 +1,5 @@ +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets local dimensions, kerns if CONTEXTLMTXMODE == 0 then -- local kern_250 = { bottomright = { { kern = -250 } }, force = true } @@ -42,75 +44,83 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, FractionRuleThickness = 55, - -- AccentTopShiftUp = 0, - -- FlattenedAccentTopShiftUp = 0, - -- AccentExtendMargin = 50, + -- AccentTopShiftUp = 0, + -- FlattenedAccentTopShiftUp = 0, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 650, AccentBaseDepth = 150, RadicalDegreeBottomRaisePercent = 50, RadicalKernAfterDegree = -600, - -- RadicalRuleThickness = 35, -- 40 in font (46 in demi) + -- RadicalRuleThickness = 35, -- 40 in font (46 in demi) DelimiterPercent = 90, DelimiterShortfall = 400, -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 50, -- 25 default + PrimeRaisePercent = 60, -- 50 default + PrimeRaiseComposedPercent = 50, -- 25 default +-- AxisHeight = 325, }, tweaks = { aftercopying = { { tweak = "version", - expected = "Version 1.802", + expected = "Version 1.803", }, - -- { - -- tweak = "substitutes", - -- list = { - -- [0x2264] = "ss03", - -- [0x2265] = "ss03", - -- } - -- }, - -- \definefontfeature[mathlucida][copymathscripts=yes] - -- \definefontfeature[mathlucida][copymathscripts=yes,ss04=yes] - -- 0xFEOO should be chancery style, if present { - tweak = "variants", - kind = "script", - feature = "ss04",-- this changes to chancery style for lucida - -- feature = false, -- use the saved ones (see typescript) - selector = 0xFE00, + tweak = "fixoldschool", + version = "Version 1.802", }, - -- 0xFEO1 should be roundhand style, if present +-- { +-- tweak = "showinfo", +-- version = "Version 1.803", +-- }, { - tweak = "variants", - kind = "script", - selector = 0xFE01, + tweak = "addmirrors", + }, + presets.mathxitsarabic { + rscale = 1.05 + }, + { + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + feature = "ss04", + }, + }, + }, + { + tweak = "dimensions", + version = "Version 1.802", + list = { + -- The < and > are slightly too small. We scale them by 867/795 + ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, + ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, + -- The = is too big if in ss03. We scale it by 795/867 (not working like this) + -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 }, + }, }, { tweak = "dimensions", list = { - -- these we fix here + -- these we fix here. Remove when we have new version of Lucida ["0x23DC.parts.1"] = { xoffset = -0.075, height = .4, yoffset = -0.6 }, ["0x23DC.parts.2"] = { height = .4, yoffset = -0.6 }, ["0x23DC.parts.3"] = { xoffset = 0.075, height = .4, yoffset = -0.6 }, ["0x23DD.parts.1"] = { xoffset = -0.075, depth = .8, yoffset = 0.2 }, ["0x23DD.parts.2"] = { depth = .8, yoffset = 0.2 }, ["0x23DD.parts.3"] = { xoffset = 0.075, depth = .8, yoffset = 0.2 }, - -- The < and > are slightly too small. We scale them by 867/795 - ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, - ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, - -- The = is too big if in ss03. We scale it by 795/867 (not working like this) - -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 }, -- these are done later using the AccentBase* parameters -- [0x23DC] = { height = .2, yoffset = -0.8 }, -- [0x23DD] = { depth = .6, yoffset = 0.4 }, - + -- -- ["0x7C.variants.1"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.2"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.3"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- ["0x7C.variants.4"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, -- going zero makes them be ignored - ["0x7C.variants.3"]={ squeeze = 0.90, height = 0.90, depth = 0.90 }, - ["0x7C.variants.4"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, + ["0x7C.variants.3"] = { squeeze = 0.90, height = 0.90, depth = 0.90 }, + ["0x7C.variants.4"] = { squeeze = 0.80, height = 0.80, depth = 0.80 }, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -127,10 +137,10 @@ return { { tweak = "dimensions", list = { - -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve - -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck + -- [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + -- [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + -- [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + -- [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, -- Then we deal with all offsets and heights in one go. So we treat the initial accent @@ -138,20 +148,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -173,50 +181,20 @@ return { { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.2, bottomright = -0.2 }, - ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - [0x27EB] = { topright = -0.2, bottomright = -0.2 }, - ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15 }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25 }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2 }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.2, bottomright = -0.2 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + [0x27EB] = { topright = -0.2, bottomright = -0.2 }, + ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -254,7 +232,7 @@ return { }, { tweak = "addfourier", - -- scale = 1.5, + -- scale = 1.5, variant = 1, }, { @@ -269,9 +247,9 @@ return { [0x2192] = false, [0x219E] = false, [0x21A0] = false, --- [0x21A6] = false, --- [0x21CB] = false, --- [0x21CC] = false, + -- [0x21A6] = false, + -- [0x21CB] = false, + -- [0x21CC] = false, } }, }, diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg index 162b9f628..5216e1289 100644 --- a/tex/context/fonts/mkiv/minion-math.lfg +++ b/tex/context/fonts/mkiv/minion-math.lfg @@ -14,6 +14,9 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + return { name = "minion-math", version = "1.00", @@ -37,49 +40,51 @@ return { parameters = { NoLimitSupFactor = 0, NoLimitSubFactor = 900, - -- AccentTopShiftUp = -15, - -- FlattenedAccentTopShiftUp = -15, - -- -- AccentExtendMargin = 50, - -- AccentBaseDepth = 50, - -- RadicalDegreeBottomRaisePercent = 60, - -- RadicalRuleThickness = 66, -- 72 in font - -- DelimiterPercent = 90, - -- DelimiterShortfall = 400, - -- DisplayOperatorMinHeight = 1900, -- 1250 in font - -- -- AccentSuperscriptDrop = 100, - -- -- AccentSuperscriptPercent = 20, - PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 25, -- 25 default - -- PrimeShiftUp = 0, - -- PrimeBaselineDropMax = 0, - RadicalKernAfterExtensible = 100, -- 0 default - RadicalKernBeforeExtensible = 100, -- 0 default + -- AccentTopShiftUp = -15, + -- FlattenedAccentTopShiftUp = -15, + -- AccentExtendMargin = 50, + -- AccentBaseDepth = 50, + -- RadicalDegreeBottomRaisePercent = 60, + -- RadicalRuleThickness = 66, -- 72 in font + -- DelimiterPercent = 90, + -- DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1900, -- 1250 in font + -- AccentSuperscriptDrop = 100, + -- AccentSuperscriptPercent = 20, + PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 25, -- 25 default + -- PrimeShiftUp = 0, + -- PrimeBaselineDropMax = 0, + RadicalKernAfterExtensible = 100, -- 0 default + RadicalKernBeforeExtensible = 100, -- 0 default }, tweaks = { aftercopying = { -- { -- tweak = "version", - -- expected = "unknown", + -- expected = "unknown", -- todo -- }, { - tweak = "dimensions", - -- smaller = true, - list = dimensions, + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.88 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, + { -- Check! + tweak = "replacealphabets", + list = { + { + source = "uppercasecalligraphic", + target = "uppercasescript", + }, + }, }, - -- { - -- tweak = "variants", - -- kind = "script", - -- feature = "s_s_0",-- this changes to chancery style for lucida - -- -- feature = false, -- use the saved ones (see typescript) - -- selector = 0xFE00, - -- }, - -- -- 0xFEO1 should be roundhand style, if present - -- { - -- tweak = "variants", - -- kind = "script", - -- selector = 0xFE01, - -- }, - { tweak = "extendaccents", }, @@ -94,18 +99,18 @@ return { factor = 0.95, scale = 0.9, }, - -- { - -- tweak = "checkspacing", - -- }, - -- { - -- tweak = "addscripts", - -- }, - -- { - -- tweak = "accentdimensions", - -- }, - -- { - -- tweak = "addrules", - -- }, + -- { + -- tweak = "checkspacing", + -- }, + -- { + -- tweak = "addscripts", + -- }, + -- { + -- tweak = "accentdimensions", + -- }, + -- { + -- tweak = "addrules", + -- }, { tweak = "addfourier", variant = 1, diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg index 021bd2b7f..59eafeaaf 100644 --- a/tex/context/fonts/mkiv/pagella-math.lfg +++ b/tex/context/fonts/mkiv/pagella-math.lfg @@ -29,11 +29,13 @@ end -- When set this will bypass the italic correction hackery! +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets + local integral_variants = { bottomright = -0.20 } ----- integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.20 } - return { name = "pagella-math", version = "1.00", @@ -45,20 +47,22 @@ return { NoLimitSupFactor = 0, NoLimitSubFactor = 900, AccentTopShiftUp = 10, - FlattenedAccentTopShiftUp = 10, -- now also set, the wide ones (so we can move in one go) - -- AccentExtendMargin = 50, + FlattenedAccentTopShiftUp = 10, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 80, -- SpaceAfterScript = 0, -- SpaceAfterScript = 30, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -500, - RadicalRuleThickness = 54, -- 60 in font + RadicalRuleThickness = 54, -- 60 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1500 in font - PrimeRaisePercent = 75, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default + -- RadicalKernAfterExtensible = 0, -- 0 default + -- RadicalKernBeforeExtensible = 0, -- 0 default }, tweaks = { aftercopying = { @@ -66,47 +70,58 @@ return { tweak = "version", expected = "Version 1.632", }, - -- { - -- comment = "example" - -- tweak = "action", - -- action = function(target,original,parameters) mathematics.tweaks.fixdimensions(target, original, parameters) - -- list = fixes, -- one of the parameters - -- }, - -- { - -- comment = "example" - -- tweak = "action", - -- action = mathematics.tweaks.fixdimensions, - -- list = fixes, -- one of the parameters - -- }, { - tweak = "dimensions", - list = { -- offset width italic - [0x020D7] = { yoffset = -0.05 }, -- vec - [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b - [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c - [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d - [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e - [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f - [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g - [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h - [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k - [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l - [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q - [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v - [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w - [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma - [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron - [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma - [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma - [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau - [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi - [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi - [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi + tweak = "fixprimes", + factor = 0.9, + -- smaller = true, + scale = 0.9, + -- fake = 0.65, + }, + { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 0.97 }, + presets.mathrsfscript { rscale = 0.97 }, + presets.mathxitsarabic { rscale = 0.95 }, + { + -- When it makes sense we get rid of italics. + tweak = "moveitalics", + correct = true, + list = { + "lowercasenormal", + "lowercaseitalic", + "lowercasebold", + "lowercasebolditalic", + "lowercasegreeknormal", + "lowercasegreekitalic", + "lowercasegreekbold", + "lowercasegreekbolditalic", + "uppercasenormal", + "uppercaseitalic", + "uppercasebold", + "uppercasebolditalic", + "uppercasegreeknormal", + "uppercasegreekitalic", + "uppercasegreekbold", + "uppercasegreekbolditalic", + mathematics.tweaks.subsets.dotless, + } + }, + { + tweak = "setovershoots", + list = { + { + target = "uppercasescript", + -- quad = true, -- to be decided + topovershoot = 0.05, + }, + { + target = "uppercaseboldscript", + -- quad = true, -- to be decided + topovershoot = 0.05, + }, }, }, - -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large -- accent anchor offset). First we copy and fix. @@ -126,7 +141,7 @@ return { [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve - [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering + [0x0030A] = { width = 0.9, xoffset = -.0 }, -- widering -- weird this one [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -135,20 +150,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = -0.01, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -165,50 +178,24 @@ return { { tweak = "kerns", list = { - -- ["*:0x2F"] = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - + -- ["*:0x2F"] = { ... } + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + -- + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants -- angle - [0x27E9] = { topright = -0.2, bottomright = -0.2 }, - ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - [0x27EB] = { topright = -0.2, bottomright = -0.2 }, - ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, - + [0x27E9] = { topright = -0.2, bottomright = -0.2 }, + ["0x27E9.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + [0x27EB] = { topright = -0.2, bottomright = -0.2 }, + ["0x27EB.variants.*"] = { topright = -0.3, bottomright = -0.3 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -218,18 +205,9 @@ return { ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - - }, }, { - tweak = "fixprimes", - factor = 0.9, - -- smaller = true, - scale = 0.9, - -- fake = 0.65, - }, - { tweak = "checkspacing", }, { @@ -258,21 +236,19 @@ return { tweak = "addequals", }, { - tweak = "addfourier", + tweak = "addfourier", variant = 1, }, - -{ - tweak = "kernpairs", - list = { - -- beware: we kept the italic correction in spite of punctuation class - [0x1D453] = { -- f - [0x3A] = -.1, - [0x3B] = -.1, - }, - }, -}, - + { + tweak = "kernpairs", + list = { + -- beware: we kept the italic correction in spite of punctuation class + [0x1D453] = { -- f + [0x3A] = -.1, + [0x3B] = -.1, + }, + }, + }, }, }, bigslots = { @@ -288,3 +264,38 @@ return { kerns = kerns, }, } + + + + + +-- Old values + + -- { + -- tweak = "dimensions", + -- list = { -- offset width italic + -- [0x020D7] = { yoffset = -0.05 }, -- vec + -- [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a + -- [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b + -- [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c + -- [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d + -- [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e + -- [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6, anchor = 1.2 }, -- f + -- [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g + -- [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h + -- [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k + -- [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l + -- [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q + -- [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v + -- [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w + -- [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma + -- [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda + -- [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron + -- [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma + -- [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma + -- [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau + -- [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi + -- [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi + -- [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg index cb992cd0b..54d24ffa3 100644 --- a/tex/context/fonts/mkiv/schola-math.lfg +++ b/tex/context/fonts/mkiv/schola-math.lfg @@ -10,11 +10,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.20 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "schola-math", @@ -28,17 +28,17 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 30, RadicalDegreeBottomRaisePercent = 60, RadicalKernAfterDegree = -500, - RadicalRuleThickness = 64, -- 70 in font + RadicalRuleThickness = 64, -- 70 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1333 in font - -- PrimeRaisePercent = 50, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + -- PrimeRaisePercent = 50, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -47,58 +47,36 @@ return { expected = "Version 1.533", }, { - tweak = "dimensions", - list = { - -- nothing yet - } + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 1, }, { + tweak = "addmirrors", + }, + presets.matheulercalligraphic { rscale = 1 }, + presets.mathrsfscript { rscale = 1 }, + presets.mathxitsarabic { rscale = 0.93 }, + presets.moveitalics { correct = true }, + { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.25, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.25, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.25, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.25 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -126,9 +104,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -137,20 +115,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -158,16 +134,6 @@ return { { tweak = "copyaccents", }, - -- So far for the accents. - - - - { - tweak = "fixprimes", - scale = 0.85, - -- smaller = true, - factor = 1, - }, { tweak = "checkspacing", }, @@ -191,8 +157,8 @@ return { tweak = "addequals", }, { - tweak = "addfourier", - -- scale = 1.25, + tweak = "addfourier", + -- scale = 1.25, variant = 1, }, }, diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg index b5e6daf29..8b03a7730 100644 --- a/tex/context/fonts/mkiv/stix-two-math.lfg +++ b/tex/context/fonts/mkiv/stix-two-math.lfg @@ -3,6 +3,8 @@ local integral_variants = { bottomright = -0.4 } -- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.35 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "stix-two-math", @@ -31,18 +33,18 @@ return { NoLimitSubFactor = 1000, -- AccentBaseHeight = 0, AccentBaseDepth = 30, - FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go) - -- AccentExtendMargin = 50, + FlattenedAccentTopShiftUp = 0, + -- AccentExtendMargin = 50, RadicalDegreeBottomRaisePercent = 65, -- RadicalKernBeforeDegree = 500, RadicalKernAfterDegree = -500, RadicalVerticalGap = 10, - -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) + -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1800 in font - PrimeRaisePercent = 75, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -51,52 +53,39 @@ return { expected = "Version 2.12 b168", }, { + tweak = "fixprimes", + scale = 1, + -- smaller = true, + factor = 1, + }, + { + tweak = "addmirrors", + }, + presets.mathxitsarabic { rscale = 0.95 }, + { + tweak = "simplifykerns", + }, + presets.moveitalics { + correct = true + }, + { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - -- ["0x7D.variants.*"] = { - -- topright = -0.15, - -- bottomright = -0.15, - -- }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.2, - bottomright = -0.2, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + -- ["0x7D.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.2, bottomright = -0.2 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, @@ -106,23 +95,21 @@ return { ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, - - }, }, - -- 0xFEOO should be chancery style, if present { - tweak = "variants", - kind = "script", - -- feature = false, -- use the saved ones (see typescript) - selector = 0xFE00, - }, - -- 0xFEO1 should be roundhand style, if present - { - tweak = "variants", - kind = "script", - feature = "ss01",-- this changes to roundhand style for stixtwo - selector = 0xFE01, + tweak = "replacealphabets", + list = { + { + source = "uppercasescript", + target = "uppercasecalligraphic", + }, + { + source = "uppercasescript", + target = "uppercasescript", + feature = "ss01", + }, + }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent -- and then need to tweak the width (which is auto set because it was zero with a large @@ -138,9 +125,9 @@ return { { tweak = "dimensions", list = { - [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat - [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde - [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve + [0x00302] = { width = 1.2, anchor = 1.10, xoffset = .05 }, -- widehat + [0x00303] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widetilde + [0x00306] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widebreve [0x0030C] = { width = 1.4, anchor = 1.20, xoffset = .10 }, -- widecheck }, }, @@ -149,20 +136,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + [0x020DB] = { yoffset = 0.025, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -171,13 +156,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { - tweak = "fixprimes", - scale = 1, - -- smaller = true, - factor = 1, - }, { tweak = "checkspacing", }, @@ -204,21 +182,21 @@ return { tweak = "addfourier", variant = 1, }, -{ - tweak = "addparts", - list = { - [0x21F4] = { - horizontal = true, - template = 0x2192, - sequence = { - { glyph = "first", factor = 2 }, - { glyph = 0x2022, }, - { glyph = "first", factor = 2 }, - { glyph = "last" }, - } - } - } -}, + { + tweak = "addparts", + list = { + [0x21F4] = { + horizontal = true, + template = 0x2192, + sequence = { + { glyph = "first", factor = 2 }, + { glyph = 0x2022, }, + { glyph = "first", factor = 2 }, + { glyph = "last" }, + } + } + } + }, }, }, bigslots = { @@ -226,5 +204,3 @@ return { }, }, } - - diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg index c5bcb3e84..6a54535df 100644 --- a/tex/context/fonts/mkiv/termes-math.lfg +++ b/tex/context/fonts/mkiv/termes-math.lfg @@ -17,11 +17,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- When set this will bypass the italic correction hackery! local integral_variants = { bottomright = -0.20 } --- local integral_top = { topright = 0.05 } local integral_bottom = { bottomright = -0.30 } +local common = fonts.goodies.load("common-math.lfg") +local presets = common.mathematics.tweaks.presets return { name = "termes-math", @@ -35,16 +35,16 @@ return { NoLimitSubFactor = 900, AccentTopShiftUp = -15, FlattenedAccentTopShiftUp = -15, - -- AccentExtendMargin = 50, + -- AccentExtendMargin = 50, -- AccentBaseHeight = 0, AccentBaseDepth = 50, RadicalDegreeBottomRaisePercent = 60, - RadicalRuleThickness = 46, -- 52 in font + RadicalRuleThickness = 46, -- 52 in font DelimiterPercent = 90, DelimiterShortfall = 400, DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) - PrimeRaisePercent = 60, -- 50 default - PrimeRaiseComposedPercent = 10, -- 25 default + PrimeRaisePercent = 60, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default }, tweaks = { aftercopying = { @@ -53,81 +53,45 @@ return { expected = "Version 1.543", }, { - tweak = "dimensions", - list = { - [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b - [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- d - [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e - [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h - [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k - [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f - [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j - [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p - [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q - [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- w - [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \gamma - [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda - [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron - [0x1D70F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \tau - }, + tweak = "fixprimes", + scale = 0.85, + -- smaller = true, + factor = 0.95, + }, + { + tweak = "addmirrors", }, + presets.matheulercalligraphic { rscale = 0.95 }, + presets.mathrsfscript { rscale = 0.95 }, + presets.mathxitsarabic { rscale = 0.88 }, + presets.moveitalics { correct = true }, { tweak = "kerns", list = { - [0x2F] = { - topleft = -0.2, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.2, - }, - - - ["0x7D.parts.top"] = { - topright = -0.15, - }, -- right brace top - ["0x7D.parts.bottom"] = { - bottomright = -0.15, - }, -- right brace bottom - ["0x7D.variants.*"] = { - topright = -0.1, - bottomright = -0.1, - }, -- right brace variants - ["0x29.parts.top"] = { - topright = -0.1, - }, -- right parenthesis top - ["0x29.parts.bottom"] = { - bottomright = -0.1, - }, -- right parenthesis bottom - ["0x29.variants.*"] = { - topright = -0.15, - bottomright = -0.15, - }, -- right parenthesis variants - ["0x221A.parts.top"] = { - topright = 0.2, - }, -- right radical top - ["0x221A.parts.bottom"] = { - bottomright = 0.2, - }, -- right radical bottom - ["0x221A.variants.*"] = { - topright = 0.2, - bottomright = 0.2, - }, -- right radical variants - - -- angle - [0x27E9] = { topright = -0.1, bottomright = -0.1 }, - ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - [0x27EB] = { topright = -0.1, bottomright = -0.1 }, - ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, - - ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, - ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, - ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, - ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom, - ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom, - ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom, - ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, - ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, - ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, + [0x002F] = { topleft = -0.2, bottomright = -0.2 }, + ["0x7D.parts.top"] = { topright = -0.15, }, -- right brace top + ["0x7D.parts.bottom"] = { bottomright = -0.15 }, -- right brace bottom + ["0x7D.variants.*"] = { topright = -0.1, bottomright = -0.1 }, -- right brace variants + ["0x29.parts.top"] = { topright = -0.1, }, -- right parenthesis top + ["0x29.parts.bottom"] = { bottomright = -0.1 }, -- right parenthesis bottom + ["0x29.variants.*"] = { topright = -0.15, bottomright = -0.15 }, -- right parenthesis variants + ["0x221A.parts.top"] = { topright = 0.2, }, -- right radical top + ["0x221A.parts.bottom"] = { bottomright = 0.2 }, -- right radical bottom + ["0x221A.variants.*"] = { topright = 0.2, bottomright = 0.2 }, -- right radical variants + [0x27E9] = { topright = -0.1, bottomright = -0.1 }, -- angle + ["0x27E9.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + [0x27EB] = { topright = -0.1, bottomright = -0.1 }, + ["0x27EB.variants.*"] = { topright = -0.2, bottomright = -0.2 }, + -- + ["0x222B.variants.*"] = integral_variants, ["0x222B.parts.top"] = integral_top, ["0x222B.parts.bottom"] = integral_bottom, + ["0x222C.variants.*"] = integral_variants, ["0x222C.parts.top"] = integral_top, ["0x222C.parts.bottom"] = integral_bottom, + ["0x222D.variants.*"] = integral_variants, ["0x222D.parts.top"] = integral_top, ["0x222D.parts.bottom"] = integral_bottom, + ["0x222E.variants.*"] = integral_variants, ["0x222E.parts.top"] = integral_top, ["0x222E.parts.bottom"] = integral_bottom, + ["0x222F.variants.*"] = integral_variants, ["0x222F.parts.top"] = integral_top, ["0x222F.parts.bottom"] = integral_bottom, + ["0x2230.variants.*"] = integral_variants, ["0x2230.parts.top"] = integral_top, ["0x2230.parts.bottom"] = integral_bottom, + ["0x2231.variants.*"] = integral_variants, ["0x2231.parts.top"] = integral_top, ["0x2231.parts.bottom"] = integral_bottom, + ["0x2232.variants.*"] = integral_variants, ["0x2232.parts.top"] = integral_top, ["0x2232.parts.bottom"] = integral_bottom, + ["0x2233.variants.*"] = integral_variants, ["0x2233.parts.top"] = integral_top, ["0x2233.parts.bottom"] = integral_bottom, }, }, -- Accents are a mess. We migrate the extensibles from the combiners to the base accent @@ -155,20 +119,18 @@ return { { tweak = "dimensions", list = { - -- here we want to apply to all - -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 - -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 - -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 - -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC - -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 - -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA - -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 - - -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF - - -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 - -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 - -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) + -- here we want to apply to all + -- [0x00300] = { yoffset = -0.02, height = .95, all = true }, -- widegrave : 0x0060 + -- [0x00301] = { yoffset = -0.02, height = .95, all = true }, -- wideacute : 0x00B4 + -- [0x00302] = { yoffset = -0.03, height = .95, all = true }, -- widehat : 0x02C6 + -- [0x00303] = { yoffset = -0.02, height = .95, all = true }, -- widetilde : 0x02DC + -- [0x00306] = { yoffset = -0.03, height = .95, all = true }, -- widebre : 0x02D8 + -- [0x0030A] = { yoffset = 0.00, height = .95, all = true }, -- widering : 0x02DA + -- [0x0030C] = { yoffset = -0.03, height = .95, all = true }, -- widecheck : 0x02C7 + -- [0x00304] = { yoffset = -0.05, height = .95, all = true }, -- widebar : 0x00AF + -- [0x00307] = { yoffset = -0.03, height = .95, all = true }, -- widedot : 0x02D9 + -- [0x00308] = { yoffset = -0.03, height = .95, all = true }, -- wideddot : 0x00A8 + -- [0x020DB] = { yoffset = -0.015, height = .95, all = true }, -- widedddot : 0x20DB (self) }, }, -- We now copy these to the not wide slots so that we can set these to stretch as well, @@ -177,13 +139,6 @@ return { tweak = "copyaccents", }, -- So far for the accents. - - { - tweak = "fixprimes", - scale = 0.85, - -- smaller = true, - factor = 0.95, - }, { tweak = "checkspacing", }, @@ -225,3 +180,25 @@ return { kerns = kerns, }, } + + + -- Do a testrun with hats on these: + -- { + -- tweak = "dimensions", + -- list = { + -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.3 }, -- b + -- [0x1D451] = { width = 1, italic = 0, anchor = 0.8 }, -- d + -- [0x1D452] = { width = 1, italic = 0, anchor = 0.9 }, -- e + -- [0x0210E] = { width = 1, italic = 0, anchor = 1.3 }, -- h + -- [0x1D458] = { width = 1, italic = 0, anchor = 1.3 }, -- k + -- [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f + -- [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j + -- [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p + -- [0x1D45E] = { width = 1, italic = 0, anchor = 0.9 }, -- q + -- [0x1D464] = { width = 1, italic = 0, anchor = 1.1 }, -- w + -- [0x1D6FE] = { width = 1, italic = 0, anchor = 1.1 }, -- \gamma + -- [0x1D706] = { width = 1, italic = 0, anchor = 1.05 }, -- \lambda + -- [0x1D70A] = { width = 1, italic = 0, anchor = 1.2 }, -- \omicron + -- [0x1D70F] = { width = 1, italic = 0, anchor = 1.05 }, -- \tau + -- }, + -- }, diff --git a/tex/context/fonts/mkiv/type-imp-concrete.mkiv b/tex/context/fonts/mkiv/type-imp-concrete.mkiv index 72b0141a5..5e4e6bc76 100644 --- a/tex/context/fonts/mkiv/type-imp-concrete.mkiv +++ b/tex/context/fonts/mkiv/type-imp-concrete.mkiv @@ -1,50 +1,62 @@ +%D \module +%D [ file=type-imp-erewhon, +%D version=2022.30.09, % a bit older +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=\TEX Gyre Fonts, +%D author=Mikael Sundqvist, +%D date=\currentdate, +%D copyright={\CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + %\loadtypescriptfile[texgyre] %\resetfontfallback [concrete-euler-fix] %\definefontfallback[concrete-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes] - \starttypescriptcollection[concrete] %\definefontfeature[default-slanted-concrete][default][slant=.2] %\definefontfeature[none-slanted-concrete] [none] [slant=.2] \starttypescript [\s!serif] [concrete-serif] - \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default] - \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default] - \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete] - \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldSlanted][\s!file:cmunobx] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!Serif] [\s!file:cmunorm] [\s!features=\s!default] + \definefontsynonym [\s!SerifItalic] [\s!file:cmunoti] [\s!features=\s!default] + \definefontsynonym [\s!SerifSlanted] [\s!file:cmunorm] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!SerifBold] [\s!file:cmunobx] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldItalic] [\s!file:cmunobi] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldSlanted] [\s!file:cmunobx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!sans] [concrete-sans] - \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default] - \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default] - \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete] - \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!Sans] [\s!file:cmunss] [\s!features=\s!default] + \definefontsynonym [\s!SansItalic] [\s!file:cmunsi] [\s!features=\s!default] + \definefontsynonym [\s!SansSlanted] [\s!file:cmunss] [\s!features=default-slanted-concrete] + \definefontsynonym [\s!SansBold] [\s!file:cmunsx] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldItalic] [\s!file:cmunso] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldSlanted] [\s!file:cmunsx] [\s!features=default-slanted-concrete] \stoptypescript \starttypescript [\s!mono] [concrete-mono] - \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none] - \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none] - \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none] - \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none] - \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none] - \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete] + \definefontsynonym [\s!Mono] [\s!file:cmuntt] [\s!features=\s!none] + \definefontsynonym [\s!MonoItalic] [\s!file:cmunit] [\s!features=\s!none] + \definefontsynonym [\s!MonoSlanted] [\s!file:cmunst] [\s!features=\s!none] + \definefontsynonym [\s!MonoBold] [\s!file:cmuntb] [\s!features=\s!none] + \definefontsynonym [\s!MonoBoldItalic] [\s!file:cmuntx] [\s!features=\s!none] + \definefontsynonym [\s!MonoBoldSlanted] [\s!file:cmuntb] [\s!features=none-slanted-concrete] \stoptypescript \starttypescript [\s!math] [concrete-math] [\s!name] \loadfontgoodies[concrete-math] - \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=concrete-math] + \definefontsynonym[\s!MathRoman] [\s!file:Concrete-Math.otf] [\s!features={\s!math\mathsizesuffix,mathextra,concrete:mathextra},\s!goodies=concrete-math] \stoptypescript \starttypescript [concrete] \definetypeface [concrete] [\s!rm] [\s!serif] [concrete-serif] [\s!default] - \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default] - \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default] - \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default] + \definetypeface [concrete] [\s!ss] [\s!sans] [concrete-sans] [\s!default] + \definetypeface [concrete] [\s!tt] [\s!mono] [concrete-mono] [\s!default] + \definetypeface [concrete] [\s!mm] [\s!math] [concrete-math] [\s!default] \quittypescriptscanning \stoptypescript diff --git a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv index b8efcd7f9..8f38fb8b0 100644 --- a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv +++ b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv @@ -1,44 +1,56 @@ +%D \module +%D [ file=type-imp-erewhon, +%D version=2022.30.09, % a bit older +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=\TEX Gyre Fonts, +%D author=Mikael Sundqvist, +%D date=\currentdate, +%D copyright={\CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + %\loadtypescriptfile[texgyre] -%\resetfontfallback [erewhon-euler-fix] +%\resetfontfallback [erewhon-euler-fix] %\definefontfallback[erewhon-euler-fix][texgyrepagella-math] [0x022EE,0x022F0,0x022F1,0x02661,0x02220][force=yes] - \starttypescriptcollection[erewhon] %\definefontfeature[default-slanted-erewhon][default][slant=.2] %\definefontfeature[none-slanted-erewhon] [none] [slant=.2] \starttypescript [\s!serif] [erewhon-serif] - \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default] - \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default] - \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted] [\s!features=\s!default] - \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default] - \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default] + \definefontsynonym [\s!Serif] [\s!file:Erewhon-Regular] [\s!features=\s!default] + \definefontsynonym [\s!SerifItalic] [\s!file:Erewhon-Italic] [\s!features=\s!default] + \definefontsynonym [\s!SerifSlanted] [\s!file:Erewhon-RegularSlanted][\s!features=\s!default] + \definefontsynonym [\s!SerifBold] [\s!file:Erewhon-Bold] [\s!features=\s!default] + \definefontsynonym [\s!SerifBoldItalic] [\s!file:Erewhon-BoldItalic] [\s!features=\s!default] \definefontsynonym [\s!SerifBoldSlanted][\s!file:Erewhon-BoldSlanted] [\s!features=\s!default] \stoptypescript \starttypescript [\s!sans] [cabin-sans] - \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default] - \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default] - \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default] - \definefontsynonym [\s!SansBoldItalic] [\s!file:Cabin-SemiBoldItalic] [\s!features=\s!default] + \definefontsynonym [\s!Sans] [\s!file:Cabin-Regular] [\s!features=\s!default] + \definefontsynonym [\s!SansItalic] [\s!file:Cabin-Italic] [\s!features=\s!default] + \definefontsynonym [\s!SansBold] [\s!file:Cabin-SemiBold] [\s!features=\s!default] + \definefontsynonym [\s!SansBoldItalic][\s!file:Cabin-SemiBoldItalic][\s!features=\s!default] \stoptypescript \starttypescript [\s!mono] [inconsolata-mono] - \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular] [\s!features=\s!none] - \definefontsynonym [\s!MonoBold] [\s!file:Inconsolatazi4-Bold] [\s!features=\s!none] + \definefontsynonym [\s!Mono] [\s!file:Inconsolatazi4-Regular][\s!features=\s!none] + \definefontsynonym [\s!MonoBold][\s!file:Inconsolatazi4-Bold] [\s!features=\s!none] \stoptypescript \starttypescript [\s!math] [erewhon-math] [\s!name] \loadfontgoodies[erewhon-math] - \definefontsynonym[\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=erewhon-math] + \definefontsynonym [\s!MathRoman] [\s!file:Erewhon-Math.otf] [\s!features={\s!math\mathsizesuffix,erewhon:mathextra,mathextra},\s!goodies=erewhon-math] \stoptypescript \starttypescript [erewhon] - \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default] - \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default] + \definetypeface [erewhon] [\s!rm] [\s!serif] [erewhon-serif] [\s!default] + \definetypeface [erewhon] [\s!ss] [\s!sans] [cabin-sans] [\s!default] \definetypeface [erewhon] [\s!tt] [\s!mono] [inconsolata-mono] [\s!default] [\s!rscale=1.1] - \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default] + \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default] \quittypescriptscanning \stoptypescript diff --git a/tex/context/fonts/mkiv/type-imp-euler.mkiv b/tex/context/fonts/mkiv/type-imp-euler.mkiv index 00df63458..1aea88aae 100644 --- a/tex/context/fonts/mkiv/type-imp-euler.mkiv +++ b/tex/context/fonts/mkiv/type-imp-euler.mkiv @@ -66,15 +66,11 @@ \stoptypescript \starttypescript [\s!math] [euleroverpagella] [\s!name] - \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella% - ,\s!goodies=pagella-with-euler-math% - ] + \definefontsynonym [MathRoman] [texgyrepagella-math] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=euleroverpagella,\s!goodies=pagella-with-euler-math] \stoptypescript \starttypescript [\s!math] [pagellaovereuler] [\s!name] - \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler% - ,\s!goodies=euler-with-pagella-math% - ] + \definefontsynonym [MathRoman] [\s!file:euler.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!fallbacks=pagellaovereuler,\s!goodies=euler-with-pagella-math] \stoptypescript \starttypescript [pagella-with-euler] diff --git a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv index cf5052c82..e8e8e353b 100644 --- a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv @@ -181,8 +181,8 @@ \starttypescript [\s!math] [modern,latin-modern] \loadfontgoodies[lm] - \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,mathextra},\s!goodies=lm] - \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math-bold,lm-math,mathextra},\s!goodies=lm] + \definefontsynonym [LMMathRoman-Regular] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math,mathextra},\s!goodies=lm] + \definefontsynonym [LMMathRoman-Bold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm:mathextra,lm-math-bold,lm-math,mathextra},\s!goodies=lm] \stoptypescript \starttypescript [modern-designsize-virtual] diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv index 1c9788a98..73f7c4dbf 100644 --- a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv @@ -50,7 +50,7 @@ \starttypescript [\s!math][newcomputermodern] [\s!name] % \loadfontgoodies[newcomputermodern-math] ,\s!goodies=newcomputermodern-math \definefontsynonym[\s!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=lm] - \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}\s!goodies=lm] + \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra},\s!goodies=lm] \stoptypescript \starttypescript [\s!serif] [newcomputermodern-book] [\s!name] diff --git a/tex/context/fonts/mkiv/type-imp-stix.mkiv b/tex/context/fonts/mkiv/type-imp-stix.mkiv index b76b1d09b..ed2b63909 100644 --- a/tex/context/fonts/mkiv/type-imp-stix.mkiv +++ b/tex/context/fonts/mkiv/type-imp-stix.mkiv @@ -35,32 +35,11 @@ \starttypescriptcollection[stix] - % version one - - \starttypescript [\s!math] [stix] [\s!name] - \definefontsynonym[MathRoman][\s!file:stixmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra}] - \stoptypescript - - \starttypescript [\s!serif] [stix] [\s!name] - \setups[\s!font:\s!fallback:\s!serif] - \definefontsynonym[\s!Serif] [\s!file:stix-regular.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifBold] [\s!file:stix-bold.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifItalic] [\s!file:stix-italic.otf] [\s!features=\s!default] - \definefontsynonym[\s!SerifBoldItalic][\s!file:stix-bolditalic.otf][\s!features=\s!default] - \stoptypescript - - \starttypescript[stix] - \definetypeface [stix] [\s!rm] [\s!serif] [stix] [\s!default] - \definetypeface [stix] [\s!mm] [\s!math] [stix] [\s!default] - \stoptypescript - - % version two - - \starttypescript [\s!math] [stixtwo] [\s!name] - \definefontsynonym[MathRoman][\s!file:stixtwomath-regular.otf] [\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math] + \starttypescript [\s!math] [stix,stixtwo,xits] [\s!name] + \definefontsynonym[\s!MathRoman][\s!file:stixtwomath-regular.otf][\s!features={\s!math\mathsizesuffix,stixtwomath,mathextra},\s!goodies=stix-two-math] \stoptypescript - \starttypescript [\s!serif] [stixtwo] [\s!name] + \starttypescript [\s!serif] [stix,stixtwo,xits] [\s!name] \setups[\s!font:\s!fallback:\s!serif] \definefontsynonym[\s!Serif] [\s!file:stixtwotext-regular.otf] [\s!features=\s!default] \definefontsynonym[\s!SerifBold] [\s!file:stixtwotext-bold.otf] [\s!features=\s!default] @@ -68,11 +47,11 @@ \definefontsynonym[\s!SerifBoldItalic][\s!file:stixtwotext-bolditalic.otf][\s!features=\s!default] \stoptypescript - \starttypescript[stixtwo] + \starttypescript[stix,stixtwo,xits] \definetypeface [\typescriptone] [\s!rm] [\s!serif] [stixtwo] [\s!default] \definetypeface [\typescriptone] [\s!ss] [\s!serif] [stixtwo] [\s!default] \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.895] - \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [stixtwo] [\s!default] [\s!direction=\s!both] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv index 24b982bb5..c6b0ab28b 100644 --- a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv +++ b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv @@ -229,7 +229,14 @@ \stoptypescriptcollection -% tricky: we cannot mix now as the file is loaded only once +% We no longer support tx and px in LMTX. These fonts were used in the transition from +% traditional (type one) fonts to the new gyre fonts. The LMTX distribution no longer +% ships these fonts anyway. + +\ifcase\contextlmtxmode \else + \disablemode[pxmath] + \disablemode[txmath] +\fi \startmode[txmath] @@ -252,8 +259,8 @@ \starttypescript [\s!math][times,termes][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-termes-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=termes-math] - \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes-math-bold,mathextra},\s!goodies=termes-math] + \definefontsynonym[\s!MathRoman] [file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,mathextra},\s!goodies=termes-math] + \definefontsynonym[\s!MathRomanBold][file:texgyretermes-math.otf][\s!features={\s!math\mathsizesuffix,termes:mathextra,termes-math-bold,mathextra},\s!goodies=termes-math] \stoptypescript \stoptypescriptcollection @@ -281,8 +288,8 @@ \starttypescript [\s!math][palatino,pagella][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-pagella-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=pagella-math] - \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella-math-bold,mathextra},\s!goodies=pagella-math] + \definefontsynonym[\s!MathRoman] [file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,mathextra},\s!goodies=pagella-math] + \definefontsynonym[\s!MathRomanBold][file:texgyrepagella-math.otf][\s!features={\s!math\mathsizesuffix,pagella:mathextra,pagella-math-bold,mathextra},\s!goodies=pagella-math] \stoptypescript \stoptypescriptcollection @@ -294,8 +301,8 @@ \starttypescript [\s!math][bookman,bonum][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-bonum-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=bonum-math] - \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum-math-bold,mathextra},\s!goodies=bonum-math] + \definefontsynonym[\s!MathRoman] [file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,mathextra},\s!goodies=bonum-math] + \definefontsynonym[\s!MathRomanBold][file:texgyrebonum-math.otf][\s!features={\s!math\mathsizesuffix,bonum:mathextra,bonum-math-bold,mathextra},\s!goodies=bonum-math] \stoptypescript \stoptypescriptcollection @@ -305,8 +312,8 @@ \starttypescript [\s!math][schoolbook,schola][\s!all] % \loadfontgoodies[texgyre] % \definefontsynonym[\s!MathRoman][file:texgyre-schola-math-regular.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=texgyre] - \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=schola-math] - \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola-math-bold,mathextra},\s!goodies=schola-math] + \definefontsynonym[\s!MathRoman] [file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,mathextra},\s!goodies=schola-math] + \definefontsynonym[\s!MathRomanBold][file:texgyreschola-math.otf][\s!features={\s!math\mathsizesuffix,schola:mathextra,schola-math-bold,mathextra},\s!goodies=schola-math] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-xits.mkiv b/tex/context/fonts/mkiv/type-imp-xits.mkiv index f2d3e83c3..ce8d4209d 100644 --- a/tex/context/fonts/mkiv/type-imp-xits.mkiv +++ b/tex/context/fonts/mkiv/type-imp-xits.mkiv @@ -25,10 +25,10 @@ \starttypescript [\s!math] [xits,xitsbidi] [\s!name] \loadfontgoodies[xits-math] - \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math] + \definefontsynonym[\s!MathRoman ][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRoman L2R][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRoman R2L][\s!file:xitsmath-regular.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math] - \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix,mathextra,xitsmath},\s!goodies=xits-math] + \definefontsynonym[\s!MathRomanBold ][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix ,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRomanBold L2R][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-l2r,mathextra,xitsmath},\s!goodies=xits-math] \definefontsynonym[\s!MathRomanBold R2L][\s!file:xitsmath-bold.otf] [\s!features={\s!math\mathsizesuffix-r2l,mathextra,xitsmath},\s!goodies=xits-math] \stoptypescript diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg index cf3050369..374f03a0e 100644 --- a/tex/context/fonts/mkiv/xits-math.lfg +++ b/tex/context/fonts/mkiv/xits-math.lfg @@ -1,3 +1,7 @@ +-- When testing XITS in LMTX one has to do this: +-- +-- \definefilesynonym [type-imp-xits.mkiv] [type-imp-xits.mkiv] + return { name = "xits-math", version = "1.00", @@ -15,6 +19,25 @@ return { }, }, mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + FlattenedAccentTopShiftUp = 0, -- now also set, the wide ones (so we can move in one go) + -- AccentExtendMargin = 50, + RadicalDegreeBottomRaisePercent = 65, + -- RadicalKernBeforeDegree = 500, + RadicalKernAfterDegree = -500, + RadicalVerticalGap = 10, + -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1800 in font + PrimeRaisePercent = 75, -- 50 default + PrimeRaiseComposedPercent = 10, -- 25 default + + }, tweaks = { aftercopying = { { @@ -69,6 +92,10 @@ return { { tweak = "addrules", }, + { + tweak = "setoptions", + set = { "ignorekerndimensions" } + }, }, }, alternates = { diff --git a/tex/context/modules/mkiv/s-fonts-charts.mkiv b/tex/context/modules/mkiv/s-fonts-charts.mkiv index b7fcc9f9e..6fe58c899 100644 --- a/tex/context/modules/mkiv/s-fonts-charts.mkiv +++ b/tex/context/modules/mkiv/s-fonts-charts.mkiv @@ -172,10 +172,10 @@ \starttext -% \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all] + \showfontchart[filename=texgyredejavu-math.otf,page=yes,option=all] - \showfontchart[filename=danlan.otf] % ,page=yes,option=all] - \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all] +% \showfontchart[filename=danlan.otf] % ,page=yes,option=all] +% \showfontchart[filename=danlan-bold.otf] % ,page=yes,option=all] % \showfontchart[filename=aegean,page=yes] % \showfontchart[filename=veramono.ttf,page=yes] diff --git a/tex/context/modules/mkiv/s-fonts-coverage.mkiv b/tex/context/modules/mkiv/s-fonts-coverage.mkiv index 2d1870842..a4ae9d211 100644 --- a/tex/context/modules/mkiv/s-fonts-coverage.mkiv +++ b/tex/context/modules/mkiv/s-fonts-coverage.mkiv @@ -31,16 +31,18 @@ \continueifinputfile{s-fonts-coverage.mkiv} +% \usemodule[fonts-coverage] + \usemodule[art-01] \starttext - \showfontcomparison - [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf}, - pattern=ogonek] - % \showfontcomparison -% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}] +% [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,texgyrebonum-regular.otf}, +% pattern=ogonek] + + \showfontcomparison + [list={texgyrepagella-regular.otf,texgyretermes-regular.otf,nimbusroman-regular.afm}] \page diff --git a/tex/context/modules/mkiv/s-fonts-shapes.lua b/tex/context/modules/mkiv/s-fonts-shapes.lua index 868c22da1..d55b1198e 100644 --- a/tex/context/modules/mkiv/s-fonts-shapes.lua +++ b/tex/context/modules/mkiv/s-fonts-shapes.lua @@ -83,16 +83,21 @@ local function showglyphshape(specification) local characters = tfmdata.characters local descriptions = tfmdata.descriptions local parameters = tfmdata.parameters + local tfmfactor = parameters.scaledpoints/10 +-- inspect(tfmdata.parameters) +-- inspect(tfmdata.properties) local anchors = fonts.helpers.collectanchors(tfmdata) - local function showonecharacter(unicode) + local function showonecharacter(unicode,krn,tight) local c = characters [unicode] local d = descriptions[unicode] if c and d then local factor = (parameters.size/parameters.units)*((7200/7227)/65536) local llx, lly, urx, ury = unpack(d.boundingbox) + local height = ury + local depth = lly llx, lly, urx, ury = llx*factor, lly*factor, urx*factor, ury*factor - local width = (d.width or 0)*factor + local width = (d.width or 0)*factor context.start() context.dontleavehmode() context.obeyMPboxdepth() @@ -110,76 +115,52 @@ local function showglyphshape(specification) context('draw boundingbox p withcolor .2white withpen pencircle scaled .065bp ;') context("defaultscale := 0.05 ; ") -- inefficient but non critical - local slant = { - function(v,dx,dy,txt,xsign,ysign,loc,labloc) - local n = #v - if n > 0 then - local l = { } - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) - end - context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[1].kern*factor,lly,dx,dy,l[1]) - context("draw laddered (%..t) withcolor .5white ;",l) -- why not "--" - context("draw ((%s,%s) shifted (%s,%s))--%s dashed (evenly scaled 1/16) withcolor .5white;", xsign*v[#v].kern*factor,ury,dx,dy,l[#l]) - for i=1,n do - context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i]) + function slant(v,dx,dy,txt,xsign,ysign,loc,labloc,shift) + local n = #v + if n > 0 then + local l = { } + local t = { } + for i=1,n do + local c = v[i] + local h = c.height or height or 0 + local d = depth or 0 + local k = c.kern or 0 + if i == 1 then + l[1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,d*factor,dx,dy) + t[1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,d,l[1],shift,shift); end + l[i+1] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) + t[i+1] = formatters['draw textext.%s("\\tttf(%s,%s)") scaled .025 shifted %s shifted (%i/4,%i/3);'](labloc,k,h,l[i+1],shift,shift); end - end, - function(v,dx,dy,txt,xsign,ysign,loc,labloc) - local n = #v - if n > 0 then - local l = { } - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - l[i] = formatters["((%s,%s) shifted (%s,%s))"](xsign*k*factor,ysign*h*factor,dx,dy) - end - if loc == "top" then - context('label.%s("\\type{%s}",%s shifted (0,-1bp)) ;',loc,txt,l[n]) - else - context('label.%s("\\type{%s}",%s shifted (0,2bp)) ;',loc,txt,l[1]) - end - for i=1,n do - local c = v[i] - local h = c.height or 0 - local k = c.kern or 0 - context('label.top("(%s,%s)",%s shifted (0,-2bp));',k,h,l[i]) - end + context("draw laddered (%--t) withcolor .5white ;",l) + for i=1,#l do + context("draw %s withcolor blue withpen pencircle scaled 2lw ;",l[i]) + context(t[i]) end - end, - } + end + end -- local math = d.math if math then local kerns = math.kerns if kerns then - for i=1,#slant do - local s = slant[i] - for k, v in next, kerns do - if k == "topright" then - -- s(v,width+italic,0,k,1,1,"top","ulft") - s(v,width,0,k,1,1,"top","ulft") - elseif k == "bottomright" then - s(v,width,0,k,1,1,"bot","lrt") - elseif k == "topleft" then - s(v,0,0,k,-1,1,"top","ulft") - elseif k == "bottomleft" then - s(v,0,0,k,-1,1,"bot","lrt") - end + for k, v in next, kerns do + if k == "topright" and (krn == "all" or krn == k) then + slant(v,width,0,k,1,1,"top","lrt",1) + elseif k == "bottomright" and (krn == "all" or krn == k) then + slant(v,width,0,k,1,1,"bot","ulft",-1) + elseif k == "topleft" and (krn == "all" or krn == k) then + slant(v,0,0,k,-1,1,"top","lrt",1) + elseif k == "bottomleft" and (krn == "all" or krn == k) then + slant(v,0,0,k,-1,1,"bot","ulft",-1) end end end - local accent = math.accent + local accent = math.topanchor or math.accent if accent and accent ~= 0 then local a = accent * factor - context('draw (%s,%s+1bp)--(%s,%s-1bp) withcolor blue;',a,ury,a,ury) - context('label.bot("\\type{%s}",(%s,%s+1bp));',"accent",a,ury) - context('label.top("%s",(%s,%s-1bp));',math.accent,a,ury) + context('draw (%s,%s+1/4)--(%s,%s-1/4) withcolor blue;',a,ury,a,ury) + context('draw textext.top("\\tttf%s") scaled .025 shifted (%s,%s+2/4);',accent,a,ury) end end -- @@ -215,7 +196,29 @@ local function showglyphshape(specification) context('label.rt("%s",(%s-2bp,%s-1bp));',italic,width+i,ury) end context('draw origin withcolor red withpen pencircle scaled 2lw;') - context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") + local kern = c.topright + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,ury) + end + local kern = c.bottomright + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',width+k,lly) + end + local kern = c.topleft + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,ury) + end + local kern = c.bottomleft + if kern and kern ~= 0 then + local k = kern * factor / tfmfactor + context('draw (%s,%s) withcolor "orange" withpen pencircle scaled .2 ;',-k,lly) + end + if not tight then + context("setbounds currentpicture to boundingbox currentpicture enlarged 1bp ;") + end context("currentpicture := currentpicture scaled 8 ;") context.stopMPcode() context.stop() @@ -226,16 +229,28 @@ local function showglyphshape(specification) fonts.helpers.nametoslot(specification.character) if unicode then - showonecharacter(unicode) + showonecharacter(unicode,"all",true) else context.modulefontsstartshowglyphshapes() for unicode, description in fonts.iterators.descriptions(tfmdata) do if unicode >= 0x110000 then break end + local kerns = specification.kerns + if kerns then + local k = description and description.math and description.math.kerns + if k then + if not (kerns == "all" or k[kerns]) then + goto DONE + end + else + goto DONE + end + end context.modulefontsstartshowglyphshape(unicode,description.name or "",description.index or 0) - showonecharacter(unicode) + showonecharacter(unicode,kerns,false) context.modulefontsstopshowglyphshape() + ::DONE:: end context.modulefontsstopshowglyphshapes() end diff --git a/tex/context/modules/mkiv/s-fonts-shapes.mkiv b/tex/context/modules/mkiv/s-fonts-shapes.mkiv index 7dd39c07d..97fcbfa6c 100644 --- a/tex/context/modules/mkiv/s-fonts-shapes.mkiv +++ b/tex/context/modules/mkiv/s-fonts-shapes.mkiv @@ -30,7 +30,7 @@ \startsetups module:showallglyphshapes:start \unexpanded\def\modulefontsstartshowglyphshape##1##2##3{ - \startTEXpage[\c!offset=\exheight] % ,\c!frame=\v!on] + \startTEXpage[\c!offset=\exheight]% ,\c!frame=\v!on] \edef\lastshownglyphshapefieldunicode{##1}% \edef\lastshownglyphshapefieldname {##2}% \edef\lastshownglyphshapefieldindex {##3}% @@ -106,8 +106,11 @@ % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{0xF0299} \stopTEXpage % \startTEXpage \ShowGlyphShape{simplenaskhi}{100bp}{NameMe.1190} \stopTEXpage - \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage - \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44A}\stopTEXpage +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:stixtwomath-regular.otf}{20bp}{0x1D44C}\stopTEXpage + +% \definefontfeature[tg][goodies=pagella-math] +% \startTEXpage[offset=0pt]\ShowGlyphShape{file:texgyrepagella-math.otf*tg}{20bp}{0x002F}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x00066}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{20bp}{0x1D453}\stopTEXpage @@ -126,7 +129,12 @@ % \startTEXpage[offset=0pt]\ShowGlyphShape{file:husayninotebold.ttf}{50bp}{0x006DD}\stopTEXpage % \startTEXpage[offset=0pt]\ShowGlyphShape{file:arabtype.ttf}{50bp}{0x0FCA1}\stopTEXpage -% \showallglyphshapes[name=name:cambria-math,size=100bp] +\showallglyphshapes[name=name:cambria-math,size=100bp,kerns=bottomright] +% \startTEXpage[offset=0pt]\ShowGlyphShape{name:cambria-math}{100bp}{0x1D6FD}\stopTEXpage + +% \showallglyphshapes[name=file:lucidabrightmathot,size=100bp,kerns=all] +% \showallglyphshapes[name=file:garamondmath,size=100bp,kerns=bottomright] + % \showallglyphshapes[name=name:arabtype,size=100bp] % \showallglyphshapes[name=file:husayninotebold.ttf,size=100bp] % \showallglyphshapes[name=name:dejavuserif,size=100bp] diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua index b634a203f..a967f7934 100644 --- a/tex/context/modules/mkiv/s-math-characters.lua +++ b/tex/context/modules/mkiv/s-math-characters.lua @@ -185,7 +185,7 @@ function moduledata.math.characters.showlist(specification) round(char.height or 0), round(char.depth or 0), round(char.italic or 0), - round(char.topaccent or 0) + round(char.topanchor or char.topaccent or 0) ) end if virtual and commands then diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c539d886c..c87c4ee52 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2022-09-16 14:39 +-- merge date : 2022-10-14 10:13 do -- begin closure to overcome local limits and interference @@ -13418,10 +13418,10 @@ do result.familyotherblues={ unpack(stack,1,top) } top=0 end+P("\10")/function() - result.strhw=stack[top] + result.stdhw=stack[top] top=0 end+P("\11")/function() - result.strvw=stack[top] + result.stdvw=stack[top] top=0 end+P("\13")/function() result.uniqueid=stack[top] @@ -13493,7 +13493,7 @@ do result.bluescale=stack[top] top=0 end+P("\10")/function() - result.bluesnap=stack[top] + result.blueshift=stack[top] top=0 end+P("\11")/function() result.bluefuzz=stack[top] @@ -13547,7 +13547,7 @@ do top=0 end ) - local remap={ + local remap_1={ ["\x00"]="00",["\x01"]="01",["\x02"]="02",["\x03"]="03",["\x04"]="04",["\x05"]="05",["\x06"]="06",["\x07"]="07",["\x08"]="08",["\x09"]="09",["\x0A"]="0.",["\x0B"]="0E",["\x0C"]="0E-",["\x0D"]="0",["\x0E"]="0-",["\x0F"]="0", ["\x10"]="10",["\x11"]="11",["\x12"]="12",["\x13"]="13",["\x14"]="14",["\x15"]="15",["\x16"]="16",["\x17"]="17",["\x18"]="18",["\x19"]="19",["\x1A"]="1.",["\x1B"]="1E",["\x1C"]="1E-",["\x1D"]="1",["\x1E"]="1-",["\x1F"]="1", ["\x20"]="20",["\x21"]="21",["\x22"]="22",["\x23"]="23",["\x24"]="24",["\x25"]="25",["\x26"]="26",["\x27"]="27",["\x28"]="28",["\x29"]="29",["\x2A"]="2.",["\x2B"]="2E",["\x2C"]="2E-",["\x2D"]="2",["\x2E"]="2-",["\x2F"]="2", @@ -13563,8 +13563,13 @@ do ["\xC0"]="E-0",["\xC1"]="E-1",["\xC2"]="E-2",["\xC3"]="E-3",["\xC4"]="E-4",["\xC5"]="E-5",["\xC6"]="E-6",["\xC7"]="E-7",["\xC8"]="E-8",["\xC9"]="E-9",["\xCA"]="E-.",["\xCB"]="E-E",["\xCC"]="E-E-",["\xCD"]="E-",["\xCE"]="E--",["\xCF"]="E-", ["\xD0"]="-0",["\xD1"]="-1",["\xD2"]="-2",["\xD3"]="-3",["\xD4"]="-4",["\xD5"]="-5",["\xD6"]="-6",["\xD7"]="-7",["\xD8"]="-8",["\xD9"]="-9",["\xDA"]="-.",["\xDB"]="-E",["\xDC"]="-E-",["\xDD"]="-",["\xDE"]="--",["\xDF"]="-", } - local p_last=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF")+R("\xF0\xFF") - local p_nibbles=P("\30")*Cs(((1-p_last)/remap)^0*(P(1)/remap))/function(n) + local remap_2={ + ["\x0F"]="0",["\x1F"]="1",["\x2F"]="2",["\x3F"]="3",["\x4F"]="4", + ["\x5F"]="5",["\x6F"]="6",["\x7F"]="7",["\x8F"]="8",["\x9F"]="9", + } + local p_last_1=S("\x0F\x1F\x2F\x3F\x4F\x5F\x6F\x7F\x8F\x9F\xAF\xBF") + local p_last_2=R("\xF0\xFF") + local p_nibbles=P("\30")*Cs(((1-(p_last_1+p_last_2))/remap_1)^0*(p_last_1/remap_2+p_last_2/""))/function(n) top=top+1 stack[top]=tonumber(n) or 0 end @@ -15378,6 +15383,8 @@ function readers.cff(f,fontdata,specification) cffinfo.bluefuzz=data.bluefuzz cffinfo.stdhw=data.stdhw cffinfo.stdvw=data.stdvw + cffinfo.stemsnaph=data.stemsnaph + cffinfo.stemsnapv=data.stemsnapv end end cleanup(data,dictionaries) @@ -18461,6 +18468,7 @@ do local noflookups=#lookups local lookupprefix=sub(what,2,2) local usedlookups=false + local allsteps={} for lookupid=1,noflookups do local lookup=lookups[lookupid] local lookuptype=lookup.type @@ -18495,6 +18503,7 @@ do steps[nofsteps]=step local rules=step.rules if rules then + allsteps[#allsteps+1]=step for i=1,#rules do local rule=rules[i] local before=rule.before @@ -18600,11 +18609,8 @@ do reported[name]=true end end - for i=lastsequence+1,nofsequences do - local sequence=sequences[i] - local steps=sequence.steps - for i=1,#steps do - local step=steps[i] + for i=1,#allsteps do + local step=allsteps[i] local rules=step.rules if rules then for i=1,#rules do @@ -18674,7 +18680,6 @@ do end end end - end for i,n in sortedhash(sublookupcheck) do local l=lookups[i] local t=l.type @@ -19097,7 +19102,7 @@ local function readmathglyphinfo(f,fontdata,offset) if not math then glyph.math={ accent=accent } else - math.accent=accent + math.accent=accent end end end @@ -21289,7 +21294,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_d local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf -otf.version=3.120 +otf.version=3.121 otf.cache=containers.define("fonts","otl",otf.version,true) otf.svgcache=containers.define("fonts","svg",otf.version,true) otf.pngcache=containers.define("fonts","png",otf.version,true) @@ -27329,12 +27334,8 @@ local trace_testruns=false registertracker("otf.testruns",function(v) trace_tes local forcediscretionaries=false local forcepairadvance=false local repeatablemultiples=context or false -directives.register("otf.forcediscretionaries",function(v) - forcediscretionaries=v -end) -directives.register("otf.forcepairadvance",function(v) - forcepairadvance=v -end) +directives.register("otf.forcediscretionaries",function(v) forcediscretionaries=v end) +directives.register("otf.forcepairadvance",function(v) forcepairadvance=v end) local report_direct=logs.reporter("fonts","otf direct") local report_subchain=logs.reporter("fonts","otf subchain") local report_chain=logs.reporter("fonts","otf chain") @@ -27356,7 +27357,6 @@ local setboth=nuts.setboth local getid=nuts.getid local getstate=nuts.getstate local getsubtype=nuts.getsubtype -local setsubtype=nuts.setsubtype local getchar=nuts.getchar local setchar=nuts.setchar local getdisc=nuts.getdisc @@ -27376,10 +27376,10 @@ local flushcomponents=components.flush local ischar=nuts.ischar local usesfont=nuts.usesfont local insertnodeafter=nuts.insertafter -local copy_node=nuts.copy -local copy_node_list=nuts.copylist -local remove_node=nuts.remove -local find_node_tail=nuts.tail +local copynode=nuts.copy +local copynodelist=nuts.copylist +local removenode=nuts.remove +local findnodetail=nuts.tail local flushnodelist=nuts.flushlist local flushnode=nuts.flushnode local endofmath=nuts.endofmath @@ -27389,7 +27389,6 @@ local setmetatableindex=table.setmetatableindex local nextnode=nuts.traversers.node local nodecodes=nodes.nodecodes local glyphcodes=nodes.glyphcodes -local disccodes=nodes.disccodes local glyph_code=nodecodes.glyph local glue_code=nodecodes.glue local disc_code=nodecodes.disc @@ -27398,8 +27397,7 @@ local dir_code=nodecodes.dir local par_code=nodecodes.par local lefttoright_code=nodes.dirvalues.lefttoright local righttoleft_code=nodes.dirvalues.righttoleft -local discretionarydisc_code=disccodes.discretionary -local ligatureglyph_code=glyphcodes.ligature +local discretionarydisc_code=nodes.disccodes.discretionary local a_noligature=attributes.private("noligature") local injections=nodes.injections local setmark=injections.setmark @@ -27490,7 +27488,7 @@ local function cref(dataset,sequence,index) return "no valid dataset" end local merged=sequence.merged and "merged " or "" - if index then + if index and index>1 then return formatters["feature %a, type %a, %schain lookup %a, index %a"]( dataset[4],sequence.type,merged,sequence.name,index) else @@ -27547,7 +27545,7 @@ end local function appenddisc(disc,list) local pre,post,replace,pretail,posttail,replacetail=getdisc(disc,true) local posthead=list - local replacehead=copy_node_list(list) + local replacehead=copynodelist(list) if post then setlink(posttail,posthead) else @@ -27574,7 +27572,6 @@ local function markstoligature(head,start,stop,char) end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,start) setlink(prev,base,next) flushcomponents(start) @@ -27612,7 +27609,6 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou end resetinjection(base) setchar(base,char) - setsubtype(base,ligatureglyph_code) setcomponents(base,comp) setlink(prev,base,next) if not discfound then @@ -27632,7 +27628,7 @@ local function toligature(head,start,stop,char,dataset,sequence,skiphash,discfou if trace_marks then logwarning("%s: keep ligature mark %s, gets index %s",pref(dataset,sequence),gref(char),getligaindex(start)) end - local n=copy_node(start) + local n=copynode(start) copyinjection(n,start) head,current=insertnodeafter(head,current,n) elseif trace_marks then @@ -27696,57 +27692,57 @@ end local function multiple_glyphs(head,start,multiple,skiphash,what,stop) local nofmultiples=#multiple if nofmultiples>0 then + local first=start resetinjection(start) setchar(start,multiple[1]) if nofmultiples>1 then - local sn=getnext(start) - for k=2,nofmultiples do - local n=copy_node(start) + for i=2,nofmultiples do + local n=copynode(start) resetinjection(n) - setchar(n,multiple[k]) + setchar(n,multiple[i]) insertnodeafter(head,start,n) start=n end - if what~=true and repeatablemultiples then - local kind=type(what) - local m,f,l - if kind=="string" then - local what,n=string.match(what,"^repeat(.-)[:=](%d+)$") - if what=="middle" then - m=tonumber(n) - elseif what=="first" then - f=tonumber(n) - elseif what=="last" then - l=tonumber(n) - end - elseif kind=="table" then - m=what.middle - f=what.first - l=what.last - end - if f or m or l then - if m and m>1 and nofmultiples==3 then - local middle=getnext(first) - for i=2,m do - local n=copynode(middle) - resetinjection(n) - insertnodeafter(head,first,n) - end - end - if f and f>1 then - for i=2,f do - local n=copynode(first) - resetinjection(n) - insertnodeafter(head,first,n) - end - end - if l and l>1 then - for i=2,l do - local n=copynode(start) - resetinjection(n) - insertnodeafter(head,start,n) - start=n - end + end + if what~=true and repeatablemultiples then + local kind=type(what) + local m,f,l + if kind=="string" then + local what,n=string.match(what,"^repeat(.-)[:=](%d+)$") + if what=="middle" then + m=tonumber(n) + elseif what=="first" then + f=tonumber(n) + elseif what=="last" then + l=tonumber(n) + end + elseif kind=="table" then + m=what.middle + f=what.first + l=what.last + end + if f or m or l then + if m and m>1 and nofmultiples==3 then + local middle=getnext(first) + for i=2,m do + local n=copynode(middle) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if f and f>1 then + for i=2,f do + local n=copynode(first) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if l and l>1 then + for i=2,l do + local n=copynode(start) + resetinjection(n) + insertnodeafter(head,start,n) + start=n end end end @@ -27918,9 +27914,9 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip local prev=getprev(start) if stop then setnext(stop) - local copy=copy_node_list(start) + local copy=copynodelist(start) local tail=stop - local liat=find_node_tail(copy) + local liat=findnodetail(copy) if pre then setlink(liat,pre) end @@ -27931,7 +27927,7 @@ function handlers.gsub_ligature(head,start,dataset,sequence,ligature,rlmode,skip replace=start else setnext(start) - local copy=copy_node(start) + local copy=copynode(start) if pre then setlink(copy,pre) end @@ -28308,7 +28304,7 @@ function chainprocs.gsub_remove(head,start,stop,dataset,sequence,currentlookup,r if trace_chains then logprocess("%s: removing character %s",cref(dataset,sequence,chainindex),gref(getchar(start))) end - head,start=remove_node(head,start,true) + head,start=removenode(head,start,true) return head,getprev(start),true end function chainprocs.gsub_single(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash,chainindex) @@ -28821,7 +28817,7 @@ do if not userkern then local thekern=nuts.new("kern",1) local setkern=nuts.setkern userkern=function(k) - local n=copy_node(thekern) + local n=copynode(thekern) setkern(n,k) return n end @@ -28858,26 +28854,33 @@ local function setdiscchecked(d,pre,post,replace) setdisc(d,pre,post,replace) end local noflags={ false,false,false,false } -local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) +local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,where) local size=ck[5]-ck[4]+1 local chainlookups=ck[6] local done=false if chainlookups then if size==1 then local chainlookup=chainlookups[1] - for j=1,#chainlookup do - local chainstep=chainlookup[j] - local chainkind=chainstep.type - local chainproc=chainprocs[chainkind] - if chainproc then - local ok - head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) - if ok then - done=true + if chainlookup then + for j=1,#chainlookup do + local chainstep=chainlookup[j] + if chainstep then + local chainkind=chainstep.type + local chainproc=chainprocs[chainkind] + if chainproc then + local ok + head,start,ok=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,1) + if ok then + done=true + end + else + logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) + end + else + logprocess("%s: has an issue (1)",cref(dataset,sequence)) end - else - logprocess("%s: %s is not yet supported (1)",cref(dataset,sequence),chainkind) end + else end else local i=1 @@ -28902,20 +28905,24 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) if chainlookup then for j=1,#chainlookup do local chainstep=chainlookup[j] - local chainkind=chainstep.type - local chainproc=chainprocs[chainkind] - if chainproc then - local ok,n - head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) - if ok then - done=true - if n and n>1 and i+n>nofchainlookups then - i=size - break + if chainstep then + local chainkind=chainstep.type + local chainproc=chainprocs[chainkind] + if chainproc then + local ok,n + head,start,ok,n=chainproc(head,start,last,dataset,sequence,chainstep,rlmode,skiphash,i) + if ok then + done=true + if n and n>1 and i+n>nofchainlookups then + i=size + break + end end + else + logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) end else - logprocess("%s: %s is not yet supported (2)",cref(dataset,sequence),chainkind) + logprocess("%s: has an issue (2)",cref(dataset,sequence)) end end else @@ -28939,7 +28946,7 @@ local function chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) else done=true if trace_contexts then - logprocess("%s: skipping match",cref(dataset,sequence)) + logprocess("%s: skipping match @ %i",cref(dataset,sequence),where) end end end @@ -28966,6 +28973,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) local last=start local prev=getprev(start) local hasglue=false + local useddisc=nil + local usedstart=start local i=f while i<=l do local id=getid(current) @@ -29028,7 +29037,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) tail=prev setprev(current,sweepnode) else - tail=find_node_tail(head) + tail=findnodetail(head) end setnext(sweepnode,current) setprev(head) @@ -29139,13 +29148,13 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) head=lookaheaddisc end local pre,post,replace=getdisc(lookaheaddisc) - local new=copy_node_list(cf) + local new=copynodelist(cf) local cnew=new if pre then - setlink(find_node_tail(cf),pre) + setlink(findnodetail(cf),pre) end if replace then - local tail=find_node_tail(new) + local tail=findnodetail(new) setlink(tail,replace) end for i=1,insertedmarks do @@ -29159,14 +29168,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpre[lookaheaddisc] then local ok=false - cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck) + cf,start,ok=chainrun(cf,start,cl,dataset,sequence,rlmode,skiphash,ck,1) if ok then done=true end end if not notmatchreplace[lookaheaddisc] then local ok=false - new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,2) if ok then done=true end @@ -29177,6 +29186,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(lookaheaddisc,cf,post,new) end start=getprev(lookaheaddisc) + useddisc=lookaheaddisc sweephead[cf]=getnext(clast) or false sweephead[new]=getnext(cl) or false elseif backtrackdisc then @@ -29198,8 +29208,8 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setprev(cf) setnext(cl) local pre,post,replace,pretail,posttail,replacetail=getdisc(backtrackdisc,true) - local new=copy_node_list(cf) - local cnew=find_node_tail(new) + local new=copynodelist(cf) + local cnew=findnodetail(new) for i=1,insertedmarks do cnew=getprev(cnew) end @@ -29209,14 +29219,14 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) end if not notmatchpost[backtrackdisc] then local ok=false - cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck) + cf,start,ok=chainrun(cf,start,last,dataset,sequence,rlmode,skiphash,ck,3) if ok then done=true end end if not notmatchreplace[backtrackdisc] then local ok=false - new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck) + new,cnew,ok=chainrun(new,cnew,clast,dataset,sequence,rlmode,skiphash,ck,4) if ok then done=true end @@ -29237,30 +29247,55 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck) setdisc(backtrackdisc,pre,post,replace) end start=getprev(backtrackdisc) + useddisc=backtrackdisc sweephead[post]=getnext(clast) or false sweephead[replace]=getnext(last) or false else local ok=false - head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck) + head,start,ok=chainrun(head,start,last,dataset,sequence,rlmode,skiphash,ck,5) if ok then done=true end end - return head,start,done -end -local function chaintrac(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) - local rule=ck[1] - local lookuptype=ck[8] or ck[2] - local nofseq=#ck[3] - local first=ck[4] - local last=ck[5] - local char=getchar(start) - logwarning("%s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", - cref(dataset,sequence),rule,match and "matches" or "nomatch", - gref(char),first-1,last-first+1,nofseq-last,lookuptype, - discseen and "" or "no ",sweepnode and "" or "not ") + if useddisc and start~=usedstart then + start=getnext(start) + end + return head,start,done,useddisc +end +local chaintrac do + local level=0 + local last={} + chaintrac=function(head,start,dataset,sequence,rlmode,skiphash,ck,match,discseen,sweepnode) + if dataset then + level=level+1 + last[level]=start + local rule=ck[1] + local lookuptype=ck[8] or ck[2] + local nofseq=#ck[3] + local first=ck[4] + local last=ck[5] + local char=getchar(start) + logwarning("+ %i : %s: rule %s %s at char %s for (%s,%s,%s) chars, lookuptype %a, %sdisc seen, %ssweeping", + level,cref(dataset,sequence),rule,match and "matches" or "nomatch", + gref(char),first-1,last-first+1,nofseq-last,lookuptype, + discseen and "" or "no ",sweepnode and "" or "not ") + else + local what=start and "done" or "continue" + local where=head==last[level] and "same" or "different" + local char=getchar(head) + if char then + logwarning("- %i : %s at char %s, %s node",level,what,gref(char),where) + else + logwarning("- %i : %s, %s node",level,what,where) + end + level=level-1 + end + end end local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,skiphash) + if not contexts then + return head,start,false + end local sweepnode=sweepnode local sweeptype=sweeptype local postreplace @@ -29288,7 +29323,7 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s local ck=contexts[k] local seq=ck[3] local f=ck[4] -local last=start + local last=start if not startchar or not seq[f][startchar] then goto next end @@ -29399,7 +29434,6 @@ local last=start end end if f>1 then - if startprev then local prev=startprev if prereplace and prev==checkdisc then prev=getprev(sweepnode) @@ -29514,9 +29548,6 @@ local last=start else goto next end - else - goto next - end end if s>l then local current=last and getnext(last) @@ -29640,12 +29671,15 @@ local last=start if discseen or sweepnode then head,start,done=chaindisk(head,start,dataset,sequence,rlmode,skipped and skiphash,ck) else - head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck) + head,start,done=chainrun(head,start,last,dataset,sequence,rlmode,skipped and skiphash,ck,6) + end + if trace_contexts then + chaintrac(start,done) end if done then break end - ::next:: + ::next:: end if discseen then notmatchpre={} @@ -29662,15 +29696,26 @@ handlers.gpos_context=handle_contextchain local function chained_contextchain(head,start,stop,dataset,sequence,currentlookup,rlmode,skiphash) local steps=currentlookup.steps local nofsteps=currentlookup.nofsteps - if nofsteps>1 then - reportmoresteps(dataset,sequence) - end - local l=steps[1].coverage[getchar(start)] - if l then - return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + local char=getchar(start) + if nofsteps==1 then + local s=steps[1] + local l=s.coverage[char] + if l then + return handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + end else - return head,start,false + for i=1,nofsteps do + local s=steps[i] + local l=s.coverage[char] + if l then + local h,s,d=handle_contextchain(head,start,dataset,sequence,l,rlmode,skiphash) + if d then + return h,s,d + end + end + end end + return head,start,false end chainprocs.gsub_context=chained_contextchain chainprocs.gsub_contextchain=chained_contextchain @@ -29853,7 +29898,7 @@ local function kernrun(disc,k_run,font,attr,...) if done and trace_testruns then report_disc("done",disc) end - return nextstart,done + return nextstart end local function comprun(disc,c_run,...) if trace_compruns then @@ -29896,8 +29941,12 @@ local function comprun(disc,c_run,...) end setdisc(disc,pre,post,replace) end - return getnext(disc),renewed + return getnext(disc) end +local test_flatten_start=2 +directives.register("otf.testrun.forceflatten",function(v) + test_flatten_start=v and 1 or 2 +end) local function testrun(disc,t_run,c_run,...) if trace_testruns then report_disc("test",disc) @@ -29925,7 +29974,7 @@ local function testrun(disc,t_run,c_run,...) local d=d_replace>d_post and d_replace or d_post local head=getnext(disc) local tail=head - for i=2,d do + for i=test_flatten_start,d do local nx=getnext(tail) local id=getid(nx) if id==disc_code then @@ -29939,7 +29988,7 @@ local function testrun(disc,t_run,c_run,...) next=getnext(tail) setnext(tail) setprev(head) - local new=copy_node_list(head) + local new=copynodelist(head) if posttail then setlink(posttail,head) else @@ -30002,7 +30051,7 @@ local function testrun(disc,t_run,c_run,...) report_disc("done",disc) end end - return getnext(disc),renewed + return getnext(disc) end local nesting=0 local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) @@ -30420,7 +30469,7 @@ do head=h end elseif typ=="gsub_reversecontextchain" then - local start=find_node_tail(head) + local start=findnodetail(head) local rlmode=0 local merged=steps.merged while start do @@ -30498,13 +30547,12 @@ do start=getnext(start) elseif id==disc_code then if not discs or discs[start]==true then - local ok if gpossing then - start,ok=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=kernrun(start,k_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start,ok=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=testrun(start,t_run_single,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) else - start,ok=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) + start=comprun(start,c_run_single,font,attr,lookupcache,step,dataset,sequence,rlmode,skiphash,handler) end else start=getnext(start) @@ -30568,13 +30616,12 @@ do start=getnext(start) elseif id==disc_code then if not discs or discs[start]==true then - local ok if gpossing then - start,ok=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=kernrun(start,k_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) elseif forcetestrun then - start,ok=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=testrun(start,t_run_multiple,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) else - start,ok=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) + start=comprun(start,c_run_multiple,font,attr,steps,nofsteps,dataset,sequence,rlmode,skiphash,handler) end else start=getnext(start) @@ -31074,6 +31121,10 @@ local function addfeature(data,feature,specifications,prepareonly) end local descriptions=data.descriptions local resources=data.resources + if not descriptions or not resources then + report_otf("missing specification") + return + end local features=resources.features local sequences=resources.sequences if not features or not sequences then @@ -33297,7 +33348,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) local subpos=nil local postpos=nil reorderreph.coverage={} - rephbase[font]={} + rephbase[font]={} for i=1,#seqsubset do local subset=seqsubset[i] local kind=subset[1] @@ -33418,7 +33469,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) end end end - local current,base,firstcons=start,nil,nil + local current,base,firstcons,subnotafterbase,postnotafterbase=start,nil,nil,nil,nil if getstate(start,s_rphf) then current=getnext(getnext(start)) end @@ -33474,7 +33525,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) logprocess("reorder two, handle nbsp") end end - else + else local last=getnext(stop) while current~=last do local next=getnext(current) @@ -33537,8 +33588,8 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) logprocess("reorder two, handle matra") end end - if dependent_vowel[char] then - if pre_mark[char] then + if not moved[current] and dependent_vowel[char] then + if pre_mark[char] then moved[current]=true local prev,next=getboth(current) setlink(prev,next) @@ -34012,11 +34063,11 @@ local function analyze_next_chars_two(c,font) if pre_mark[v] and not already_pre_mark then already_pre_mark=true elseif post_mark[v] and not already_post_mark then - if devanagarihash[font].conjuncts=="mixed" then - return c - else - already_post_mark=true - end + if devanagarihash[font].conjuncts=="mixed" then + return c + else + already_post_mark=true + end elseif below_mark[v] and not already_below_mark then already_below_mark=true elseif above_mark[v] and not already_above_mark then @@ -37079,7 +37130,7 @@ local afm=fonts.handlers.afm local pfb=fonts.handlers.pfb local hashes=fonts.hashes local identifiers=hashes.identifiers -local version=otf.version or 0.011 +local version=otf.version or 0.013 local shapescache=containers.define("fonts","shapes",version,true) local streamscache=containers.define("fonts","streams",version,true) local compact_streams=false @@ -37926,17 +37977,19 @@ if not modules then modules={} end modules ['font-imp-italics']={ copyright="PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local next=next +local next,tonumber=next,tonumber local fonts=fonts local handlers=fonts.handlers local registerotffeature=handlers.otf.features.register local registerafmfeature=handlers.afm.features.register local function initialize(tfmdata,key,value) + local factor=tonumber(value) or 1 for unicode,character in next,tfmdata.characters do local olditalic=character.italic if olditalic and olditalic~=0 then character.width=character.width+olditalic character.italic=0 + character.bottomright=-factor*olditalic end end end |