diff options
Diffstat (limited to 'tex')
175 files changed, 15317 insertions, 5511 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index acb247396..cad7b57e1 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.01.21 20:10} +\newcontextversion{2022.03.12 11:24} %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 e1535e159..30265042e 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.01.21 20:10} +\edef\contextversion{2022.03.12 11:24} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii index 37e93983e..5af147f70 100644 --- a/tex/context/base/mkii/mult-cs.mkii +++ b/tex/context/base/mkii/mult-cs.mkii @@ -281,7 +281,6 @@ \setinterfacevariable{inright}{ivpravo} \setinterfacevariable{inrightedge}{napravo} \setinterfacevariable{inrightmargin}{napravyokraj} -\setinterfacevariable{integral}{integral} \setinterfacevariable{interaction}{interakce} \setinterfacevariable{interactionmenu}{interaktivnimenu} \setinterfacevariable{interactive}{interactive} @@ -716,6 +715,7 @@ \setinterfaceconstant{bottom}{spodek} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} +\setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{vzdalenostspodku} \setinterfaceconstant{bottomframe}{ramecekdole} @@ -887,6 +887,7 @@ \setinterfaceconstant{header}{zahlavi} \setinterfaceconstant{headerdistance}{vzdalenostzahlavi} \setinterfaceconstant{headerstate}{statuszahlavi} +\setinterfaceconstant{headindenting}{headindenting} \setinterfaceconstant{headlabel}{popisekhlavicky} \setinterfaceconstant{headnumber}{cislonadpisu} \setinterfaceconstant{headseparator}{headseparator} @@ -918,6 +919,7 @@ \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{instance}{instance} +\setinterfaceconstant{integral}{integral} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interakce} \setinterfaceconstant{interlinespace}{meziradkovamezera} @@ -960,6 +962,7 @@ \setinterfaceconstant{leftquote}{citovatvlevo} \setinterfaceconstant{leftsample}{leftsample} \setinterfaceconstant{leftsentence}{vetavlevo} +\setinterfaceconstant{leftsource}{leftsource} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{stylvlevo} \setinterfaceconstant{leftsubsentence}{podvetavlevo} @@ -992,7 +995,9 @@ \setinterfaceconstant{marstyle}{stylsnacky} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathclass}{mathclass} +\setinterfaceconstant{mathdenominatorstyle}{mathdenominatorstyle} \setinterfaceconstant{mathlimits}{mathlimits} +\setinterfaceconstant{mathnumeratorstyle}{mathnumeratorstyle} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} @@ -1004,6 +1009,7 @@ \setinterfaceconstant{middle}{stredni} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} +\setinterfaceconstant{middlesource}{middlesource} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middlestyle}{middlestyle} \setinterfaceconstant{middletext}{strednitext} @@ -1176,6 +1182,7 @@ \setinterfaceconstant{rightquote}{citovatvpravo} \setinterfaceconstant{rightsample}{rightsample} \setinterfaceconstant{rightsentence}{vetavpravo} +\setinterfaceconstant{rightsource}{rightsource} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{stylvpravo} \setinterfaceconstant{rightsubsentence}{podvetavpravo} @@ -1311,6 +1318,7 @@ \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolerance} \setinterfaceconstant{top}{vrsek} +\setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{vzdalenostvrsku} \setinterfaceconstant{topframe}{rameceknahore} diff --git a/tex/context/base/mkii/mult-fr.mkii b/tex/context/base/mkii/mult-fr.mkii index 6abaaec24..d79dc0836 100644 --- a/tex/context/base/mkii/mult-fr.mkii +++ b/tex/context/base/mkii/mult-fr.mkii @@ -281,7 +281,6 @@ \setinterfacevariable{inright}{dansdroite} \setinterfacevariable{inrightedge}{dansborddroit} \setinterfacevariable{inrightmargin}{dansmargedroite} -\setinterfacevariable{integral}{integrale} \setinterfacevariable{interaction}{interaction} \setinterfacevariable{interactionmenu}{menuinteraction} \setinterfacevariable{interactive}{interactif} @@ -300,6 +299,7 @@ \setinterfacevariable{july}{juillet} \setinterfacevariable{june}{juin} \setinterfacevariable{keep}{conserver} +\setinterfacevariable{keeptogether}{conserverensemble} \setinterfacevariable{kerncharacters}{approchercaracteres} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{etiquette} @@ -315,6 +315,7 @@ \setinterfacevariable{lefthanging}{suspensiongauche} \setinterfacevariable{leftmargin}{margegauche} \setinterfacevariable{leftpage}{surpagegauche} +\setinterfacevariable{lefttext}{textegauche} \setinterfacevariable{lefttoright}{gaucheadroite} \setinterfacevariable{legend}{legende} \setinterfacevariable{less}{moins} @@ -476,6 +477,7 @@ \setinterfacevariable{righthanging}{suspensiondroite} \setinterfacevariable{rightmargin}{margedroite} \setinterfacevariable{rightpage}{surpagedroite} +\setinterfacevariable{righttext}{textedroite} \setinterfacevariable{righttoleft}{droiteagauche} \setinterfacevariable{roman}{romain} \setinterfacevariable{romannumerals}{chiffresromains} @@ -713,6 +715,7 @@ \setinterfaceconstant{bottom}{bas} \setinterfaceconstant{bottomafter}{basaprès} \setinterfaceconstant{bottombefore}{basavant} +\setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{commandebas} \setinterfaceconstant{bottomdistance}{distancebas} \setinterfaceconstant{bottomframe}{cadrebas} @@ -884,6 +887,7 @@ \setinterfaceconstant{header}{entête} \setinterfaceconstant{headerdistance}{distanceentête} \setinterfaceconstant{headerstate}{etatentête} +\setinterfaceconstant{headindenting}{headindenting} \setinterfaceconstant{headlabel}{etiquettetete} \setinterfaceconstant{headnumber}{numerotete} \setinterfaceconstant{headseparator}{separateurtete} @@ -915,6 +919,7 @@ \setinterfaceconstant{inputfile}{fichierentree} \setinterfaceconstant{insidesection}{auseinsection} \setinterfaceconstant{instance}{instance} +\setinterfaceconstant{integral}{integrale} \setinterfaceconstant{intent}{intention} \setinterfaceconstant{interaction}{interaction} \setinterfaceconstant{interlinespace}{espaceinterligne} @@ -957,6 +962,7 @@ \setinterfaceconstant{leftquote}{citergauche} \setinterfaceconstant{leftsample}{echantillongauche} \setinterfaceconstant{leftsentence}{phrasegauche} +\setinterfaceconstant{leftsource}{leftsource} \setinterfaceconstant{leftspeech}{discoursgauche} \setinterfaceconstant{leftstyle}{stylegauche} \setinterfaceconstant{leftsubsentence}{sousphrasegauche} @@ -989,7 +995,9 @@ \setinterfaceconstant{marstyle}{stylerem} \setinterfaceconstant{mask}{masque} \setinterfaceconstant{mathclass}{classemath} +\setinterfaceconstant{mathdenominatorstyle}{mathdenominatorstyle} \setinterfaceconstant{mathlimits}{limitesmath} +\setinterfaceconstant{mathnumeratorstyle}{mathnumeratorstyle} \setinterfaceconstant{mathstyle}{stylemath} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{profondeurmax} @@ -1001,6 +1009,7 @@ \setinterfaceconstant{middle}{milieu} \setinterfaceconstant{middlecolor}{couleurmilieu} \setinterfaceconstant{middlecommand}{commandemilieu} +\setinterfaceconstant{middlesource}{middlesource} \setinterfaceconstant{middlespeech}{discoursmilieu} \setinterfaceconstant{middlestyle}{stylemilieu} \setinterfaceconstant{middletext}{textemilieu} @@ -1173,6 +1182,7 @@ \setinterfaceconstant{rightquote}{citerdroite} \setinterfaceconstant{rightsample}{echantillondroite} \setinterfaceconstant{rightsentence}{phrasedroite} +\setinterfaceconstant{rightsource}{rightsource} \setinterfaceconstant{rightspeech}{discoursdroite} \setinterfaceconstant{rightstyle}{styledroit} \setinterfaceconstant{rightsubsentence}{sousphrasedroite} @@ -1278,8 +1288,10 @@ \setinterfaceconstant{synonymcommand}{commandesynonyme} \setinterfaceconstant{synonymstyle}{stylesynonyme} \setinterfaceconstant{tab}{tab} +\setinterfaceconstant{target}{target} \setinterfaceconstant{text}{texte} \setinterfaceconstant{textalign}{alignertexte} +\setinterfaceconstant{textalternative}{textalternative} \setinterfaceconstant{textcolor}{couleurtexte} \setinterfaceconstant{textcommand}{commandetexte} \setinterfaceconstant{textdistance}{distancetexte} @@ -1306,6 +1318,7 @@ \setinterfaceconstant{toffset}{decalaget} \setinterfaceconstant{tolerance}{tolerance} \setinterfaceconstant{top}{haut} +\setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{commandehaut} \setinterfaceconstant{topdistance}{distancehaut} \setinterfaceconstant{topframe}{cadrehaut} diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii index 290da95f2..a8f4fc599 100644 --- a/tex/context/base/mkii/mult-pe.mkii +++ b/tex/context/base/mkii/mult-pe.mkii @@ -281,7 +281,6 @@ \setinterfacevariable{inright}{درونراست} \setinterfacevariable{inrightedge}{درلبهراست} \setinterfacevariable{inrightmargin}{درحاشیهراست} -\setinterfacevariable{integral}{integral} \setinterfacevariable{interaction}{پانل} \setinterfacevariable{interactionmenu}{منویپانل} \setinterfacevariable{interactive}{interactive} @@ -300,6 +299,7 @@ \setinterfacevariable{july}{ژولای} \setinterfacevariable{june}{ژوئن} \setinterfacevariable{keep}{نگهدار} +\setinterfacevariable{keeptogether}{keeptogether} \setinterfacevariable{kerncharacters}{kerncharacters} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{برچسب} @@ -715,6 +715,7 @@ \setinterfaceconstant{bottom}{پایین} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} +\setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{فاصلهپایین} \setinterfaceconstant{bottomframe}{قالبپایین} @@ -886,6 +887,7 @@ \setinterfaceconstant{header}{سربرگ} \setinterfaceconstant{headerdistance}{فاصلهسربرگ} \setinterfaceconstant{headerstate}{وضعیتسربرگ} +\setinterfaceconstant{headindenting}{headindenting} \setinterfaceconstant{headlabel}{برچسبسر} \setinterfaceconstant{headnumber}{شمارهسر} \setinterfaceconstant{headseparator}{headseparator} @@ -917,6 +919,7 @@ \setinterfaceconstant{inputfile}{پروندهورودی} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{instance}{instance} +\setinterfaceconstant{integral}{integral} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{پانل} \setinterfaceconstant{interlinespace}{فضایبینخط} @@ -959,6 +962,7 @@ \setinterfaceconstant{leftquote}{نقلچپ} \setinterfaceconstant{leftsample}{leftsample} \setinterfaceconstant{leftsentence}{جملهچپ} +\setinterfaceconstant{leftsource}{leftsource} \setinterfaceconstant{leftspeech}{سخنرانیچپ} \setinterfaceconstant{leftstyle}{سبکچپ} \setinterfaceconstant{leftsubsentence}{زیرجملهچپ} @@ -991,7 +995,9 @@ \setinterfaceconstant{marstyle}{سبکحاش} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathclass}{mathclass} +\setinterfaceconstant{mathdenominatorstyle}{mathdenominatorstyle} \setinterfaceconstant{mathlimits}{mathlimits} +\setinterfaceconstant{mathnumeratorstyle}{mathnumeratorstyle} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{بیشترین} \setinterfaceconstant{maxdepth}{maxdepth} @@ -1003,6 +1009,7 @@ \setinterfaceconstant{middle}{میان} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} +\setinterfaceconstant{middlesource}{middlesource} \setinterfaceconstant{middlespeech}{سخنرانیمیانی} \setinterfaceconstant{middlestyle}{middlestyle} \setinterfaceconstant{middletext}{متنمیانی} @@ -1175,6 +1182,7 @@ \setinterfaceconstant{rightquote}{نقلراست} \setinterfaceconstant{rightsample}{rightsample} \setinterfaceconstant{rightsentence}{جملهراست} +\setinterfaceconstant{rightsource}{rightsource} \setinterfaceconstant{rightspeech}{سخنرانیراست} \setinterfaceconstant{rightstyle}{سبکراست} \setinterfaceconstant{rightsubsentence}{زیرجملهراست} @@ -1229,7 +1237,7 @@ \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{ترتیبتایپ} -\setinterfaceconstant{source}{منبع} +\setinterfaceconstant{source}{source} \setinterfaceconstant{space}{فضا} \setinterfaceconstant{spaceafter}{فضابعداز} \setinterfaceconstant{spaceafterside}{spaceafterside} @@ -1280,6 +1288,7 @@ \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{سبکمترادف} \setinterfaceconstant{tab}{تب} +\setinterfaceconstant{target}{target} \setinterfaceconstant{text}{متن} \setinterfaceconstant{textalign}{textalign} \setinterfaceconstant{textalternative}{textalternative} @@ -1309,6 +1318,7 @@ \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{بردباری} \setinterfaceconstant{top}{بالا} +\setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{فاصلهبالا} \setinterfaceconstant{topframe}{قالبراست} diff --git a/tex/context/base/mkiv/anch-pos.lua b/tex/context/base/mkiv/anch-pos.lua index 77bf09e39..93ba661a7 100644 --- a/tex/context/base/mkiv/anch-pos.lua +++ b/tex/context/base/mkiv/anch-pos.lua @@ -49,6 +49,7 @@ local context = context local ctx_latelua = context.latelua local tex = tex +local texgetdimen = tex.getdimen local texgetcount = tex.getcount local texgetinteger = tex.getintegervalue or tex.getcount local texsetcount = tex.setcount @@ -574,8 +575,8 @@ implement { actions = function() nofparagraphs = nofparagraphs + 1 texsetcount("global","c_anch_positions_paragraph",nofparagraphs) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") local t = { p = true, c = true, @@ -704,8 +705,8 @@ implement { name = "dosetpositionstrut", arguments = "string", actions = function(name) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") local spec = { p = true, c = column, @@ -726,8 +727,8 @@ implement { name = "dosetpositionstrutkind", arguments = { "string", "integer" }, actions = function(name,kind) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") local spec = { k = kind, p = true, diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index 024002c07..aa6353297 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -22,6 +22,8 @@ adapting this file. Updated end 2021 as prelude to ar's remote talk at the meeting. Needs some indic checking (see comment field). + +Todo: get rid of specials = { "font", ... } in math ... we have already vectors. ]]-- local variants_emoji={ @@ -326,7 +328,7 @@ characters.data={ description="EXCLAMATION MARK", direction="on", linebreak="ex", - mathclass="close", + mathclass="factorial", synonyms={ "bang", "factorial" }, unicodeslot=0x21, }, @@ -338,7 +340,7 @@ characters.data={ description="QUOTATION MARK", direction="on", linebreak="qu", - mathclass="default", + mathclass="ordinary", synonyms={ "neutral quotation mark" }, unicodeslot=0x22, }, @@ -401,7 +403,7 @@ characters.data={ description="APOSTROPHE", direction="on", linebreak="qu", - mathclass="default", + mathclass="ordinary", synonyms={ "apl quote", "apostrophe-quote", "neutral single quotation mark" }, unicodeslot=0x27, }, @@ -476,7 +478,7 @@ characters.data={ description="HYPHEN-MINUS", direction="es", linebreak="hy", - mathclass="nothing", + mathclass="ordinary", mathextensible="h", mathfiller="relfill", mathname="mathhyphen", @@ -506,7 +508,7 @@ characters.data={ description="SOLIDUS", direction="cs", linebreak="sy", - mathclass="middle", + mathclass="division", synonyms={ "slash", "virgule" }, unicodeslot=0x2F, }, @@ -517,7 +519,7 @@ characters.data={ description="DIGIT ZERO", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x30, variants={ [0xFE00]="short diagonal stroke form", @@ -532,7 +534,7 @@ characters.data={ description="DIGIT ONE", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x31, variants=variants_emoji, }, @@ -543,7 +545,7 @@ characters.data={ description="DIGIT TWO", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x32, variants=variants_emoji, }, @@ -554,7 +556,7 @@ characters.data={ description="DIGIT THREE", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x33, variants=variants_emoji, }, @@ -565,7 +567,7 @@ characters.data={ description="DIGIT FOUR", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x34, variants=variants_emoji, }, @@ -576,7 +578,7 @@ characters.data={ description="DIGIT FIVE", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x35, variants=variants_emoji, }, @@ -587,7 +589,7 @@ characters.data={ description="DIGIT SIX", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x36, variants=variants_emoji, }, @@ -598,7 +600,7 @@ characters.data={ description="DIGIT SEVEN", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x37, variants=variants_emoji, }, @@ -609,7 +611,7 @@ characters.data={ description="DIGIT EIGHT", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x38, variants=variants_emoji, }, @@ -620,7 +622,7 @@ characters.data={ description="DIGIT NINE", direction="en", linebreak="nu", - mathclass="number", + mathclass="digit", unicodeslot=0x39, variants=variants_emoji, }, @@ -723,7 +725,6 @@ characters.data={ direction="l", lccode=0x61, linebreak="al", - mathclass="variable", unicodeslot=0x41, }, { @@ -734,7 +735,6 @@ characters.data={ direction="l", lccode=0x62, linebreak="al", - mathclass="variable", unicodeslot=0x42, }, { @@ -745,7 +745,6 @@ characters.data={ direction="l", lccode=0x63, linebreak="al", - mathclass="variable", unicodeslot=0x43, }, { @@ -756,7 +755,6 @@ characters.data={ direction="l", lccode=0x64, linebreak="al", - mathclass="variable", unicodeslot=0x44, }, { @@ -767,7 +765,6 @@ characters.data={ direction="l", lccode=0x65, linebreak="al", - mathclass="variable", unicodeslot=0x45, }, { @@ -778,7 +775,6 @@ characters.data={ direction="l", lccode=0x66, linebreak="al", - mathclass="variable", unicodeslot=0x46, }, { @@ -789,7 +785,6 @@ characters.data={ direction="l", lccode=0x67, linebreak="al", - mathclass="variable", unicodeslot=0x47, }, { @@ -800,7 +795,6 @@ characters.data={ direction="l", lccode=0x68, linebreak="al", - mathclass="variable", unicodeslot=0x48, }, { @@ -812,7 +806,6 @@ characters.data={ direction="l", lccode=0x69, linebreak="al", - mathclass="variable", unicodeslot=0x49, }, { @@ -824,7 +817,6 @@ characters.data={ direction="l", lccode=0x6A, linebreak="al", - mathclass="variable", unicodeslot=0x4A, }, { @@ -835,7 +827,6 @@ characters.data={ direction="l", lccode=0x6B, linebreak="al", - mathclass="variable", unicodeslot=0x4B, }, { @@ -846,7 +837,6 @@ characters.data={ direction="l", lccode=0x6C, linebreak="al", - mathclass="variable", unicodeslot=0x4C, }, { @@ -857,7 +847,6 @@ characters.data={ direction="l", lccode=0x6D, linebreak="al", - mathclass="variable", unicodeslot=0x4D, }, { @@ -868,7 +857,6 @@ characters.data={ direction="l", lccode=0x6E, linebreak="al", - mathclass="variable", unicodeslot=0x4E, }, { @@ -879,7 +867,6 @@ characters.data={ direction="l", lccode=0x6F, linebreak="al", - mathclass="variable", unicodeslot=0x4F, }, { @@ -890,7 +877,6 @@ characters.data={ direction="l", lccode=0x70, linebreak="al", - mathclass="variable", unicodeslot=0x50, }, { @@ -901,7 +887,6 @@ characters.data={ direction="l", lccode=0x71, linebreak="al", - mathclass="variable", unicodeslot=0x51, }, { @@ -912,7 +897,6 @@ characters.data={ direction="l", lccode=0x72, linebreak="al", - mathclass="variable", unicodeslot=0x52, }, { @@ -923,7 +907,6 @@ characters.data={ direction="l", lccode=0x73, linebreak="al", - mathclass="variable", unicodeslot=0x53, }, { @@ -934,7 +917,6 @@ characters.data={ direction="l", lccode=0x74, linebreak="al", - mathclass="variable", unicodeslot=0x54, }, { @@ -945,7 +927,6 @@ characters.data={ direction="l", lccode=0x75, linebreak="al", - mathclass="variable", unicodeslot=0x55, }, { @@ -956,7 +937,6 @@ characters.data={ direction="l", lccode=0x76, linebreak="al", - mathclass="variable", unicodeslot=0x56, }, { @@ -967,7 +947,6 @@ characters.data={ direction="l", lccode=0x77, linebreak="al", - mathclass="variable", unicodeslot=0x57, }, { @@ -978,7 +957,6 @@ characters.data={ direction="l", lccode=0x78, linebreak="al", - mathclass="variable", unicodeslot=0x58, }, { @@ -989,7 +967,6 @@ characters.data={ direction="l", lccode=0x79, linebreak="al", - mathclass="variable", unicodeslot=0x59, }, { @@ -1000,7 +977,6 @@ characters.data={ direction="l", lccode=0x7A, linebreak="al", - mathclass="variable", unicodeslot=0x5A, }, { @@ -1025,7 +1001,7 @@ characters.data={ description="REVERSE SOLIDUS", direction="on", linebreak="pr", - mathclass="nothing", + mathclass="division", mathname="backslash", synonyms={ "backslash" }, unicodeslot=0x5C, @@ -1088,7 +1064,6 @@ characters.data={ description="LATIN SMALL LETTER A", direction="l", linebreak="al", - mathclass="variable", uccode=0x41, unicodeslot=0x61, }, @@ -1099,7 +1074,6 @@ characters.data={ description="LATIN SMALL LETTER B", direction="l", linebreak="al", - mathclass="variable", uccode=0x42, unicodeslot=0x62, }, @@ -1110,7 +1084,6 @@ characters.data={ description="LATIN SMALL LETTER C", direction="l", linebreak="al", - mathclass="variable", uccode=0x43, unicodeslot=0x63, }, @@ -1121,7 +1094,6 @@ characters.data={ description="LATIN SMALL LETTER D", direction="l", linebreak="al", - mathclass="variable", uccode=0x44, unicodeslot=0x64, }, @@ -1132,7 +1104,6 @@ characters.data={ description="LATIN SMALL LETTER E", direction="l", linebreak="al", - mathclass="variable", uccode=0x45, unicodeslot=0x65, }, @@ -1143,7 +1114,6 @@ characters.data={ description="LATIN SMALL LETTER F", direction="l", linebreak="al", - mathclass="variable", uccode=0x46, unicodeslot=0x66, }, @@ -1154,7 +1124,6 @@ characters.data={ description="LATIN SMALL LETTER G", direction="l", linebreak="al", - mathclass="variable", uccode=0x47, unicodeslot=0x67, }, @@ -1165,7 +1134,6 @@ characters.data={ description="LATIN SMALL LETTER H", direction="l", linebreak="al", - mathclass="variable", uccode=0x48, unicodeslot=0x68, }, @@ -1177,7 +1145,6 @@ characters.data={ description="LATIN SMALL LETTER I", direction="l", linebreak="al", - mathclass="variable", uccode=0x49, unicodeslot=0x69, }, @@ -1188,7 +1155,6 @@ characters.data={ description="LATIN SMALL LETTER J", direction="l", linebreak="al", - mathclass="variable", uccode=0x4A, unicodeslot=0x6A, }, @@ -1199,7 +1165,6 @@ characters.data={ description="LATIN SMALL LETTER K", direction="l", linebreak="al", - mathclass="variable", uccode=0x4B, unicodeslot=0x6B, }, @@ -1210,7 +1175,6 @@ characters.data={ description="LATIN SMALL LETTER L", direction="l", linebreak="al", - mathclass="variable", uccode=0x4C, unicodeslot=0x6C, }, @@ -1221,7 +1185,6 @@ characters.data={ description="LATIN SMALL LETTER M", direction="l", linebreak="al", - mathclass="variable", uccode=0x4D, unicodeslot=0x6D, }, @@ -1232,7 +1195,6 @@ characters.data={ description="LATIN SMALL LETTER N", direction="l", linebreak="al", - mathclass="variable", uccode=0x4E, unicodeslot=0x6E, }, @@ -1243,7 +1205,6 @@ characters.data={ description="LATIN SMALL LETTER O", direction="l", linebreak="al", - mathclass="variable", uccode=0x4F, unicodeslot=0x6F, }, @@ -1254,7 +1215,6 @@ characters.data={ description="LATIN SMALL LETTER P", direction="l", linebreak="al", - mathclass="variable", uccode=0x50, unicodeslot=0x70, }, @@ -1265,7 +1225,6 @@ characters.data={ description="LATIN SMALL LETTER Q", direction="l", linebreak="al", - mathclass="variable", uccode=0x51, unicodeslot=0x71, }, @@ -1276,7 +1235,6 @@ characters.data={ description="LATIN SMALL LETTER R", direction="l", linebreak="al", - mathclass="variable", uccode=0x52, unicodeslot=0x72, }, @@ -1287,7 +1245,6 @@ characters.data={ description="LATIN SMALL LETTER S", direction="l", linebreak="al", - mathclass="variable", uccode=0x53, unicodeslot=0x73, }, @@ -1298,7 +1255,6 @@ characters.data={ description="LATIN SMALL LETTER T", direction="l", linebreak="al", - mathclass="variable", uccode=0x54, unicodeslot=0x74, }, @@ -1309,7 +1265,6 @@ characters.data={ description="LATIN SMALL LETTER U", direction="l", linebreak="al", - mathclass="variable", uccode=0x55, unicodeslot=0x75, }, @@ -1320,7 +1275,6 @@ characters.data={ description="LATIN SMALL LETTER V", direction="l", linebreak="al", - mathclass="variable", uccode=0x56, unicodeslot=0x76, }, @@ -1331,7 +1285,6 @@ characters.data={ description="LATIN SMALL LETTER W", direction="l", linebreak="al", - mathclass="variable", uccode=0x57, unicodeslot=0x77, }, @@ -1342,7 +1295,6 @@ characters.data={ description="LATIN SMALL LETTER X", direction="l", linebreak="al", - mathclass="variable", uccode=0x58, unicodeslot=0x78, }, @@ -1353,7 +1305,6 @@ characters.data={ description="LATIN SMALL LETTER Y", direction="l", linebreak="al", - mathclass="variable", uccode=0x59, unicodeslot=0x79, }, @@ -1364,7 +1315,6 @@ characters.data={ description="LATIN SMALL LETTER Z", direction="l", linebreak="al", - mathclass="variable", uccode=0x5A, unicodeslot=0x7A, }, @@ -1394,7 +1344,7 @@ characters.data={ linebreak="ba", mathspec={ { - class="nothing", + class="ordinary", name="arrowvert", }, { @@ -1741,7 +1691,7 @@ characters.data={ description="YEN SIGN", direction="et", linebreak="pr", - mathclass="nothing", + mathclass="ordinary", mathname="yen", synonyms={ "yuan sign" }, unicodeslot=0xA5, @@ -1765,7 +1715,7 @@ characters.data={ description="SECTION SIGN", direction="on", linebreak="ai", - mathclass="box", + mathclass="ordinary", mathname="S", synonyms={ "european paragraph sign" }, unicodeslot=0xA7, @@ -1956,7 +1906,7 @@ characters.data={ description="PILCROW SIGN", direction="on", linebreak="ai", - mathclass="box", + mathclass="ordinary", mathname="P", synonyms={ "european section sign", "paragraph sign" }, unicodeslot=0xB6, @@ -4696,7 +4646,6 @@ characters.data={ description="LATIN SMALL LETTER LAMBDA WITH STROKE", direction="l", linebreak="al", - mathclass="variable", mathname="lambdabar", synonyms={ "latin letter lambda bar" }, unicodeslot=0x19B, @@ -8186,6 +8135,9 @@ characters.data={ description="COMBINING GRAVE ACCENT", direction="nsm", linebreak="cm", + mathclass="topaccent", + mathname="widegrave", + mathstretch="h", synonyms={ "greek varia" }, unicodeslot=0x300, }, @@ -8705,6 +8657,7 @@ characters.data={ description="COMBINING LOW LINE", direction="nsm", linebreak="cm", + mathextensible="l", synonyms={ "underline", "underscore" }, unicodeslot=0x332, }, @@ -9537,7 +9490,6 @@ characters.data={ direction="l", lccode=0x3B1, linebreak="al", - mathclass="variable", mathname="Alpha", unicodeslot=0x391, }, @@ -9550,7 +9502,6 @@ characters.data={ direction="l", lccode=0x3B2, linebreak="al", - mathclass="variable", mathname="Beta", unicodeslot=0x392, }, @@ -9563,7 +9514,6 @@ characters.data={ direction="l", lccode=0x3B3, linebreak="al", - mathclass="variable", mathname="Gamma", synonyms={ "gamma function" }, unicodeslot=0x393, @@ -9577,7 +9527,6 @@ characters.data={ direction="l", lccode=0x3B4, linebreak="al", - mathclass="variable", mathname="Delta", unicodeslot=0x394, }, @@ -9590,7 +9539,6 @@ characters.data={ direction="l", lccode=0x3B5, linebreak="al", - mathclass="variable", mathname="Epsilon", unicodeslot=0x395, }, @@ -9603,7 +9551,6 @@ characters.data={ direction="l", lccode=0x3B6, linebreak="al", - mathclass="variable", mathname="Zeta", unicodeslot=0x396, }, @@ -9616,7 +9563,6 @@ characters.data={ direction="l", lccode=0x3B7, linebreak="al", - mathclass="variable", mathname="Eta", unicodeslot=0x397, }, @@ -9629,7 +9575,6 @@ characters.data={ direction="l", lccode=0x3B8, linebreak="al", - mathclass="variable", mathname="Theta", unicodeslot=0x398, }, @@ -9642,7 +9587,6 @@ characters.data={ direction="l", lccode=0x3B9, linebreak="al", - mathclass="variable", mathname="Iota", unicodeslot=0x399, }, @@ -9655,7 +9599,6 @@ characters.data={ direction="l", lccode=0x3BA, linebreak="al", - mathclass="variable", mathname="Kappa", unicodeslot=0x39A, }, @@ -9668,7 +9611,6 @@ characters.data={ direction="l", lccode=0x3BB, linebreak="al", - mathclass="variable", mathname="Lambda", unicodeslot=0x39B, }, @@ -9681,7 +9623,6 @@ characters.data={ direction="l", lccode=0x3BC, linebreak="al", - mathclass="variable", mathname="Mu", unicodeslot=0x39C, }, @@ -9694,7 +9635,6 @@ characters.data={ direction="l", lccode=0x3BD, linebreak="al", - mathclass="variable", mathname="Nu", unicodeslot=0x39D, }, @@ -9707,7 +9647,6 @@ characters.data={ direction="l", lccode=0x3BE, linebreak="al", - mathclass="variable", mathname="Xi", unicodeslot=0x39E, }, @@ -9720,7 +9659,6 @@ characters.data={ direction="l", lccode=0x3BF, linebreak="al", - mathclass="variable", mathname="Omicron", unicodeslot=0x39F, }, @@ -9733,7 +9671,6 @@ characters.data={ direction="l", lccode=0x3C0, linebreak="al", - mathclass="variable", mathname="Pi", unicodeslot=0x3A0, }, @@ -9746,7 +9683,6 @@ characters.data={ direction="l", lccode=0x3C1, linebreak="al", - mathclass="variable", mathname="Rho", unicodeslot=0x3A1, }, @@ -9759,7 +9695,6 @@ characters.data={ direction="l", lccode=0x3C3, linebreak="al", - mathclass="variable", mathname="Sigma", unicodeslot=0x3A3, }, @@ -9772,7 +9707,6 @@ characters.data={ direction="l", lccode=0x3C4, linebreak="al", - mathclass="variable", mathname="Tau", unicodeslot=0x3A4, }, @@ -9785,7 +9719,6 @@ characters.data={ direction="l", lccode=0x3C5, linebreak="al", - mathclass="variable", mathname="Upsilon", unicodeslot=0x3A5, }, @@ -9798,7 +9731,6 @@ characters.data={ direction="l", lccode=0x3C6, linebreak="al", - mathclass="variable", mathname="Phi", unicodeslot=0x3A6, }, @@ -9811,7 +9743,6 @@ characters.data={ direction="l", lccode=0x3C7, linebreak="al", - mathclass="variable", mathname="Chi", unicodeslot=0x3A7, }, @@ -9824,7 +9755,6 @@ characters.data={ direction="l", lccode=0x3C8, linebreak="al", - mathclass="variable", mathname="Psi", unicodeslot=0x3A8, }, @@ -9837,7 +9767,6 @@ characters.data={ direction="l", lccode=0x3C9, linebreak="al", - mathclass="variable", mathname="Omega", unicodeslot=0x3A9, }, @@ -9933,7 +9862,6 @@ characters.data={ description="GREEK SMALL LETTER ALPHA", direction="l", linebreak="al", - mathclass="variable", mathname="alpha", uccode=0x391, unicodeslot=0x3B1, @@ -9946,7 +9874,6 @@ characters.data={ description="GREEK SMALL LETTER BETA", direction="l", linebreak="al", - mathclass="variable", mathname="beta", uccode=0x392, unicodeslot=0x3B2, @@ -9959,7 +9886,6 @@ characters.data={ description="GREEK SMALL LETTER GAMMA", direction="l", linebreak="al", - mathclass="variable", mathname="gamma", uccode=0x393, unicodeslot=0x3B3, @@ -9972,7 +9898,6 @@ characters.data={ description="GREEK SMALL LETTER DELTA", direction="l", linebreak="al", - mathclass="variable", mathname="delta", uccode=0x394, unicodeslot=0x3B4, @@ -9985,7 +9910,6 @@ characters.data={ description="GREEK SMALL LETTER EPSILON", direction="l", linebreak="al", - mathclass="variable", mathname="varepsilon", uccode=0x395, unicodeslot=0x3B5, @@ -9998,7 +9922,6 @@ characters.data={ description="GREEK SMALL LETTER ZETA", direction="l", linebreak="al", - mathclass="variable", mathname="zeta", uccode=0x396, unicodeslot=0x3B6, @@ -10011,7 +9934,6 @@ characters.data={ description="GREEK SMALL LETTER ETA", direction="l", linebreak="al", - mathclass="variable", mathname="eta", uccode=0x397, unicodeslot=0x3B7, @@ -10024,7 +9946,6 @@ characters.data={ description="GREEK SMALL LETTER THETA", direction="l", linebreak="al", - mathclass="variable", mathname="theta", uccode=0x398, unicodeslot=0x3B8, @@ -10037,7 +9958,6 @@ characters.data={ description="GREEK SMALL LETTER IOTA", direction="l", linebreak="al", - mathclass="variable", mathname="iota", uccode=0x399, unicodeslot=0x3B9, @@ -10050,7 +9970,6 @@ characters.data={ description="GREEK SMALL LETTER KAPPA", direction="l", linebreak="al", - mathclass="variable", mathname="kappa", uccode=0x39A, unicodeslot=0x3BA, @@ -10063,7 +9982,6 @@ characters.data={ description="GREEK SMALL LETTER LAMDA", direction="l", linebreak="al", - mathclass="variable", mathname="lambda", uccode=0x39B, unicodeslot=0x3BB, @@ -10076,7 +9994,6 @@ characters.data={ description="GREEK SMALL LETTER MU", direction="l", linebreak="al", - mathclass="variable", mathname="mu", uccode=0x39C, unicodeslot=0x3BC, @@ -10089,7 +10006,6 @@ characters.data={ description="GREEK SMALL LETTER NU", direction="l", linebreak="al", - mathclass="variable", mathname="nu", uccode=0x39D, unicodeslot=0x3BD, @@ -10102,7 +10018,6 @@ characters.data={ description="GREEK SMALL LETTER XI", direction="l", linebreak="al", - mathclass="variable", mathname="xi", uccode=0x39E, unicodeslot=0x3BE, @@ -10115,7 +10030,6 @@ characters.data={ description="GREEK SMALL LETTER OMICRON", direction="l", linebreak="al", - mathclass="variable", mathname="omicron", uccode=0x39F, unicodeslot=0x3BF, @@ -10128,7 +10042,6 @@ characters.data={ description="GREEK SMALL LETTER PI", direction="l", linebreak="al", - mathclass="variable", mathname="pi", synonyms={ "mathematical constant 3.141592... pi", "mathematical constant pi" }, uccode=0x3A0, @@ -10142,7 +10055,6 @@ characters.data={ description="GREEK SMALL LETTER RHO", direction="l", linebreak="al", - mathclass="variable", mathname="rho", uccode=0x3A1, unicodeslot=0x3C1, @@ -10154,7 +10066,6 @@ characters.data={ description="GREEK SMALL LETTER FINAL SIGMA", direction="l", linebreak="al", - mathclass="variable", mathname="varsigma", uccode=0x3C3, unicodeslot=0x3C2, @@ -10167,7 +10078,6 @@ characters.data={ description="GREEK SMALL LETTER SIGMA", direction="l", linebreak="al", - mathclass="variable", mathname="sigma", uccode=0x3A3, unicodeslot=0x3C3, @@ -10180,7 +10090,6 @@ characters.data={ description="GREEK SMALL LETTER TAU", direction="l", linebreak="al", - mathclass="variable", mathname="tau", uccode=0x3A4, unicodeslot=0x3C4, @@ -10193,7 +10102,6 @@ characters.data={ description="GREEK SMALL LETTER UPSILON", direction="l", linebreak="al", - mathclass="variable", mathname="upsilon", uccode=0x3A5, unicodeslot=0x3C5, @@ -10206,7 +10114,6 @@ characters.data={ description="GREEK SMALL LETTER PHI", direction="l", linebreak="al", - mathclass="variable", mathname="varphi", uccode=0x3A6, unicodeslot=0x3C6, @@ -10219,7 +10126,6 @@ characters.data={ description="GREEK SMALL LETTER CHI", direction="l", linebreak="al", - mathclass="variable", mathname="chi", uccode=0x3A7, unicodeslot=0x3C7, @@ -10232,7 +10138,6 @@ characters.data={ description="GREEK SMALL LETTER PSI", direction="l", linebreak="al", - mathclass="variable", mathname="psi", uccode=0x3A8, unicodeslot=0x3C8, @@ -10245,7 +10150,6 @@ characters.data={ description="GREEK SMALL LETTER OMEGA", direction="l", linebreak="al", - mathclass="variable", mathname="omega", uccode=0x3A9, unicodeslot=0x3C9, @@ -10337,7 +10241,6 @@ characters.data={ description="GREEK THETA SYMBOL", direction="l", linebreak="al", - mathclass="variable", mathname="varTheta", specials={ "compat", 0x3B8 }, synonyms={ "script theta" }, @@ -10378,7 +10281,6 @@ characters.data={ description="GREEK PHI SYMBOL", direction="l", linebreak="al", - mathclass="variable", mathname="phi", specials={ "compat", 0x3C6 }, uccode=0x3C6, @@ -10391,7 +10293,6 @@ characters.data={ description="GREEK PI SYMBOL", direction="l", linebreak="al", - mathclass="variable", mathname="varpi", specials={ "compat", 0x3C0 }, synonyms={ "omega pi" }, @@ -10447,7 +10348,6 @@ characters.data={ direction="l", lccode=0x3DD, linebreak="al", - mathclass="variable", mathname="digamma", unicodeslot=0x3DC, }, @@ -10679,7 +10579,6 @@ characters.data={ description="GREEK LUNATE EPSILON SYMBOL", direction="l", linebreak="al", - mathclass="variable", mathname="epsilon", specials={ "compat", 0x3B5 }, synonyms={ "straight epsilon" }, @@ -10691,7 +10590,6 @@ characters.data={ description="GREEK REVERSED LUNATE EPSILON SYMBOL", direction="on", linebreak="al", - mathclass="variable", mathname="backepsilon", synonyms={ "reversed straight epsilon" }, unicodeslot=0x3F6, @@ -23166,7 +23064,6 @@ characters.data={ direction="l", indic="d", indicmark="l", - indicorder="bh", linebreak="cm", unicodeslot=0x9C8, }, @@ -23218,7 +23115,8 @@ characters.data={ category="mc", description="BENGALI AU LENGTH MARK", direction="l", - indic="o", + indic="d", + indicmark="r", indicorder="ap", linebreak="cm", unicodeslot=0x9D7, @@ -62435,7 +62333,7 @@ characters.data={ name="Vert", }, { - class="nothing", + class="ordinary", name="Arrowvert", }, { @@ -62558,7 +62456,7 @@ characters.data={ name="dagger", }, { - class="box", + class="ordinary", name="dag", }, }, @@ -62579,7 +62477,7 @@ characters.data={ name="ddagger", }, { - class="box", + class="ordinary", name="ddag", }, }, @@ -62750,7 +62648,7 @@ characters.data={ description="PRIME", direction="et", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="prime", synonyms={ "feet", "minutes" }, unicodeslot=0x2032, @@ -62762,7 +62660,7 @@ characters.data={ description="DOUBLE PRIME", direction="et", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="doubleprime", specials={ "compat", 0x2032, 0x2032 }, synonyms={ "inches", "seconds" }, @@ -62773,7 +62671,7 @@ characters.data={ description="TRIPLE PRIME", direction="et", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="tripleprime", specials={ "compat", 0x2032, 0x2032, 0x2032 }, unicodeslot=0x2034, @@ -62785,7 +62683,7 @@ characters.data={ description="REVERSED PRIME", direction="on", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="reversedprime", unicodeslot=0x2035, }, @@ -62794,7 +62692,7 @@ characters.data={ description="REVERSED DOUBLE PRIME", direction="on", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="reverseddoubleprime", specials={ "compat", 0x2035, 0x2035 }, unicodeslot=0x2036, @@ -62804,7 +62702,7 @@ characters.data={ description="REVERSED TRIPLE PRIME", direction="on", linebreak="po", - mathclass="nothing", + mathclass="prime", mathname="reversedtripleprime", specials={ "compat", 0x2035, 0x2035, 0x2035 }, unicodeslot=0x2037, @@ -63089,7 +62987,7 @@ characters.data={ description="QUADRUPLE PRIME", direction="on", linebreak="al", - mathclass="nothing", + mathclass="prime", mathname="quadrupleprime", specials={ "compat", 0x2032, 0x2032, 0x2032, 0x2032 }, unicodeslot=0x2057, @@ -64046,7 +63944,7 @@ characters.data={ description="COMBINING ENCLOSING SQUARE", direction="nsm", linebreak="cm", - mathclass="default", + mathclass="ordinary", mathname="bigsquare", unicodeslot=0x20DE, }, @@ -64055,7 +63953,7 @@ characters.data={ description="COMBINING ENCLOSING DIAMOND", direction="nsm", linebreak="cm", - mathclass="default", + mathclass="ordinary", mathname="bigdiamond", unicodeslot=0x20DF, }, @@ -64220,7 +64118,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL C", direction="l", linebreak="al", - mathclass="variable", mathname="complexes", specials={ "font", 0x43 }, synonyms={ "complex numbers", "the set of complex numbers" }, @@ -64269,7 +64166,6 @@ characters.data={ description="EULER CONSTANT", direction="l", linebreak="al", - mathclass="variable", mathname="Eulerconst", specials={ "compat", 0x190 }, unicodeslot=0x2107, @@ -64333,7 +64229,6 @@ characters.data={ description="PLANCK CONSTANT", direction="l", linebreak="al", - mathclass="variable", mathname="Plankconst", specials={ "font", 0x68 }, unicodeslot=0x210E, @@ -64345,7 +64240,7 @@ characters.data={ linebreak="al", mathspec={ { - class="variable", + class="ordinary", name="hslash", }, { @@ -64372,7 +64267,6 @@ characters.data={ description="BLACK-LETTER CAPITAL I", direction="l", linebreak="al", - mathclass="default", mathname="Im", specials={ "font", 0x49 }, synonyms={ "imaginary part" }, @@ -64397,7 +64291,7 @@ characters.data={ description="SCRIPT SMALL L", direction="l", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="ell", specials={ "font", 0x6C }, synonyms={ "liter" }, @@ -64416,7 +64310,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL N", direction="l", linebreak="al", - mathclass="variable", mathname="naturalnumbers", specials={ "font", 0x4E }, synonyms={ "natural number" }, @@ -64448,7 +64341,6 @@ characters.data={ description="SCRIPT CAPITAL P", direction="on", linebreak="al", - mathclass="default", mathname="wp", synonyms={ "weierstrass elliptic function" }, unicodeslot=0x2118, @@ -64458,7 +64350,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL P", direction="l", linebreak="al", - mathclass="variable", mathname="primes", specials={ "font", 0x50 }, unicodeslot=0x2119, @@ -64468,7 +64359,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL Q", direction="l", linebreak="al", - mathclass="variable", mathname="rationals", specials={ "font", 0x51 }, synonyms={ "rational numbers", "the set of rational numbers" }, @@ -64491,7 +64381,6 @@ characters.data={ description="BLACK-LETTER CAPITAL R", direction="l", linebreak="al", - mathclass="default", mathname="Re", specials={ "font", 0x52 }, synonyms={ "real part" }, @@ -64502,7 +64391,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL R", direction="l", linebreak="al", - mathclass="variable", mathname="reals", specials={ "font", 0x52 }, synonyms={ "real numbers", "the set of real numbers" }, @@ -64566,7 +64454,6 @@ characters.data={ description="DOUBLE-STRUCK CAPITAL Z", direction="l", linebreak="al", - mathclass="variable", mathname="integers", specials={ "font", 0x5A }, synonyms={ "integers", "the set of integers" }, @@ -64589,7 +64476,6 @@ characters.data={ direction="l", lccode=0x3C9, linebreak="al", - mathclass="variable", mathname="ohm", specials={ "char", 0x3A9 }, unicodeslot=0x2126, @@ -64600,7 +64486,6 @@ characters.data={ description="INVERTED OHM SIGN", direction="on", linebreak="al", - mathclass="variable", mathname="mho", synonyms={ "mho" }, unicodeslot=0x2127, @@ -64618,7 +64503,6 @@ characters.data={ description="TURNED GREEK SMALL LETTER IOTA", direction="on", linebreak="al", - mathclass="variable", mathname="turnediota", synonyms={ "unique element" }, unicodeslot=0x2129, @@ -64642,7 +64526,6 @@ characters.data={ direction="l", lccode=0xE5, linebreak="ai", - mathclass="variable", mathname="Angstrom", specials={ "char", 0xC5 }, unicodeslot=0x212B, @@ -64744,7 +64627,7 @@ characters.data={ description="ALEF SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="aleph", specials={ "compat", 0x5D0 }, synonyms={ "first transfinite cardinal", "first transfinite cardinal countable" }, @@ -64755,7 +64638,7 @@ characters.data={ description="BET SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="beth", specials={ "compat", 0x5D1 }, synonyms={ "second transfinite cardinal", "second transfinite cardinal continuum" }, @@ -64766,7 +64649,7 @@ characters.data={ description="GIMEL SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="gimel", specials={ "compat", 0x5D2 }, synonyms={ "third transfinite cardinal" }, @@ -64777,7 +64660,7 @@ characters.data={ description="DALET SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="daleth", specials={ "compat", 0x5D3 }, synonyms={ "fourth transfinite cardinal" }, @@ -64889,7 +64772,7 @@ characters.data={ description="DOUBLE-STRUCK ITALIC CAPITAL D", direction="l", linebreak="al", - mathclass="nothing", + mathclass="differential", mathname="differentialD", specials={ "font", 0x44 }, unicodeslot=0x2145, @@ -64899,7 +64782,7 @@ characters.data={ description="DOUBLE-STRUCK ITALIC SMALL D", direction="l", linebreak="al", - mathclass="nothing", + mathclass="differential", mathname="differentiald", specials={ "font", 0x64 }, unicodeslot=0x2146, @@ -64909,7 +64792,7 @@ characters.data={ description="DOUBLE-STRUCK ITALIC SMALL E", direction="l", linebreak="al", - mathclass="nothing", + mathclass="exponential", mathname="exponentiale", specials={ "font", 0x65 }, unicodeslot=0x2147, @@ -64919,7 +64802,7 @@ characters.data={ description="DOUBLE-STRUCK ITALIC SMALL I", direction="l", linebreak="al", - mathclass="nothing", + mathclass="ordinary", mathname="imaginaryi", specials={ "font", 0x69 }, unicodeslot=0x2148, @@ -64929,7 +64812,7 @@ characters.data={ description="DOUBLE-STRUCK ITALIC SMALL J", direction="l", linebreak="al", - mathclass="nothing", + mathclass="ordinary", mathname="imaginaryj", specials={ "font", 0x6A }, unicodeslot=0x2149, @@ -66891,7 +66774,7 @@ characters.data={ description="PARTIAL DIFFERENTIAL", direction="on", linebreak="ai", - mathclass="default", + mathclass="differential", mathname="partial", unicodeslot=0x2202, }, @@ -66923,7 +66806,7 @@ characters.data={ description="EMPTY SET", direction="on", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="emptyset", synonyms={ "null set" }, unicodeslot=0x2205, @@ -66947,7 +66830,7 @@ characters.data={ description="NABLA", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="nabla", synonyms={ "backward difference", "del" }, unicodeslot=0x2207, @@ -67229,7 +67112,7 @@ characters.data={ description="INFINITY", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="infty", unicodeslot=0x221E, }, @@ -67419,7 +67302,7 @@ characters.data={ name="int", }, { - class="nothing", + class="ordinary", name="intop", }, }, @@ -67439,7 +67322,7 @@ characters.data={ name="iint", }, { - class="nothing", + class="ordinary", name="iintop", }, }, @@ -67458,7 +67341,7 @@ characters.data={ name="iiint", }, { - class="nothing", + class="ordinary", name="iiintop", }, }, @@ -68790,7 +68673,7 @@ characters.data={ description="DOWN TACK", direction="on", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="top", synonyms={ "top" }, unicodeslot=0x22A4, @@ -68804,7 +68687,7 @@ characters.data={ linebreak="ai", mathspec={ { - class="default", + class="ordinary", name="bot", }, { @@ -69717,11 +69600,11 @@ characters.data={ linebreak="al", mathspec={ { - class="ord", + class="ordinary", name="varnothing", }, { - class="ord", + class="ordinary", name="diameter", }, }, @@ -76494,7 +76377,7 @@ characters.data={ description="BLACK SPADE SUIT", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="spadesuit", unicodeslot=0x2660, variants=variants_emoji, @@ -76506,7 +76389,7 @@ characters.data={ description="WHITE HEART SUIT", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="heartsuit", unicodeslot=0x2661, }, @@ -76516,7 +76399,7 @@ characters.data={ description="WHITE DIAMOND SUIT", direction="on", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="diamondsuit", unicodeslot=0x2662, }, @@ -76527,7 +76410,7 @@ characters.data={ description="BLACK CLUB SUIT", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="clubsuit", synonyms={ "shamrock" }, unicodeslot=0x2663, @@ -76629,7 +76512,7 @@ characters.data={ description="MUSIC FLAT SIGN", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="flat", unicodeslot=0x266D, }, @@ -76638,7 +76521,7 @@ characters.data={ description="MUSIC NATURAL SIGN", direction="on", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="natural", unicodeslot=0x266E, }, @@ -76649,7 +76532,7 @@ characters.data={ description="MUSIC SHARP SIGN", direction="on", linebreak="ai", - mathclass="default", + mathclass="ordinary", mathname="sharp", synonyms={ "infix bag count" }, unicodeslot=0x266F, @@ -77950,7 +77833,7 @@ characters.data={ description="CHECK MARK", direction="on", linebreak="al", - mathclass="nothing", + mathclass="ordinary", mathname="checkmark", unicodeslot=0x2713, }, @@ -78046,7 +77929,7 @@ characters.data={ description="MALTESE CROSS", direction="on", linebreak="al", - mathclass="nothing", + mathclass="ordinary", mathname="maltese", unicodeslot=0x2720, }, @@ -83685,7 +83568,7 @@ characters.data={ name="iiiint", }, { - class="nothing", + class="ordinary", name="iiiintop", }, }, @@ -227475,6 +227358,13 @@ characters.data={ description="MATHEMATICAL ITALIC CAPITAL D", direction="l", linebreak="al", + mathclass="ordinary", + mathspec={ + { + name="Dd", + class="differential", + }, + }, specials={ "font", 0x44 }, unicodeslot=0x1D437, visual="it", @@ -227709,6 +227599,13 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL D", direction="l", linebreak="al", + mathclass="ordinary", + mathspec={ + { + name="dd", + class="differential", + }, + }, specials={ "font", 0x64 }, unicodeslot=0x1D451, visual="it", @@ -227718,6 +227615,13 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL E", direction="l", linebreak="al", + mathclass="ordinary", + mathspec={ + { + name="ee", + class="exponential", + }, + }, specials={ "font", 0x65 }, unicodeslot=0x1D452, visual="it", @@ -227745,6 +227649,13 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL I", direction="l", linebreak="al", + mathclass="ordinary", + mathspec={ + { + name="ii", + class="imaginary", + }, + }, specials={ "font", 0x69 }, unicodeslot=0x1D456, visual="it", @@ -227754,6 +227665,13 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL J", direction="l", linebreak="al", + mathclass="ordinary", + mathspec={ + { + name="ji", + class="imaginary", + }, + }, specials={ "font", 0x6A }, unicodeslot=0x1D457, visual="it", @@ -232673,7 +232591,7 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL DOTLESS I", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="imath", specials={ "font", 0x131 }, unicodeslot=0x1D6A4, @@ -232684,7 +232602,7 @@ characters.data={ description="MATHEMATICAL ITALIC SMALL DOTLESS J", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="jmath", specials={ "font", 0x237 }, unicodeslot=0x1D6A5, @@ -233154,6 +233072,7 @@ characters.data={ description="MATHEMATICAL BOLD PARTIAL DIFFERENTIAL", direction="on", linebreak="al", + mathclass="differential", specials={ "font", 0x2202 }, unicodeslot=0x1D6DB, visual="bf", @@ -233442,7 +233361,7 @@ characters.data={ description="MATHEMATICAL ITALIC NABLA", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", specials={ "font", 0x2207 }, unicodeslot=0x1D6FB, visual="it", @@ -233677,6 +233596,7 @@ characters.data={ description="MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", + mathclass="differential", specials={ "font", 0x2202 }, unicodeslot=0x1D715, visual="it", @@ -233695,7 +233615,7 @@ characters.data={ description="MATHEMATICAL ITALIC THETA SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="vartheta", specials={ "font", 0x3D1 }, unicodeslot=0x1D717, @@ -233706,7 +233626,7 @@ characters.data={ description="MATHEMATICAL ITALIC KAPPA SYMBOL", direction="l", linebreak="al", - mathclass="default", + mathclass="ordinary", mathname="varkappa", specials={ "font", 0x3F0 }, unicodeslot=0x1D718, @@ -233726,7 +233646,6 @@ characters.data={ description="MATHEMATICAL ITALIC RHO SYMBOL", direction="l", linebreak="al", - mathclass="variable", mathname="varrho", specials={ "font", 0x3F1 }, unicodeslot=0x1D71A, @@ -234205,6 +234124,7 @@ characters.data={ description="MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", + mathclass="differential", specials={ "font", 0x2202 }, unicodeslot=0x1D74F, visual="bi", @@ -234727,6 +234647,7 @@ characters.data={ description="MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL", direction="on", linebreak="al", + mathclass="differential", specials={ "font", 0x2202 }, unicodeslot=0x1D789, visual="bf", @@ -235249,6 +235170,7 @@ characters.data={ description="MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL", direction="on", linebreak="al", + mathclass="differential", specials={ "font", 0x2202 }, unicodeslot=0x1D7C3, visual="bi", diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index fb27e5d04..f33357f04 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.01.21 20:10} +\newcontextversion{2022.03.12 11:24} %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 1aaa77a0f..1e81770dc 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.01.21 20:10} +\edef\contextversion{2022.03.12 11:24} %D Kind of special: diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua index 34c047290..d169faf64 100644 --- a/tex/context/base/mkiv/font-osd.lua +++ b/tex/context/base/mkiv/font-osd.lua @@ -6,6 +6,16 @@ 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: @@ -1382,13 +1392,16 @@ 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 @@ -1402,6 +1415,7 @@ 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 @@ -1421,6 +1435,7 @@ 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) @@ -1434,14 +1449,17 @@ 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 @@ -1449,6 +1467,7 @@ 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) @@ -1917,6 +1936,8 @@ 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 @@ -2104,6 +2125,7 @@ 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) @@ -2173,7 +2195,10 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) -- maybe do a pas end end -- - if not moved[current] and dependent_vowel[char] then +-- print("char: " .. char) +-- if not moved[current] and dependent_vowel[char] then + if dependent_vowel[char] then +-- print(">>!! dependent vowel") if pre_mark[char] then -- or: if before_main or before_half moved[current] = true -- can be helper to remove one node @@ -2384,8 +2409,8 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe if not n then return c end + local v = ischar(n,font) if variant == 1 then - local v = ischar(n,font) if v and nukta[v] then n = getnext(n) if n then @@ -2418,7 +2443,6 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe end end elseif variant == 2 then - local v = ischar(n,font) if v and nukta[v] then c = n end @@ -2443,11 +2467,11 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe end end -- c = ms_matra(c) - local n = getnext(c) + n = getnext(c) if not n then return c end - local v = ischar(n,font) + v = ischar(n,font) if not v then return c end @@ -2555,13 +2579,22 @@ local function analyze_next_chars_one(c,font,variant) -- skip one dependent vowe end end +-- Consonant syllable: +-- +-- { C + [ N ] + < H + [ < ZWNJ | ZWJ > ] | < ZWNJ | ZWJ > + H > } +-- + C +-- + [ N ] +-- + [ A ] +-- + [ < H + [ < ZWNJ|ZWJ > ] | { M } + [ N ] + [ H ] > ] +-- + [ SM ] +-- + [ ( VD ) ] + local function analyze_next_chars_two(c,font) - local n, v - n = getnext(c) + local n = getnext(c) if not n then return c end - v = ischar(n,font) + local v = ischar(n,font) if v and nukta[v] then c = n end @@ -2677,6 +2710,10 @@ 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 @@ -3031,12 +3068,15 @@ 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 @@ -3050,10 +3090,12 @@ 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 ! @@ -3062,6 +3104,7 @@ 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 2c955dbce..342541f12 100644 --- a/tex/context/base/mkiv/font-otc.lua +++ b/tex/context/base/mkiv/font-otc.lua @@ -130,7 +130,7 @@ local function validspecification(specification,name) end end -local function addfeature(data,feature,specifications) +local function addfeature(data,feature,specifications,prepareonly) -- todo: add some validator / check code so that we're more tolerant to -- user errors @@ -461,13 +461,13 @@ local function addfeature(data,feature,specifications) return false end + -- 0 == remove, false = ignore (remove is default) + local function prepare_chain(list,featuretype,sublookups,nocheck) -- todo: coveractions local rules = list.rules local coverage = { } if rules then - local rulehash = { } - local rulesize = 0 local lookuptype = types[featuretype] for nofrules=1,#rules do local rule = rules[nofrules] @@ -498,6 +498,15 @@ local function addfeature(data,feature,specifications) local lookups = rule.lookups or false local subtype = nil if lookups and sublookups then +-- inspect(lookups) +if #lookups > 0 then + local ns = stop - start + 1 + for i=1,ns do + if lookups[i] == nil then + lookups[i] = 0 + end + end +end local l = { } for k, v in sortedhash(lookups) do local t = type(v) @@ -535,6 +544,7 @@ local function addfeature(data,feature,specifications) if nofsequences > 0 then -- we merge coverage into one -- we copy as we can have different fonts if hassteps(lookups) then + -- sequence is the before|current|after match list local hashed = { } for i=1,nofsequences do local t = { } @@ -547,9 +557,9 @@ local function addfeature(data,feature,specifications) end hashed[i] = t end + -- hashed is the before|current|after match hash sequence = hashed - rulesize = rulesize + 1 - rulehash[rulesize] = { + local ruleset = { nofrules, -- 1 lookuptype, -- 2 sequence, -- 3 @@ -561,8 +571,15 @@ local function addfeature(data,feature,specifications) } for unic in sortedhash(sequence[start]) do local cu = coverage[unic] - if not cu then - coverage[unic] = rulehash -- can now be done cleaner i think + if cu then + local n = cu.n + 1 + cu[n] = ruleset + cu.n = n + else + coverage[unic] = { + ruleset, + n = 1, + } end end sequence.n = nofsequences @@ -571,7 +588,6 @@ local function addfeature(data,feature,specifications) end end end - rulehash.n = rulesize end return coverage end @@ -813,6 +829,9 @@ local function addfeature(data,feature,specifications) nofsteps = nofsteps, type = types[featuretype], } + if prepareonly then + return sequence + end end end @@ -900,6 +919,23 @@ local function enhance(data,filename,raw) end end +-- local function enhance(data,filename,raw) +-- local first = 1 +-- local last = #extrafeatures +-- while true do +-- for slot=first,last do +-- local specification = extrafeatures[slot] +-- addfeature(data,specification.name,specification) +-- end +-- if #extrafeatures > last then +-- first = last + 1 +-- last = #extrafeatures +-- else +-- break +-- end +-- end +-- end + otf.enhancers.enhance = enhance otf.enhancers.register("check extra features",enhance) diff --git a/tex/context/base/mkiv/lang-imp-indic.lua b/tex/context/base/mkiv/lang-imp-indic.lua index 5c766c5ef..164b765cc 100644 --- a/tex/context/base/mkiv/lang-imp-indic.lua +++ b/tex/context/base/mkiv/lang-imp-indic.lua @@ -1,12 +1,10 @@ -local zwj = utf.char(0x200D) - return { name = "indic transliterations", version = "1.00", comment = "Experimental code, the name of this file might change" .. "or maybe it become a llg file in the end.", - author = "kauśika and hans", + author = "Sreeram and Hans", copyright = "ConTeXt development team & whoever made this list", transliterations = { @@ -540,20 +538,20 @@ return { ["ḻṛ"] = "ळृ", ["ḻṝ"] = "ळॄ", --- - ["xa"] = "क्ष", - ["xā"] = "क्षा", - ["xi"] = "क्षि", - ["xī"] = "क्षी", - ["xu"] = "क्षु", - ["xū"] = "क्षू", - ["xe"] = "क्षे", - ["xo"] = "क्षो", - ["xai"] = "क्षै", - ["xau"] = "क्षौ", - ["xḷ"] = "क्षॢ", - ["xḹ"] = "क्षॣ", - ["xṛ"] = "क्षृ", - ["xṝ"] = "क्षॄ", + ["kṣa"] = "क्ष", + ["kṣā"] = "क्षा", + ["kṣi"] = "क्षि", + ["kṣī"] = "क्षी", + ["kṣu"] = "क्षु", + ["kṣū"] = "क्षू", + ["kṣe"] = "क्षे", + ["kṣo"] = "क्षो", + ["kṣai"] = "क्षै", + ["kṣau"] = "क्षौ", + ["kṣḷ"] = "क्षॢ", + ["kṣḹ"] = "क्षॣ", + ["kṣṛ"] = "क्षृ", + ["kṣṝ"] = "क्षॄ", --- ["jña"] = "ज्ञ", ["jñā"] = "ज्ञा", @@ -604,7 +602,7 @@ return { ["s"] = "स्", ["h"] = "ह्", ["ḻ"] = "ळ्", - ["x"] = "क्ष्", + ["kṣ"] = "क्ष्", ["jñ"] = "ज्ञ्", -- yogavaahas (always with phonetic) ["ṁ"] = "ं", @@ -617,6 +615,611 @@ return { ["||"] = "॥", }, }, + ["itrans to deva"] = { + mapping = { + --- vowels + ["a"] = "अ", + ["A"] = "आ", + ["i"] = "इ", + ["I"] = "ई", + ["u"] = "उ", + ["U"] = "ऊ", + ["RRi"] = "ऋ", + ["RRI"] = "ॠ", + ["LLi"] = "ऌ", + ["LLI"] = "ॡ", + ["e"] = "ए", + ["ai"] = "ऐ", + ["o"] = "ओ", + ["au"] = "औ", + --- consonant forms + ["ka"] = "क", + ["kA"] = "का", + ["ki"] = "कि", + ["kI"] = "की", + ["ku"] = "कु", + ["kU"] = "कू", + ["ke"] = "के", + ["ko"] = "को", + ["kai"] = "कै", + ["kau"] = "कौ", + ["kLLi"] = "कॢ", + ["kLLI"] = "कॣ", + ["kRRi"] = "कृ", + ["kRRI"] = "कॄ", + --- + ["kha"] = "ख", + ["khA"] = "खा", + ["khi"] = "खि", + ["khI"] = "खी", + ["khu"] = "खु", + ["khU"] = "खू", + ["khe"] = "खे", + ["kho"] = "खो", + ["khai"] = "खै", + ["khau"] = "खौ", + ["khLLi"] = "खॢ", + ["khLLI"] = "खॣ", + ["khRRi"] = "खृ", + ["khRRI"] = "खॄ", + --- + ["ga"] = "ग", + ["gA"] = "गा", + ["gi"] = "गि", + ["gI"] = "गी", + ["gu"] = "गु", + ["gU"] = "गू", + ["ge"] = "गे", + ["go"] = "गो", + ["gai"] = "गै", + ["gau"] = "गौ", + ["gLLi"] = "गॢ", + ["gLLI"] = "गॣ", + ["gRRi"] = "गृ", + ["gRRI"] = "गॄ", + --- + ["gha"] = "घ", + ["ghA"] = "घा", + ["ghi"] = "घि", + ["ghI"] = "घी", + ["ghu"] = "घु", + ["ghU"] = "घू", + ["ghe"] = "घे", + ["gho"] = "घो", + ["ghai"] = "घै", + ["ghau"] = "घौ", + ["ghLLi"] = "घॢ", + ["ghLLI"] = "घॣ", + ["ghRRi"] = "घृ", + ["ghRRI"] = "घॄ", + --- + ["~Na"] = "ङ", + ["~NA"] = "ङा", + ["~Ni"] = "ङि", + ["~NI"] = "ङी", + ["~Nu"] = "ङु", + ["~NU"] = "ङू", + ["~Ne"] = "ङे", + ["~No"] = "ङो", + ["~Nai"] = "ङै", + ["~Nau"] = "ङौ", + ["~NLLi"] = "ङॢ", + ["~NLLI"] = "ङॣ", + ["~NRRi"] = "ङृ", + ["~NRRI"] = "ङॄ", + --- + ["ca"] = "च", + ["cA"] = "चा", + ["ci"] = "चि", + ["cI"] = "ची", + ["cu"] = "चु", + ["cU"] = "चू", + ["ce"] = "चे", + ["co"] = "चो", + ["cai"] = "चै", + ["cau"] = "चौ", + ["cLLi"] = "चॢ", + ["cLLI"] = "चॣ", + ["cRRi"] = "चृ", + ["cRRI"] = "चॄ", + --- + ["cha"] = "छ", + ["chA"] = "छा", + ["chi"] = "छि", + ["chI"] = "छी", + ["chu"] = "छु", + ["chU"] = "छू", + ["che"] = "छे", + ["cho"] = "छो", + ["chai"] = "छै", + ["chau"] = "छौ", + ["chLLi"] = "छॢ", + ["chLLI"] = "छॣ", + ["chRRi"] = "छृ", + ["chRRI"] = "छॄ", + --- + ["ja"] = "ज", + ["jA"] = "जा", + ["ji"] = "जि", + ["jI"] = "जी", + ["ju"] = "जु", + ["jU"] = "जू", + ["je"] = "जे", + ["jo"] = "जो", + ["jai"] = "जै", + ["jau"] = "जौ", + ["jLLi"] = "जॢ", + ["jLLI"] = "जॣ", + ["jRRi"] = "जृ", + ["jRRI"] = "जॄ", + --- + ["jha"] = "झ", + ["jhA"] = "झा", + ["jhi"] = "झि", + ["jhI"] = "झी", + ["jhu"] = "झु", + ["jhU"] = "झू", + ["jhe"] = "झे", + ["jho"] = "झो", + ["jhai"] = "झै", + ["jhau"] = "झौ", + ["jhLLi"] = "झॢ", + ["jhLLI"] = "झॣ", + ["jhRRi"] = "झृ", + ["jhRRI"] = "झॄ", + --- + ["~na"] = "ञ", + ["~nA"] = "ञा", + ["~ni"] = "ञि", + ["~nI"] = "ञी", + ["~nu"] = "ञु", + ["~nU"] = "ञू", + ["~ne"] = "ञे", + ["~no"] = "ञो", + ["~nai"] = "ञै", + ["~nau"] = "ञौ", + ["~nLLi"] = "ञॢ", + ["~nLLI"] = "ञॣ", + ["~nRRi"] = "ञृ", + ["~nRRI"] = "ञॄ", + --- + ["Ta"] = "ट", + ["TA"] = "टा", + ["Ti"] = "टि", + ["TI"] = "टी", + ["Tu"] = "टु", + ["TU"] = "टू", + ["Te"] = "टे", + ["To"] = "टो", + ["Tai"] = "टै", + ["Tau"] = "टौ", + ["TLLi"] = "टॢ", + ["TLLI"] = "टॣ", + ["TRRi"] = "टृ", + ["TRRI"] = "टॄ", + --- + ["Tha"] = "ठ", + ["ThA"] = "ठा", + ["Thi"] = "ठि", + ["ThI"] = "ठी", + ["Thu"] = "ठु", + ["ThU"] = "ठू", + ["The"] = "ठे", + ["Tho"] = "ठो", + ["Thai"] = "ठै", + ["Thau"] = "ठौ", + ["ThLLi"] = "ठॢ", + ["ThLLI"] = "ठॣ", + ["ThRRi"] = "ठृ", + ["ThRRI"] = "ठॄ", + --- + ["Da"] = "ड", + ["DA"] = "डा", + ["Di"] = "डि", + ["DI"] = "डी", + ["Du"] = "डु", + ["DU"] = "डू", + ["De"] = "डे", + ["Do"] = "डो", + ["Dai"] = "डै", + ["Dau"] = "डौ", + ["DLLi"] = "डॢ", + ["DLLI"] = "डॣ", + ["DRRi"] = "डृ", + ["DRRI"] = "डॄ", + --- + ["Dha"] = "ढ", + ["DhA"] = "ढा", + ["Dhi"] = "ढि", + ["DhI"] = "ढी", + ["Dhu"] = "ढु", + ["DhU"] = "ढू", + ["Dhe"] = "ढे", + ["Dho"] = "ढो", + ["Dhai"] = "ढै", + ["Dhau"] = "ढौ", + ["DhLLi"] = "ढॢ", + ["DhLLI"] = "ढॣ", + ["DhRRi"] = "ढृ", + ["DhRRI"] = "ढॄ", + --- + ["Na"] = "ण", + ["NA"] = "णा", + ["Ni"] = "णि", + ["NI"] = "णी", + ["Nu"] = "णु", + ["NU"] = "णू", + ["Ne"] = "णे", + ["No"] = "णो", + ["Nai"] = "णै", + ["Nau"] = "णौ", + ["NLLi"] = "णॢ", + ["NLLI"] = "णॣ", + ["NRRi"] = "णृ", + ["NRRI"] = "णॄ", + --- + ["ta"] = "त", + ["tA"] = "ता", + ["ti"] = "ति", + ["tI"] = "ती", + ["tu"] = "तु", + ["tU"] = "तू", + ["te"] = "ते", + ["to"] = "तो", + ["tai"] = "तै", + ["tau"] = "तौ", + ["tLLi"] = "तॢ", + ["tLLI"] = "तॣ", + ["tRRi"] = "तृ", + ["tRRI"] = "तॄ", + --- + ["tha"] = "थ", + ["thA"] = "था", + ["thi"] = "थि", + ["thI"] = "थी", + ["thu"] = "थु", + ["thU"] = "थू", + ["the"] = "थे", + ["tho"] = "थो", + ["thai"] = "थै", + ["thau"] = "थौ", + ["thLLi"] = "थॢ", + ["thLLI"] = "थॣ", + ["thRRi"] = "थृ", + ["thRRI"] = "थॄ", + --- + ["da"] = "द", + ["dA"] = "दा", + ["di"] = "दि", + ["dI"] = "दी", + ["du"] = "दु", + ["dU"] = "दू", + ["de"] = "दे", + ["do"] = "दो", + ["dai"] = "दै", + ["dau"] = "दौ", + ["dLLi"] = "दॢ", + ["dLLI"] = "दॣ", + ["dRRi"] = "दृ", + ["dRRI"] = "दॄ", + --- + ["dha"] = "ध", + ["dhA"] = "धा", + ["dhi"] = "धि", + ["dhI"] = "धी", + ["dhu"] = "धु", + ["dhU"] = "धू", + ["dhe"] = "धे", + ["dho"] = "धो", + ["dhai"] = "धै", + ["dhau"] = "धौ", + ["dhLLi"] = "धॢ", + ["dhLLI"] = "धॣ", + ["dhRRi"] = "धृ", + ["dhRRI"] = "धॄ", + --- + ["na"] = "न", + ["nA"] = "ना", + ["ni"] = "नि", + ["nI"] = "नी", + ["nu"] = "नु", + ["nU"] = "नू", + ["ne"] = "ने", + ["no"] = "नो", + ["nai"] = "नै", + ["nau"] = "नौ", + ["nLLi"] = "नॢ", + ["nLLI"] = "नॣ", + ["nRRi"] = "नृ", + ["nRRI"] = "नॄ", + --- + ["pa"] = "प", + ["pA"] = "पा", + ["pi"] = "पि", + ["pI"] = "पी", + ["pu"] = "पु", + ["pU"] = "पू", + ["pe"] = "पे", + ["po"] = "पो", + ["pai"] = "पै", + ["pau"] = "पौ", + ["pLLi"] = "पॢ", + ["pLLI"] = "पॣ", + ["pRRi"] = "पृ", + ["pRRI"] = "पॄ", + --- + ["pha"] = "फ", + ["phA"] = "फा", + ["phi"] = "फि", + ["phI"] = "फी", + ["phu"] = "फु", + ["phU"] = "फू", + ["phe"] = "फे", + ["pho"] = "फो", + ["phai"] = "फै", + ["phau"] = "फौ", + ["phLLi"] = "फॢ", + ["phLLI"] = "फॣ", + ["phRRi"] = "फृ", + ["phRRI"] = "फॄ", + --- + ["ba"] = "ब", + ["bA"] = "बा", + ["bi"] = "बि", + ["bI"] = "बी", + ["bu"] = "बु", + ["bU"] = "बू", + ["be"] = "बे", + ["bo"] = "बो", + ["bai"] = "बै", + ["bau"] = "बौ", + ["bLLi"] = "बॢ", + ["bLLI"] = "बॣ", + ["bRRi"] = "बृ", + ["bRRI"] = "बॄ", + --- + ["bha"] = "भ", + ["bhA"] = "भा", + ["bhi"] = "भि", + ["bhI"] = "भी", + ["bhu"] = "भु", + ["bhU"] = "भू", + ["bhe"] = "भे", + ["bho"] = "भो", + ["bhai"] = "भै", + ["bhau"] = "भौ", + ["bhLLi"] = "भॢ", + ["bhLLI"] = "भॣ", + ["bhRRi"] = "भृ", + ["bhRRI"] = "भॄ", + --- + ["ma"] = "म", + ["mA"] = "मा", + ["mi"] = "मि", + ["mI"] = "मी", + ["mu"] = "मु", + ["mU"] = "मू", + ["me"] = "मे", + ["mo"] = "मो", + ["mai"] = "मै", + ["mau"] = "मौ", + ["mLLi"] = "मॢ", + ["mLLI"] = "मॣ", + ["mRRi"] = "मृ", + ["mRRI"] = "मॄ", + --- + ["ya"] = "य", + ["yA"] = "या", + ["yi"] = "यि", + ["yI"] = "यी", + ["yu"] = "यु", + ["yU"] = "यू", + ["ye"] = "ये", + ["yo"] = "यो", + ["yai"] = "यै", + ["yau"] = "यौ", + ["yLLi"] = "यॢ", + ["yLLI"] = "यॣ", + ["yRRi"] = "यृ", + ["yRRI"] = "यॄ", + --- + ["ra"] = "र", + ["rA"] = "रा", + ["ri"] = "रि", + ["rI"] = "री", + ["ru"] = "रु", + ["rU"] = "रू", + ["re"] = "रे", + ["ro"] = "रो", + ["rai"] = "रै", + ["rau"] = "रौ", + ["rLLi"] = "रॢ", + ["rLLI"] = "रॣ", + ["rRRi"] = "रृ", + ["rRRI"] = "रॄ", + --- + ["la"] = "ल", + ["lA"] = "ला", + ["li"] = "लि", + ["lI"] = "ली", + ["lu"] = "लु", + ["lU"] = "लू", + ["le"] = "ले", + ["lo"] = "लो", + ["lai"] = "लै", + ["lau"] = "लौ", + ["lLLi"] = "लॢ", + ["lLLI"] = "लॣ", + ["lRRi"] = "लृ", + ["lRRI"] = "लॄ", + --- + ["va"] = "व", + ["vA"] = "वा", + ["vi"] = "वि", + ["vI"] = "वी", + ["vu"] = "वु", + ["vU"] = "वू", + ["ve"] = "वे", + ["vo"] = "वो", + ["vai"] = "वै", + ["vau"] = "वौ", + ["vLLi"] = "वॢ", + ["vLLI"] = "वॣ", + ["vRRi"] = "वृ", + ["vRRI"] = "वॄ", + --- + ["sha"] = "श", + ["shA"] = "शा", + ["shi"] = "शि", + ["shI"] = "शी", + ["shu"] = "शु", + ["shU"] = "शू", + ["she"] = "शे", + ["sho"] = "शो", + ["shai"] = "शै", + ["shau"] = "शौ", + ["shLLi"] = "शॢ", + ["shLLI"] = "शॣ", + ["shRRi"] = "शृ", + ["shRRI"] = "शॄ", + --- + ["Sha"] = "ष", + ["ShA"] = "षा", + ["Shi"] = "षि", + ["ShI"] = "षी", + ["Shu"] = "षु", + ["ShU"] = "षू", + ["She"] = "षे", + ["Sho"] = "षो", + ["Shai"] = "षै", + ["Shau"] = "षौ", + ["ShLLi"] = "षॢ", + ["ShLLI"] = "षॣ", + ["ShRRi"] = "षृ", + ["ShRRI"] = "षॄ", + --- + ["sa"] = "स", + ["sA"] = "सा", + ["si"] = "सि", + ["sI"] = "सी", + ["su"] = "सु", + ["sU"] = "सू", + ["se"] = "से", + ["so"] = "सो", + ["sai"] = "सै", + ["sau"] = "सौ", + ["sLLi"] = "सॢ", + ["sLLI"] = "सॣ", + ["sRRi"] = "सृ", + ["sRRI"] = "सॄ", + --- + ["ha"] = "ह", + ["hA"] = "हा", + ["hi"] = "हि", + ["hI"] = "ही", + ["hu"] = "हु", + ["hU"] = "हू", + ["he"] = "हे", + ["ho"] = "हो", + ["hai"] = "है", + ["hau"] = "हौ", + ["hLLi"] = "हॢ", + ["hLLI"] = "हॣ", + ["hRRi"] = "हृ", + ["hRRI"] = "हॄ", + --- + ["ḻa"] = "ळ", + ["ḻA"] = "ळा", + ["ḻi"] = "ळि", + ["ḻI"] = "ळी", + ["ḻu"] = "ळु", + ["ḻU"] = "ळू", + ["ḻe"] = "ळे", + ["ḻo"] = "ळो", + ["ḻai"] = "ळै", + ["ḻau"] = "ळौ", + ["ḻLLi"] = "ळॢ", + ["ḻLLI"] = "ळॣ", + ["ḻRRi"] = "ळृ", + ["ḻRRI"] = "ळॄ", + --- + ["xa"] = "क्ष", + ["xA"] = "क्षा", + ["xi"] = "क्षि", + ["xI"] = "क्षी", + ["xu"] = "क्षु", + ["xU"] = "क्षू", + ["xe"] = "क्षे", + ["xo"] = "क्षो", + ["xai"] = "क्षै", + ["xau"] = "क्षौ", + ["xLLi"] = "क्षॢ", + ["xLLI"] = "क्षॣ", + ["xRRi"] = "क्षृ", + ["xRRI"] = "क्षॄ", + --- + ["j~na"] = "ज्ञ", + ["j~nA"] = "ज्ञा", + ["j~ni"] = "ज्ञि", + ["j~nI"] = "ज्ञी", + ["j~nu"] = "ज्ञु", + ["j~nU"] = "ज्ञू", + ["j~ne"] = "ज्ञे", + ["j~no"] = "ज्ञो", + ["j~nai"] = "ज्ञै", + ["j~nau"] = "ज्ञौ", + ["j~nLLi"] = "ज्ञॢ", + ["j~nLLI"] = "ज्ञॣ", + ["j~nRRi"] = "ज्ञृ", + ["j~nRRI"] = "ज्ञॄ", + --- + ["k"] = "क्", + ["kh"] = "ख्", + ["g"] = "ग्", + ["gh"] = "घ्", + ["~N"] = "ङ्", + ["c"] = "च्", + ["ch"] = "छ्", + ["j"] = "ज्", + ["jh"] = "झ्", + ["~n"] = "ञ्", + ["T"] = "ट्", + ["Th"] = "ठ्", + ["D"] = "ड्", + ["Dh"] = "ढ्", + ["N"] = "ण्", + ["t"] = "त्", + ["th"] = "थ्", + ["d"] = "द्", + ["dh"] = "ध्", + ["n"] = "न्", + ["p"] = "प्", + ["ph"] = "फ्", + ["b"] = "ब्", + ["bh"] = "भ्", + ["m"] = "म्", + ["y"] = "य्", + ["r"] = "र्", + ["l"] = "ल्", + ["v"] = "व्", + ["sh"] = "श्", + ["Sh"] = "ष्", + ["s"] = "स्", + ["h"] = "ह्", + ["ḻ"] = "ळ्", + ["x"] = "क्ष्", + ["j~n"] = "ज्ञ्", + -- yogavaahas (always with phonetic) + ["M"] = "ं", + ["H"] = "ः", + ["ँ"] = "ँ", + -- punctuations + ["viraama"] = "्", + ["."] = "।", + ["|"] = "।", + ["||"] = "॥", + }, + }, ["deva to iast"] = { mapping = { -- vowels @@ -1147,20 +1750,20 @@ return { ["ळृ"] = "l̤ṛ", ["ळॄ"] = "l̤ṝ", --- - ["क्ष"]= "xa", - ["क्षा"] = "xā", - ["क्षि"] = "xi", - ["क्षी"] = "xī", - ["क्षु"] = "xu", - ["क्षू"] = "xū", - ["क्षे"] = "xe", - ["क्षो"] = "xo", - ["क्षै"] = "xai", - ["क्षौ"] = "xau", - ["क्षॢ"] = "xḷ", - ["क्षॣ"] = "xḹ", - ["क्षृ"] = "xṛ", - ["क्षॄ"] = "xṝ", + ["क्ष"]= "kṣa", + ["क्षा"] = "kṣā", + ["क्षि"] = "kṣi", + ["क्षी"] = "kṣī", + ["क्षु"] = "kṣu", + ["क्षू"] = "kṣū", + ["क्षे"] = "kṣe", + ["क्षो"] = "kṣo", + ["क्षै"] = "kṣai", + ["क्षौ"] = "kṣau", + ["क्षॢ"] = "kṣḷ", + ["क्षॣ"] = "kṣḹ", + ["क्षृ"] = "kṣṛ", + ["क्षॄ"] = "kṣṝ", --- ["ज्ञ"]= "jña", ["ज्ञा"] = "jñā", @@ -1214,19 +1817,19 @@ return { ["क्ष्"] = "kṣ", ["ज्ञ्"] = "jñ", -- discard virama (?!) TODO: revisit this if need arises - -- ["्"] = "", - ["।"] = ".", - ["॥"] = ".", + -- ["्"] = "", + ["।"] = "|", + ["॥"] = "||", ["ं"] = "ṃ", ["ः"] = "ḥ", ["ऽ"] = "\'", -- disputed - ["ँ"] = "ँ", + ["ँ"] = "̃", -- diactrics (combining): provided for completeness -- warning: many fonts don't have these ["॒"] = "॒", -- could not test - -- ["॑"] = "̭", + -- ["॑"] = "̭", ["॑"] = "॑", ["᳚"] = "᳚", ["᳛"] = "᳛", @@ -1335,5 +1938,345 @@ return { ["’"] = "’", }, }, + ["deva to tlgu"] = { + mapping = { + -- vowels + ["अ"] = "అ", + ["आ"] = "ఆ", + ["इ"] = "ఇ", + ["ई"] = "ఈ", + ["उ"] = "ఉ", + ["ऊ"] = "ఊ", + ["ऋ"] = "ఋ", + ["ॠ"] = "ౠ", + ["ऌ"] = "ఌ", + ["ॡ"] = "ౡ", + ["ऎ"] = "ఎ", + ["ए"] = "ఏ", + ["ऐ"] = "ఐ", + ["ऒ"] = "ఒ", + ["ओ"] = "ఓ", + ["औ"] = "ఔ", + -- consonants + ["क"] = "క", + ["ख"] = "ఖ", + ["ग"] = "గ", + ["घ"] = "ఘ", + ["ङ"] = "ఙ", + ["च"] = "చ", + ["छ"] = "ఛ", + ["ज"] = "జ", + ["झ"] = "ఝ", + ["ञ"] = "ఞ", + ["ट"] = "ట", + ["ठ"] = "ఠ", + ["ड"] = "డ", + ["ढ"] = "ఢ", + ["ण"] = "ణ", + ["त"] = "త", + ["थ"] = "థ", + ["द"] = "ద", + ["ध"] = "ధ", + ["न"] = "న", + ["प"] = "ప", + ["फ"] = "ఫ", + ["ब"] = "బ", + ["भ"] = "భ", + ["म"] = "మ", + ["य"] = "య", + ["र"] = "ర", + ["ल"] = "ల", + ["व"] = "వ", + ["श"] = "శ", + ["ष"] = "ష", + ["स"] = "స", + ["ह"] = "హ", + ["ळ"] = "ళ", + ["क्ष"] = "క్ష", + ["ज्ञ"] = "జ్ఞ", + -- vowel marks + ["ा"] = "ా", + ["ि"] = "ి", + ["ी"] = "ీ", + ["ु"] = "ు", + ["ू"] = "ూ", + ["ृ"] = "ృ", + ["ॄ"] = "ౄ", + ["ॢ"] = "ౢ", + ["ॣ"] = "ౣ", + ["ॆ"] = "ె", + ["े"] = "ే", + ["ै"] = "ై", + ["ॊ"] = "ొ", + ["ो"] = "ో", + ["ौ"] = "ౌ", + -- always with phonetic + ["ं"] = "ం", + ["ः"] = "ః", + ["ँ"] = "ఀ", + -- punctuation marks + ["्"] = "్", + ["'"] = "'", + ["।"] = ".", + ["॥"] = ".", + ["‘"] = "‘", + ["’"] = "’", + }, + }, + ["deva to knda"] = { + mapping = { + -- vowels + ["अ"] = "ಅ", + ["आ"] = "ಆ", + ["इ"] = "ಇ", + ["ई"] = "ಈ", + ["उ"] = "ಉ", + ["ऊ"] = "ಊ", + ["ऋ"] = "ಋ", + ["ॠ"] = "ೠ", + ["ऌ"] = "ಌ", + ["ॡ"] = "ೡ", + ["ऎ"] = "ಎ", + ["ए"] = "ಏ", + ["ऐ"] = "ಐ", + ["ऒ"] = "ಒ", + ["ओ"] = "ಓ", + ["औ"] = "ಔ", + -- consonants + ["क"] = "ಕ", + ["ख"] = "ಖ", + ["ग"] = "ಗ", + ["घ"] = "ಘ", + ["ङ"] = "ಙ", + ["च"] = "ಚ", + ["छ"] = "ಛ", + ["ज"] = "ಜ", + ["झ"] = "ಝ", + ["ञ"] = "ಞ", + ["ट"] = "ಟ", + ["ठ"] = "ಠ", + ["ड"] = "ಡ", + ["ढ"] = "ಢ", + ["ण"] = "ಣ", + ["त"] = "ತ", + ["थ"] = "ಥ", + ["द"] = "ದ", + ["ध"] = "ಧ", + ["न"] = "ನ", + ["प"] = "ಪ", + ["फ"] = "ಫ", + ["ब"] = "ಬ", + ["भ"] = "ಭ", + ["म"] = "ಮ", + ["य"] = "ಯ", + ["र"] = "ರ", + ["ल"] = "ಲ", + ["व"] = "ವ", + ["श"] = "ಶ", + ["ष"] = "ಷ", + ["स"] = "ಸ", + ["ह"] = "ಹ", + ["ळ"] = "ಳ", + ["क्ष"] = "ಕ್ಷ", + ["ज्ञ"] = "ಜ್ಞ", + -- vowel marks + ["ा"] = "ಾ", + ["ि"] = "ಿ", + ["ी"] = "ೀ", + ["ु"] = "ು", + ["ू"] = "ೂ", + ["ृ"] = "ೃ", + ["ॄ"] = "ೄ", + ["ॢ"] = "ೢ", + ["ॣ"] = "ೣ", + ["ॆ"] = "ೆ", + ["े"] = "ೇ", + ["ै"] = "ೈ", + ["ॊ"] = "ೊ", + ["ो"] = "ೋ", + ["ौ"] = "ೌ", + -- always with phonetic + ["ं"] = "ಂ", + ["ः"] = "ಃ", + ["ँ"] = "ಁ", + -- punctuation marks + ["्"] = "್", + ["'"] = "'", + ["।"] = ".", + ["॥"] = ".", + ["‘"] = "‘", + ["’"] = "’", + }, + }, + ["deva to gujr"] = { + mapping = { + -- vowels + ["अ"] = "અ", + ["आ"] = "આ", + ["इ"] = "ઇ", + ["ई"] = "ઈ", + ["उ"] = "ઉ", + ["ऊ"] = "ઊ", + ["ऋ"] = "ઋ", + ["ॠ"] = "ૠ", + ["ऌ"] = "ઌ", + ["ॡ"] = "ૡ", + -- ["ऎ"] = "", + ["ए"] = "એ", + ["ऐ"] = "ઐ", + -- ["ऒ"] = "", + ["ओ"] = "ઓ", + ["औ"] = "ઔ", + -- consonants + ["क"] = "ક", + ["ख"] = "ખ", + ["ग"] = "ગ", + ["घ"] = "ઘ", + ["ङ"] = "ઙ", + ["च"] = "ચ", + ["छ"] = "છ", + ["ज"] = "જ", + ["झ"] = "ઝ", + ["ञ"] = "ઞ", + ["ट"] = "ટ", + ["ठ"] = "ઠ", + ["ड"] = "ડ", + ["ढ"] = "ઢ", + ["ण"] = "ણ", + ["त"] = "ત", + ["थ"] = "થ", + ["द"] = "દ", + ["ध"] = "ધ", + ["न"] = "ન", + ["प"] = "પ", + ["फ"] = "ફ", + ["ब"] = "બ", + ["भ"] = "ભ", + ["म"] = "મ", + ["य"] = "ય", + ["र"] = "ર", + ["ल"] = "લ", + ["व"] = "વ", + ["श"] = "શ", + ["ष"] = "ષ", + ["स"] = "સ", + ["ह"] = "હ", + ["ळ"] = "ળ", + ["क्ष"] = "ક્ષ", + ["ज्ञ"] = "જ્ઞ", + -- vowel marks + ["ा"] = "ા", + ["ि"] = "િ", + ["ी"] = "ી", + ["ु"] = "ુ", + ["ू"] = "ૂ", + ["ृ"] = "ૃ", + ["ॄ"] = "ૄ", + ["ॢ"] = "ૢ", + ["ॣ"] = "ૣ", + -- ["ॆ"] = "", + ["े"] = "ે", + ["ै"] = "ૈ", + -- ["ॊ"] = "", + ["ो"] = "ો", + ["ौ"] = "ૌ", + -- always with phonetic + ["ं"] = "ં", + ["ः"] = "ઃ", + ["ँ"] = "ઁ", + -- punctuation marks + ["्"] = "્", + ["'"] = "'", + ["।"] = ".", + ["॥"] = ".", + ["‘"] = "‘", + ["’"] = "’", + }, + }, + ["deva to bngl"] = { + mapping = { + -- vowels + ["अ"] = "অ", + ["आ"] = "আ", + ["इ"] = "ই", + ["ई"] = "ঈ", + ["उ"] = "উ", + ["ऊ"] = "ঊ", + ["ऋ"] = "ঋ", + ["ॠ"] = "ৠ", + ["ऌ"] = "ঌ", + ["ॡ"] = "ৡ", + -- ["ऎ"] = "", + ["ए"] = "এ", + ["ऐ"] = "ঐ", + -- ["ऒ"] = "", + ["ओ"] = "ও", + ["औ"] = "ঔ", + -- consonants + ["क"] = "ক", + ["ख"] = "খ", + ["ग"] = "গ", + ["घ"] = "ঘ", + ["ङ"] = "ঙ", + ["च"] = "চ", + ["छ"] = "ছ", + ["ज"] = "জ", + ["झ"] = "ঝ", + ["ञ"] = "ঞ", + ["ट"] = "ট", + ["ठ"] = "ঠ", + ["ड"] = "ড", + ["ढ"] = "ঢ", + ["ण"] = "ণ", + ["त"] = "ত", + ["थ"] = "থ", + ["द"] = "দ", + ["ध"] = "ধ", + ["न"] = "ন", + ["प"] = "প", + ["फ"] = "ফ", + ["ब"] = "ব", + ["भ"] = "ভ", + ["म"] = "ম", + ["य"] = "য", + ["र"] = "র", + ["ल"] = "ল", + ["व"] = "ব", + ["श"] = "শ", + ["ष"] = "ষ", + ["स"] = "স", + ["ह"] = "হ", + -- ["ळ"] = "", + ["क्ष"] = "ক্ষ", + ["ज्ञ"] = "জ্ঞ", + -- vowel marks + ["ा"] = "া", + ["ि"] = "ি", + ["ी"] = "ী", + ["ु"] = "ু", + ["ू"] = "ূ", + ["ृ"] = "ৃ", + ["ॄ"] = "ৄ", + ["ॢ"] = "ৢ", + ["ॣ"] = "ৣ", + -- ["ॆ"] = "", + ["े"] = "ে", + ["ै"] = "ৈ", + -- ["ॊ"] = "", + ["ो"] = "ো", + ["ौ"] = "ৌ", + -- always with phonetic + ["ं"] = "ং", + ["ः"] = "ঃ", + ["ँ"] = "ঁ", + -- punctuation marks + ["्"] = "্", + ["'"] = "'", + ["।"] = ".", + ["॥"] = ".", + ["‘"] = "‘", + ["’"] = "’", + }, + }, } } diff --git a/tex/context/base/mkiv/lang-imp-serbian.lua b/tex/context/base/mkiv/lang-imp-serbian.lua index 9e2cf5ce6..6212500c2 100644 --- a/tex/context/base/mkiv/lang-imp-serbian.lua +++ b/tex/context/base/mkiv/lang-imp-serbian.lua @@ -1,46 +1,81 @@ -return { +local c2l = { + mapping = { + ["А"] = "A", ["а"] = "a", + ["Б"] = "B", ["б"] = "b", + ["В"] = "V", ["в"] = "v", + ["Г"] = "G", ["г"] = "g", + ["Д"] = "D", ["д"] = "d", + ["Ђ"] = "Đ", ["ђ"] = "đ", + ["Е"] = "E", ["е"] = "e", + ["Ж"] = "Ž", ["ж"] = "ž", + ["З"] = "Z", ["з"] = "z", + ["И"] = "I", ["и"] = "i", + ["Ј"] = "J", ["ј"] = "j", + ["К"] = "K", ["к"] = "k", + ["Л"] = "L", ["л"] = "l", + ["Љ"] = "Lj", ["љ"] = "lj", + ["М"] = "M", ["м"] = "m", + ["Н"] = "N", ["н"] = "n", + ["Њ"] = "Nj", ["њ"] = "nj", + ["О"] = "O", ["о"] = "o", + ["П"] = "P", ["п"] = "p", + ["Р"] = "R", ["р"] = "r", + ["С"] = "S", ["с"] = "s", + ["Т"] = "T", ["т"] = "t", + ["Ћ"] = "Ć", ["ћ"] = "ć", + ["У"] = "U", ["у"] = "u", + ["Ф"] = "F", ["ф"] = "f", + ["Х"] = "H", ["х"] = "h", + ["Ц"] = "C", ["ц"] = "c", + ["Ч"] = "Č", ["ч"] = "č", + ["Џ"] = "Dž", ["џ"] = "dž", + ["Ш"] = "Š", ["ш"] = "š", + } +} + +local C2L = { + mapping = { + ["А"] = "A", ["а"] = "a", + ["Б"] = "B", ["б"] = "b", + ["В"] = "V", ["в"] = "v", + ["Г"] = "G", ["г"] = "g", + ["Д"] = "D", ["д"] = "d", + ["Ђ"] = "Đ", ["ђ"] = "đ", + ["Е"] = "E", ["е"] = "e", + ["Ж"] = "Ž", ["ж"] = "ž", + ["З"] = "Z", ["з"] = "z", + ["И"] = "I", ["и"] = "i", + ["Ј"] = "J", ["ј"] = "j", + ["К"] = "K", ["к"] = "k", + ["Л"] = "L", ["л"] = "l", + ["Љ"] = "LJ", ["љ"] = "lj", + ["М"] = "M", ["м"] = "m", + ["Н"] = "N", ["н"] = "n", + ["Њ"] = "NJ", ["њ"] = "nj", + ["О"] = "O", ["о"] = "o", + ["П"] = "P", ["п"] = "p", + ["Р"] = "R", ["р"] = "r", + ["С"] = "S", ["с"] = "s", + ["Т"] = "T", ["т"] = "t", + ["Ћ"] = "Ć", ["ћ"] = "ć", + ["У"] = "U", ["у"] = "u", + ["Ф"] = "F", ["ф"] = "f", + ["Х"] = "H", ["х"] = "h", + ["Ц"] = "C", ["ц"] = "c", + ["Ч"] = "Č", ["ч"] = "č", + ["Џ"] = "DŽ", ["џ"] = "dž", + ["Ш"] = "Š", ["ш"] = "š", + } +} +return { name = "sebian transliterations", version = "1.00", - author = "Hans Hagen", - comment = "Experimental code, the name of this file might change" - .. "or maybe it become a llg file in the end.", + author = "Hans Hagen & Ivan Pešić", copyright = "ConTeXt development team & whoever made this list", - transliterations = { - ["serbian to latin"] = { - mapping = { - ["А"] = "A", ["а"] = "a", - ["Б"] = "B", ["б"] = "b", - ["В"] = "V", ["в"] = "v", - ["Г"] = "G", ["г"] = "g", - ["Д"] = "D", ["д"] = "d", - ["Е"] = "E", ["е"] = "e", - ["Ж"] = "Ž", ["ж"] = "ž", - ["З"] = "Z", ["з"] = "z", - ["И"] = "I", ["и"] = "i", - ["Й"] = "J", ["й"] = "j", - ["К"] = "K", ["к"] = "k", - ["Л"] = "L", ["л"] = "l", - ["М"] = "M", ["м"] = "m", - ["Н"] = "N", ["н"] = "n", - ["О"] = "O", ["о"] = "o", - ["П"] = "P", ["п"] = "p", - ["Р"] = "R", ["р"] = "r", - ["С"] = "S", ["с"] = "s", - ["Т"] = "T", ["т"] = "t", - ["У"] = "U", ["у"] = "u", - ["Ф"] = "F", ["ф"] = "f", - ["Х"] = "Ch", ["х"] = "ch", - ["Ц"] = "C", ["ц"] = "c", - ["Ч"] = "Č", ["ч"] = "č", - ["Ш"] = "Š", ["ш"] = "š", - ["Щ"] = "Št", ["щ"] = "št", - ["Ъ"] = "Ă", ["ъ"] = "ă", - ["Ь"] = "′", ["ь"] = "′", - ["Ю"] = "Ju", ["ю"] = "ju", - ["Я"] = "Ja", ["я"] = "ja", - } - } + ["serbian to latin"] = c2l, + c2l = c2l, + C2L = C2L, } } diff --git a/tex/context/base/mkiv/lpdf-pda.xml b/tex/context/base/mkiv/lpdf-pda.xml index 2f07fed2d..0de54aa2a 100644 --- a/tex/context/base/mkiv/lpdf-pda.xml +++ b/tex/context/base/mkiv/lpdf-pda.xml @@ -7,21 +7,9 @@ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> - <dc:creator> - <rdf:Seq> - <rdf:li xml:lang="x-default"/> - </rdf:Seq> - </dc:creator> - <dc:description> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:description> - <dc:title> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:title> + <dc:creator/> + <dc:description/> + <dc:title/> </rdf:Description> <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/"> <pdfx:ID/> diff --git a/tex/context/base/mkiv/lpdf-pdx.xml b/tex/context/base/mkiv/lpdf-pdx.xml index 35726a5c0..45349b4d8 100644 --- a/tex/context/base/mkiv/lpdf-pdx.xml +++ b/tex/context/base/mkiv/lpdf-pdx.xml @@ -2,26 +2,19 @@ <!-- lpdf-pdx.xml --> +<!-- + There was a bug in the iso standard so now we just flush them flat because for some + reason there is no upward compatibulity. It's a sort of useless mess anyway. +--> + <x:xmpmeta xmlns:x="adobe:ns:meta/"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> - <dc:creator> - <rdf:Seq> - <rdf:li xml:lang="x-default"/> - </rdf:Seq> - </dc:creator> - <dc:description> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:description> - <dc:title> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:title> - </rdf:Description> + <dc:creator/> + <dc:description/> + <dc:title/> + </rdf:Description> <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/"> <pdfx:ID/> <pdfx:ConTeXt.Jobname/> diff --git a/tex/context/base/mkiv/lpdf-pua.xml b/tex/context/base/mkiv/lpdf-pua.xml index f717762b6..091a3d400 100644 --- a/tex/context/base/mkiv/lpdf-pua.xml +++ b/tex/context/base/mkiv/lpdf-pua.xml @@ -2,25 +2,24 @@ <!-- lpdf-pua.xml --> +<!-- + There was a bug in the ISO standard so now we just flush them flat because for some + reason there is no upward compatibulity. It's a sort of useless mess anyway. +--> + +<!-- + <dc:creator> <rdf:Seq><rdf:li xml:lang="x-default"/></rdf:Seq></dc:creator> + <dc:description><rdf:Alt><rdf:li xml:lang="x-default"/></rdf:Alt></dc:description> + <dc:title> <rdf:Alt><rdf:li xml:lang="x-default"/></rdf:Alt></dc:title> +--> + <x:xmpmeta xmlns:x="adobe:ns:meta/"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:format>application/pdf</dc:format> - <dc:creator> - <rdf:Seq> - <rdf:li xml:lang="x-default"/> - </rdf:Seq> - </dc:creator> - <dc:description> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:description> - <dc:title> - <rdf:Alt> - <rdf:li xml:lang="x-default"/> - </rdf:Alt> - </dc:title> + <dc:creator/> + <dc:description/> + <dc:title/> </rdf:Description> <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/"> <pdfx:ID/> diff --git a/tex/context/base/mkiv/lpdf-xmp.lua b/tex/context/base/mkiv/lpdf-xmp.lua index 508bb1997..2ca3ab3fe 100644 --- a/tex/context/base/mkiv/lpdf-xmp.lua +++ b/tex/context/base/mkiv/lpdf-xmp.lua @@ -59,10 +59,11 @@ local mapping = { ["Producer"] = { "metadata","rdf:Description/pdf:Producer" }, -- ["Trapped"] = { "pdf", "rdf:Description/pdf:Trapped" }, -- '/False' in /Info, but 'False' in XMP -- Dublin Core schema - ["Author"] = { "metadata","rdf:Description/dc:creator/rdf:Seq/rdf:li" }, ["Format"] = { "metadata","rdf:Description/dc:format" }, -- optional, but nice to have - ["Subject"] = { "metadata","rdf:Description/dc:description/rdf:Alt/rdf:li" }, - ["Title"] = { "metadata","rdf:Description/dc:title/rdf:Alt/rdf:li" }, + -- These were dc:.../rdf:Seq/rdf:li but there was a (invalidating) bug in the iso + ["Author"] = { "metadata","rdf:Description/dc:creator" }, + ["Subject"] = { "metadata","rdf:Description/dc:description" }, + ["Title"] = { "metadata","rdf:Description/dc:title" }, -- XMP Basic schema ["CreateDate"] = { "date", "rdf:Description/xmp:CreateDate" }, ["CreationDate"] = { "date", "rdf:Description/xmp:CreationDate" }, -- dummy diff --git a/tex/context/base/mkiv/math-act.lua b/tex/context/base/mkiv/math-act.lua index e1ef751d7..4e3365d74 100644 --- a/tex/context/base/mkiv/math-act.lua +++ b/tex/context/base/mkiv/math-act.lua @@ -220,10 +220,10 @@ function mathematics.tweakaftercopyingfont(target,original) end end +sequencers.appendaction("mathparameters","system","mathematics.overloadparameters") sequencers.appendaction("mathparameters","system","mathematics.scaleparameters") sequencers.appendaction("mathparameters","system","mathematics.checkaccentbaseheight") -- should go in lfg instead sequencers.appendaction("mathparameters","system","mathematics.checkprivateparameters") -- after scaling ! -sequencers.appendaction("mathparameters","system","mathematics.overloadparameters") sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont") sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont") diff --git a/tex/context/base/mkiv/math-ini.lua b/tex/context/base/mkiv/math-ini.lua index 2a8129ca7..688f682c8 100644 --- a/tex/context/base/mkiv/math-ini.lua +++ b/tex/context/base/mkiv/math-ini.lua @@ -31,6 +31,8 @@ local ctx_doifelsesomething = commands.doifelsesomething local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) +-- trace_defining = true + local report_math = logs.reporter("mathematics","initializing") mathematics = mathematics or { } @@ -55,78 +57,96 @@ local families = allocate { --- to be checked .. afew defaults in char-def that should be alpha local classes = allocate { - ord = 0, -- mathordcomm mathord - op = 1, -- mathopcomm mathop - bin = 2, -- mathbincomm mathbin - rel = 3, -- mathrelcomm mathrel - open = 4, -- mathopencomm mathopen - middle = 4, - close = 5, -- mathclosecomm mathclose - punct = 6, -- mathpunctcomm mathpunct - alpha = 7, -- mathalphacomm firstofoneargument - accent = 8, -- class 0 - radical = 9, - xaccent = 10, -- class 3 - topaccent = 11, -- class 0 - botaccent = 12, -- class 0 - under = 13, - over = 14, - delimiter = 15, - inner = 0, -- mathinnercomm mathinner - nothing = 0, -- mathnothingcomm firstofoneargument - choice = 0, -- mathchoicecomm @@mathchoicecomm - box = 0, -- mathboxcomm @@mathboxcomm - limop = 1, -- mathlimopcomm @@mathlimopcomm - nolop = 1, -- mathnolopcomm @@mathnolopcomm + ord = 0, -- mathordcomm mathord + op = 1, -- mathopcomm mathop + bin = 2, -- mathbincomm mathbin + rel = 3, -- mathrelcomm mathrel + open = 4, -- mathopencomm mathopen + middle = 4, + close = 5, -- mathclosecomm mathclose + punct = 6, -- mathpunctcomm mathpunct + alpha = 7, -- mathalphacomm firstofoneargument + accent = 8, -- class 0 + radical = 9, + xaccent = 10, -- class 3 + topaccent = 11, -- class 0 + botaccent = 12, -- class 0 + under = 13, + over = 14, + delimiter = 15, + division = 15, + inner = 0, -- mathinnercomm mathinner + choice = 0, -- mathchoicecomm @@mathchoicecomm + prime = 0, + differential = 0, + exponential = 0, + limop = 1, -- mathlimopcomm @@mathlimopcomm + nolop = 1, -- mathnolopcomm @@mathnolopcomm -- - ordinary = 0, -- ord - alphabetic = 7, -- alpha - unknown = 0, -- nothing - default = 0, -- nothing - punctuation = 6, -- punct - normal = 0, -- nothing - opening = 4, -- open - closing = 5, -- close - binary = 2, -- bin - relation = 3, -- rel - fence = 0, -- unknown - diacritic = 8, -- accent - large = 1, -- op - variable = 7, -- alphabetic - number = 7, -- alphabetic - root = 16, -- a private one + ordinary = 0, -- ord + alphabetic = 7, -- alpha + punctuation = 6, -- punct + opening = 4, -- open + closing = 5, -- close + binary = 2, -- bin + relation = 3, -- rel + diacritic = 8, -- accent + large = 1, -- op + variable = 7, -- alphabetic + number = 7, -- alphabetic + root = 16, -- a private one } -local open_class = 4 -local middle_class = 4 -local close_class = 5 -local accent_class = 8 -local radical_class = 9 -local topaccent_class = 11 -local botaccent_class = 12 -local under_class = 13 -local over_class = 14 -local delimiter_class = 15 -local root_class = 16 +local engineclasses = table.setmetatableindex(function(t,k) + if k then + local c = tonumber(k) or classes[k] or 0 + local v = c < 8 and c or 0 + t[k] = v + return v + else + return 0 + end +end) + +local ordinary_class = classes.ordinary +local open_class = classes.open +local middle_class = classes.middle +local close_class = classes.close +local accent_class = classes.accent +local radical_class = classes.radical +local topaccent_class = classes.topaccent +local botaccent_class = classes.botaccent +local under_class = classes.under +local over_class = classes.over +local delimiter_class = classes.delimiter +local division_class = classes.division +local root_class = classes.root local accents = allocate { accent = true, -- some can be both - topaccent = true, [11] = true, - botaccent = true, [12] = true, - under = true, [13] = true, - over = true, [14] = true, + topaccent = true, [topaccent_class] = true, + botaccent = true, [botaccent_class] = true, + under = true, [under_class] = true, + over = true, [over_class] = true, unknown = false, } +-- engine subtypes get from elsewhere + local codes = allocate { - ordinary = 0, [0] = "ordinary", - largeoperator = 1, "largeoperator", - binaryoperator = 2, "binaryoperator", - relation = 3, "relation", - openingsymbol = 4, "openingsymbol", - closingsymbol = 5, "closingsymbol", - punctuation = 6, "punctuation", - variable = 7, "variable", + ordinary = 0, [ 0] = "ordinary", + largeoperator = 1, [ 1] = "largeoperator", + binaryoperator = 2, [ 2] = "binaryoperator", + relation = 3, [ 3] = "relation", + openingsymbol = 4, [ 4] = "openingsymbol", + closingsymbol = 5, [ 5] = "closingsymbol", + punctuation = 6, [ 6] = "punctuation", + -- inner = 7, [ 7] = "inner", + -- undersymbol = 8, [ 8] = "undersymbol", + -- oversymbol = 9, [ 9] = "oversymbol", + -- fractionsymbol = 10, [10] = "fractionsymbol", + -- radicalsymbol = 11, [11] = "radicalsymbol", + middlesymbol = 12, [12] = "middlesymbol", } local extensibles = allocate { @@ -176,257 +196,206 @@ mathematics.codes = codes mathematics.families = families mathematics.virtualized = virtualized --- there will be proper functions soon (and we will move this code in-line) --- no need for " in class and family (saves space) - --- local function mathchar(class,family,slot) --- return formatters['\\Umathchar "%X "%X "%X '](class,family,slot) --- end --- --- local function mathaccent(class,family,slot) --- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class --- end --- --- local function delimiter(class,family,slot) --- return formatters['\\Udelimiter "%X "%X "%X '](class,family,slot) --- end --- --- local function radical(family,slot) --- return formatters['\\Uradical "%X "%X '](family,slot) --- end --- --- local function root(family,slot) --- return formatters['\\Uroot "%X "%X '](family,slot) --- end --- --- local function mathchardef(name,class,family,slot) --- return formatters['\\Umathchardef\\%s "%X "%X "%X '](name,class,family,slot) --- end --- --- local function mathcode(target,class,family,slot) --- return formatters['\\Umathcode%s="%X "%X "%X '](target,class,family,slot) --- end --- --- local function mathtopaccent(class,family,slot) --- return formatters['\\Umathaccent "%X "%X "%X '](0,family,slot) -- no class --- end --- --- local function mathbotaccent(class,family,slot) --- return formatters['\\Umathaccent bottom "%X "%X "%X '](0,family,slot) -- no class --- end --- --- local function mathtopdelimiter(class,family,slot) --- return formatters['\\Udelimiterover "%X "%X '](family,slot) -- no class --- end --- --- local function mathbotdelimiter(class,family,slot) --- return formatters['\\Udelimiterunder "%X "%X '](family,slot) -- no class --- end - local escapes = characters.filters.utf.private.escapes --- not that many so no need to reuse tables +do -local setmathcharacter = function(class,family,slot,unicode,mset,dset) - if mset and codes[class] then -- regular codes < 7 - setmathcode("global",slot,class,family,unicode) - mset = false - end - if dset and class == open_class or class == close_class or class == middle_class then - setdelcode("global",slot,family,unicode,0,0) - dset = false + local setmathcharacter = function(class,family,slot,unicode,mset,dset) + if mset and codes[class] then -- regular codes < 7 + setmathcode("global",slot,class,family,unicode) + mset = false + end + if dset and (class == open_class or class == close_class or class == middle_class or class == division_class) then + setdelcode("global",slot,family,unicode,0,0) + dset = false + end + return mset, dset end - return mset, dset -end - --- todo: make nice setters for this in lua - -local f_accent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] -local f_topaccent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] -local f_botaccent = formatters[ [[\defUmathbotaccent \%s{%X}{%X}{%X}]] ] -local f_over = formatters[ [[\defUdelimiterover \%s{%X}{%X}{%X}]] ] -local f_under = formatters[ [[\defUdelimiterunder\%s{%X}{%X}{%X}]] ] -local f_fence = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] -local f_delimiter = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] -local f_radical = formatters[ [[\defUradical \%s{%X}{%X}]] ] -local f_root = formatters[ [[\defUroot \%s{%X}{%X}]] ] -local f_char = formatters[ [[\defUmathchar \%s{%X}{%X}{%X}]] ] - -local texmathchardef = tex.mathchardef - --- local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing --- if class == classes.accent then --- ctx_sprint(f_topaccent(name,0,family,slot)) --- elseif class == classes.topaccent then --- ctx_sprint(f_topaccent(name,0,family,slot)) --- elseif class == classes.botaccent then --- ctx_sprint(f_botaccent(name,0,family,slot)) --- elseif class == classes.over then --- ctx_sprint(f_over(name,0,family,slot)) --- elseif class == classes.under then --- ctx_sprint(f_under(name,0,family,slot)) --- elseif class == open_class or class == close_class or class == middle_class then --- setdelcode("global",slot,{family,slot,0,0}) --- ctx_sprint(f_fence(name,class,family,slot)) --- elseif class == classes.delimiter then --- setdelcode("global",slot,{family,slot,0,0}) --- ctx_sprint(f_delimiter(name,0,family,slot)) --- elseif class == classes.radical then --- ctx_sprint(f_radical(name,family,slot)) --- elseif class == classes.root then --- ctx_sprint(f_root(name,family,slot)) --- elseif texmathchardef then --- texmathchardef(name,class,family,slot,"permanent") --- else --- -- beware, open/close and other specials should not end up here --- ctx_sprint(f_char(name,class,family,slot)) --- end --- end -local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing - if class == accent_class then - ctx_sprint(f_topaccent(name,0,family,slot)) - elseif class == topaccent_class then - ctx_sprint(f_topaccent(name,0,family,slot)) - elseif class == botaccent_class then - ctx_sprint(f_botaccent(name,0,family,slot)) - elseif class == over_class then - ctx_sprint(f_over(name,0,family,slot)) - elseif class == under_class then - ctx_sprint(f_under(name,0,family,slot)) - elseif class == open_class or class == close_class or class == middle_class then - setdelcode("global",slot,{family,slot,0,0}) - ctx_sprint(f_fence(name,class,family,slot)) - elseif class == delimiter_class then - setdelcode("global",slot,{family,slot,0,0}) - ctx_sprint(f_delimiter(name,0,family,slot)) - elseif class == radical_class then - ctx_sprint(f_radical(name,family,slot)) - elseif class == root_class then - ctx_sprint(f_root(name,family,slot)) - elseif texmathchardef then - texmathchardef(name,class,family,slot,"permanent") - else - -- beware, open/close and other specials should not end up here - ctx_sprint(f_char(name,class,family,slot)) + local function report(class,engine,family,unicode,name) + local nametype = type(name) + if nametype == "string" then + report_math("class %a, engine %a, family %a, char %C, name %a",class,engine,family,unicode,name) + elseif nametype == "number" then + report_math("class %a, engine %a, family %a, char %C, number %U",class,engine,family,unicode,name) + else + report_math("class %a, engine %a, family %a, char %C",class,engine,family,unicode) + end end -end -local function report(class,family,unicode,name) - local nametype = type(name) - if nametype == "string" then - report_math("class name %a, class %a, family %a, char %C, name %a",classname,class,family,unicode,name) - elseif nametype == "number" then - report_math("class name %a, class %a, family %a, char %C, number %U",classname,class,family,unicode,name) - else - report_math("class name %a, class %a, family %a, char %C", classname,class,family,unicode) + local f_accent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] + local f_topaccent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] + local f_botaccent = formatters[ [[\defUmathbotaccent \%s{%X}{%X}{%X}]] ] + local f_over = formatters[ [[\defUdelimiterover \%s{%X}{%X}{%X}]] ] + local f_under = formatters[ [[\defUdelimiterunder\%s{%X}{%X}{%X}]] ] + local f_fence = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] + local f_delimiter = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] + local f_radical = formatters[ [[\defUradical \%s{%X}{%X}]] ] + local f_root = formatters[ [[\defUroot \%s{%X}{%X}]] ] + local f_char = formatters[ [[\defUmathchar \%s{%X}{%X}{%X}]] ] + + local texmathchardef = tex.mathchardef + + local setmathsymbol = function(name,class,engine,family,slot) -- hex is nicer for tracing + if class == accent_class then + ctx_sprint(f_topaccent(name,0,family,slot)) + elseif class == topaccent_class then + ctx_sprint(f_topaccent(name,0,family,slot)) + elseif class == botaccent_class then + ctx_sprint(f_botaccent(name,0,family,slot)) + elseif class == over_class then + ctx_sprint(f_over(name,0,family,slot)) + elseif class == under_class then + ctx_sprint(f_under(name,0,family,slot)) + elseif class == open_class or class == close_class or class == middle_class then + setdelcode("global",slot,{family,slot,0,0}) + ctx_sprint(f_fence(name,engine,family,slot)) + elseif class == delimiter_class then + setdelcode("global",slot,{family,slot,0,0}) + ctx_sprint(f_delimiter(name,0,family,slot)) + elseif class == radical_class then + ctx_sprint(f_radical(name,family,slot)) + elseif class == root_class then + ctx_sprint(f_root(name,family,slot)) + elseif texmathchardef then + texmathchardef(name,engine,family,slot,"permanent") + else + -- beware, open/close and other specials should not end up here + ctx_sprint(f_char(name,engine,family,slot)) + end end -end --- there will be a combined \(math)chardef (tracker) - -function mathematics.define(family) - family = family or 0 - family = families[family] or family - local data = characters.data - for unicode, character in sortedhash(data) do - local symbol = character.mathsymbol - local mset = true - local dset = true - if symbol then - local other = data[symbol] - local class = other.mathclass - if class then - class = classes[class] or class -- no real checks needed - if trace_defining then - report(class,family,unicode,symbol) - end - mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) + function mathematics.define(family) + family = family or 0 + family = families[family] or family + local data = characters.data + -- + local function remap(first,last) + for unicode=utfbyte(first),utfbyte(last) do + setmathcode("global",unicode,ordinary_class,family,unicode) end - local spec = other.mathspec - if spec then - for i=1,#spec do - local m = spec[i] - local class = m.class - if class then - class = classes[class] or class -- no real checks needed - mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) + end + remap("0","9") + remap("A","Z") + remap("a","z") + -- + for unicode, character in sortedhash(data) do + local symbol = character.mathsymbol + local mset = true + local dset = true + if symbol then + local other = data[symbol] + local class = other.mathclass + if class then + local engine = engineclasses[class] + if trace_defining then + report(class,engine,family,unicode,symbol) end + mset, dset = setmathcharacter(engine,family,unicode,symbol,mset,dset) end - end - end - local mathclass = character.mathclass - local mathspec = character.mathspec - if mathspec then - if mathclass then - local name = character.mathname - if name then - report_math("fatal error, conflicting mathclass and mathspec for %C",unicode) - os.exit() - else - local class = classes[mathclass] or mathclass -- no real checks needed - if not class then - if trace_defining then - report("unknown",family,unicode) + local spec = other.mathspec + if spec then + for i=1,#spec do + local m = spec[i] + local class = m.class + if class then + local engine = engineclasses[class] + -- todo: trace + mset, dset = setmathcharacter(engine,family,unicode,symbol,mset,dset) end - else - if trace_defining then - report(class,family,unicode) - end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) end end end - for i=1,#mathspec do - local m = mathspec[i] - local name = m.name - local class = m.class + local class = character.mathclass + local spec = character.mathspec + local name = character.mathname + if spec then + local done = false if class then - class = classes[class] or class -- no real checks needed if name then + report_math("fatal error, conflicting mathclass and mathspec for %C",unicode) + os.exit() + else + class = classes[class] or ordinary_class + local engine = engineclasses[class] if trace_defining then - report(class,family,unicode,name) + report(class,engine,family,unicode) end - setmathsymbol(name,class,family,unicode) + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) + done = true + end + end + for i=1,#spec do + local m = spec[i] + local name = m.name + local class = m.class or class + if class then + class = classes[class] or ordinary_class else - name = (class == classes.variable or class == classes.number) and character.adobename -- bad - if name and trace_defining then - report(class,family,unicode,name) + class = ordinary_class + end + if class then + local engine = engineclasses[class] + if name then + if trace_defining then + report(class,engine,family,unicode,name) + end + setmathsymbol(name,class,engine,family,unicode) + else + name = (class == classes.ordinary or class == classes.digit) and character.adobename -- bad + if name and trace_defining then + report(class,engine,family,unicode,name) + end + end + if not done then + mset, dset = setmathcharacter(engine,family,unicode,m.unicode or unicode,mset,dset) -- see solidus + done = true end end - mset, dset = setmathcharacter(class,family,unicode,m.unicode or unicode,mset,dset) -- see solidus - end - end - elseif mathclass then - local name = character.mathname - local class = classes[mathclass] or mathclass -- no real checks needed - if not class then - if trace_defining then - report("unknown",family,unicode,name) end - elseif name == false then - if trace_defining then - report(class,family,unicode,name) - end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) else - -- if not name then - -- name = character.contextname -- too dangerous, we loose textslash and a few more - -- end - if name then - if trace_defining then - report(class,family,unicode,name) - end - setmathsymbol(name,class,family,unicode) + if class then + class = classes[class] or ordinary_class else + class = ordinary_class + end + if name ~= nil then + local engine = engineclasses[class] + if name == false then + if trace_defining then + report(class,engine,family,unicode,name) + end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) + else + -- if not name then + -- name = character.contextname -- too dangerous, we loose textslash and a few more + -- end + if name then + if trace_defining then + report(class,engine,family,unicode,name) + end + setmathsymbol(name,class,engine,family,unicode) + else + if trace_defining then + report(class,engine,family,unicode,character.adobename) + end + end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) + end + elseif class ~= ordinary_class then + local engine = engineclasses[class] if trace_defining then - report(class,family,unicode,character.adobename) + report(class,engine,family,unicode,character.adobename) end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) end end + if trace_defining then + logs.stopfilelogging() + end end + end -- needed for mathml analysis diff --git a/tex/context/base/mkiv/math-int.mkiv b/tex/context/base/mkiv/math-int.mkiv index 5876eb7bb..0920415f9 100644 --- a/tex/context/base/mkiv/math-int.mkiv +++ b/tex/context/base/mkiv/math-int.mkiv @@ -68,8 +68,8 @@ \to \everyswitchmathematics \setupmathematics -% [\v!integral=nolimits] - [\v!integral=autolimits] +% [\c!integral=nolimits] + [\c!integral=autolimits] %D The following code is used for fallbacks and might become obsolete once %D we have enough \OPENTYPE\ math fonts. diff --git a/tex/context/base/mkiv/math-tag.lua b/tex/context/base/mkiv/math-tag.lua index 3c53c2cc8..5bbe5cb3a 100644 --- a/tex/context/base/mkiv/math-tag.lua +++ b/tex/context/base/mkiv/math-tag.lua @@ -99,7 +99,6 @@ local chardata = characters.data local getmathcodes = tex.getmathcodes local mathcodes = mathematics.codes local ordinary_mathcode = mathcodes.ordinary -local variable_mathcode = mathcodes.variable local fromunicode16 = fonts.mappings.fromunicode16 local fontcharacters = fonts.hashes.characters @@ -226,7 +225,7 @@ process = function(start) -- we cannot use the processor as we have no finalizer local char = getchar(start) local code = getmathcodes(char) local tag - if code == ordinary_mathcode or code == variable_mathcode then + if code == ordinary_mathcode then local ch = chardata[char] local mc = ch and ch.mathclass if mc == "number" then diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index e294e65d1..c0a9d70e0 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -7881,6 +7881,10 @@ return { ["fr"]="commandebas", ["nl"]="ondercommando", }, + ["bottomcolor"]={ + ["en"]="bottomcolor", + ["nl"]="onderkleur", + }, ["bottomdistance"]={ ["cs"]="vzdalenostspodku", ["de"]="abstandunten", @@ -9453,6 +9457,10 @@ return { ["en"]="instance", ["fr"]="instance", }, + ["integral"]={ + ["en"]="integral", + ["fr"]="integrale", + }, ["intent"]={ ["en"]="intent", ["fr"]="intention", @@ -12427,6 +12435,10 @@ return { ["fr"]="commandehaut", ["nl"]="bovencommando", }, + ["topcolor"]={ + ["en"]="topcolor", + ["nl"]="bovenkleur", + }, ["topdistance"]={ ["cs"]="vzdalenostvrsku", ["de"]="obenabstand", @@ -12806,6 +12818,15 @@ return { ["pe"]="گاموای", ["ro"]="ystep", }, + ["leftsource"]={ + ["en"]="leftsource", + }, + ["rightsource"]={ + ["en"]="rightsource", + }, + ["middlesource"]={ + ["en"]="middlesource", + }, ["source"]={ ["en"]="source", }, @@ -16305,10 +16326,6 @@ return { ["pe"]="درحاشیهراست", ["ro"]="inmargineadreapta", }, - ["integral"]={ - ["en"]="integral", - ["fr"]="integrale", - }, ["interaction"]={ ["cs"]="interakce", ["de"]="interaktion", diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index 2be5115e0..e5feab5d6 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -22,6 +22,7 @@ return { "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "binaryshiftedten", "binaryshiftedtwenty", "binaryshiftedthirty", + "thickermuskip", -- "directionlefttoright", "directionrighttoleft", -- @@ -77,7 +78,8 @@ return { "loosenessfrozenparcode", "lastlinefrozenparcode", "linepenaltyfrozenparcode", "clubpenaltyfrozenparcode", "widowpenaltyfrozenparcode", "displaypenaltyfrozenparcode", "brokenpenaltyfrozenparcode", "demeritsfrozenparcode", "shapefrozenparcode", "linefrozenparcode", "hyphenationfrozenparcode", - "shapingpenaltiesfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", + "shapingpenaltyfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", + "mathpenaltyfrozenparcode", -- "activemathcharcode", -- @@ -103,10 +105,11 @@ return { "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", -- "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", - "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "accentitalickernmathcontrolcode", - "delimiteritalickernmathcontrolcode", "noorditalickernmathcontrolcode", "charitalicwidthmathcontrolcode", - "charitalicnoreboxmathcontrolcode", "boxednoitalickernmathcontrolcode", "nostaircasekernmathcontrolcode", - "textitalickernmathcontrolcode", "noscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", + "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "checkligatureandkernmathcontrolcode", + "applyverticalitalickernmathcontrolcode", "applyordinaryitalickernmathcontrolcode", "applycharitalickernmathcontrolcode", + "reboxcharitalickernmathcontrolcode", "applyboxeditalickernmathcontrolcode", "staircasekernmathcontrolcode", + "applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", + "checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", @@ -157,9 +160,16 @@ return { -- "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", -- - "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", - "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", - "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", + "mathordinarycode", "mathordcode", "mathoperatorcode", "mathopcode", "mathbinarycode", "mathbincode", + "mathrelationcode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctuationcode", + "mathpunctcode", "mathovercode", "mathundercode", "mathinnercode", "mathradicalcode", + "mathfractioncode", "mathmiddlecode", "mathaccentcode", "mathfencedcode", "mathghostcode", + "mathvariablecode", "mathactivecode", "mathvcentercode", + "mathbegincode", "mathendcode", "mathexplicitcode", "mathdivisioncode", "mathfactorialcode", + -- + "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathfunctioncode", "mathdigitcode", + -- "mathtopaccentcode", "mathbottomaccentcode", "mathdelimitercode", "mathrootcode", "mathprintcode", -- + "mathalphacode", "mathboxcode", "mathchoicecode", "mathnothingcode", "mathlimopcode", "mathnolopcode", -- "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", -- @@ -193,7 +203,7 @@ return { -- "normalizelinenormalizecode", "parindentskipnormalizecode", "swaphangindentnormalizecode", "swapparsshapenormalizecode", "breakafterdirnormalizecode", "removemarginkernsnormalizecode", "clipwidthnormalizecode", "flattendiscretionariesnormalizecode", - "discardzerotabskipsnormalizecode", + "discardzerotabskipsnormalizecode", "flattenleadersnormalizecode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", @@ -260,7 +270,8 @@ return { -- "donetrue", "donefalse", "foundtrue", "foundfalse", -- - "inlineordisplaymath","indisplaymath","forcedisplaymath","startforceddisplaymath","stopforceddisplaymath","startpickupmath","stoppickupmath","reqno", + "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", + "startpickupmath", "stoppickupmath", "reqno", "forceinlinemath", -- "mathortext", -- @@ -307,6 +318,7 @@ return { "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "simplegroupedcommandcs", "pickupgroupedcommand", "pickupgroupedcommandcs", + "mathgroupedcommandcs", -- "usedbaselineskip", "usedlineskip", "usedlineskiplimit", -- @@ -467,43 +479,51 @@ return { -- "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", - "ordfracspacing", "ordradspacing", + "ordfracspacing", "ordradspacing", "ordmiddlespacing", "ordaccentspacing", -- "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", - "opfracspacing", "opradspacing", + "opfracspacing", "opradspacing", "opmiddlespacing", "opaccentspacing", -- "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", - "binfracspacing", "binradspacing", + "binfracspacing", "binradspacing", "binmiddlespacing", "binaccentspacing", -- "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", - "relfracspacing", "relradspacing", + "relfracspacing", "relradspacing", "relmiddlespacing", "relaccentspacing", -- "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", - "openfracspacing", "openradspacing", + "openfracspacing", "openradspacing", "openmiddlespacing", "openaccentspacing", -- "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", - "closefracspacing", "closeradspacing", + "closefracspacing", "closeradspacing", "closemiddlespacing", "closeaccentspacing", -- "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", - "punctfracspacing", "punctradspacing", + "punctfracspacing", "punctradspacing", "punctmiddlespacing", "punctaccentspacing", -- "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", - "innerfracspacing", "innerradspacing", + "innerfracspacing", "innerradspacing", "innermiddlespacing", "inneraccentspacing", -- "fracordspacing", "fracopspacing", "fracbinspacing", "fracrelspacing", "fracopenspacing", "fracclosespacing", "fracpunctspacing", "fracinnerspacing", - "fracfracspacing", "fracradspacing", + "fracfracspacing", "fracradspacing", "fracmiddlespacing", "fracaccentspacing", -- "radordspacing", "radopspacing", "radbinspacing", "radrelspacing", "radopenspacing", "radclosespacing", "radpunctspacing", "radinnerspacing", - "radfracspacing", "radradspacing", + "radfracspacing", "radradspacing", "radmiddlespacing", "radaccentspacing", + -- + "middleordspacing", "middleopspacing", "middlebinspacing", "middlerelspacing", + "middleopenspacing", "middleclosespacing", "middlepunctspacing", "middleinnerspacing", + "middlefracspacing", "middleradspacing", "middlemiddlespacing", "middleaccentspacing", + -- + "accentordspacing", "accentopspacing", "accentbinspacing", "accentrelspacing", + "accentopenspacing", "accentclosespacing", "accentpunctspacing", "accentinnerspacing", + "accentfracspacing", "accentradspacing", "accentmiddlespacing", "accentaccentspacing", -- "normalreqno", -- diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 6959944d9..bbc41176b 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -64,8 +64,6 @@ return { "widowpenalties", }, ["luatex"]={ - "UUskewed", - "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", @@ -84,16 +82,6 @@ return { "Umathadapttoleft", "Umathadapttoright", "Umathaxis", - "Umathbinbinspacing", - "Umathbinclosespacing", - "Umathbinfracspacing", - "Umathbininnerspacing", - "Umathbinopenspacing", - "Umathbinopspacing", - "Umathbinordspacing", - "Umathbinpunctspacing", - "Umathbinradspacing", - "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", @@ -103,16 +91,6 @@ return { "Umathcharnumdef", "Umathcharslot", "Umathclass", - "Umathclosebinspacing", - "Umathcloseclosespacing", - "Umathclosefracspacing", - "Umathcloseinnerspacing", - "Umathcloseopenspacing", - "Umathcloseopspacing", - "Umathcloseordspacing", - "Umathclosepunctspacing", - "Umathcloseradspacing", - "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", @@ -128,16 +106,6 @@ return { "Umathextrasupprespace", "Umathextrasupshift", "Umathextrasupspace", - "Umathfracbinspacing", - "Umathfracclosespacing", - "Umathfracfracspacing", - "Umathfracinnerspacing", - "Umathfracopenspacing", - "Umathfracopspacing", - "Umathfracordspacing", - "Umathfracpunctspacing", - "Umathfracradspacing", - "Umathfracrelspacing", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", @@ -146,16 +114,6 @@ return { "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", - "Umathinnerbinspacing", - "Umathinnerclosespacing", - "Umathinnerfracspacing", - "Umathinnerinnerspacing", - "Umathinneropenspacing", - "Umathinneropspacing", - "Umathinnerordspacing", - "Umathinnerpunctspacing", - "Umathinnerradspacing", - "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", @@ -168,39 +126,9 @@ return { "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", - "Umathopbinspacing", - "Umathopclosespacing", - "Umathopenbinspacing", - "Umathopenclosespacing", - "Umathopenfracspacing", - "Umathopeninnerspacing", - "Umathopenopenspacing", - "Umathopenopspacing", - "Umathopenordspacing", - "Umathopenpunctspacing", - "Umathopenradspacing", - "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", - "Umathopfracspacing", - "Umathopinnerspacing", - "Umathopopenspacing", - "Umathopopspacing", - "Umathopordspacing", - "Umathoppunctspacing", - "Umathopradspacing", - "Umathoprelspacing", - "Umathordbinspacing", - "Umathordclosespacing", - "Umathordfracspacing", - "Umathordinnerspacing", - "Umathordopenspacing", - "Umathordopspacing", - "Umathordordspacing", - "Umathordpunctspacing", - "Umathordradspacing", - "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", @@ -210,20 +138,14 @@ return { "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", - "Umathpunctbinspacing", - "Umathpunctclosespacing", - "Umathpunctfracspacing", - "Umathpunctinnerspacing", - "Umathpunctopenspacing", - "Umathpunctopspacing", - "Umathpunctordspacing", - "Umathpunctpunctspacing", - "Umathpunctradspacing", - "Umathpunctrelspacing", + "Umathpresubshiftdistance", + "Umathpresupshiftdistance", + "Umathprimeraise", + "Umathprimeshiftdrop", + "Umathprimeshiftup", + "Umathprimesupspace", + "Umathprimevariant", "Umathquad", - "Umathradbinspacing", - "Umathradclosespacing", - "Umathradfracspacing", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", @@ -231,33 +153,19 @@ return { "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", - "Umathradinnerspacing", - "Umathradopenspacing", - "Umathradopspacing", - "Umathradordspacing", - "Umathradpunctspacing", - "Umathradradspacing", - "Umathradrelspacing", - "Umathrelbinspacing", - "Umathrelclosespacing", - "Umathrelfracspacing", - "Umathrelinnerspacing", - "Umathrelopenspacing", - "Umathrelopspacing", - "Umathrelordspacing", - "Umathrelpunctspacing", - "Umathrelradspacing", - "Umathrelrelspacing", + "Umathruledepth", + "Umathruleheight", + "Umathskeweddelimitertolerance", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", - "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", + "Umathsubshiftdistance", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", @@ -265,6 +173,7 @@ return { "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", + "Umathsupshiftdistance", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", @@ -276,6 +185,7 @@ return { "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", + "Umathuseaxis", "Umathvextensiblevariant", "Umathvoid", "Umathxscale", @@ -285,12 +195,18 @@ return { "Unosubscript", "Unosuperprescript", "Unosuperscript", + "Uoperator", "Uover", "Uoverdelimiter", "Uoverwithdelims", + "Uprimescript", "Uradical", "Uright", "Uroot", + "Ushiftedsubprescript", + "Ushiftedsubscript", + "Ushiftedsuperprescript", + "Ushiftedsuperscript", "Uskewed", "Uskewedwithdelims", "Ustack", @@ -314,10 +230,14 @@ return { "aliased", "alignmark", "aligntab", + "allcrampedstyles", + "alldisplaystyles", "allmathstyles", + "allscriptscriptstyles", "allscriptstyles", "allsplitstyles", "alltextstyles", + "alluncrampedstyles", "atendofgroup", "atendofgrouped", "attribute", @@ -347,6 +267,9 @@ return { "boxyoffset", "catcodetable", "clearmarks", + "copymathatomrule", + "copymathparent", + "copymathspacing", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", @@ -480,13 +403,19 @@ return { "lastarguments", "lastchkdim", "lastchknum", + "lastleftclass", + "lastloopiterator", "lastnamedcs", "lastnodesubtype", "lastparcontext", + "lastrightclass", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", + "letmathatomrule", + "letmathparent", + "letmathspacing", "letprotected", "lettonothing", "linedirection", @@ -512,15 +441,23 @@ return { "luatexbanner", "luatexrevision", "luatexversion", + "mathaccent", + "mathatom", + "mathatomskip", + "mathbackwardpenalties", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", - "mathflattenmode", + "mathfenced", + "mathfencesmode", "mathfontcontrol", + "mathforwardpenalties", "mathfrac", + "mathghost", "mathlimitsmode", + "mathmiddle", "mathnolimitsmode", "mathpenaltiesmode", "mathrad", @@ -531,9 +468,14 @@ return { "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", + "mathslackmode", + "mathspacingmode", + "mathstackstyle", "mathstyle", + "mathstylefontid", "mathsurroundmode", "mathsurroundskip", + "maththreshold", "mugluespecdef", "mutable", "noaligned", @@ -562,26 +504,45 @@ return { "permanent", "postexhyphenchar", "posthyphenchar", + "postinlinepenalty", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", + "preinlinepenalty", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitloop", "quitvmode", + "resetmathspacing", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", + "scaledemwidth", + "scaledexheight", + "scaledextraspace", + "scaledinterwordshrink", + "scaledinterwordspace", + "scaledinterwordstretch", + "scaledslantperpoint", "scantextokens", "semiexpanded", "semiprotected", + "setdefaultmathcodes", "setfontid", + "setmathatomrule", + "setmathignore", + "setmathoptions", + "setmathpostpenalty", + "setmathprepenalty", + "setmathspacing", "shapingpenaltiesmode", "shapingpenalty", + "skewed", + "skewedwithdelims", "snapshotpar", "supmarkmode", "swapcsvalues", @@ -607,6 +568,7 @@ return { "tracingmarks", "tracingmath", "tracingnodes", + "uleaders", "undent", "unexpandedloop", "unletfrozen", @@ -900,7 +862,6 @@ return { "lower", "lowercase", "mark", - "mathaccent", "mathbin", "mathchar", "mathchardef", @@ -1010,6 +971,7 @@ return { "splitfirstmark", "splitmaxdepth", "splittopskip", + "srule", "string", "tabskip", "textfont", @@ -1018,6 +980,7 @@ return { "thickmuskip", "thinmuskip", "time", + "tinymuskip", "toks", "toksdef", "tolerance", diff --git a/tex/context/base/mkiv/node-ser.lua b/tex/context/base/mkiv/node-ser.lua index 0f4d13bb6..ee2abe0d2 100644 --- a/tex/context/base/mkiv/node-ser.lua +++ b/tex/context/base/mkiv/node-ser.lua @@ -133,7 +133,7 @@ setinspector("node",function(v) if isnode(v) then printtable(astable(v),tostring local function totable(n,flat,verbose,noattributes) -- nicest: n,true,true,true local function to_table(n,flat,verbose,noattributes) -- no need to pass - local f = getfields(n) + local f = getfields(n.id) local tt = { } for k=1,#f do local v = f[k] diff --git a/tex/context/base/mkiv/page-str.lua b/tex/context/base/mkiv/page-str.lua index e136a38b4..64e593e27 100644 --- a/tex/context/base/mkiv/page-str.lua +++ b/tex/context/base/mkiv/page-str.lua @@ -27,8 +27,9 @@ local write_node = nuts.write local flushnode = nuts.flush local copy_node_list = nuts.copylist local vpack_node_list = nuts.vpack +local new_rule = nuts.pool.rule -local getbox = nuts.getbox +----- getbox = nuts.getbox local setlink = nuts.setlink local getlist = nuts.getlist local setlist = nuts.setlist @@ -40,7 +41,6 @@ local settings_to_array = utilities.parsers.settings_to_array local enableaction = nodes.tasks.enableaction local texgetdimen = tex.getdimen ------ texgetbox = tex.getbox local trace_collecting = false trackers.register("streams.collecting", function(v) trace_collecting = v end) local trace_flushing = false trackers.register("streams.flushing", function(v) trace_flushing = v end) @@ -226,9 +226,11 @@ function streams.synchronize(list) -- this is an experiment ! local delta = delta_height -- for tracing while delta > 0 do -- we need to add some interline penalties - local line = copy_node_list(getbox("strutbox")) - setwhd(line,false,strutht,strutdp) + -- local line = copy_node_list(getbox("strutbox")) + -- setwhd(line,false,strutht,strutdp) + local line = new_rule(0,strutht,strutdp) -- no tracing if tail then + -- todo: inject at a better place setlink(tail,line) end tail = line diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex 2675edd1b..75450daa5 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 7dea83d86..63b45c4c1 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-pag.lua b/tex/context/base/mkiv/strc-pag.lua index 9c040104d..5cdba5b76 100644 --- a/tex/context/base/mkiv/strc-pag.lua +++ b/tex/context/base/mkiv/strc-pag.lua @@ -322,10 +322,6 @@ function pages.on_right(n) end end -function pages.has_changed() - return texconditionals.layouthaschanged -end - function pages.in_body(n) return texgetcount("pagebodymode") > 0 end diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv index 568912a33..dd3e7c822 100644 --- a/tex/context/base/mkiv/syst-ini.mkiv +++ b/tex/context/base/mkiv/syst-ini.mkiv @@ -589,7 +589,7 @@ \protected\def\defUmathbotaccent #1#2#3#4{\global\instance\protected\def#1{\Umathbotaccent "#2 "#3 "#4 }} \protected\def\defUdelimiterover #1#2#3#4{\global\instance\protected\def#1{\Udelimiterover "#2 "#3 }} \protected\def\defUdelimiterunder #1#2#3#4{\global\instance\protected\def#1{\Udelimiterunder "#2 "#3 }} -\protected\def\defUdelimiter #1#2#3#4{\global\instance\protected\def#1{\Udelimiter "#2 "#2 "#4 }} +\protected\def\defUdelimiter #1#2#3#4{\global\instance\protected\def#1{\Udelimiter "#2 "#3 "#4 }} \protected\def\defUradical #1#2#3{\global\instance\protected\def#1{\Uradical "#2 "#3 }} \protected\def\defUroot #1#2#3{\global\instance\protected\def#1{\Uroot "#2 "#3 }} \protected\def\defUmathchar #1#2#3#4{\global\instance\Umathchardef #1 "#2 "#3 "#4 } diff --git a/tex/context/base/mkiv/typo-mar.lua b/tex/context/base/mkiv/typo-mar.lua index f8c135fa7..56324c790 100644 --- a/tex/context/base/mkiv/typo-mar.lua +++ b/tex/context/base/mkiv/typo-mar.lua @@ -270,8 +270,8 @@ function margins.save(t) if t.number then local leftmargindistance = texgetdimen("naturalleftmargindistance") local rightmargindistance = texgetdimen("naturalrightmargindistance") - local strutbox = getbox("strutbox") - local _, strutht, strutdp = getwhd(strutbox) + local strutht = texgetdimen("strutht") + local strutdp = texgetdimen("strutdp") -- better make a new table and make t entry in t t.box = content t.n = nofsaved diff --git a/tex/context/base/mkiv/util-sac.lua b/tex/context/base/mkiv/util-sac.lua index 796a620ba..36daef816 100644 --- a/tex/context/base/mkiv/util-sac.lua +++ b/tex/context/base/mkiv/util-sac.lua @@ -544,3 +544,39 @@ do end end + +if bit32 and not streams.tocardinal1 then + + local extract = bit32.extract + local char = string.char + + streams.tocardinal1 = char + function streams.tocardinal2(n) return char(extract( 8,8),extract( 0,8)) end + function streams.tocardinal3(n) return char(extract(16,8),extract( 8,8),extract(0,8)) end + function streams.tocardinal4(n) return char(extract(24,8),extract(16,8),extract(8,8),extract(0,8)) end + + streams.tocardinal1le = char + function streams.tocardinal2le(n) return char(extract(0,8),extract(8,8)) end + function streams.tocardinal3le(n) return char(extract(0,8),extract(8,8),extract(16,8)) end + function streams.tocardinal4le(n) return char(extract(0,8),extract(8,8),extract(16,8),extract(24,8)) end + +end + +if not streams.readcstring then + + local readchar = streams.readchar + local concat = table.concat + + function streams.readcstring(f) + local t = { } + while true do + local c = readchar(f) + if c and c ~= "\0" then + t[#t+1] = c + else + return concat(t) + end + end + end + +end diff --git a/tex/context/base/mkiv/util-sql-tickets.lua b/tex/context/base/mkiv/util-sql-tickets.lua index 3258fb186..d852212bc 100644 --- a/tex/context/base/mkiv/util-sql-tickets.lua +++ b/tex/context/base/mkiv/util-sql-tickets.lua @@ -18,7 +18,7 @@ local ostime, uuid, osfulltime = os.time, os.uuid, os.fulltime local random = math.random local concat = table.concat -if not utilities.sql then require("util-sql") end +-- if not utilities.sql then require("util-sql") end local sql = utilities.sql local tickets = { } diff --git a/tex/context/base/mkiv/util-sql.lua b/tex/context/base/mkiv/util-sql.lua index ce4a37f07..579bd7c09 100644 --- a/tex/context/base/mkiv/util-sql.lua +++ b/tex/context/base/mkiv/util-sql.lua @@ -121,7 +121,7 @@ if optional then local m = methods[k] if m then report_state("start loading method %a as %a",k,m) - require("libs-imp-" .. m) + require("libs-imp-" .. m .. "lmt") -- brrr report_state("loading method %a done",k) return rawget(t,m) else diff --git a/tex/context/base/mkiv/util-zip.lua b/tex/context/base/mkiv/util-zip.lua index 4aa87d5e8..4ceec7afd 100644 --- a/tex/context/base/mkiv/util-zip.lua +++ b/tex/context/base/mkiv/util-zip.lua @@ -48,6 +48,11 @@ local zlibdecompress = zlib.decompress local zlibdecompresssize = zlib.decompresssize local zlibchecksum = zlib.crc32 +if not CONTEXTLMTXMODE or CONTEXTLMTXMODE == 0 then + local cs = zlibchecksum + zlibchecksum = function(str,n) return cs(n or 0, str) end +end + local decompress = function(source) return zlibdecompress (source,-15) end -- auto local decompresssize = function(source,targetsize) return zlibdecompresssize(source,targetsize,-15) end -- auto local calculatecrc = function(buffer,initial) return zlibchecksum (initial or 0,buffer) end @@ -565,7 +570,12 @@ else local compress = zlib.compress local decompress = zlib.decompress - local crc32 = zlib.crc32 + local zlibchecksum = zlib.crc32 + + if not CONTEXTLMTXMODE or CONTEXTLMTXMODE == 0 then + local cs = zlibchecksum + zlibchecksum = function(str,n) return cs(n or 0, str) end + end local streams = utilities.streams local openstream = streams.openstring @@ -606,16 +616,16 @@ else putcompressed = function(str,level,originalname) return concat { - identifier, -- 2 identifier - tocardinal1(0x08), -- 1 method - tocardinal1(0x08), -- 1 flags - tocardinal4(os.time()), -- 4 mtime - tocardinal1(0x02), -- 1 compression (2 or 4) - tocardinal1(0xFF), -- 1 operating + identifier, -- 2 identifier + tocardinal1(0x08), -- 1 method + tocardinal1(0x08), -- 1 flags + tocardinal4(os.time()), -- 4 mtime + tocardinal1(0x02), -- 1 compression (2 or 4) + tocardinal1(0xFF), -- 1 operating (originalname or "unknownname") .. "\0", compress(str,level,nil,gzipwindow), - tocardinal4(crc32(str)), -- 4 - tocardinal4(#str), -- 4 + tocardinal4(zlibchecksum(str)), -- 4 + tocardinal4(#str), -- 4 } end @@ -671,6 +681,4 @@ function gzip.decompress(s) end end -zipfiles.gunzipfile = gzip.load - return zipfiles diff --git a/tex/context/base/mkxl/anch-pos.lmt b/tex/context/base/mkxl/anch-pos.lmt index 5a9ffaa3d..07e338cb6 100644 --- a/tex/context/base/mkxl/anch-pos.lmt +++ b/tex/context/base/mkxl/anch-pos.lmt @@ -62,6 +62,7 @@ local context = context local ctx_latelua = context.latelua local tex = tex +local texgetdimen = tex.getdimen local texgetcount = tex.getcount local texgetinteger = tex.getintegervalue or tex.getcount local texsetcount = tex.setcount @@ -1269,8 +1270,8 @@ do nofparagraphs = nofparagraphs + 1 texsetcount("global","c_anch_positions_paragraph",nofparagraphs) local name = f_p_tag(nofparagraphs) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") -- local top = texgetnest("top","head") local nxt = top.next @@ -1428,8 +1429,8 @@ do public = true, protected = true, actions = function(name) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") local spec = { p = true, c = column, @@ -1452,8 +1453,8 @@ do public = true, protected = true, actions = function(name,kind) - local box = getbox("strutbox") - local w, h, d = getwhd(box) + local h = texgetdimen("strutht") + local d = texgetdimen("strutdp") local spec = { k = kind, p = true, diff --git a/tex/context/base/mkxl/attr-ini.lmt b/tex/context/base/mkxl/attr-ini.lmt index 2a4805a01..059de8fd7 100644 --- a/tex/context/base/mkxl/attr-ini.lmt +++ b/tex/context/base/mkxl/attr-ini.lmt @@ -54,10 +54,12 @@ storage.register("attributes/list", list, "attributes.list") storage.register("attributes/values", values, "attributes.values") storage.register("attributes/counts", counts, "attributes.counts") -local report_attribute = logs.reporter("attributes") -local report_value = logs.reporter("attributes","values") +local report_attribute = logs.reporter("attributes") +local report_value = logs.reporter("attributes","values") -local trace_values = false +local trace_values = false + +local max_register_index = tex.magicconstants.max_attribute_register_index trackers.register("attributes.values", function(v) trace_values = v end) @@ -105,7 +107,7 @@ function attributes.public(name) -- at the lua end (hidden from user) local number = numbers[name] if not number then local last = sharedstorage.attributes_last_public - if last < 65535 then + if last < max_register_index then last = last + 1 sharedstorage.attributes_last_public = last else diff --git a/tex/context/base/mkxl/back-exp-imp-mth.lmt b/tex/context/base/mkxl/back-exp-imp-mth.lmt index 8751ca89d..a70ea8511 100644 --- a/tex/context/base/mkxl/back-exp-imp-mth.lmt +++ b/tex/context/base/mkxl/back-exp-imp-mth.lmt @@ -279,7 +279,13 @@ do -- todo: p.topfixed if t then -- mover - d[1].data[1].content = utfchar(t) + if true then -- we don't go here any more + local dd = d[1].data + if dd then + dd[1].content = utfchar(t) + end + end + -- di.data = { d[2], d[1] } end else @@ -299,7 +305,12 @@ do -- todo: p.bottomfixed if b then -- munder - d[2].data[1].content = utfchar(b) + if true then -- we don't go here any more + local dd = d[2].data + if dd then + dd[1].content = utfchar(b) + end + end end else -- can't happen @@ -322,8 +333,16 @@ do -- todo: p.bottomfixed if t and b then -- munderover - d[1].data[1].content = utfchar(t) - d[3].data[1].content = utfchar(b) + if true then -- we don't go here any more + local dd = d[1].data + if dd then + dd[1].content = utfchar(t) + end + local dd = d[3].data + if dd then + dd[1].content = utfchar(b) + end + end di.data = { d[2], d[3], d[1] } else -- can't happen diff --git a/tex/context/base/mkxl/colo-ini.mkxl b/tex/context/base/mkxl/colo-ini.mkxl index 21f1e1174..e9504e0eb 100644 --- a/tex/context/base/mkxl/colo-ini.mkxl +++ b/tex/context/base/mkxl/colo-ini.mkxl @@ -386,6 +386,16 @@ {\c_attr_color \c_colo_saved_attribute_color \c_attr_transparency\c_colo_saved_attribute_transparency} +%D Nasty: + +\permanent\def\usedcolorparameterattributes#1% + {\beginlocalcontrol\begingroup + \dousecolorparameter{#1}% + \normalexpanded{\endgroup\noexpand\endlocalcontrol + \noexpand\s!attr \colorattribute \the\c_attr_color + \noexpand\s!attr \colormodelattribute \the\c_attr_colormodel + \noexpand\s!attr \transparencyattribute \the\c_attr_transparency}} + %D In this documentation we will not go into too much details on palets. Curious %D users can find more information on this topic in \from[use of color]. %D diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 77ef89d5d..91c21c84d 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.01.21 20:10} +\newcontextversion{2022.03.12 11:24} %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 ca6e796c1..57fc8e155 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.01.21 20:10} +\immutable\edef\contextversion{2022.03.12 11:24} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -486,6 +486,7 @@ \loadmkxlfile{math-int} \loadmkxlfile{math-del} \loadmkxlfile{math-fen} +\loadmkxlfile{math-lop} \loadmklxfile{math-acc} \loadmklxfile{math-rad} \loadmkxlfile{math-inl} @@ -522,6 +523,7 @@ \loadmkxlfile{grph-pat} \loadmkxlfile{pack-box} +\loadmkxlfile{pack-mat} \loadmkxlfile{pack-bar} \loadmkxlfile{page-app} \loadmkxlfile{meta-fig} diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index 2cb351880..6c4ca79cc 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -13,6 +13,7 @@ local setmetatableindex = table.setmetatableindex local formatters = string.formatters local concat = table.concat local keys = table.keys +local insert = table.insert local sortedhash = table.sortedhash local find = string.find local stripstring = string.strip @@ -620,8 +621,9 @@ end local dirstack = { } local anchors = { } ------ befores = setmetatableindex("table") ------ afters = setmetatableindex("table") +local befores = setmetatableindex("table") +local afters = setmetatableindex("table") +local stired = false local function reset_directions() dirstack = { } @@ -631,53 +633,55 @@ local function reset_anchors() anchors = { } end --- interfaces.implement { --- name = "registeranchorbox", --- arguments = { "integer", "integer", "box" }, --- actions = function(anchor,where,box) --- box = tonut(box) --- if where < 0 then --- table.insert(befores[anchor],box) --- else --- table.insert(afters[anchor],box) --- end --- end --- } +interfaces.implement { + name = "registeranchorbox", + public = true, + protected = true, + arguments = { "integer", "integer", "box" }, + actions = function(anchor,where,box) + box = tonut(box) + if where < 0 then + insert(befores[anchor],box) + else + insert(afters[anchor],box) + end + stored = true + end +} local hlist_out, vlist_out do local finalize = nodes.handlers.finalizelist - -- local takebox = nuts.takebox local flushnode = nuts.flushnode - -- local function flushstored(current,source,before) - -- local s = nil - -- if before then - -- s = rawget(befores,source) - -- else - -- s = rawget(afters,source) - -- end - -- if s then - -- for i=1,#s do - -- local si = s[i] - -- if si then - -- finalize(si) -- tricky: we might need to group - -- if getid(si) == vlist_code then - -- vlist_out(current,si) - -- else - -- hlist_out(current,si) - -- end - -- flushnode(si) - -- s[i] = false - -- end - -- end - -- if before then - -- rawset(befores,source,nil) - -- else - -- rawset(afters,source,nil) - -- end - -- end - -- end + local function flushstored(current,source,before) + local s = nil + if before then + s = rawget(befores,source) + else + s = rawget(afters,source) + end + if s then + for i=1,#s do + local si = s[i] + if si then + finalize(si) -- tricky: we might need to group + if getid(si) == vlist_code then + vlist_out(current,si) + else + hlist_out(current,si) + end + flushnode(si) + s[i] = false + end + end + if before then + rawset(befores,source,nil) + else + rawset(afters,source,nil) + end + end + end local function applyorientation(orientation,x,y,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) local ot = (orientation >> 0) & 0x0F @@ -1098,11 +1102,17 @@ local hlist_out, vlist_out do if usedorientation then pushorientation(usedorientation,pos_h,pos_v,pos_r) end + if source and stored then + flushstored(current,source,true) + end if id == vlist_code then vlist_out(current,list) else hlist_out(current,list) end + if source and stored then + flushstored(current,source,false) + end if usedorientation then poporientation(usedorientation,pos_h,pos_v,pos_r) end @@ -1136,19 +1146,19 @@ local hlist_out, vlist_out do end local total = height + depth if total > 0 then - local xoffset, yoffset, left, right = getoffsets(current) -- top bottom - if left ~= 0 then - pos_v = pos_v + left - total = total - left - end - if right ~= 0 then - depth = depth - right - total = total - right - end + local xoffset, yoffset, top, bottom = getoffsets(current) if pos_r == righttoleft_code then pos_h = pos_h - width xoffset = - xoffset end + if top ~= 0 then + -- height = height - top + total = total - top + end + if bottom ~= 0 then + depth = depth - bottom + total = total - bottom + end pos_v = pos_v - depth flushrule(current,pos_h + xoffset,pos_v + yoffset,pos_r,width,total,subtype) end @@ -1486,17 +1496,17 @@ local hlist_out, vlist_out do if usedorientation then pushorientation(usedorientation,pos_h,pos_v,pos_r) end - -- if source then - -- flushstored(current,source,true) - -- end + if source and stored then + flushstored(current,source,true) + end if id == vlist_code then vlist_out(current,list) else hlist_out(current,list) end - -- if source then - -- flushstored(current,source,false) - -- end + if source and stored then + flushstored(current,source,false) + end if usedorientation then poporientation(usedorientation,pos_h,pos_v,pos_r) end diff --git a/tex/context/base/mkxl/font-chk.lmt b/tex/context/base/mkxl/font-chk.lmt index 008b9bb41..089e68f9f 100644 --- a/tex/context/base/mkxl/font-chk.lmt +++ b/tex/context/base/mkxl/font-chk.lmt @@ -379,13 +379,13 @@ local function expandglyph(characters,index,done) if n then d.next = expandglyph(characters,n,done) end - local h = d.hvariants + local h = d.hparts if h then for i=1,#h do h[i].glyph = expandglyph(characters,h[i].glyph,done) end end - local v = d.vvariants + local v = d.vparts if v then for i=1,#v do v[i].glyph = expandglyph(characters,v[i].glyph,done) diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt index 3310242a8..b36f18dfa 100644 --- a/tex/context/base/mkxl/font-con.lmt +++ b/tex/context/base/mkxl/font-con.lmt @@ -254,6 +254,24 @@ local function fixedpsname(psname,fallback) return usedname, psname ~= usedname end +local function scaleparts(parts,delta) + local t = { } + for i=1,#parts do + local p = parts[i] + local s = p["start"] or 0 + local e = p["end"] or 0 + local a = p["advance"] or 0 + t[i] = { + ["start"] = s == 0 and 0 or s * delta, + ["end"] = e == 0 and 0 or e * delta, + ["advance"] = a == 0 and 0 or a * delta, + ["extender"] = p["extender"], + ["glyph"] = p["glyph"], + } + end + return t +end + function constructors.scale(tfmdata,specification) local target = { } -- the new table -- @@ -567,9 +585,7 @@ function constructors.scale(tfmdata,specification) -- for unicode, character in next, characters do local chr, description, index - -- todo: add description entry to char entry instead of index ... saves elsewhere too - if changed then local c = changed[unicode] if c and c ~= unicode then @@ -670,48 +686,17 @@ function constructors.scale(tfmdata,specification) if hasmath then -- -- todo, just operate on descriptions.math - local vn = character.next - if vn then - chr.next = vn - else - local vv = character.vvariants - if vv then - local t = { } - for i=1,#vv do - local vvi = vv[i] - local s = vvi["start"] or 0 - local e = vvi["end"] or 0 - local a = vvi["advance"] or 0 - t[i] = { -- zero check nicer for 5.3 - ["start"] = s == 0 and 0 or s * vdelta, - ["end"] = e == 0 and 0 or e * vdelta, - ["advance"] = a == 0 and 0 or a * vdelta, - ["extender"] = vvi["extender"], - ["glyph"] = vvi["glyph"], - } - end - chr.vvariants = t - else - local hv = character.hvariants - if hv then - local t = { } - for i=1,#hv do - local hvi = hv[i] - local s = hvi["start"] or 0 - local e = hvi["end"] or 0 - local a = hvi["advance"] or 0 - t[i] = { -- zero check nicer for 5.3 - ["start"] = s == 0 and 0 or s * hdelta, - ["end"] = e == 0 and 0 or e * hdelta, - ["advance"] = a == 0 and 0 or a * hdelta, - ["extender"] = hvi["extender"], - ["glyph"] = hvi["glyph"], - } - end - chr.hvariants = t - end - end - -- todo also check mathitalics (or that one can go away) + local nxt = character.next + if nxt then + chr.next = nxt + end + local vparts = character.vparts + if vparts then + chr.vparts = scaleparts(vparts,vdelta) + end + local hparts = character.hparts + if hparts then + chr.hparts = scaleparts(hparts,hdelta) end local vi = character.vitalic if vi and vi ~= 0 then @@ -742,14 +727,18 @@ function constructors.scale(tfmdata,specification) chr.italic = vi*hdelta end end - local ft = character.options - if ft then - chr.options = ft - end + -- local ft = character.options + -- if ft then + -- chr.options = ft + -- end local sm = character.smaller if sm then chr.smaller = sm end + local fa = character.flataccent + if fa then + chr.flataccent = fa + end elseif autoitalicamount then -- itlc feature local vi = description.italic if not vi then diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt index 68dddf33d..2f9c94d16 100644 --- a/tex/context/base/mkxl/font-imp-math.lmt +++ b/tex/context/base/mkxl/font-imp-math.lmt @@ -26,7 +26,7 @@ local function initialize(tfmdata,value) if mathparameters then local sup, sub if type(value) == "string" then - sup, sub = lpegmatch(splitter,value) + sup, sub = lpegmatch(splitter,value) -- settings_to_array if not sup then sub, sup = 0, 0 elseif not sub then @@ -267,3 +267,43 @@ registerotffeature { node = initialize, } } + +local function initialize(tfmdata,value) + if value then + local validlookups, lookuplist = fonts.handlers.otf.collectlookups(tfmdata.shared.rawdata,"flac","math","dflt") + if validlookups then + -- it's quite likely just one step + local characters = tfmdata.characters + local changed = tfmdata.changed + for i=1,#lookuplist do + local lookup = lookuplist[i] + local steps = lookup.steps + local nofsteps = lookup.nofsteps + for i=1,nofsteps do + local coverage = steps[i].coverage + if coverage then + for k, v in next, coverage do + local c = characters[k] + local f = characters[v] + if c and f then + c.flataccent = v + if not f.unicode then + f.unicode = c.unicode + end + end + end + end + end + end + end + end +end + +registerotffeature { + name = "flattenaccents", + description = "mapping accents to flat ones", + initializers = { + base = initialize, + node = initialize, + } +} diff --git a/tex/context/base/mkxl/font-imp-sanitize.lmt b/tex/context/base/mkxl/font-imp-sanitize.lmt new file mode 100644 index 000000000..84c42e78f --- /dev/null +++ b/tex/context/base/mkxl/font-imp-sanitize.lmt @@ -0,0 +1,197 @@ +if not modules then modules = { } end modules ['font-san'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA ADE & śrīrāma", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- \definefontfeature[demo][sanitizer=demo] +-- \definedfont[Serif*default,demo] test context test +-- \definedfont[Serif*default] test context test + +local keys, insert, copytable = table.keys, table.insert, table.copy +local utfvalues, utfbyte = utf.values, utf.byte + +local sanitizers = { } + +local trace = false +local report = logs.reporter("fonts", "sanitizers") + +trackers.register("fonts.sanitizers", function(v) trace = v end) + +function fonts.registersanitizer(name,vector) + sanitizers[name] = vector +end + +local function split(s) + local t = { } + for value in utfvalues(s) do + t[#t+1] = value + end + return t +end + +local function wrap(t) + for i=1,#t do + t[i] = { t[i] } + end + return t +end + +local function initializesanitizer(tfmdata,value) + local resources = tfmdata.resources + local sanitized = resources.sanitized + if not sanitized then + local sanitizer = false + local goodies = tfmdata.goodies + if goodies then + for i=1,#goodies do + local goodie = goodies[i] + local sanitizers = goodie.sanitizers + sanitizer = sanitizers and sanitizers[value] + if sanitizer then + report("using sanitizer %a from goodie file",value) + break + end + end + end + if not sanitizer then + sanitizer = sanitizers[value] + if sanitizer then + report("using sanitizer %a",value) + end + end + resources.sanitized = true + if sanitizer then + local mapping = sanitizer.mapping + if mapping then + local keys = keys(mapping) + local maps = { } + table.sort(keys, function(a,b) return a > b end) + for i = 1,#keys do + local k = keys[i] + keys[i] = split(k) + maps[i] = split(mapping[k]) + end + for i=1,#maps do + local k = keys[i] + local m = maps[i] + if trace then + -- m = copytable(m) + -- insert(m,1,utfbyte("[")) + -- insert(m, utfbyte("]")) + local t = { utfbyte("[") } + t[#t+1] = 0x200D -- zwnj + for i=1,#m do + t[#t+1] = m[i] + t[#t+1] = 0x200D -- zwnj + end + t[#t+1] = utfbyte("]") + end + maps[i] = { type = "multiple", data = { [k[1]] = m } } + keys[i] = { current = wrap(k) , lookups = { i } } + end + local specification = { + name = "sanitizer", + type = "chainsubstitution", + prepend = 1, + nocheck = true, + default = true, + lookups = maps, + data = { rules = keys }, + } + local s = fonts.handlers.otf.enhancers.addfeature( + tfmdata,"sanitizer",specification, true + ) + insert(resources.sequences,1,s) + end + end + end +end + +-- has to come *after* devanagari because we need to push it in front +-- ... it could be a built-in + +fonts.constructors.features.otf.register { + name = "sanitizer", + description = "inject sanitizer features", + initializers = { + node = initializesanitizer, + }, +} + +local dev2rkrf = { + ["के्र"] = "क्रे", + ["कै्र"] = "क्रै", + ["खे्र"] = "ख्रे", + ["खै्र"] = "ख्रै", + ["गे्र"] = "ग्रे", + ["गै्र"] = "ग्रै", + ["घे्र"] = "घ्रे", + ["घै्र"] = "घ्रै", + -- not required: placed here just to show how bad some fonts are :( + -- ["ङे्र"] = "ङ्रे", + -- ["ङै्र"] = "ङ्रै", + ["चे्र"] = "च्रे", + ["चै्र"] = "च्रै", + ["छे्र"] = "छ्रे", + ["छै्र"] = "छ्रै", + ["जे्र"] = "ज्रे", + ["जै्र"] = "ज्रै", + ["झे्र"] = "झ्रे", + ["झै्र"] = "झ्रै", + ["ञे्र"] = "ञ्रे", + ["ञै्र"] = "ञ्रै", + ["णे्र"] = "ण्रे", + ["णै्र"] = "ण्रै", + ["ते्र"] = "त्रे", + ["तै्र"] = "त्रै", + ["थे्र"] = "थ्रे", + ["थै्र"] = "थ्रै", + ["दे्र"] = "द्रे", + ["दै्र"] = "द्रै", + ["धे्र"] = "ध्रे", + ["धै्र"] = "ध्रै", + ["ने्र"] = "न्रे", + ["नै्र"] = "न्रै", + ["पे्र"] = "प्रे", + ["पै्र"] = "प्रै", + ["फे्र"] = "फ्रे", + ["फै्र"] = "फ्रै", + ["बे्र"] = "ब्रे", + ["बै्र"] = "ब्रै", + ["भे्र"] = "भ्रे", + ["भै्र"] = "भ्रै", + ["मे्र"] = "म्रे", + ["मै्र"] = "म्रै", + ["ये्र"] = "य्रे", + ["यै्र"] = "य्रै", + -- some fonts might need this, some might not: weird + -- for example: Shobhika does not need it but Noto Serif does :( + -- ["ले्र"] = "ल्रे", + -- ["लै्र"] = "ल्रै", + ["वे्र"] = "व्रे", + ["वै्र"] = "व्रै", + ["से्र"] = "स्रे", + ["सै्र"] = "स्रै", + ["शे्र"] = "श्रे", + ["शै्र"] = "श्रै", + ["षे्र"] = "ष्रे", + ["षै्र"] = "ष्रै", + ["हे्र"] = "ह्रे", + ["है्र"] = "ह्रै", + -- some fonts might need this, some might not: weird + -- ["ळे्र"] = "ळ्रे", + -- ["ळै्र"] = "ळ्रै", +} + +local demomapping = { + luatex = "LuaTeX", + metapost = "MetaPost", + context = "ConTeXt", + metafun = "MetaFun", +} + +fonts.registersanitizer("dev2rkrf", { mapping = dev2rkrf }) +fonts.registersanitizer("demo", { mapping = demomapping }) diff --git a/tex/context/base/mkxl/font-imp-tracing.lmt b/tex/context/base/mkxl/font-imp-tracing.lmt index 2187b9497..749a3c964 100644 --- a/tex/context/base/mkxl/font-imp-tracing.lmt +++ b/tex/context/base/mkxl/font-imp-tracing.lmt @@ -130,7 +130,12 @@ local function initialize(tfmdata,key,value) elseif v == v_none then rule[9] = false else - rule[9] = v + local thickness = string.todimen(v) + if thickness and thickness > 0 then + rule[5] = thickness + else + rule[9] = v + end end end end diff --git a/tex/context/base/mkxl/font-lib.mklx b/tex/context/base/mkxl/font-lib.mklx index c5543a107..485ed1041 100644 --- a/tex/context/base/mkxl/font-lib.mklx +++ b/tex/context/base/mkxl/font-lib.mklx @@ -117,9 +117,11 @@ \registerctxluafile{font-imp-tweaks}{} \registerctxluafile{font-imp-combining}{} \registerctxluafile{font-imp-scripts}{autosuffix} +\registerctxluafile{font-imp-sanitize}{autosuffix} % fixes for indic fonts \registerctxluafile{font-imp-tracing}{autosuffix} % comes last! + \registerctxluafile{font-fbk}{autosuffix} \registerctxluafile{font-aux}{} diff --git a/tex/context/base/mkxl/font-mat.mklx b/tex/context/base/mkxl/font-mat.mklx index cca22c497..7d72c5618 100644 --- a/tex/context/base/mkxl/font-mat.mklx +++ b/tex/context/base/mkxl/font-mat.mklx @@ -126,7 +126,7 @@ \def\font_helpers_set_math_family_set_scales_compact {% these are used when no font setting is there, the settings come before setting the parameters - % and are stored with the family + % and are stored with the family ... this is not really needed because the size is used otherwise \glyphtextscale \plusthousand \glyphscriptscale \numexpr\plusthousand*\dimexpr\scriptface \relax/\dimexpr\textface\relax\relax \glyphscriptscriptscale \numexpr\plusthousand*\dimexpr\scriptscriptface\relax/\dimexpr\textface\relax\relax} diff --git a/tex/context/base/mkxl/font-ogr.lmt b/tex/context/base/mkxl/font-ogr.lmt index 87166b36d..662c75b15 100644 --- a/tex/context/base/mkxl/font-ogr.lmt +++ b/tex/context/base/mkxl/font-ogr.lmt @@ -555,6 +555,7 @@ local initializeoverlay do manipulators = { base = initializeoverlay, node = initializeoverlay, + plug = initializeoverlay, } } @@ -632,6 +633,7 @@ local initializesvg do manipulators = { base = initializesvg, node = initializesvg, + plug = initializesvg, } } @@ -673,6 +675,7 @@ local initializepng do manipulators = { base = initializepng, node = initializepng, + plug = initializepng, } } @@ -682,6 +685,7 @@ local initializepng do manipulators = { base = initializepng, node = initializepng, + plug = initializepng, } } @@ -715,6 +719,7 @@ do manipulators = { base = initializecolor, node = initializecolor, + plug = initializecolor, } } diff --git a/tex/context/base/mkxl/font-otl.lmt b/tex/context/base/mkxl/font-otl.lmt index f493bc327..a68988e87 100644 --- a/tex/context/base/mkxl/font-otl.lmt +++ b/tex/context/base/mkxl/font-otl.lmt @@ -311,6 +311,41 @@ end -- instance protruding info and loop over characters; one is not supposed -- to change descriptions and if one does so one should make a copy! +-- local function best_done_here(tfmdata,characters,descriptions) +-- local validlookups, lookuplist = fonts.handlers.otf.collectlookups( +-- { resources = tfmdata.resources },"flac","math","dflt" +-- ) +-- if validlookups then +-- -- it's quite likely just one step +-- for i=1,#lookuplist do +-- local lookup = lookuplist[i] +-- local steps = lookup.steps +-- local nofsteps = lookup.nofsteps +-- for i=1,nofsteps do +-- local coverage = steps[i].coverage +-- if coverage then +-- for k, v in next, coverage do +-- local f = characters[v] +-- if f then +-- local d = descriptions[k] +-- local c = characters[k] +-- if c then +-- c.flataccent = v +-- end +-- if d then +-- d.flataccent = v +-- end +-- if not f.unicode then +-- f.unicode = c.unicode +-- end +-- end +-- end +-- end +-- end +-- end +-- end +-- end + local function copytotfm(data,cache_id) if data then local metadata = data.metadata @@ -348,7 +383,6 @@ local function copytotfm(data,cache_id) local d = descriptions[unicode] -- we could use parent table here local m = d.math if m then - -- watch out: luatex uses hvariants for the parts -- local italic = m.italic local vitalic = m.vitalic @@ -363,9 +397,9 @@ local function copytotfm(data,cache_id) c.next = un c = characters[un] end -- c is now last in chain - c.hvariants = parts + c.hparts = parts elseif parts then - character.hvariants = parts + character.hparts = parts italic = m.hitalic end -- @@ -379,9 +413,9 @@ local function copytotfm(data,cache_id) c.next = un c = characters[un] end -- c is now last in chain - c.vvariants = parts + c.vparts = parts elseif parts then - character.vvariants = parts + character.vparts = parts end -- if italic and italic ~= 0 then @@ -403,6 +437,7 @@ local function copytotfm(data,cache_id) end end end +-- best_done_here(data,characters,descriptions) end -- we need a runtime lookup because of running from cdrom or zip, brrr (shouldn't -- we use the basename then?) diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index c668c86d1..f9c6b2fae 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -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 diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl index aba14d8b2..60351ff53 100644 --- a/tex/context/base/mkxl/font-pre.mkxl +++ b/tex/context/base/mkxl/font-pre.mkxl @@ -404,14 +404,17 @@ [mode=base, % mode=none, % better, maybe do this last kern=yes, - % liga=yes, % makes no sense - mathnolimitsmode={0,800}, % this looks okay on the average font +% flac=yes, +% liga=yes, % makes no sense +% mode=node, +% mathnolimitsmode={0,800}, % now in lfg files mathalternates=yes, mathitalics=yes, % we pass them mathdimensions=all, % mathkerns=yes, % staircase=yes, compactmath=yes, + flattenaccents=yes, % mathgaps=yes, language=dflt, script=math] @@ -889,6 +892,12 @@ \permanent\protected\def\setsuperiors{\doaddfeature{f:superiors}} \permanent\protected\def\setfractions{\doaddfeature{f:fractions}} +\permanent\protected\def\resetsmallcaps{\dosubtractfeature{f:smallcaps}} +\permanent\protected\def\resetoldstyle {\dosubtractfeature{f:oldstyle}} +\permanent\protected\def\resettabular {\dosubtractfeature{f:tabular}} +\permanent\protected\def\resetsuperiors{\dosubtractfeature{f:superiors}} +\permanent\protected\def\resetfractions{\dosubtractfeature{f:fractions}} + % \permanent\protected\def\frc#1#2% % {\dontleavehmode % \begingroup diff --git a/tex/context/base/mkxl/font-tfm.lmt b/tex/context/base/mkxl/font-tfm.lmt index dcb76ba80..5f1c7bf2a 100644 --- a/tex/context/base/mkxl/font-tfm.lmt +++ b/tex/context/base/mkxl/font-tfm.lmt @@ -258,6 +258,8 @@ end -- shared.processes = next(features) and tfm.setfeatures(tfmdata,features) or nil -- + fonts.loggers.register(tfmdata,'tfm',specification) + -- if size < 0 then size = idiv(65536 * -size,100) end diff --git a/tex/context/base/mkxl/font-vfc.lmt b/tex/context/base/mkxl/font-vfc.lmt index 57344d18e..aff647dd1 100644 --- a/tex/context/base/mkxl/font-vfc.lmt +++ b/tex/context/base/mkxl/font-vfc.lmt @@ -91,7 +91,7 @@ helpers.vfinjectors = { -- stopcolor = function(h,v,packet) codeinjections.vfstartcolor(h,v,packet) end, -- literal = function(h,v,packet) codeinjections.vfliteral (h,v,packer) end, startcolor = function(h,v,packet) vfstartcolor(h,v,packet) end, - stopcolor = function(h,v,packet) vfstartcolor(h,v,packet) end, + stopcolor = function(h,v,packet) vfstopcolor (h,v,packet) end, -- literal = function(h,v,packet) vfliteral (h,v,packer) end, } diff --git a/tex/context/base/mkxl/lang-def.mkxl b/tex/context/base/mkxl/lang-def.mkxl index e50be9afc..b7919a29b 100644 --- a/tex/context/base/mkxl/lang-def.mkxl +++ b/tex/context/base/mkxl/lang-def.mkxl @@ -826,12 +826,12 @@ \installlanguage [\s!thai] [\s!th] -%D Indic languages (Kauśika) +%D Indic languages (śrīrāman) % % %D Sanskit (someone needs to define the parameters): -%D -%D The file \type {lang-sa.lua} contains sanskrit hyphenation patterns for devanagari, +%D +%D The file \type {lang-sa.lua} contains sanskrit hyphenation patterns for devanagari, %D bengali, telugu, kannada, malayalam and roman(iast. \installlanguage diff --git a/tex/context/base/mkxl/lang-tra.lmt b/tex/context/base/mkxl/lang-tra.lmt index b3fedc7c1..259165928 100644 --- a/tex/context/base/mkxl/lang-tra.lmt +++ b/tex/context/base/mkxl/lang-tra.lmt @@ -9,7 +9,11 @@ if not modules then modules = { } end modules ['lang-tra'] = { -- The indic transliterations was researched by kauśika and after some experiments -- we settled on the current approach (mappings and a more specific lpeg). -local concat = table.concat +-- Todo: initial and final in addition to mapping so that we can do hebrew and +-- such. + +local concat, setmetatableindex = table.concat, table.setmetatableindex +local nospaces = string.nospaces local utfbyte, utfchar, utfsplit, utfvalues = utf.byte, utf.char, utf.split, utf.values local C, Cc, Cs, lpegmatch = lpeg.C, lpeg.Cc, lpeg.Cs, lpeg.match local utfchartabletopattern = lpeg.utfchartabletopattern @@ -30,6 +34,9 @@ local removenode = nuts.remove local texsetattribute = tex.setattribute +local registervalue = attributes.registervalue +local getvalue = attributes.getvalue + local transliteration = { } languages.transliteration = transliteration @@ -41,9 +48,10 @@ local context = context local zwj = utf.char(0x200D) -local lastmapping = 0 +-- local lastmapping = 0 local loadedmappings = { } local loadedlibraries = { } +local exceptions = { } local report = logs.reporter("transliteration") local trace = false trackers.register("languages.transliteration", function(v) trace = v end) @@ -80,21 +88,23 @@ local converters = { ["mapping"] = function(m) local t_mapping = m.mapping if t_mapping then + local t_exceptions = m.exceptions local p = Cs ( ( utfchartabletopattern(t_mapping) / t_mapping + C(utfcharacterpattern) )^0 ) -- lpeg.print(p) - return function(s) - return lpegmatch(p,s) or s + return function(s,e) + return (e and e[s]) or t_exceptions[s] or lpegmatch(p,s) or s end else return false end end, ["default"] = function(m) - return function(s) - return s + local t_exceptions = m.exceptions + return function(s,e) + return (e and e[s]) or t_exceptions[s] or s end end, } @@ -109,19 +119,21 @@ function transliteration.use(library) if transliterations then for name, d in table.sortedhash(transliterations) do local vector = d.vector + if not d.exceptions then + d.exceptions = { } + end if vector then - report("vector %a in %a is %sloaded with index %i",name,library," already",d.attribute) + report("vector %a in %a is %sloaded",name,library," already") else - lastmapping = lastmapping + 1 d.vector = (converters[name] or converters.mapping or converters.default)(d) or (converters.default)(d) - report("vector %a in set %a is %sloaded with index %i",name,library,"",lastmapping) + report("vector %a in set %a is %sloaded",name,library,"") end - d.attribute = lastmapping d.library = library d.name = name + d.mapping = nil -- for now, saves memory loadedmappings[name] = d - loadedmappings[lastmapping] = d + loadedmappings[nospaces(name)] = d end else report("library %a has no transliterations",library) @@ -140,28 +152,47 @@ enable = function() enable = false end -function transliteration.set(vector) +function transliteration.register(parent,name) + local p = exceptions[parent] + if p then + if trace then + report("%a has exceptions that default to %a",name,parent) + end + exceptions[name] = setmetatableindex({ },p) + else + if trace then + report("%a has independent exceptions",name) + end + exceptions[name] = { } + end +end + +function transliteration.set(name,vector) if enable then enable() end - local m = loadedmappings[vector] - local a = m and m.attribute or unsetvalue + local a = registervalue(a_transliteration, { + m = loadedmappings[vector], + e = exceptions[name], + }) if trace then - report("setting transliteration %s",vector) + report("setting transliteration %i, name %a, vector %a",a,name,vector) end texsetattribute(a_transliteration,a) end -function transliteration.register(vector) - if enable then - enable() - end - local m = loadedmappings[vector] - local a = m and m.attribute or unsetvalue - if trace then - report("registering transliteration %s",vector) +function transliteration.exception(name,old,new) + local m = loadedmappings[name] + if m then + m.exceptions[old] = new + else + local e = exceptions[name] + if not e then + e = { } + exceptions[name] = e + end + e[old] = new end - return a end -- When there is need I will improve the performance of the next handler. @@ -169,6 +200,7 @@ end function transliteration.handler(head) local aprev = nil local vector = nil + local except = nil local current = head local first = nil local last = nil @@ -180,34 +212,36 @@ function transliteration.handler(head) -- actually we can generalize the replacer elsewhere local function flush(nxt) - -- we can do some optimization here by having the split as replacement - local old = concat(list,"",1,size) - local new = vector(old) - if old ~= new then - if trace then - report("old: %s",old) - report("new: %s",new) - end - local c = first - local x = false - for s in utfvalues(new) do - if x then - head, c = insertafter(head,c,copynode(first)) - setchar(c,s) - else - setchar(c,s) - if c == last then - x = true + if vector then + -- we can do some optimization here by having the split as replacement + local old = concat(list,"",1,size) + local new = vector(old,except) + if old ~= new then + if trace then + report("old: %s",old) + report("new: %s",new) + end + local c = first + local x = false + for s in utfvalues(new) do + if x then + head, c = insertafter(head,c,copynode(first)) + setchar(c,s) else - c = getnext(c) + setchar(c,s) + if c == last then + x = true + else + c = getnext(c) + end end end - end - if not x then - while c do - head, c = removenode(head,c,true) - if c == nxt then - break + if not x then + while c do + head, c = removenode(head,c,true) + if c == nxt then + break + end end end end @@ -226,9 +260,19 @@ function transliteration.handler(head) size = 0 end aprev = a - vector = loadedmappings[a] - if vector then - vector = vector.vector + local data = getvalue(a_transliteration,a) + if data then + local m = data.m + if m then + vector = m.vector + except = data.e + else + vector = nil + except = nil + end + else + vector = nil + except = nil end end if not first then @@ -269,14 +313,20 @@ interfaces.implement { implement { name = "settransliteration", - arguments = "string", + arguments = "2 strings", actions = transliteration.set, } implement { name = "registertransliteration", - arguments = "string", - actions = { transliteration.register, context }, + arguments = "3 strings", + actions = transliteration.register, +} + +implement { + name = "transliterationexception", + arguments = "3 strings", + actions = transliteration.exception, } nodes.tasks.prependaction("processors", "normalizers", "languages.transliteration.handler", nil, "nut", "disabled" ) diff --git a/tex/context/base/mkxl/lang-tra.mkxl b/tex/context/base/mkxl/lang-tra.mkxl index 96dcc7d94..a44ee4ba9 100644 --- a/tex/context/base/mkxl/lang-tra.mkxl +++ b/tex/context/base/mkxl/lang-tra.mkxl @@ -23,46 +23,62 @@ \definesystemattribute[transliteration][public,global] -% define in lua: \usetransliteration[#1] +\newtoks\everytransliterations -% todo: define fast attribute at the tex end do we can have a proper define +\appendtoks + \disablediscretionaries + \let~=\lettertilde + % \let|=\letterbar +\to \everytransliterations -\def\lang_transliteration_set#1% - {\ifcsname\??transliteration#1\endcsname - \c_attr_transliteration\lastnamedcs - \edef\currenttransliteration{#1}% - \usetransliterationstyleandcolor\c!style\c!color - \uselanguageparameter\transliterationparameter - \else - \clf_settransliteration{#1}% - \fi} +\def\lang_transliteration_common + {\usetransliterationstyleandcolor\c!style\c!color + \uselanguageparameter\transliterationparameter + \clf_settransliteration{\currenttransliteration}{\transliterationparameter\c!vector}% + \the\everytransliterations} \permanent\tolerant\protected\def\settransliteration[#1]#;#2% - {\lang_transliteration_set{#1}} + {\edef\currenttransliteration{#1#2}% + \lang_transliteration_common} + +\permanent\protected\def\transliterationexception[#1]#2#3% + {\clf_transliterationexception{#1}{#2}{#3}} \permanent\tolerant\protected\def\starttransliteration[#1]#*[#2]% {\begingroup + \edef\currenttransliteration{#1}% \ifparameter#2\or - \edef\currenttransliteration{#1}% \setupcurrenttransliteration[#2]% \fi - \lang_transliteration_set{#1}} + \transliterationparameter\c!before\relax + \lang_transliteration_common} + +\permanent\protected\def\stoptransliteration + {\transliterationparameter\c!after\relax + \endgroup} \permanent\tolerant\protected\def\transliteration[#1]#;#2% - {\groupedcommand{\lang_transliteration_set{#1#2}}\donothing} + {\groupedcommand + {\edef\currenttransliteration{#1#2}% + \lang_transliteration_common + \transliterationparameter\c!left\relax} + {\transliterationparameter\c!right\relax}} \appendtoks - \expandafter\integerdef\csname\??transliteration\currenttransliteration\endcsname - \clf_registertransliteration{\transliterationparameter\c!vector}% - \relax + \clf_registertransliteration{\currenttransliterationparent}{\currenttransliteration}% + \ifcstok{\transliterationparameter\c!define}\v!yes + \frozen\protected\instance\edefcsname\e!start\currenttransliteration\endcsname{\starttransliteration[\currenttransliteration]}% + \frozen\protected\instance\edefcsname\e!stop \currenttransliteration\endcsname{\stoptransliteration}% + \frozen\protected\instance\edefcsname \currenttransliteration\endcsname{\transliteration[\currenttransliteration]}% + \fi \to \everydefinetransliteration -\permanent\protected\def\stoptransliteration - {\endgroup} - \permanent\protected\def\resettransliteration {\c_attr_transliteration\attributeunsetvalue} +\setuptransliteration + [\c!define=\v!yes] + \appendtoks \resettransliteration \to \everyinitializeverbatim diff --git a/tex/context/base/mkxl/libs-imp-zint.lmt b/tex/context/base/mkxl/libs-imp-zint.lmt index 4558ca58e..1b1d294c9 100644 --- a/tex/context/base/mkxl/libs-imp-zint.lmt +++ b/tex/context/base/mkxl/libs-imp-zint.lmt @@ -79,31 +79,56 @@ table.setmetatableindex(mapping,function(t,k) return v end) +-- local options = { +-- -- DATA_MODE = 0 -- Binary +-- -- UNICODE_MODE = 1 -- UTF-8 +-- -- GS1_MODE = 2 -- GS1 +-- -- GS1PARENS_MODE = 16 -- process parentheses as GS1 AI delimiters (instead of square brackets) +-- square = 100 -- DM_SQUARE : only consider square versions on automatic symbol size selection +-- -- DMRE = 101 -- DM_DMRE : consider DMRE versions on automatic symbol size selection +-- } + local report = logs.reporter("zint") local context = context local shown = false -- Same performance as just context(fmt,...): 113pps (On 2013 i7 laptop.) ------ f_rectangle = formatters["%sofill unitsquare xysized (%N,%N) shifted (%N,%N);"] -local f_hexagon = formatters["%sofill (%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--cycle;"] -local f_circle = formatters["%sofill unitcircle scaled %N shifted (%N,%N);"] +-- ----- f_rectangle = formatters["%sofill unitsquare xysized (%N,%N) shifted (%N,%N);"] +-- local f_hexagon = formatters["%sofill (%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--cycle;"] +-- local f_circle = formatters["%sofill unitcircle scaled %N shifted (%N,%N);"] + +----- f_rectangle = formatters["%nofill unitsquare xysized (%N,%N) shifted (%N,%N);"] +local f_hexagon = formatters["%nofill (%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--cycle;"] +local f_circle = formatters["%nofill unitcircle scaled %N shifted (%N,%N);"] + +local s_done = "dofill origin --cycle;" local f_string = formatters['draw textext("%s") scaled (%N/10) shifted (%N,%N);'] -- A bit faster: 130pps (When I see hexagons I'll do that too but MP takes way more time.) +-- local s_preamble = [[ +-- save ns; def ns (expr a, b) = nofill unitsquare xyscaled a shifted b ; enddef; +-- save ds; def ds (expr a, b) = dofill unitsquare xyscaled a shifted b ; enddef; +-- ]] + local s_preamble = [[ save ns; def ns (expr a, b) = nofill unitsquare xyscaled a shifted b ; enddef; - save ds; def ds (expr a, b) = dofill unitsquare xyscaled a shifted b ; enddef; ]] ----- f_rectangle = formatters["%ss((%N,%N),(%N,%N));"] -local f_rectangle = formatters["%ss((%i,%i),(%i,%i));"] +local f_rectangle = formatters["ns((%i,%i),(%i,%i));"] local function execute(specification) if okay() then - local code = specification.code - local text = specification.text + local code = specification.code + local text = specification.text + local option = specification.option + -- + if option then + option = gsub(option,"^%-+","") + end + specification.option = option -- if lower(code) == "isbn" then specification.text = text and gsub(text,"[^%d]","") or "" @@ -127,20 +152,24 @@ local function execute(specification) for i=1,n do local r = rectangles[i] -- context("%sofill unitsquare xysized (%N,%N) shifted (%N,%N);", - rectangles[i] = f_rectangle( - i == n and "d" or "n",r[3],r[4],r[1],r[2] - ) +-- rectangles[i] = f_rectangle( +-- i == n and "d" or "n",r[3],r[4],r[1],r[2] +-- ) +rectangles[i] = f_rectangle(r[3],r[4],r[1],r[2]) end +rectangles[n+1] = s_done context("% t",rectangles) end if hexagons then local n = #hexagons for i=1,n do -- context("%sofill (%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--(%N,%N)--cycle;", - hexagons[i] = f_hexagon( - i == n and "d" or "n",unpack(hexagons[i]) - ) +-- hexagons[i] = f_hexagon( +-- i == n and "d" or "n",unpack(hexagons[i]) +-- ) +hexagons[i] = f_hexagon(unpack(hexagons[i])) end +hexagons[n+1] = s_done context("% t",hexagons) end if circles then @@ -148,9 +177,11 @@ local function execute(specification) for i=1,n do local c = circles[i] -- context("%sofill unitcircle scaled %N shifted (%N,%N);", - circles[i] = f_circle( - i == n and "d" or "n",c[3],c[1],c[2] - ) +-- circles[i] = f_circle( +-- i == n and "d" or "n",c[3],c[1],c[2] +-- ) +circles[i] = f_circle(c[3],c[1],c[2]) +circles[n+1] = s_done end context("% t",circles) end @@ -197,6 +228,7 @@ interfaces.implement { { { "code" }, { "text" }, + { "option" }, } } } diff --git a/tex/context/base/mkxl/libs-imp-zint.mkxl b/tex/context/base/mkxl/libs-imp-zint.mkxl index b2c364379..9905e0470 100644 --- a/tex/context/base/mkxl/libs-imp-zint.mkxl +++ b/tex/context/base/mkxl/libs-imp-zint.mkxl @@ -22,7 +22,7 @@ %D %D % e:\tex-context\tex\texmf-win64\bin\lib\luametatex\zint\libzint.dll -\enabletrackers[*res*] +% \enabletrackers[*res*] \registerctxluafile{libs-imp-zint}{autosuffix} @@ -34,12 +34,13 @@ {\bgroup \usedzintfont \getdummyparameters - [\c!alternative=,\c!text=,#1]% + [\c!alternative=,\c!text=,\c!option=,#1]% \scale [#1]% {\clf_zint - code {\dummyparameter\c!alternative} - text {\dummyparameter\c!text} + code {\dummyparameter\c!alternative} + text {\dummyparameter\c!text} + option {\dummyparameter\c!option} \relax}% \egroup} @@ -51,23 +52,76 @@ \dontcomplain -\dorecurse{1}{ +% \dorecurse{1}{ +% \startTEXpage +% \barcode[alternative=PDF417,text={Hans Hagen}]% +% \blank +% \barcode[alternative=PDF417,text={Ton Otten}]% +% \blank +% \barcode[alternative=ISBN,text=9789490688011]% +% \blank +% \barcode[alternative=isbn,text=9789490688011,width=3cm]% +% \blank +% \dontleavehmode +% \barcode[alternative=qr code,text={This is ConTeXt MKIV : #1}] +% \barcode[alternative=qr code,text={This is ConTeXt LMTX}] +% \barcode[alternative=qr code,text={\cldloadfile{tufte}},width=3cm] +% \blank +% \barcode[alternative=datamatrix,text=whatever,width=3cm,option=square] +% \scale[width=3cm,height=3cm]{\barcode[alternative=datamatrix,text=whatever,width=3cm,option=square]} +% \barcode[alternative=datamatrix,text={helloworld}] +% \barcode[alternative=datamatrix,text={hello world}] +% \stopTEXpage +% } + + \startTEXpage + \startluacode + for i=1,100 do + context.dontleavehmode() + context.barcode { + alternative = "datamatrix", + text = string.rep("!",i), + } + context.space() + context.allowbreak() + end + \stopluacode + \stopTEXpage + \startTEXpage - \barcode[alternative=PDF417,text={Hans Hagen}]% - \blank - \barcode[alternative=PDF417,text={Ton Otten}]% - \blank - \barcode[alternative=ISBN,text=9789490688011]% - \blank - \barcode[alternative=isbn,text=9789490688011,width=3cm]% - \blank - \dontleavehmode - \barcode[alternative=qr code,text={This is ConTeXt MKIV : #1}] - \barcode[alternative=qr code,text={This is ConTeXt LMTX}] - \barcode[alternative=qr code,text={\cldloadfile{tufte}},width=3cm] + \startluacode + for i=1,100 do + context.dontleavehmode() + context.barcode { + alternative = "datamatrix", + text = string.rep("!",i), + option = "square", + } + context.space() + context.allowbreak() + end + \stopluacode \stopTEXpage -} + \startluacode + for i=1,25 do + context.startTEXpage() + context.dontleavehmode() + context(i) + context.space() + context.barcode { + alternative = "datamatrix", + text = string.rep("!",i), + } + context.space() + context.barcode { + alternative = "datamatrix", + text = string.rep("!",i), + option = "square", + } + context.stopTEXpage() + end + \stopluacode \stoptext diff --git a/tex/context/base/mkxl/lpdf-emb.lmt b/tex/context/base/mkxl/lpdf-emb.lmt index 9811c0843..d6252ae02 100644 --- a/tex/context/base/mkxl/lpdf-emb.lmt +++ b/tex/context/base/mkxl/lpdf-emb.lmt @@ -1826,7 +1826,7 @@ do if kind == "font" then return setmetatableindex(function(t,k) local h = data[k] - local v = direct(h[1]/255,h[2]/255,h[3]/255) + local v = h and direct(h[1]/255,h[2]/255,h[3]/255) or false t[k] = v return v end) diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 9bb3319d4..6b623b372 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -1529,7 +1529,7 @@ local flushimage do local d = -depth + half local w = width - line local t = total - line - if baseline then + if baseline and w > 0 then rule = f_y(line,half,d,w,t,half,w) else rule = f_x(line,half,d,w,t) @@ -3406,8 +3406,13 @@ do converter(driver,texgetbox(boxnumber),"page") end - localconverter = function(...) - converter(useddriver,...) +-- localconverter = function(...) +-- print(...) -- ok when we add this +-- converter(useddriver,...) -- otherwise nil .. lua bug +-- end + + localconverter = function(a,b,c,d) + converter(useddriver,a,b,c,d) end drivers.install { diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt index 96b4597bb..1dfcc11a3 100644 --- a/tex/context/base/mkxl/lpdf-rul.lmt +++ b/tex/context/base/mkxl/lpdf-rul.lmt @@ -376,7 +376,29 @@ h %s]] pdfprint("direct",f_baselined(l,o,o,w-l,h+d-l,0,d,w,d)) end else - pdfprint("direct",f_rectangle(l,o,o,w-l,h+d-l)) + pdfprint("direct",f_rectangle(l,o,o,w-l,h+d-l,"s")) + end + end + + local function rule_box(p,h,v,i,n) + local w, h, d = getwhd(n) + local line = p.line or 65536 + local l = line *bpfactor + local w = w * bpfactor + local h = h * bpfactor + local d = d * bpfactor + local o = l / 2 + if p.baseline ~= false and ((d >= 0 and h >= 0) or (d <= 0 and h <= 0)) then + local dashed = tonumber(p.dashed) + if dashed and dashed > 5*line then + dashed = dashed * bpfactor + local delta = (w - 2*dashed*floor(w/(2*dashed)))/2 + pdfprint("direct",f_dashlined(l,o,o,w-l,h+d-l,dashed,dashed,delta,d,w-delta,d)) + else + pdfprint("direct",f_baselined(l,o,o,w-l,h+d-l,0,d,w,d)) + end + else + pdfprint("direct",f_rectangle(l,o,o,w-l,h+d-l,"s")) end end diff --git a/tex/context/base/mkxl/lpdf-xmp.lmt b/tex/context/base/mkxl/lpdf-xmp.lmt index c4f475914..e147c796f 100644 --- a/tex/context/base/mkxl/lpdf-xmp.lmt +++ b/tex/context/base/mkxl/lpdf-xmp.lmt @@ -64,10 +64,11 @@ local mapping = table.setmetatableindex ( { ["Producer"] = { "metadata","rdf:Description/pdf:Producer" }, -- ["Trapped"] = { "pdf", "rdf:Description/pdf:Trapped" }, -- '/False' in /Info, but 'False' in XMP -- Dublin Core schema - ["Author"] = { "metadata","rdf:Description/dc:creator/rdf:Seq/rdf:li" }, ["Format"] = { "metadata","rdf:Description/dc:format" }, -- optional, but nice to have - ["Subject"] = { "metadata","rdf:Description/dc:description/rdf:Alt/rdf:li" }, - ["Title"] = { "metadata","rdf:Description/dc:title/rdf:Alt/rdf:li" }, + -- These were dc:.../rdf:Seq/rdf:li but there was a (invalidating) bug in the iso + ["Author"] = { "metadata","rdf:Description/dc:creator" }, + ["Subject"] = { "metadata","rdf:Description/dc:description" }, + ["Title"] = { "metadata","rdf:Description/dc:title" }, -- XMP Basic schema ["CreateDate"] = { "date", "rdf:Description/xmp:CreateDate" }, ["CreationDate"] = { "date", "rdf:Description/xmp:CreationDate" }, -- dummy @@ -254,11 +255,11 @@ local pdfaddxmpinfo = lpdf.addxmpinfo function lpdf.addtoinfo(tag,pdfvalue,strvalue) local pattern = mapping[tag][2] - if pattern then + if pattern or strvalue == true then pdfaddtoinfo(tag,pdfvalue) end if type(pattern) == "string" then - local value = strvalue or gsub(tostring(pdfvalue),"^%((.*)%)$","%1") -- hack + local value = (type(strvalue) == "string" and strvalue) or gsub(tostring(pdfvalue),"^%((.*)%)$","%1") -- hack if trace_info then report_info("set %a to %a",tag,value) end diff --git a/tex/context/base/mkxl/math-acc.mklx b/tex/context/base/mkxl/math-acc.mklx index aab7e4874..929a37ae6 100644 --- a/tex/context/base/mkxl/math-acc.mklx +++ b/tex/context/base/mkxl/math-acc.mklx @@ -46,108 +46,129 @@ \installcorenamespace{mathaccents} -\installcommandhandler \??mathaccents {mathaccents} \??mathaccents +\installcommandhandler \??mathaccents {mathaccent} \??mathaccents + +\aliased\let\setupmathaccents\setupmathaccent \setupmathaccents [\c!top=, \c!bottom=, \c!mathstyle=, \c!color=, + \c!stretch=\v!no, \c!define=\v!yes] % not used -\definemathaccents +\definemathaccent [\v!both] -\definemathaccents +\definemathaccent [\v!top] [\v!both] -\definemathaccents +\definemathaccent [\v!bottom] [\v!both] \permanent\tolerant\protected\def\definemathtopaccent[#1]#*[#2]#*[#3]% class name top {\ifparameter#3\or - \frozen\protected\instance\edefcsname#2\endcsname{\math_accents_make_double {#1}\plusone{\number#3}\zerocount}% + \frozen\protected\instance\edefcsname#2\endcsname{\math_accent_make_double {#1}\plusone{\number#3}\zerocount}% \else - \frozen\protected\instance\edefcsname#1\endcsname{\math_accents_make_double\noexpand\currentmathaccents\plusone{\number#2}\zerocount}% + \frozen\protected\instance\edefcsname#1\endcsname{\math_accent_make_double\noexpand\currentmathaccent\plusone{\number#2}\zerocount}% \fi} \permanent\tolerant\protected\def\definemathbottomaccent[#1]#*[#2]#*[#3]% class name bottom {\ifparameter#3\or - \frozen\protected\instance\edefcsname#2\endcsname{\math_accents_make_double {#1}\plustwo\zerocount{\number#3}}% + \frozen\protected\instance\edefcsname#2\endcsname{\math_accent_make_double {#1}\plustwo\zerocount{\number#3}}% \else - \frozen\protected\instance\edefcsname#1\endcsname{\math_accents_make_double\noexpand\currentmathaccents\plustwo\zerocount{\number#2}}% + \frozen\protected\instance\edefcsname#1\endcsname{\math_accent_make_double\noexpand\currentmathaccent\plustwo\zerocount{\number#2}}% \fi} \permanent\tolerant\protected\def\definemathdoubleaccent[#1]#*[#2]#*[#3]#*[#4]% class name top bottom {\ifparameter#4\or - \frozen\protected\instance\edefcsname#2\endcsname{\math_accents_make_double {#1}\plusthree{\number#3}{\number#4}}% + \frozen\protected\instance\edefcsname#2\endcsname{\math_accent_make_double {#1}\plusthree{\number#3}{\number#4}}% \else - \frozen\protected\instance\edefcsname#1\endcsname{\math_accents_make_double\noexpand\currentmathaccents\plusthree{\number#2}{\number#3}}% + \frozen\protected\instance\edefcsname#1\endcsname{\math_accent_make_double\noexpand\currentmathaccent\plusthree{\number#2}{\number#3}}% \fi} -\let\math_accents_color_pop\donothing - -\def\math_accents_color_push_yes - {\pushcolor[\p_math_accent_color]% - \let\math_accents_color_pop\popcolor} +\installlocalcurrenthandler \??mathaccents {mathaccent} -\def\math_accents_color_push_nop - {\let\math_accents_color_pop\donothing} - -\protected\def\math_accents_make_double#class#kind#top#bottom#content% - {\begingroup - \edef\currentmathaccents {#class}% - \edef\p_math_accent_color{\mathaccentsparameter\c!color}% - \startusemathstyleparameter\mathaccentsparameter\c!mathstyle - \ifempty\p_math_accent_color - \math_accents_color_push_nop - \else - \math_accents_color_push_yes - \fi +\tolerant\protected\def\math_accent_make_double#class#kind#top#bottom#*[#settings]#:#content% + {\beginmathgroup + \setlocalmathaccentcurrent{#class}% \edef\currentmathaccent{#class}% + \startusemathstyleparameter\mathaccentparameter\c!mathstyle + \setupcurrentmathaccent[#settings]% + \edef\m_fixed{\ifcstok{\mathaccentparameter\c!stretch}\v!yes\else\s!fixed\fi}% + \Umathaccent + \usedcolorparameterattributes{\mathaccentparameter\c!color}% \ifcase#kind\or - \Umathaccent \fam\zerocount#top + top \m_fixed + \fam\zerocount#top \or - \Umathaccent bottom \fam\zerocount#bottom + bottom \m_fixed + \fam\zerocount#bottom \or - \Umathaccent both \fam\zerocount#top - \fam\zerocount#bottom + both \m_fixed + \fam\zerocount#top + \fam\zerocount#bottom \fi - {\math_accents_color_pop#content}% + {\ifconditional\c_math_accent_auto_dotless\mathdotless\fi#content}% \stopusemathstyleparameter - \endgroup} + \endmathgroup} %D Relative new: -\newconditional\c_math_accents_auto_dotless \settrue\c_math_accents_auto_dotless % cf opentype math - -\aliased\let\normalgrave\grave \permanent\protected\def\dotlessgrave#1{\normalgrave{\mathdotless#1}} -\aliased\let\normalddot \ddot \permanent\protected\def\dotlessddot #1{\normalddot {\mathdotless#1}} -\aliased\let\normalbar \bar \permanent\protected\def\dotlessbar #1{\normalbar {\mathdotless#1}} -\aliased\let\normalacute\acute \permanent\protected\def\dotlessacute#1{\normalacute{\mathdotless#1}} -\aliased\let\normalhat \hat \permanent\protected\def\dotlesshat #1{\normalhat {\mathdotless#1}} -\aliased\let\normalcheck\check \permanent\protected\def\dotlesscheck#1{\normalcheck{\mathdotless#1}} -\aliased\let\normalbreve\breve \permanent\protected\def\dotlessbreve#1{\normalbreve{\mathdotless#1}} -\aliased\let\normaldot \dot \permanent\protected\def\dotlessdot #1{\normaldot {\mathdotless#1}} -\aliased\let\normalring \ring \permanent\protected\def\dotlessring #1{\normalring {\mathdotless#1}} -\aliased\let\normaltilde\tilde \permanent\protected\def\dotlesstilde#1{\normaltilde{\mathdotless#1}} -\aliased\let\normaldddot\dddot \permanent\protected\def\dotlessdddot#1{\normaldddot{\mathdotless#1}} - -\def\math_accents_auto_dotless#1#2{\ifconditional\c_math_accents_auto_dotless\expandafter#2\else\expandafter#1\fi} - -\permanent\protected\def\grave {\math_accents_auto_dotless\normalgrave \dotlessgrave } -\permanent\protected\def\ddot {\math_accents_auto_dotless\normalddot \dotlessddot } -\permanent\protected\def\bar {\math_accents_auto_dotless\normalbar \dotlessbar } -\permanent\protected\def\acute {\math_accents_auto_dotless\normalacute \dotlessacute } -\permanent\protected\def\hat {\math_accents_auto_dotless\normalhat \dotlesshat } -\permanent\protected\def\check {\math_accents_auto_dotless\normalcheck \dotlesscheck } -\permanent\protected\def\breve {\math_accents_auto_dotless\normalbreve \dotlessbreve } -\permanent\protected\def\dot {\math_accents_auto_dotless\normaldot \dotlessdot } -\permanent\protected\def\ring {\math_accents_auto_dotless\normalring \dotlessring } -\permanent\protected\def\tilde {\math_accents_auto_dotless\normaltilde \dotlesstilde } -\permanent\protected\def\dddot {\math_accents_auto_dotless\normaldddot \dotlessdddot } +\newconditional\c_math_accent_auto_dotless \settrue\c_math_accent_auto_dotless % cf opentype math + +\aliased\let\normalgrave\grave +\aliased\let\normalddot \ddot +\aliased\let\normalbar \bar +\aliased\let\normalacute\acute +\aliased\let\normalhat \hat +\aliased\let\normalcheck\check +\aliased\let\normalbreve\breve +\aliased\let\normaldot \dot +\aliased\let\normalring \ring +\aliased\let\normaltilde\tilde +\aliased\let\normaldddot\dddot + +\pushoverloadmode + +% these are not stretched ... we should adapt char-def.lua to use these: + +\definemathtopaccent[\v!top][grave]["60] +\definemathtopaccent[\v!top][ddot] ["A8] +\definemathtopaccent[\v!top][bar] ["AF] +\definemathtopaccent[\v!top][acute]["B4] +\definemathtopaccent[\v!top][hat] ["2C6] % "302 +\definemathtopaccent[\v!top][check]["2C7] +\definemathtopaccent[\v!top][breve]["2D8] +\definemathtopaccent[\v!top][dot] ["2D9] +\definemathtopaccent[\v!top][ring] ["2DA] +\definemathtopaccent[\v!top][tilde]["2DC] +\definemathtopaccent[\v!top][dddot]["20DB] + +\definemathaccent + [\v!top:\v!stretch] + [\v!top] + [\c!stretch=\v!yes] + +%D We have a problem. We can use stackers but then we need to adapt the dimensions +%D which is font dependent. So, for now we keep them as accents. + +\definemathtopaccent[\v!top:\v!stretch][widegrave]["0300] % ["060] +\definemathtopaccent[\v!top:\v!stretch][wideddot] ["0308] % ["0A8] +\definemathtopaccent[\v!top:\v!stretch][widebar] ["0304] % ["0AF] +\definemathtopaccent[\v!top:\v!stretch][wideacute]["0301] % ["0B4] +\definemathtopaccent[\v!top:\v!stretch][widehat] ["0302] % ["2C6] +\definemathtopaccent[\v!top:\v!stretch][widecheck]["030C] % ["2C7] +\definemathtopaccent[\v!top:\v!stretch][widebreve]["0306] % ["2D8] +\definemathtopaccent[\v!top:\v!stretch][widedot] ["0307] % ["2D9] +\definemathtopaccent[\v!top:\v!stretch][widering] ["030A] % ["2DA] +\definemathtopaccent[\v!top:\v!stretch][widetilde]["0303] % ["2DC] +\definemathtopaccent[\v!top:\v!stretch][widedddot]["20DB] \aliased\let\mathring\ring % for a while +\popoverloadmode + \protect \endinput diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt index 48d389bf9..7aeec184f 100644 --- a/tex/context/base/mkxl/math-act.lmt +++ b/tex/context/base/mkxl/math-act.lmt @@ -13,6 +13,7 @@ local type, next = type, next local fastcopy, insert, remove = table.fastcopy, table.insert, table.remove local formatters = string.formatters local byte = string.byte +local setmetatableindex, sortedhash = table.setmetatableindex, table.sortedhash local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) local trace_collecting = false trackers.register("math.collecting", function(v) trace_collecting = v end) @@ -60,9 +61,26 @@ function mathematics.initializeparameters(target,original) local mathparameters = original.mathparameters if mathparameters and next(mathparameters) then mathparameters = mathematics.dimensions(mathparameters) - if not mathparameters.SpaceBeforeScript then - mathparameters.SpaceBeforeScript = mathparameters.SpaceAfterScript - end + if not mathparameters.PrimeRaisePercent then mathparameters.PrimeRaisePercent = 25 end + if not mathparameters.PrimeShiftUp then mathparameters.PrimeShiftUp = mathparameters.SuperscriptShiftUp end + if not mathparameters.PrimeBaselineDropMax then mathparameters.PrimeBaselineDropMax = mathparameters.SuperscriptBaselineDropMax end + if not mathparameters.PrimeShiftUpCramped then mathparameters.PrimeShiftUpCramped = mathparameters.SuperscriptShiftUpCramped end + if not mathparameters.PrimeSpaceAfter then mathparameters.PrimeSpaceAfter = 0 end + if not mathparameters.PrimeWidthPercent then mathparameters.PrimeWidthPercent = 50 end + if not mathparameters.SpaceBeforeScript then mathparameters.SpaceBeforeScript = mathparameters.SpaceAfterScript end + if not mathparameters.NoLimitSupFactor then mathparameters.NoLimitSupFactor = 0 end + if not mathparameters.NoLimitSubFactor then mathparameters.NoLimitSubFactor = 0 end + if not mathparameters.AccentTopShiftUp then mathparameters.AccentTopShiftUp = 0 end + if not mathparameters.AccentBottomShiftDown then mathparameters.AccentBottomShiftDown = 0 end + if not mathparameters.FlattenedAccentTopShiftUp then mathparameters.AccentTopShiftUp = 0 end + if not mathparameters.FlattenedAccentBottomShiftDown then mathparameters.AccentBottomShiftDown = 0 end + if not mathparameters.AccentBaseDepth then mathparameters.AccentBaseDepth = 0 end + if not mathparameters.AccentFlattenedBaseDepth then mathparameters.AccentFlattenedBaseDepth = 0 end + -- + -- we don't want to reset that each time .. but then we also can't show what the value was + -- + -- mathparameters.RadicalDegreeBefore = 0 + -- target.mathparameters = mathparameters end end @@ -77,6 +95,8 @@ local how = { RadicalDegreeBottomRaisePercent = "unscaled", NoLimitSupFactor = "unscaled", NoLimitSubFactor = "unscaled", + PrimeRaisePercent = "unscaled", + PrimeWidthPercent = "unscaled", } function mathematics.scaleparameters(target,original) @@ -122,12 +142,15 @@ function mathematics.checkprivateparameters(target,original) if parameters then local size = parameters.size if size then - if not mathparameters.FractionDelimiterSize then - mathparameters.FractionDelimiterSize = 1.01 * size - end - if not mathparameters.FractionDelimiterDisplayStyleSize then - mathparameters.FractionDelimiterDisplayStyleSize = 2.40 * size - end +-- if not mathparameters.FractionDelimiterSize then +-- mathparameters.FractionDelimiterSize = 1.01 * size +-- end +-- if not mathparameters.FractionDelimiterDisplayStyleSize then +-- mathparameters.FractionDelimiterDisplayStyleSize = 2.40 * size +-- end +-- if not mathparameters.PrimeSuperscriptSpace then +-- mathparameters.PrimeSuperscriptSpace = size / 20 +-- end elseif properties then report_math("invalid parameters in font %a",properties.fullname or "?") else @@ -149,34 +172,55 @@ function mathematics.overloadparameters(target,original) for i=1,#goodies do local goodie = goodies[i] local mathematics = goodie.mathematics - local parameters = mathematics and mathematics.parameters - if parameters then - if trace_defining then - report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) - end - for name, value in next, parameters do - local tvalue = type(value) - if tvalue == "string" then - report_math("comment for math parameter %a: %s",name,value) - else + if mathematics then + local parameters = mathematics.parameters + local bigslots = mathematics.bigslots or mathematics.bigs + if parameters then + if trace_defining then + report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) + end + for name, value in next, parameters do + local tvalue = type(value) local oldvalue = mathparameters[name] local newvalue = oldvalue - if oldvalue then - if tvalue == "number" then - newvalue = value - elseif tvalue == "function" then - newvalue = value(oldvalue,target,original) - elseif not tvalue then - newvalue = nil - end - if trace_defining and oldvalue ~= newvalue then - report_math("overloading math parameter %a: %S => %S",name,oldvalue,newvalue) - end - else - report_math("invalid math parameter %a",name) + if tvalue == "number" then + newvalue = value + elseif tvalue == "string" then + -- delay till all set + elseif tvalue == "function" then + newvalue = value(oldvalue,target,original) + elseif not tvalue then + newvalue = nil + end + if trace_defining and oldvalue ~= newvalue then + report_math("overloading math parameter %a: %S => %S",name,oldvalue or 0,newvalue) end mathparameters[name] = newvalue end + for name, value in next, parameters do + local tvalue = type(value) + if tvalue == "string" then + local newvalue = mathparameters[value] + -- if not newvalue then + -- local code = loadstring("return " .. value,"","t",mathparameters) + -- if type(code) == "function" then + -- local okay, v = pcall(code) + -- if okay then + -- newvalue = v + -- end + -- end + -- end + if newvalue then + -- split in number and string + mathparameters[name] = newvalue + elseif trace_defining then + report_math("ignoring math parameter %a: %S",name,value) + end + end + end + end + if bigslots then + target.bigslots = bigslots end end end @@ -208,34 +252,151 @@ end do local stepper = utilities.parsers.stepper + local count = 0 + + local splitter = lpeg.tsplitat(".") - local function adapt(target,original,targetcharacters,originalcharacters,k,v,compact,n) + local function adapt(list,target,original,targetcharacters,originalcharacters,k,v,compact,n) local character = targetcharacters[k] if character then - local width = character.width - local italic = character.italic - local offsetfactor = v[1] or 1 - local widthfactor = v[2] or 1 - local italicfactor = v[3] or 1 - if width then - character.advance = width -- so advance is oldwidth - character.xoffset = offsetfactor * width - character.width = widthfactor * width - end - if italic then - character.italic = italicfactor * italic - elseif width and italicfactor ~= 1 then - character.italic = italicfactor * width - end - if trace_tweaking then - report_tweak("adapting dimensions of %U ",target,original,k) - end - local smaller = originalcharacters[k].smaller - if compact and smaller and smaller ~= k then - adapt(target,original,targetcharacters,originalcharacters,smaller,v,compact,n+1) + if not character.tweaked then + local t = type(v) + if t == "number" then + v = list[v] + t = type(v) + end + if t == "table" then + local width = character.width + local height = character.height + local depth = character.depth + local italic = character.italic + local topaccent = character.topaccent + if #v > 0 then + local offsetfactor = v[1] + local widthfactor = v[2] + local italicfactor = v[3] + local anchorfactor = v[4] + if width then + character.advance = width -- so advance is oldwidth + character.xoffset = offsetfactor * width + character.width = widthfactor * width + end + if italic then + character.italic = italicfactor * italic + elseif width and italicfactor ~= 1 then + character.italic = italicfactor * width + end + if topaccent and topaccent > 0 then + if anchorfactor then + character.topaccent = anchorfactor * topaccent + elseif width then + character.topaccent = topaccent + (character.width - character.advance) / 2 + end + end + else + local widthfactor = v.width + local heightfactor = v.height + local depthfactor = v.depth + local italicfactor = v.italic + local anchorfactor = v.anchor + local advancefactor = v.advance + local xoffsetfactor = v.xoffset + local yoffsetfactor = v.yoffset + local scalefactor = v.scale + local total = (height or 0) + (depth or 0) + if scalefactor ~= 1 then + character.scale = scalefactor + end + if width and width ~= 0 then + if advancefactor then + character.advance = advancefactor * width + end + if widthfactor then + character.width = widthfactor * width + end + if xoffsetfactor then + character.xoffset = xoffsetfactor * width + end + end + if height and height ~= 0 then + if heightfactor then + character.height = heightfactor * height + end + end + if depth and depthfactor then + character.depth = depthfactor * depth + end + if yoffsetfactor then + character.yoffset = yoffsetfactor * total + end + if italic and italic ~= 0 and italicfactor then + character.italic = italicfactor * italic + end + if anchorfactor then + character.topaccent = anchorfactor * (topaccent or width) + end + end + if trace_tweaking then + report_tweak("adapting dimensions of %U ",target,original,k) + end + local smaller = originalcharacters[k].smaller + if compact and smaller and smaller ~= k then + adapt(list,target,original,targetcharacters,originalcharacters,smaller,v,compact,n+1) + end + count = count + 1 + else + report_mathtweak("invalid dimension entry %U",k) + end + character.tweaked = true + if v.all then + local nxt = character.next + if nxt then + adapt(list,target,original,targetcharacters,originalcharacters,nxt,v,compact,n) + else + local parts = character.hparts + if parts then + for i=1,#parts do + adapt(list,target,original,targetcharacters,originalcharacters,parts[i],v,compact,n) + end + end + end + end end else - report_math("no character %U",k) + report_tweak("no character %U",target,original,k) + end + end + + local function detail(characters,k) + if type(k) == "string" then + local t = lpeg.match(splitter,k) + local n = #t + if n > 0 then + local m = tonumber(t[1]) or tonumber(t[1],16) + if m then + local c = characters[m] + if c and n > 1 then + m = t[2] + if m == "parts" then + local nxt = c.next + while nxt do + c = characters[nxt] + nxt = c.next + end + c = c.hparts or c.vparts + if c and n > 2 then + m = tonumber(t[3]) + if m then + c = c[m] + if c then + return c.glyph + end + end + end + end + end + end + end end end @@ -245,14 +406,29 @@ do local targetcharacters = target.characters local originalcharacters = original.characters local compact = target.parameters.textscale and true or false - for k, v in next, list do + count = 0 + for k, v in sortedhash(list) do local t = type(k) if t == "number" then - adapt(target,original,targetcharacters,originalcharacters,k,v,compact,1) + adapt(list,target,original,targetcharacters,originalcharacters,k,v,compact,1) elseif t == "string" then - stepper(k,function(n) adapt(target,original,targetcharacters,originalcharacters,n,v,compact,1) end) + local d = detail(targetcharacters,k) + if d then + adapt(list,target,original,targetcharacters,originalcharacters,d,v,compact,1) + else + stepper(k,function(n) + adapt(list,target,original,targetcharacters,originalcharacters,n,v,compact,1) + end) + end + -- elseif t == "table" then + -- for i=1,#t do + -- adapt(list,target,original,targetcharacters,originalcharacters,t[i],v,compact,1) + -- end end end + if trace_tweaking and count > 0 then + report_mathtweak("%i dimensions adapted",count) + end end end @@ -411,6 +587,274 @@ do end +do + + function mathtweaks.fixanchors(target,original,parameters) + local factor = tonumber(parameters.factor) + if factor ~= 0 then + for k, v in next, target.characters do + local a = v.topaccent + if a and a > 0 then + v.topaccent = a * factor + end + end + end + end + +end + +do + + -- local list = { + -- [0x203E] = { factor = .4 }, -- overbar + -- [0x203E] = { factor = .7 }, -- underbar + -- [0x23DE] = { factor = .4 }, -- overbrace + -- [0x23DF] = { factor = .7 }, -- underbrace + -- [0x23DC] = { factor = .4 }, -- overparent + -- [0x23DD] = { factor = .7 }, -- underparent + -- [0x23B4] = { factor = .4 }, -- overbracket + -- [0x23B5] = { factor = .7 }, -- underbracket + -- } + + -- We can patch the dimensions in-place or we can use additional characters in + -- the private namespace. + + -- local addprivate = fonts.helpers.addprivate + -- local newnextglyph = addprivate(target,formatters["M-N-%H"](nextglyph),newnextdata) + + local over = { factor = "over" } + local under = { factor = "under" } + + local candidates = { + over = { + [0x203E] = over, -- overbar + [0x23DE] = over, -- overbrace + [0x23DC] = over, -- overparent + [0x23B4] = over, -- overbracket + }, + under = { + [0x23DF] = under, -- underbrace + [0x23DD] = under, -- underparent + [0x23B5] = under, -- underbracket + }, + accent = { + [0x0300] = over, -- widegrave + [0x0308] = over, -- wideddot + [0x0304] = over, -- widebar + [0x0301] = over, -- wideacute + [0x0302] = over, -- widehat + [0x030C] = over, -- widecheck + [0x0306] = over, -- widebreve + [0x0307] = over, -- widedot + [0x030A] = over, -- widering + [0x0303] = over, -- widetilde + [0x20DB] = over, -- widedddot + }, + } + + local function adapt(c,factor,baseheight,basedepth) + if not c.tweaked then + local height = c.height or 0 + local depth = c.depth or 0 + local yoffset = 0 + if factor == "over" then + local h = height - baseheight + yoffset = h - height + height = h + depth = depth - baseheight + elseif factor == "under" then + local d = depth - basedepth + yoffset = depth - d + depth = d + height = height - baseheight + else + if height > 0 then + local h = tonumber(factor) * height + yoffset = h - height + height = h + elseif depth > 0 then + local d = tonumber(factor) * depth + yoffset = depth - d + depth = d + end + end + c.yoffset = yoffset ~= 0 and yoffset or nil + c.height = height > 0 and height or nil + c.depth = depth > 0 and depth or nil + c.tweaked = true + end + end + + local function process(characters,list,baseheight,basedepth) + if list then + for k, v in sortedhash(list) do -- sort for tracing + local c = characters[k] + if c and not c.yoffset then + local factor = v.factor + if factor then + adapt(c,factor,baseheight,basedepth) + local nc = c.next + local nv = 0 + local ns = 0 + while nc do + local c = characters[nc] + if c then + adapt(c,factor,baseheight,basedepth) + nv = nv + 1 + nc = c.next + if not nc then + local hv = c.hparts + if hv then + for i=1,#hv do + local c = characters[hv[i].glyph] + if c then + adapt(c,factor,baseheight,basedepth) + ns = ns + 1 + end + end + end + break + end + else + break + end + end + if trace_tweaking then + report_tweak("adapting extensible (%i sizes, %i parts) %U",k,nv,ns) + end + end + end + end + end + end + + function mathtweaks.accentdimensions(target,original,parameters) + local list = parameters.list or { "over", "under" } + if list then + local characters = target.characters + local baseheight = target.mathparameters.AccentBaseHeight or 0 + local basedepth = target.mathparameters.AccentBaseDepth or 0 + for k, v in sortedhash(list) do -- sort for tracing + local t = type(v) + if t == "string" then + v = candidates[v] + t = type(v) + end + if t == "table" then + process(characters,v,baseheight,basedepth) + end + end + end + end + +end + +do + + -- 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 + local thickness = target.mathparameters.OverbarRuleThickness + local width = target.parameters.emwidth / 2 + local step = 0.8 * width + characters[0x203E] = { -- over + width = width, + height = thickness / 2, + depth = thickness / 2, + yoffset = - thickness / 2, + unicode = 0x203E, + commands = { { "rule", thickness, width } }, + hparts = { + { advance = width, ["end"] = step, glyph = 0x203E, start = 0 }, + { advance = width, ["end"] = 0, glyph = 0x203E, start = step, extender = 1 }, + } + } + -- + characters[0x0332] = characters[0x203E] + -- + -- lucida lacks them ... + -- + local addprivate = fonts.helpers.addprivate + -- + local half = thickness / 2 + local double = thickness * 2 + -- + if not characters[0x23B4] then + local tpiece = addprivate(target,"bracket-piece-top",{ + width = thickness, + height = half, + depth = double, + yoffset = - double, + commands = { { "rule", thickness * 2.5, thickness } }, + }) + characters[0x23B4] = { -- over + width = width, + height = half, + depth = double, + unicode = 0x23B4, + commands = { { "rule", thickness, width } }, + hparts = { + { advance = thickness, glyph = tpiece, ["end"] = 0, start = half }, + { advance = width, glyph = 0x203E, ["end"] = step, start = step, extender = 1 }, + { advance = thickness, glyph = tpiece, ["end"] = half, start = 0 }, + } + } + end + if not characters[0x23B5] then + local bpiece = addprivate(target,"bracket-piece-bottom",{ + width = thickness, + height = double, + depth = half, + yoffset = - half, + commands = { { "rule", thickness * 2.5, thickness } }, + }) + characters[0x23B5] = { -- over + width = width, + height = double, + depth = half, + unicode = 0x23B5, + commands = { { "rule", thickness, width } }, + hparts = { + { advance = thickness, glyph = bpiece, ["end"] = 0, start = half }, + { advance = width, glyph = 0x203E, ["end"] = step, start = step, extender = 1 }, + { advance = thickness, glyph = bpiece, ["end"] = half, start = 0 }, + } + } + end + end + +end + function mathtweaks.action(target,original,parameters) local action = parameters.action if type(action) == "function" then @@ -626,32 +1070,42 @@ do end +local apply_tweaks = true + +directives.register("math.applytweaks", function(v) + apply_tweaks = v; +end) + local function applytweaks(when,target,original) - local goodies = original.goodies - if goodies then - for i=1,#goodies do - local goodie = goodies[i] - local mathematics = goodie.mathematics - local tweaks = mathematics and mathematics.tweaks - if type(tweaks) == "table" then - tweaks = tweaks[when] + if apply_tweaks then + local goodies = original.goodies + if goodies then + for i=1,#goodies do + local goodie = goodies[i] + local mathematics = goodie.mathematics + local tweaks = mathematics and mathematics.tweaks if type(tweaks) == "table" then - if trace_defining then - report_math("tweaking math of %a @ %p (%s)",target.properties.fullname,target.parameters.size,when) - end - for i=1,#tweaks do - local tweak = tweaks[i] - local tvalue = type(tweak) - if type(tweak) == "table" then - local action = mathtweaks[tweak.tweak or ""] - if action then - action(target,original,tweak) + tweaks = tweaks[when] + if type(tweaks) == "table" then + if trace_defining then + report_math("tweaking math of %a @ %p (%s)",target.properties.fullname,target.parameters.size,when) + end + for i=1,#tweaks do + local tweak = tweaks[i] + local tvalue = type(tweak) + if type(tweak) == "table" then + local action = mathtweaks[tweak.tweak or ""] + if action then + action(target,original,tweak) + end end end end end end end + else + report_math("not tweaking math of %a @ %p (%s)",target.properties.fullname,target.parameters.size,when) end end @@ -669,10 +1123,10 @@ function mathematics.tweakaftercopyingfont(target,original) end end +sequencers.appendaction("mathparameters","system","mathematics.overloadparameters") sequencers.appendaction("mathparameters","system","mathematics.scaleparameters") sequencers.appendaction("mathparameters","system","mathematics.checkaccentbaseheight") -- should go in lfg instead sequencers.appendaction("mathparameters","system","mathematics.checkprivateparameters") -- after scaling ! -sequencers.appendaction("mathparameters","system","mathematics.overloadparameters") sequencers.appendaction("beforecopyingcharacters","system","mathematics.tweakbeforecopyingfont") sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaftercopyingfont") @@ -683,16 +1137,11 @@ sequencers.appendaction("aftercopyingcharacters", "system","mathematics.tweakaft -- helpers -local setmetatableindex = table.setmetatableindex - -local getfontoffamily = tex.getfontoffamily +local getfontoffamily = tex.getfontoffamily -local fontcharacters = fonts.hashes.characters -local extensibles = utilities.storage.allocate() -fonts.hashes.extensibles = extensibles - -local chardata = characters.data -local extensibles = mathematics.extensibles +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) @@ -722,15 +1171,15 @@ local function extensiblecode(font,unicode) if not char then return unknown end - if character.hvariants then - if character.vvariants then + if character.hparts then + if character.vparts then return { e_mixed, code, character } else local m = char.mathextensible local e = m and extensibles[m] return e and { e, code, character } or unknown end - elseif character.vvariants then + elseif character.vparts then local m = char.mathextensible local e = m and extensibles[m] return e and { e, code, character } or unknown @@ -772,19 +1221,19 @@ local function horizontalcode(family,unicode) local loffset = 0 local roffset = 0 if kind == e_left then - local charlist = data[3].hvariants + local charlist = data[3].hparts if charlist then local left = charlist[1] loffset = abs((left["start"] or 0) - (left["end"] or 0)) end elseif kind == e_right then - local charlist = data[3].hvariants + local charlist = data[3].hparts if charlist then local right = charlist[#charlist] roffset = abs((right["start"] or 0) - (right["end"] or 0)) end elseif kind == e_horizontal then - local charlist = data[3].hvariants + local charlist = data[3].hparts if charlist then local left = charlist[1] local right = charlist[#charlist] @@ -815,7 +1264,6 @@ interfaces.implement { -- can be public with two times "integerargument" end } - local stack = { } function mathematics.registerfallbackid(n,id,name) diff --git a/tex/context/base/mkxl/math-ali.mkxl b/tex/context/base/mkxl/math-ali.mkxl index 30f5c0524..6149d9be2 100644 --- a/tex/context/base/mkxl/math-ali.mkxl +++ b/tex/context/base/mkxl/math-ali.mkxl @@ -2196,6 +2196,25 @@ {\afterdisplayspace \endgroup} +%D Kind of new (February 2022): + +\installcorenamespace {maththreshold} + +\setupmathematics[\c!threshold=\zeropoint] + +\permanent\protected\def\installmaththreshold#1#2% + {\expandafter\gluespecdef\csname\??maththreshold#1\endcsname#2\relax} + +\installmaththreshold\v!none {\zeropoint} +\installmaththreshold\v!small {3\emwidth plus 0.50\emwidth minus 0.25\emwidth} +\installmaththreshold\v!medium{4\emwidth plus 0.75\emwidth minus 0.50\emwidth} +\installmaththreshold\v!big {5\emwidth plus 1.00\emwidth minus 0.75\emwidth} + +\appendtoks + \edef\p_threshold{\mathematicsparameter\c!threshold}% + \maththreshold\ifcsname\??maththreshold\p_threshold\endcsname\lastnamedcs\else\p_threshold\fi\relax +\to \everymath % \everyemathematics + \protect \endinput % \placeformula \startformula[-] \startmatrix diff --git a/tex/context/base/mkxl/math-def.mkxl b/tex/context/base/mkxl/math-def.mkxl index c7cf65270..53165a30c 100644 --- a/tex/context/base/mkxl/math-def.mkxl +++ b/tex/context/base/mkxl/math-def.mkxl @@ -26,8 +26,7 @@ \activatemathcharacters -%D The \mfunction macro is an alternative for \hbox with a controlable font -%D switch. +%D The \mfunction macro is an alternative for \hbox with a controlable font switch. \definemathcommand [arccos] [nolop] {\mfunctionlabeltext{arccos}} \definemathcommand [arcsin] [nolop] {\mfunctionlabeltext{arcsin}} @@ -104,15 +103,14 @@ %D equalscoloncolon, coloncolonapprox, approxcoloncolon, %D colonsim, simcoloncolon} %D -%D The following colon related definitions are provided by Aditya -%D Mahajan who derived them from \type {mathtools.sty} and \type -%D {colonequals.sty}. This will be redone as part of the overhaul -%D and font updates. +%D The following colon related definitions are provided by Aditya Mahajan who +%D derived them from \type {mathtools.sty} and \type {colonequals.sty}. This will be +%D redone as part of the overhaul and font updates. %D -%D In $a := b$ the colon is not vertically centered with the equal -%D to. Also the distance between colon and equal to is a bit large. -%D So, we define a vertically centered colon \tex {centercolon} and -%D a few macros for colon and double colon relation symbols. +%D In $a := b$ the colon is not vertically centered with the equal to. Also the +%D distance between colon and equal to is a bit large. So, we define a vertically +%D centered colon \tex {centercolon} and a few macros for colon and double colon +%D relation symbols. %D %D \startlines %D \formula {A \centercolon B} @@ -140,8 +138,8 @@ \pushoverloadmode -\definemathcommand [colonsep] {\mkern-1.2mu} -\definemathcommand [doublecolonsep] {\mkern-0.9mu} +\definemathcommand [colonsep] {\mkern-1.2mu} +\definemathcommand [doublecolonsep] {\mkern-0.9mu} \definemathcommand [centercolon] [rel] {\mathstylevcenteredhbox\colon} \definemathcommand [colonminus] [rel] {\centercolon\colonsep\mathrel{-}} diff --git a/tex/context/base/mkxl/math-del.mkxl b/tex/context/base/mkxl/math-del.mkxl index 8f2596359..47febc180 100644 --- a/tex/context/base/mkxl/math-del.mkxl +++ b/tex/context/base/mkxl/math-del.mkxl @@ -66,7 +66,7 @@ % A new experiment: % Hm, we already have \definemathextensible so we need to preserve that one. We now -% use \definemathdelimiter. +% use \definemathdelimiter. This mechanism will probably disappear so don't use it! \installcorenamespace {mathdelimiter} @@ -139,7 +139,7 @@ % \ruledhbox{$\int f\frac{1}{2}$} % \stoplines -\permanent\protected\def\autointegral#1#2#3% +\permanent\protected\def\autointegral#1#2#3% this one is obsolete now {\ifmmode \setbox\nextbox\mathstylehbox{#3}% \scratchdimen\ifdim\nextboxht>\nextboxdp\nextboxht\else\nextboxdp\fi diff --git a/tex/context/base/mkxl/math-dim.lmt b/tex/context/base/mkxl/math-dim.lmt index 3b88b0b0b..0dd348184 100644 --- a/tex/context/base/mkxl/math-dim.lmt +++ b/tex/context/base/mkxl/math-dim.lmt @@ -104,14 +104,14 @@ local defaults = { } local styles = { + 'display_style', 'cramped_display_style', - 'cramped_script_script_style', - 'cramped_script_style', + 'text_style', 'cramped_text_style', - 'display_style', - 'script_script_style', 'script_style', - 'text_style', + 'cramped_script_style', + 'script_script_style', + 'cramped_script_script_style', } for k, v in next, defaults do diff --git a/tex/context/base/mkxl/math-fbk.lmt b/tex/context/base/mkxl/math-fbk.lmt index 80b99d83b..c219bb34f 100644 --- a/tex/context/base/mkxl/math-fbk.lmt +++ b/tex/context/base/mkxl/math-fbk.lmt @@ -246,160 +246,164 @@ virtualcharacters[0xFE352] = function(data) end end -local function accent_to_extensible(target,newchr,original,oldchr,height,depth,swap,offset,unicode) - local characters = target.characters - local olddata = characters[oldchr] - -- brrr ... pagella has only next - if olddata and not olddata.commands then -- not: and olddata.width > 0 - local addprivate = fonts.helpers.addprivate - if swap then - swap = characters[swap] - height = swap.depth or 0 - depth = 0 - else - height = height or 0 - depth = depth or 0 - end - local oldheight = olddata.height or 0 - local correction = swap and - downcommand[oldheight - height] - or downcommand[oldheight + (offset or 0)] - local newdata = { - commands = { correction, charcommand[oldchr] }, - width = olddata.width, - height = height, - depth = depth, - unicode = unicode, - } - local glyphdata = newdata - local nextglyph = olddata.next - while nextglyph do - local oldnextdata = characters[nextglyph] - if oldnextdata then - local newnextdata = { - commands = { correction, charcommand[nextglyph] }, - width = oldnextdata.width, - height = height, - depth = depth, - } - local newnextglyph = addprivate(target,formatters["M-N-%H"](nextglyph),newnextdata) - newdata.next = newnextglyph - local nextnextglyph = oldnextdata.next - if nextnextglyph == nextglyph then - break - else - olddata = oldnextdata - newdata = newnextdata - nextglyph = nextnextglyph - end - else - report_fallbacks("error in fallback: no valid next, slot %X",nextglyph) - break - end - end - local hv = olddata.hvariants - if hv then - hv = fastcopy(hv) - newdata.hvariants = hv - for i=1,#hv do - local hvi = hv[i] - local oldglyph = hvi.glyph - local olddata = characters[oldglyph] - if olddata then - local newdata = { - commands = { correction, charcommand[oldglyph] }, - width = olddata.width, - height = height, - depth = depth, - } - hvi.glyph = addprivate(target,formatters["M-H-%H"](oldglyph),newdata) - else - report_fallbacks("error in fallback: no valid hvariants, slot %X, index %i",oldglyph,i) - end - end - end - return glyphdata, true - else - return olddata, false - end -end - -virtualcharacters[0x203E] = function(data) - local target = data.target - local height = 0 - local depth = 0 - -- local mathparameters = target.mathparameters - -- if mathparameters then - -- height = mathparameters.OverbarVerticalGap - -- depth = mathparameters.UnderbarVerticalGap - -- else - height = target.parameters.xheight/4 - depth = height - -- end - return accent_to_extensible(target,0x203E,data.original,0x0305,height,depth,nil,nil,0x203E) -end - --- virtualcharacters[0xFE33E] = virtualcharacters[0x203E] -- convenient --- virtualcharacters[0xFE33F] = virtualcharacters[0x203E] -- convenient - -virtualcharacters[0xFE33E] = function(data) - local target = data.target - local height = 0 - local depth = target.parameters.xheight/4 - return accent_to_extensible(target,0xFE33E,data.original,0x0305,height,depth,nil,nil,0x203E) -end - -virtualcharacters[0xFE33F] = function(data) - local target = data.target - local height = target.parameters.xheight/8 - local depth = height - return accent_to_extensible(target,0xFE33F,data.original,0x0305,height,depth,nil,nil,0x203E) -end - -local function smashed(data,unicode,swap,private) - local target = data.target - local original = data.original - local chardata = target.characters[unicode] - if chardata and chardata.height > target.parameters.xheight then - return accent_to_extensible(target,private,original,unicode,0,0,swap,nil,unicode) - else - return original.characters[unicode] - end -end - -addextra(0xFE3DE) -- EXTENSIBLE OF 0x03DE -addextra(0xFE3DC) -- EXTENSIBLE OF 0x03DC -addextra(0xFE3B4) -- EXTENSIBLE OF 0x03B4 - -virtualcharacters[0xFE3DE] = function(data) return smashed(data,0x23DE,0x23DF,0xFE3DE) end -virtualcharacters[0xFE3DC] = function(data) return smashed(data,0x23DC,0x23DD,0xFE3DC) end -virtualcharacters[0xFE3B4] = function(data) return smashed(data,0x23B4,0x23B5,0xFE3B4) end - -addextra(0xFE3DF) -- EXTENSIBLE OF 0x03DF -addextra(0xFE3DD) -- EXTENSIBLE OF 0x03DD -addextra(0xFE3B5) -- EXTENSIBLE OF 0x03B5 - -virtualcharacters[0xFE3DF] = function(data) local c = data.target.characters[0x23DF] if c then c.unicode = 0x23DF return c end end -virtualcharacters[0xFE3DD] = function(data) local c = data.target.characters[0x23DD] if c then c.unicode = 0x23DD return c end end -virtualcharacters[0xFE3B5] = function(data) local c = data.target.characters[0x23B5] if c then c.unicode = 0x23B5 return c end end - --- todo: add some more .. numbers might change - -addextra(0xFE302) -- EXTENSIBLE OF 0x0302 -addextra(0xFE303) -- EXTENSIBLE OF 0x0303 - -local function smashed(data,unicode,private) - local target = data.target - 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 - end - return c -end +--------------------------------------------------------------------------------- +-- these are moved to math-act.lmt (keep this code) +--------------------------------------------------------------------------------- -virtualcharacters[0xFE302] = function(data) return smashed(data,0x0302,0xFE302) end -virtualcharacters[0xFE303] = function(data) return smashed(data,0x0303,0xFE303) end +-- local function accent_to_extensible(target,newchr,original,oldchr,height,depth,swap,offset,unicode) +-- local characters = target.characters +-- local olddata = characters[oldchr] +-- -- brrr ... pagella has only next +-- if olddata and not olddata.commands then -- not: and olddata.width > 0 +-- local addprivate = fonts.helpers.addprivate +-- if swap then +-- swap = characters[swap] +-- height = swap.depth or 0 +-- depth = 0 +-- else +-- height = height or 0 +-- depth = depth or 0 +-- end +-- local oldheight = olddata.height or 0 +-- local correction = swap and +-- downcommand[oldheight - height] +-- or downcommand[oldheight + (offset or 0)] +-- local newdata = { +-- commands = { correction, charcommand[oldchr] }, +-- width = olddata.width, +-- height = height, +-- depth = depth, +-- unicode = unicode, +-- } +-- local glyphdata = newdata +-- local nextglyph = olddata.next +-- while nextglyph do +-- local oldnextdata = characters[nextglyph] +-- if oldnextdata then +-- local newnextdata = { +-- commands = { correction, charcommand[nextglyph] }, +-- width = oldnextdata.width, +-- height = height, +-- depth = depth, +-- } +-- local newnextglyph = addprivate(target,formatters["M-N-%H"](nextglyph),newnextdata) +-- newdata.next = newnextglyph +-- local nextnextglyph = oldnextdata.next +-- if nextnextglyph == nextglyph then +-- break +-- else +-- olddata = oldnextdata +-- newdata = newnextdata +-- nextglyph = nextnextglyph +-- end +-- else +-- report_fallbacks("error in fallback: no valid next, slot %X",nextglyph) +-- break +-- end +-- end +-- local hv = olddata.hparts +-- if hv then +-- hv = fastcopy(hv) +-- newdata.hparts = hv +-- for i=1,#hv do +-- local hvi = hv[i] +-- local oldglyph = hvi.glyph +-- local olddata = characters[oldglyph] +-- if olddata then +-- local newdata = { +-- commands = { correction, charcommand[oldglyph] }, +-- width = olddata.width, +-- height = height, +-- depth = depth, +-- } +-- hvi.glyph = addprivate(target,formatters["M-H-%H"](oldglyph),newdata) +-- else +-- report_fallbacks("error in fallback: no valid hparts, slot %X, index %i",oldglyph,i) +-- end +-- end +-- end +-- return glyphdata, true +-- else +-- return olddata, false +-- end +-- end +-- +-- virtualcharacters[0x203E] = function(data) -- overbar +-- local target = data.target +-- local height = 0 +-- local depth = 0 +-- -- local mathparameters = target.mathparameters +-- -- if mathparameters then +-- -- height = mathparameters.OverbarVerticalGap +-- -- depth = mathparameters.UnderbarVerticalGap +-- -- else +-- height = target.parameters.xheight/4 +-- depth = height +-- -- end +-- return accent_to_extensible(target,0x203E,data.original,0x0305,height,depth,nil,nil,0x203E) +-- end +-- +-- -- virtualcharacters[0xFE33E] = virtualcharacters[0x203E] -- convenient +-- -- virtualcharacters[0xFE33F] = virtualcharacters[0x203E] -- convenient +-- +-- virtualcharacters[0xFE33E] = function(data) +-- local target = data.target +-- local height = 0 +-- local depth = target.parameters.xheight/4 +-- return accent_to_extensible(target,0xFE33E,data.original,0x0305,height,depth,nil,nil,0x203E) +-- end +-- +-- virtualcharacters[0xFE33F] = function(data) +-- local target = data.target +-- local height = target.parameters.xheight/8 +-- local depth = height +-- return accent_to_extensible(target,0xFE33F,data.original,0x0305,height,depth,nil,nil,0x203E) +-- end +-- +-- local function smashed(data,unicode,swap,private) +-- local target = data.target +-- local original = data.original +-- local chardata = target.characters[unicode] +-- if chardata and chardata.height > target.parameters.xheight then +-- return accent_to_extensible(target,private,original,unicode,0,0,swap,nil,unicode) +-- else +-- return original.characters[unicode] +-- end +-- end +-- +-- addextra(0xFE3DE) -- EXTENSIBLE OF 0x03DE : overbrace +-- addextra(0xFE3DC) -- EXTENSIBLE OF 0x03DC : overparent +-- addextra(0xFE3B4) -- EXTENSIBLE OF 0x03B4 : overbracket +-- +-- virtualcharacters[0xFE3DE] = function(data) return smashed(data,0x23DE,0x23DF,0xFE3DE) end +-- virtualcharacters[0xFE3DC] = function(data) return smashed(data,0x23DC,0x23DD,0xFE3DC) end +-- virtualcharacters[0xFE3B4] = function(data) return smashed(data,0x23B4,0x23B5,0xFE3B4) end +-- +-- addextra(0xFE3DF) -- EXTENSIBLE OF 0x03DF +-- addextra(0xFE3DD) -- EXTENSIBLE OF 0x03DD +-- addextra(0xFE3B5) -- EXTENSIBLE OF 0x03B5 +-- +-- virtualcharacters[0xFE3DF] = function(data) local c = data.target.characters[0x23DF] if c then c.unicode = 0x23DF return c end end +-- virtualcharacters[0xFE3DD] = function(data) local c = data.target.characters[0x23DD] if c then c.unicode = 0x23DD return c end end +-- virtualcharacters[0xFE3B5] = function(data) local c = data.target.characters[0x23B5] if c then c.unicode = 0x23B5 return c end end +-- +-- -- todo: add some more .. numbers might change +-- +-- addextra(0xFE302) -- EXTENSIBLE OF 0x0302 +-- addextra(0xFE303) -- EXTENSIBLE OF 0x0303 +-- +-- local function smashed(data,unicode,private) +-- local target = data.target +-- 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 +-- end +-- return c +-- end +-- +-- virtualcharacters[0xFE302] = function(data) return smashed(data,0x0302,0xFE302) end +-- virtualcharacters[0xFE303] = function(data) return smashed(data,0x0303,0xFE303) end --------------------------------------------------------------------------------- -- these are moved to math-act.lmt @@ -717,7 +721,7 @@ virtualcharacters[0x305] = function(data) height = height, depth = depth, commands = { { "rule", height, width } }, - hvariants = { + hparts = { { advance = width, ["end"] = used, diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index b8347eb66..08891286e 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -58,13 +58,19 @@ \c!color=, \c!command=, \c!mathclass=, + \c!leftsource=\zerocount, + \c!middlesource=\zerocount, + \c!rightsource=\mathfenceparameter\c!source, + \c!source=\zerocount, + \c!height=\zeropoint, + \c!depth=\zeropoint, \c!factor=\v!auto] \appendtoks \edef\p_command{\mathfenceparameter\c!command}% \ifx\p_command\v!yes % \instance - \protected\edefcsname\currentmathfence\endcsname{\math_fenced_fenced[\currentmathfence]}% + \protected\edefcsname\currentmathfence\endcsname{\math_fenced_fenced{\currentmathfence}}% \fi \to \everydefinemathfence @@ -87,9 +93,13 @@ %D $ a + \fenced[bar] {\frac {b} {c}} + d $ %D \stoptyping +% todo : class -> number + \newconditional\c_math_fenced_mirror \settrue \c_math_fenced_mirror \newconditional\c_math_fenced_sized \setfalse\c_math_fenced_sized +\newcount\c_math_fence_nesting + \installcorenamespace {mathfencesize} \defcsname\??mathfencesize big\endcsname{1} @@ -97,125 +107,143 @@ \defcsname\??mathfencesize bigg\endcsname{3} \defcsname\??mathfencesize Bigg\endcsname{4} +\let\math_fenced_trace\donothing + \def\math_fenced_force_size#1#2% {\c_attr_mathsize\numexpr #1*\plushundred +\ifcsname\??mathfencesize#2\endcsname\lastnamedcs\else#2\fi \relax} -\protected\def\math_fenced_inject#1#2#3#4% - {\ifx#1\empty - #2.% +\def\math_fenced_common_factor_none + {\math_fenced_force_size\bigmathdelimitervariant\c_math_fence_nesting\relax + \Uvextensible + \s!axis + \s!exact} + +\def\math_fenced_common_factor_fixed + {\Uvextensible + \s!axis + \s!exact} + +\def\math_fenced_common_factor_unknown + {\scratchdimen\dimexpr\p_factor\bodyfontsize/2\relax + \Uvextensible + \s!height\scratchdimen + \s!depth\scratchdimen + \s!axis + \s!exact} + +\def\math_fenced_common_factor_force + {\Uvextensible + \s!height\mathfenceparameter\c!height + \s!depth\mathfenceparameter\c!depth + \s!axis + \s!exact} + +\permanent\def\math_fenced_common#1#2#3#4% \Uwhatever class symbol source + {\ifconditional\c_math_fenced_sized + \orelse\ifconditional\c_math_fenced_level_mode + \ifnum#2=\mathopencode + % \hpack{\infofont<L:\number\c_math_fenced_level:\number\c_attr_mathsize>}% + \integerdef\c_math_fenced_stack\c_attr_mathsize + \push_macro_c_math_fenced_stack + \orelse\ifnum#2=\mathclosecode + \pop_macro_c_math_fenced_stack + \c_attr_mathsize\c_math_fenced_stack + % \hpack{\infofont<R:\number\c_math_fenced_level:\number\c_attr_mathsize>}% + \fi + \fi + \edef\p_fence{#3}% + \ifempty\p_fence + #1.\relax \else + \edef\p_factor {\mathfenceparameter\c!factor}% + \edef\p_size {\mathfenceparameter\c!size}% \edef\p_mathclass{\mathfenceparameter\c!mathclass}% - \ifconditional\c_math_fenced_sized - \let\p_factor\v!fixed - \else - \edef\p_factor{\mathfenceparameter\c!factor}% - \fi - \ifempty\p_factor - \ifempty\p_mathclass - #2% + \ifnum\c_math_fenced_level>\zerocount + \math_fenced_common_factor_fixed + \orelse\ifconditional\c_math_fenced_sized + \math_fenced_common_factor_fixed + \orelse\ifempty\p_factor + \ifconditional\c_math_fenced_level_mode + \Uvextensible \else - #3% - \s!class\p_mathclass + #1% \Uleft \Umiddle \Uleft \fi \orelse\ifx\p_factor\v!auto - \ifempty\p_mathclass - #2% + \ifconditional\c_math_fenced_level_mode + \Uvextensible \else - #3% - \s!class\p_mathclass + #1% \Uleft \Umiddle \Uleft \fi \orelse\ifx\p_factor\v!none - #3% - \s!height\zeropoint % redundant with "exact" - \s!depth\zeropoint % redundant with "exact" - \ifempty\p_mathclass\else - \s!class\p_mathclass - \fi - \s!axis - \s!exact % new - % #2% + \math_fenced_common_factor_none + \orelse\ifx\p_factor\v!fixed + \math_fenced_common_factor_fixed + \orelse\ifx\p_factor\v!force + \math_fenced_common_factor_force \else - %\scratchdimen\ifx\p_factor\v!fixed\scaledpoint\else\dimexpr\p_factor\bodyfontsize/2\relax\fi - \scratchdimen\ifx\p_factor\v!fixed\zeropoint\else\dimexpr\p_factor\bodyfontsize/2\relax\fi - #3% - \s!height\scratchdimen - \s!depth\scratchdimen - \ifempty\p_mathclass\else - \s!class\p_mathclass - \fi - \s!axis - \s!exact + \math_fenced_common_factor_unknown + \fi + \usedcolorparameterattributes{\mathfenceparameter\c!color}% + \s!class\ifempty\p_mathclass#2\else\p_mathclass\fi + \s!source\numexpr\namedboxanchor{\mathfenceparameter#4}\relax + \math_fenced_trace + \Udelimiter#2\fam\p_fence\relax + \fi + % we could use \s!attr \c_math_fenced_stack here + \ifconditional\c_math_fenced_sized + \orelse\ifcase\c_math_fenced_level + \c_attr_mathsize\attributeunsetvalue + \fi} + +\def\math_fenced_left + {\advance\c_math_fence_nesting\plusone + \math_fenced_common\Uleft\mathopencode\math_fenced_p_left\c!leftsource} + +\def\math_fenced_middle + {\math_fenced_common\Umiddle\mathmiddlecode\math_fenced_p_middle\c!middlesource} + +\def\math_fenced_right + {\math_fenced_common\Uright\mathclosecode\math_fenced_p_right\c!rightsource + \advance\c_math_fence_nesting\minusone} + +\def\math_fenced_p_left + {\ifconditional\c_math_fenced_mirror + \ifconditional\c_math_right_to_left + \mathfenceparameter\c!right + \else + \mathfenceparameter\c!left \fi - \Udelimiter#4\fam#1\relax + \else + \mathfenceparameter\c!left \fi} -\permanent\def\math_fenced_left - {\edef\p_left - {\ifconditional\c_math_fenced_mirror - \ifconditional\c_math_right_to_left - \mathfenceparameter\c!right - \else - \mathfenceparameter\c!left - \fi - \else - \mathfenceparameter\c!left - \fi}% - \math_fenced_color_push - \math_fenced_inject\p_left\normalleft\Uleft\plusfour - \math_fenced_color_pop} - -\permanent\def\math_fenced_middle - {\edef\p_middle{\mathfenceparameter\c!middle}% - \mskip\thinmuskip - \math_fenced_color_push - \math_fenced_inject\p_middle\normalmiddle\Umiddle\plusfour - \math_fenced_color_pop - \mskip\thinmuskip} - -\permanent\def\math_fenced_right - {\edef\p_right - {\ifconditional\c_math_fenced_mirror - \ifconditional\c_math_right_to_left - \mathfenceparameter\c!left - \else - \mathfenceparameter\c!right - \fi - \else - \mathfenceparameter\c!right - \fi}% - \math_fenced_color_push - \math_fenced_inject\p_right\normalright\Uright\plusfive - \math_fenced_color_pop} - -\def\math_fenced_color_do_push{\pushcolor[\p_math_fenced_color]} -\let\math_fenced_color_do_pop \popcolor - -\let\math_fenced_color_push\donothing -\let\math_fenced_color_pop \donothing +\def\math_fenced_p_middle + {\mathfenceparameter\c!middle}% + +\def\math_fenced_p_right + {\ifconditional\c_math_fenced_mirror + \ifconditional\c_math_right_to_left + \mathfenceparameter\c!left + \else + \mathfenceparameter\c!right + \fi + \else + \mathfenceparameter\c!right + \fi} \aliased\let\fence \relax \aliased\let\fenced\relax -\newcount\c_math_fenced_nesting - \protected\def\math_fenced_fenced_common {\startusemathstyleparameter\mathfenceparameter\c!mathstyle - \enforced\let\fence\math_fenced_middle - \edef\p_math_fenced_color{\mathfenceparameter\c!color}% - \ifempty\p_math_fenced_color - \let\math_fenced_color_push\donothing - \let\math_fenced_color_pop \donothing - \else - \let\math_fenced_color_push\math_fenced_color_do_push - \let\math_fenced_color_pop \math_fenced_color_do_pop - \fi} + \enforced\let\fence\math_fenced_middle} \protected\def\math_fenced_fenced_start#1% - {\advance\c_math_fenced_nesting\plusone - \begingroup + {\begingroup + %{\beginmathgroup \edef\currentmathfence{#1}% \math_fenced_fenced_common \math_fenced_left} @@ -224,15 +252,19 @@ {\edef\currentmathfence{#1}% \math_fenced_right \stopusemathstyleparameter - \endgroup - \advance\c_math_fenced_nesting\minusone} + \endgroup} + %\endmathgroup} -\tolerant\protected\def\math_fenced_fenced[#1]#*[#2]% - {\advance\c_math_fenced_nesting\plusone - \begingroup - \edef\currentmathfence{#1}% +\installlocalcurrenthandler \??mathfences {mathfence} + +\tolerant\protected\def\math_fenced_fenced#1#*[#2]% + {\begingroup + %{\beginmathgroup + \setlocalmathfencecurrent{#1}% \edef\currentmathfence{#1}% % under test: + \setfalse\c_math_fenced_level_mode \c_attr_mathsize\attributeunsetvalue + % \letmathfenceparameter\c!size\empty \letmathfenceparameter\c!factor\v!auto % so far @@ -250,8 +282,8 @@ \protected\def\math_fenced_fenced_indeed_finish {\stopusemathstyleparameter - \endgroup - \advance\c_math_fenced_nesting\minusone} + \endgroup} + %\endmathgroup} \protected\def\math_fenced_fenced_indeed_fixed#1% {\math_fenced_force_size\bigmathdelimitervariant\p_size @@ -272,10 +304,81 @@ \math_fenced_right \math_fenced_fenced_indeed_finish} +\protected\def\math_fenced_direct[#1]% + {\math_fenced_fenced{#1}} + \appendtoks - \enforced\let\fenced\math_fenced_fenced + \enforced\let\fenced\math_fenced_direct \to \everymathematics +%D This is new: +%D +%D \starttyping +%D $ \F0 \left( x + \F1 \left( x \right) + x \right) $ +%D $ +%D \F0 \left( x + \F1 \left( x + \F2 \left( x + \F3 \left( x + \F4 \left( x + +%D 2 +%D + x \right) + x \right) + x \right) + x \right) + x \right) +%D $ +%D $ \F1 \left( x + \F1 \left( x \right) + x \right) $ +%D $ \F3 \left( x + \F1 \left( x \right) + x \right) $ +%D $ \F1 \left( x + \F4 \left( x \right) + x \right) $ +%D $ \F4 \left( x + \F- \left( x \right) + x \right) $ +%D $ \F4 +%D \left( 1 + +%D \F- \left( 2 + +%D \F* \left( 3 + +%D 4 +%D \right) +%D + 5 + +%D \F- \left( 6 + +%D 7 +%D \right) +%D \right) +%D + 8 +%D \right) +%D $ +%D \stoptyping +%D +%D \starttyping +%D \startTEXpage[offset=1dk,width=20dk] +%D \ruledhbox{$ \F3 \left( 1 + \F2 \left( a + b \right) + \left( a + b \right) \right) $}\par +%D \ruledhbox{$ \F3 \left( 1 + \F0 \left( a + b \right) \right) $}\par +%D \ruledhbox{$ \F3 \left( 1 + \F= \left( a + b \right) \right) $}\par +%D \ruledhbox{$ \F4 \left( 1 + \fenced[parenthesis]{a + b} \right) $}\par +%D \ruledhbox{$ \F3 \left( 1 + \F- \left( a + b \right) \right) $}\par +%D \ruledhbox{$ \left( \frac{1}{1+x} \right) $}\par +%D \ruledhbox{$ \left( \frac{1}{1+x} \right) $}\par +%D \stopTEXpage +%D \stoptyping + +\newcount \c_math_fenced_level +\newconditional\c_math_fenced_level_mode + +\integerdef\c_math_fenced_stack \zerocount + +\installmacrostack \c_math_fenced_stack + +\installcorenamespace{fencelevels} +\installcorenamespace{fencestack} + +\defcsname\??fencelevels+\endcsname{\advance\c_math_fenced_level\plusone } +\defcsname\??fencelevels-\endcsname{\advance\c_math_fenced_level\minusone } +\defcsname\??fencelevels=\endcsname {\c_math_fenced_level\zerocount} + +\letcsname\??fencelevels*\endcsname\donothing + +\permanent\protected\def\F#1% + {\settrue\c_math_fenced_level_mode + \ifchknum#1\or + \c_math_fenced_level#1\relax + \orelse\ifcsname\??fencelevels#1\endcsname + \lastnamedcs + \else + \c_math_fenced_level\zerocount + \fi + \math_fenced_force_size\bigmathdelimitervariant\c_math_fenced_level\relax} + % integral experiment (but no scripts) % % \protected\def\math_fenced_fenced_simple#1% @@ -420,7 +523,7 @@ \popoverloadmode -\let\leftorright\relax +% \let\leftorright\relax \newconditional\c_math_fenced_done \newconditional\c_math_fenced_unknown \settrue\c_math_fenced_unknown @@ -620,12 +723,6 @@ %D As we have overloaded \type {\left} and \type {\right} we also need a more %D clever version of the following: -% methods: -% -% 1: none -% 2: lua -% 3: tex - % variants: % % 1: step 1 @@ -633,85 +730,35 @@ % 3: htdp * 1.33^n % 4: size * 1.33^n -\setnewconstant\bigmathdelimitermethod \plustwo % \plusone \setnewconstant\bigmathdelimitervariant\plusthree \appendtoks - \bigmathdelimitermethod \mathfenceparameter\c!method\relax - \bigmathdelimitervariant\mathfenceparameter\c!alternative\relax + \bigmathdelimitervariant\mathfenceparameter\c!alternative\relax % controls lua \to \everysetupmathfence -\setupmathfence[\c!method=1,\c!alternative=1] +\setupmathfence[\c!alternative=1] % or 5 -% \protected\def\plainbigdelimiters % traditional method -% {\bigmathdelimitermethod\plustwo} -% -% \plainbigdelimiters % is default for the moment but not so nice - -\installcorenamespace{mathbig} +\permanent\protected\def\choosemathbig + {\mathortext\math_choosemathbig_math\math_choosemathbig_text} -\defcsname\??mathbig1\endcsname{0.85} -\defcsname\??mathbig2\endcsname{1.15} -\defcsname\??mathbig3\endcsname{1.45} -\defcsname\??mathbig4\endcsname{1.75} +\protected\def\math_choosemathbig_math#1#2% so we accept \big{||} as well + {\math_fenced_force_size\bigmathdelimitervariant{#1}\relax + \Uvextensible#2\relax + \c_attr_mathsize\attributeunsetvalue} -\permanent\protected\def\choosemathbig#1#2% so we accept \big{||} as well - {{\naturalhbox\bgroup +\protected\def\math_choosemathbig_text#1#2% so we accept \big{||} as well + {\naturalhbox\bgroup \startimath - \ifcase\bigmathdelimitermethod - \math_fenced_step#2\relax - \or - \math_fenced_force_size\bigmathdelimitervariant{#1}\relax - \math_fenced_step#2\relax - \else - \math_fenced_step#2{\vpack to\csname\??mathbig#1\endcsname\bodyfontsize{}}% - \fi - \nulldelimiterspace\zeropoint\relax + \math_choosemathbig_math{#1}{#2}% + \nulldelimiterspace\zeropoint \mathsurround\zeropoint \stopimath - \egroup}} - -% needs testing: -% -% \protected\def\choosemathbig#1#2% so we accept \big{||} as well -% {{\naturalhbox\bgroup -% \startimath -% \ifcase\bigmathdelimitermethod -% \Uvextensible#2\relax -% \or -% \math_fenced_force_size\bigmathdelimitervariant{#1}\relax -% \Uvextensible#2\relax -% \else -% \scratchdimen.5\dimexpr\csname\??mathbig\number#1\endcsname\bodyfontsize+1.1\exheight\relax -% \Uvextensible\s!axis \s!depth \scratchdimen \s!height \scratchdimen #2\relax -% \fi -% \nulldelimiterspace\zeropoint\relax -% \mathsurround\zeropoint -% \stopimath -% \egroup}} - -\def\math_fenced_step#1#2% - {\setfalse\c_math_fenced_unknown - \setfalse\c_math_fenced_done - \left#1\relax - \ifconditional\c_math_fenced_done - #2% - \right.\relax - \else - \left.\relax - #2% - \setfalse\c_math_fenced_done - \right#1\relax - \ifconditional\c_math_fenced_done - \else - \right.\relax - \fi - \fi} + \egroup} -\permanent\protected\def\mathdelimiterstep#1#2% not used +\permanent\protected\def\mathdelimiterstep#1#2% not used, only in example {\begingroup \math_fenced_force_size\plusone{#1}% - \math_fenced_step#2\relax + \Uvextensible#2\relax \endgroup} \definemathcommand [big] {\choosemathbig1} @@ -779,6 +826,7 @@ \permanent\protected\def\enableautofences {\clf_enableautofences + \setfalse\c_math_fences_auto \glet\clf_enableautofences\relax % onlyonce anyway \enforced\permanent\protected\gdef\enableautofences{\settrue\c_math_fences_auto}% \enableautofences} @@ -865,4 +913,79 @@ \immutable\Umathchardef\bracelu\zerocount \zerocount "FF07C \immutable\Umathchardef\braceru\zerocount \zerocount "FF07D +%D Some tracing: + +\definefont[mathindexfont][Mono sa .2] + +\def\math_fenced_trace_indeed + {% + \beginlocalcontrol + \registerboxanchor + \registeranchorbox + \registeredboxanchor + \plusone + \hbox + \s!anchors \boxanchorpresetcode{depth} \boxanchorpresetcode{height} + \s!yoffset -.1\exheight + \s!target \registeredboxanchor + \s!to \zeropoint + {\darkblue\hss\mathindexfont\ruledhbox{\number\c_math_fence_nesting}\hss}% + \endlocalcontrol + \s!source \registeredboxanchor + } + +% \def\math_fenced_trace_indeed +% {% +% \beginlocalcontrol +% \registerboxanchor +% \registeranchorbox +% \registeredboxanchor +% \plusone +% \ruledhbox +% \s!anchors \boxanchorpresetcode{depth} \boxanchorpresetcode{height} +% \s!yoffset -.1\exheight +% \s!target \registeredboxanchor +% \s!to \zeropoint +% {\darkblue\hss\mathindexfont\ruledhbox{\number\c_math_fence_nesting B}\hss}% +% \registeranchorbox +% \registeredboxanchor +% \plusone +% \ruledhbox +% \s!anchors \boxanchorpresetcode{height} \boxanchorpresetcode{depth} +% \s!yoffset .1\exheight +% \s!target \registeredboxanchor +% \s!to \zeropoint +% {\darkgreen\hss\mathindexfont\ruledhbox{\number\c_math_fence_nesting T}\hss}% +% \registeranchorbox +% \registeredboxanchor +% \plusone +% \ruledhbox +% \s!anchors \boxanchorpresetcode{left} \boxanchorpresetcode{right} +% \s!xoffset -.1\emwidth +% \s!target \registeredboxanchor +% \s!to \zeropoint +% {\darkred\hss\mathindexfont\ruledhbox{\number\c_math_fence_nesting L}}% +% \registeranchorbox +% \registeredboxanchor +% \plusone +% \ruledhbox +% \s!anchors \boxanchorpresetcode{right} \boxanchorpresetcode{left} +% \s!xoffset .1\emwidth +% \s!target \registeredboxanchor +% \s!to \zeropoint +% {\darkyellow\mathindexfont\ruledhbox{\number\c_math_fence_nesting R}\hss}% +% \endlocalcontrol +% \s!source \registeredboxanchor +% } + +\installtextracker + {math.fencenesting} + {\let\math_fenced_trace\math_fenced_trace_indeed} + {\let\math_fenced_trace\donothing} + +\appendtoks + \integerdef\c_math_fence_level\minusone + \c_math_fence_nesting\zerocount +\to \everymathematics + \protect diff --git a/tex/context/base/mkxl/math-frc.lmt b/tex/context/base/mkxl/math-frc.lmt index c82b8387d..c2ae2fbd5 100644 --- a/tex/context/base/mkxl/math-frc.lmt +++ b/tex/context/base/mkxl/math-frc.lmt @@ -6,73 +6,62 @@ if not modules then modules = { } end modules ['math-frc'] = { license = "see context related readme files" } -local utfchar = utf.char - -local context = context -local variables = interfaces.variables - -local v_no = variables.no -local v_yes = variables.yes -local v_hidden = variables.hidden - -local resolved = { - [0x007B] = "\\{", - [0x007D] = "\\}", -} - -table.setmetatableindex(resolved, function(t,k) - local v = utfchar(k) - t[k] = v - return v -end) - -local ctx_Uatop = context.Uatop -local ctx_Uover = context.Uover - --- local function umathfraction(how,style,left,right,width) --- style = tonumber(style) -- or nil +-- obsolete +-- +-- \def\math_frac_command_u +-- {\clf_umathfraction % we can get this bakc to the tex end +-- {\mathfractionparameter\c!rule}% +-- \ifempty\p_math_fraction_fences +-- \mathfractionparameter\c!left \space +-- \mathfractionparameter\c!right\space +-- \else +-- \math_frac_no_delim\space +-- \math_frac_no_delim\space +-- \fi +-- \dimexpr\mathfractionparameter\c!rulethickness\relax +-- {\number\namedboxanchor{\mathfractionparameter\c!source}}% +-- \relax} +-- +-- local utfchar = utf.char +-- +-- local context = context +-- local variables = interfaces.variables +-- +-- local v_no = variables.no +-- local v_yes = variables.yes +-- local v_hidden = variables.hidden +-- +-- local resolved = { +-- [0x007B] = "\\{", +-- [0x007D] = "\\}", +-- } +-- +-- table.setmetatableindex(resolved, function(t,k) +-- local v = utfchar(k) +-- t[k] = v +-- return v +-- end) +-- +-- local function umathfraction(how,left,right,width,source) +-- source = tonumber(source) or 0 -- if how == v_no then -- if left == 0x002E and right == 0x002E then --- if style then --- context("\\Uatop style %i",style) --- else --- ctx_Uatop() --- end +-- context("\\Uatop source %i ",source) -- else --- if style then --- context("\\Uatopwithdelims style %i %s%s",style,resolved[left],resolved[right]) --- else --- context("\\Uatopwithdelims%s%s",resolved[left],resolved[right]) --- end +-- context("\\Uatopwithdelims %s%s source %i ",resolved[left],resolved[right],source) -- end -- elseif how == v_yes or how == v_hidden then --- local norule = how == v_hidden and " norule " or "" --- if style then --- if left == 0x002E and right == 0x002E then --- context("\\Uabove style %i %s%ssp",style,norule,width) --- else --- context("\\Uabovewithdelims style %i %s%s%s%ssp",style,norule,resolved[left],resolved[right],width) --- end +-- local norule = how == v_hidden and "norule" or "" +-- if left == 0x002E and right == 0x002E then +-- context("\\Uabove source %i %s %ssp",source,norule,width) -- else --- if left == 0x002E and right == 0x002E then --- context("\\Uabove%s%ssp",norule,width) --- else --- context("\\Uabovewithdelims%s%s%s%ssp",norule,resolved[left],resolved[right],width) --- end +-- context("\\Uabovewithdelims %s%s source %i %s %ssp",resolved[left],resolved[right],source,norule,width) -- end -- else -- v_auto -- if left == 0x002E and right == 0x002E then --- if style then --- context("\\Uover style %i",style) --- else --- ctx_Uover() --- end +-- context("\\Uover source %i ",source) -- else --- if style then --- context("\\Uoverwithdelims style %i %s%s",style,resolved[left],resolved[right]) --- else --- context("\\Uoverwithdelims%s%s",resolved[left],resolved[right]) --- end +-- context("\\Uoverwithdelims %s%s source %i ",resolved[left],resolved[right],source) -- end -- end -- end @@ -80,35 +69,6 @@ local ctx_Uover = context.Uover -- interfaces.implement { -- name = "umathfraction", -- actions = umathfraction, --- arguments = { "string", "string", "number", "number", "dimen" } +-- protected = true, +-- arguments = { "string", "number", "number", "dimen", "string" } -- } - -local function umathfraction(how,left,right,width) - if how == v_no then - if left == 0x002E and right == 0x002E then - ctx_Uatop() - else - context("\\Uatopwithdelims%s%s",resolved[left],resolved[right]) - end - elseif how == v_yes or how == v_hidden then - local norule = how == v_hidden and " norule " or "" - if left == 0x002E and right == 0x002E then - context("\\Uabove %s%ssp",norule,width) - else - context("\\Uabovewithdelims %s%s%s%ssp",norule,resolved[left],resolved[right],width) - end - else -- v_auto - if left == 0x002E and right == 0x002E then - ctx_Uover() - else - context("\\Uoverwithdelims%s%s",resolved[left],resolved[right]) - end - end -end - -interfaces.implement { - name = "umathfraction", - actions = umathfraction, - protected = true, - arguments = { "string", "number", "number", "dimen" } -} diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl index 8835ea997..6e41ee71e 100644 --- a/tex/context/base/mkxl/math-frc.mkxl +++ b/tex/context/base/mkxl/math-frc.mkxl @@ -31,11 +31,10 @@ %D \macros %D {frac, xfrac, xxfrac} %D -%D This is another one Tobias asked for. It replaces the primitive \type -%D {\over}. We also take the opportunity to handle math style restoring, -%D which makes sure units and chemicals come out ok. The \type {\frac} -%D macro kind of replaces the awkward \type {\over} primitive. Say that -%D we have the following formulas: +%D This is another one Tobias asked for. It replaces the primitive \type {\over}. We +%D also take the opportunity to handle math style restoring, which makes sure units +%D and chemicals come out ok. The \type {\frac} macro kind of replaces the awkward +%D \type {\over} primitive. Say that we have the following formulas: %D %D \startbuffer[sample] %D test $\frac {1}{2}$ test $$1 + \frac {1}{2} = 1.5$$ @@ -78,23 +77,8 @@ %D So we stick to the next definitions (watch the local overloading of %D \type {\xfrac}). %D -%D In the meantime, in \LUATEX, we have better control over styles so the -%D following macros are different from the \MKII\ ones. - -% obsolete, is now c!mathstyle -% -% 0=auto, 1=displaystyle, 2=textstyle, 3=scriptstyle, 4=scriptscriptstyle, 5=mathstyle -% -% $\mathfracmode0 \frac{1}{2}$ -% $\mathfracmode1 \frac{1}{2}$ -% $\mathfracmode2 \frac{1}{2}$ -% $\mathfracmode3 \frac{1}{2}$ -% $\mathfracmode4 \frac{1}{2}$ -% $\mathfracmode5 \frac{1}{2}$ -% -% we keep the constant for a while - -\setnewconstant\mathfracmode\zerocount +%D In the meantime, in \LUATEX, we have better control over styles so the following +%D macros are different from the \MKII\ ones. \installcorenamespace{mathfractions} \installcorenamespace{mathfractionstyle} @@ -108,16 +92,22 @@ \setupmathfractions [\c!mathstyle=, + \c!method=\v!vertical, \c!mathnumeratorstyle=\mathfractionparameter\c!mathstyle, \c!mathdenominatorstyle=\mathfractionparameter\c!mathstyle, \c!alternative=\v!inner, \c!margin=\zeropoint, - \c!rulethickness=.25\exheight, - \c!left=0x2E, - \c!right=0x2E, + % \c!rulethickness=.1\exheight, % was .25 for above / atop + \c!rulethickness=\v!font, + \c!left="2E, + \c!right="2E, + \c!middle="2F, \c!strut=\v!yes, \c!topdistance=, \c!bottomdistance=, + \c!source=\zerocount, + \c!hfactor=\plusthousand, + \c!vfactor=\plusthousand, \c!rule=\v!auto] \appendtoks @@ -207,10 +197,14 @@ %D $\frac {2}{3} ^4$ % we wrap in \mathfrac so we can also use prescripts %D \stoptyping -\protected\def\math_frac#1% - %{\begingroup +\installlocalcurrenthandler\??mathfractions {mathfraction} + +\tolerant\protected\def\math_frac#1#*[#2]%% {\mathfrac\bgroup - \edef\currentmathfraction{#1}% + % + \setlocalmathfractioncurrent{#1}% \edef\currentmathfraction{#1}% + % + \ifparameter#2\or\setupcurrentmathfraction[#2]\fi % \edef\p_math_fraction_fences{\mathfractionparameter\c!fences}% \ifempty\p_math_fraction_fences \else @@ -224,8 +218,6 @@ \let\math_fraction_margin_kern\math_fraction_margin_kern_indeed \fi % - \edef\p_math_fractions_color{\mathfractionparameter\c!color}% - % \edef\p_math_fractions_strut{\mathfractionparameter\c!strut}% \ifcsname\??mathfractionstrut\p_math_fractions_strut\endcsname \lastnamedcs @@ -233,30 +225,15 @@ \math_frac_no_strut \fi % - \ifempty\p_math_fractions_color - \expandafter\math_frac_normal - \else - \expandafter\math_frac_colored - \fi} + \expandnamespaceparameter\??mathfractionalternative\mathfractionparameter\c!alternative\v!inner} \protected\def\math_frac_wrapup {\ifempty\p_math_fraction_fences \else \math_fenced_fenced_stop\p_math_fraction_fences \fi - % \endgroup} \egroup} -\protected\def\math_frac_colored#1#2% - {\savecolor - \colo_helpers_activate\p_math_fractions_color - \math_frac_normal{\restorecolor#1}{\restorecolor#2}} - -\protected\def\math_frac_normal - {\expandnamespaceparameter\??mathfractionalternative\mathfractionparameter\c!alternative\v!inner} - -% we use utfchar anyway so we can as well do all at the lua end - -\def\math_frac_no_delim{0x2E} +\integerdef\math_frac_no_delim "2E % or just \zerocount % Having a \withmarginornot{#1}{#2} makes not much sense nor do 4 tests or 4 redundant % kerns (longer node lists plus possible interference). A split in normal and margin @@ -268,33 +245,90 @@ % See \MKIV\ for the old (more messy) implementation where we have to fight the over % related syntax (we now use a lmtx primitive). -% {\ifcstok{#1}\emptytoks\else\tomathstyle#1\fi}% -% -% {\expandedmathstyleparameter\mathfractionparameter\c!mathstyle}% - % timestamp: 01/2022 : (re)watching eNerd⁴ - Time Capsule 2020 a.k.a. Farewell Party % for Normalcy (UHD) with the soekris/neumanns combination +\installcorenamespace{fractionmethods} + +\defcsname\??fractionmethods\v!vertical \v!no \v!none\endcsname{\Uatop} +\defcsname\??fractionmethods\v!vertical \v!no \endcsname{\Uatopwithdelims + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo} +\defcsname\??fractionmethods\v!vertical \v!yes \v!none\endcsname{\Uabove} +\defcsname\??fractionmethods\v!vertical \v!yes \endcsname{\Uabovewithdelims + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo} +\defcsname\??fractionmethods\v!vertical \v!hidden\v!none\endcsname{\Uabove + norule} +\defcsname\??fractionmethods\v!vertical \v!hidden \endcsname{\Uabovewithdelims + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo + norule} +\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} +\defcsname\??fractionmethods\v!horizontal \v!none\endcsname{\Uskewed + \Udelimiter\zerocount\fam\scratchcounterthree + \s!hfactor \numexpr\mathfractionparameter\c!hfactor\relax} +\defcsname\??fractionmethods\v!horizontal \endcsname{\Uskewedwithdelims + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo + \Udelimiter\zerocount\fam\scratchcounterthree + \s!hfactor \numexpr\mathfractionparameter\c!hfactor\relax} +\defcsname\??fractionmethods\v!line \v!none\endcsname{\Uskewed + \Udelimiter\zerocount\fam\scratchcounterthree + \s!noaxis \space + \s!hfactor \numexpr\mathfractionparameter\c!hfactor\relax} +\defcsname\??fractionmethods\v!line \endcsname{\Uskewedwithdelims + \Udelimiter\zerocount\fam\scratchcounterone + \Udelimiter\zerocount\fam\scratchcountertwo + \Udelimiter\zerocount\fam\scratchcounterthree + \s!noaxis \space + \s!hfactor \numexpr\mathfractionparameter\c!hfactor\relax} + \def\math_frac_command_u - {\clf_umathfraction - {\mathfractionparameter\c!rule}% - \ifempty\p_math_fraction_fences - \mathfractionparameter\c!left \space - \mathfractionparameter\c!right\space - \else - \math_frac_no_delim\space - \math_frac_no_delim\space - \fi - \dimexpr\mathfractionparameter\c!rulethickness\relax - \relax} + {\edef\p_method {\mathfractionparameter\c!method}% + \edef\p_rule {\mathfractionparameter\c!rule}% + \edef\p_thickness{\mathfractionparameter\c!rulethickness}% + \scratchcounterone \mathfractionparameter\c!left \relax + \scratchcountertwo \mathfractionparameter\c!right \relax + \scratchcounterthree \mathfractionparameter\c!middle \relax + \csname + \??fractionmethods + \p_method + \ifx\p_method\v!horizontal + \orelse\ifx\p_method\v!line + \orelse\ifcsname\??fractionmethods\p_method\p_rule\endcsname + \p_rule + \else + \v!auto + \fi + \ifnum\scratchcounterone=\math_frac_no_delim + \ifnum\scratchcountertwo=\math_frac_no_delim + \v!none + \fi + \fi + \endcsname + \usedcolorparameterattributes{\mathfractionparameter\c!color}% + thickness \ifx\p_thickness\v!font + \zeropoint + \s!font \space + \else + \dimexpr\p_thickness\relax + \fi + \s!vfactor \numexpr\mathfractionparameter\c!vfactor\relax + \s!source \number\namedboxanchor{\mathfractionparameter\c!source}} \protected\defcsname\??mathfractionalternative\v!inner\endcsname#1#2% {\math_frac_command_u - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!topcolor}% + \math_fraction_margin_kern \usemathstyleparameter\mathfractionparameter\c!mathnumeratorstyle \m_fractions_strut_top#1% \math_fraction_margin_kern}% - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!bottomcolor}% + \math_fraction_margin_kern \usemathstyleparameter\mathfractionparameter\c!mathdenominatorstyle \m_fractions_strut_bot#2% \math_fraction_margin_kern}% @@ -304,10 +338,12 @@ {\beginmathgroup \usemathstyleparameter\mathfractionparameter\c!mathstyle \math_frac_command_u - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!topcolor}% + \math_fraction_margin_kern \m_fractions_strut_top#1% \math_fraction_margin_kern}% - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!bottomcolor}% + \math_fraction_margin_kern \m_fractions_strut_bot#2% \math_fraction_margin_kern}% \endmathgroup @@ -317,11 +353,13 @@ {\beginmathgroup \usemathstyleparameter\mathfractionparameter\c!mathstyle \math_frac_command_u - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!topcolor}% + \math_fraction_margin_kern \usemathstyleparameter\mathfractionparameter\c!mathnumeratorstyle \m_fractions_strut_top#1% \math_fraction_margin_kern}% - {\math_fraction_margin_kern + {\dousecolorparameter{\mathfractionparameter\c!bottomcolor}% + \math_fraction_margin_kern \usemathstyleparameter\mathfractionparameter\c!mathdenominatorstyle \m_fractions_strut_bot#2% \math_fraction_margin_kern}% @@ -339,10 +377,8 @@ %D Spacing (sensitive for definition of \triggermathstyle: -% \ifcase\contextlmtxmode - -\permanent\protected\def\nomathfractiongaps {\normalexpanded{\math_no_fraction_gaps \mathstyletrigger\mathstyle}} % maybe collect settings -\permanent\protected\def\overlaymathfractiongaps{\normalexpanded{\math_overlay_fraction_gaps\mathstyletrigger\mathstyle}} % maybe collect settings +\permanent\protected\def\nomathfractiongaps {\normalexpanded{\math_no_fraction_gaps \allmathstyles}} +\permanent\protected\def\overlaymathfractiongaps{\normalexpanded{\math_overlay_fraction_gaps\allmathstyles}} \protected\def\math_no_fraction_gaps#1% {\Umathfractionnumup #1\zeropoint @@ -351,25 +387,9 @@ \protected\def\math_overlay_fraction_gaps#1% {\Umathfractionnumup #1\zeropoint \Umathfractionnumvgap #1\zeropoint - %Umathfractionrule #1\zeropoint \Umathfractiondenomvgap#1\zeropoint \Umathfractiondenomdown#1\zeropoint} -% \else - -% \protected\def\math_no_fraction_gaps -% {\Umathfractionnumup \mathstyle\zeropoint -% \Umathfractiondenomdown\mathstyle\zeropoint} -% -% \protected\def\math_overlay_fraction_gaps -% {\Umathfractionnumup \mathstyle\zeropoint -% \Umathfractionnumvgap \mathstyle\zeropoint -% %Umathfractionrule \mathstyle\zeropoint -% \Umathfractiondenomvgap\mathstyle\zeropoint -% \Umathfractiondenomdown\mathstyle\zeropoint} - -% \fi - \installcorenamespace{mathfractiondistance} \letcsname\??mathfractiondistance\v!none \endcsname\nomathfractiongaps @@ -379,6 +399,8 @@ \setupmathfractions [\c!distance=\v!none] +% we need to keep it local, so not everybodyfont + \appendtoks \edef\p_distance{\rootmathfractionparameter\c!distance}% \ifempty\p_distance\else @@ -427,6 +449,17 @@ {\edef\p_threshold{\mathfractionparameter\c!displaythreshold}% \Umathfractiondelsize\displaystyle \p_threshold\dimexpr\textface\relax} +%D This is a variant + +\setupmathfractions + [%\c!inlinethreshold=.25, % no unit but fraction + %\c!displaythreshold=.25, % no unit but fraction + \c!threshold=.5\exheight] % wrong name, better is margin or offset or so + +\appendtoks + \Umathskeweddelimitertolerance\allmathstyles\mathfractionparameter\c!threshold +\to \everymathematics % else original lost: \to \everybodyfont + %D \macros %D {dfrac, tfrac, frac, dbinom, tbinom, binom} %D @@ -456,7 +489,7 @@ \definemathfraction[i:dfrac][\c!alternative=\v!inner,\c!mathstyle=\s!display] \definemathfraction[d:frac] [\c!alternative=\v!inner,\c!mathstyle=\s!cramped] -\definemathfraction[d:tfrac][\c!alternative=\v!both,\c!mathstyle={\s!cramped,\s!script}] +\definemathfraction[d:tfrac][\c!alternative=\v!inner,\c!mathstyle={\s!cramped,\s!script}] \definemathfraction[d:sfrac][\c!alternative=\v!both,\c!mathstyle={\s!cramped,\s!scriptscript}] \definemathfraction[d:dfrac][\c!alternative=\v!both,\c!mathstyle=\s!display] @@ -488,12 +521,6 @@ \permanent\protected\def\ctxfrac{\csname\inlineordisplaymath id:frac\endcsname} \permanent\protected\def\amsfrac{\csname\inlineordisplaymath id:ams:frac\endcsname} -% \appendtoks -% \doifelse{\mathfractionparameter\c!option}{ams}% -% {\let\frac\amsfrac}% -% {\let\frac\ctxfrac}% -% \to \everysetupmathfraction - \appendtoks \doifelse{\mathematicsparameter\c!fractions}{ams}% {\enforced\let\frac\amsfrac}% @@ -508,22 +535,50 @@ % \protected\def\dbinom#1#2{{\displaystyle{{#1}\normalabovewithdelims()\zeropoint{#2}}}} % \protected\def\tbinom#1#2{{\textstyle {{#1}\normalabovewithdelims()\zeropoint{#2}}}} +% \definemathfraction +% [binom] +% [\c!alternative=\v!outer, +% \c!rule=\v!no, +% \c!left="28, +% \c!right="29, +% \c!mathstyle=\s!auto] +% +% \definemathfraction +% [dbinom] +% [binom] +% [\c!mathstyle=\s!display] +% +% \definemathfraction +% [tbinom] +% [binom] +% [\c!mathstyle=\s!text] + \definemathfraction - [binom] - [\c!alternative=\v!outer, - \c!rule=\v!no, - \c!left=0x28, - \c!right=0x29, - \c!mathstyle=\s!auto] + [d:binom] + [d:frac] + [\c!rule=\v!no, + % \c!mathstyle=\s!display, + \c!left="28, + \c!right="29] + +\definemathfraction + [i:binom] + [i:frac] + [\c!rule=\v!no, + %\c!mathstyle=\s!text, + \c!left="28, + \c!right="29] + +\permanent\protected\def\binom {\csname\inlineordisplaymath id:binom\endcsname} \definemathfraction [dbinom] - [binom] + [d:binom] [\c!mathstyle=\s!display] \definemathfraction [tbinom] - [binom] + [i:binom] [\c!mathstyle=\s!text] %D \macros @@ -570,8 +625,8 @@ %D \macros %D {splitfrac, splitdfrac} %D -%D Occasionally one needs to typeset multi||line fractions. -%D These commands use \tex{genfrac} to create such fractions. +%D Occasionally one needs to typeset multi||line fractions. These commands use \type +%D {\genfrac} to create such fractions. %D %D \startbuffer %D \startformula @@ -590,54 +645,59 @@ %D %D \typebuffer \getbuffer %D -%D These macros are based on Michael J.~Downes posting on -%D comp.text.tex on 2001/12/06 but adapted a bit. +%D These macros are based on Michael J.~Downes posting on comp.text.tex on 2001/12/06 +%D but adapted a bit. +%D +%D Does anyone actually use this kinf of stuff? \permanent\protected\def\splitfrac #1#2{{\textstyle {{\textstyle#1\quad\hfill}\normalabove\zeropoint{\textstyle\hfill\quad\mathstrut#2}}}} \permanent\protected\def\splitdfrac#1#2{{\displaystyle{{ #1\quad\hfill}\normalabove\zeropoint{ \hfill\quad\mathstrut#2}}}} -%D For testing: +%D More fracking (for Alan): -% \protected\def\ShowMathFractions#1#2% -% {\mathematics{x+\tfrac{#1}{#2}+1+\frac{#1}{#2}+2+\sfrac{#1}{#2}+g}} +% \appendtoks +% \Umathskewedfractionhgap\allmathstyles\namedmathfractionparameter\s!vfrac\c!hfactor\fontemwidth \mathstylefont\textstyle +% \Umathskewedfractionvgap\allmathstyles\namedmathfractionparameter\s!vfrac\c!vfactor\fontexheight\mathstylefont\textstyle +% \to \everymathematics -%D More fracking (for Alan): +\definemathfraction + [\v!horizontal] + [\c!method=\v!horizontal] -\protected\def\math_frac_colored_vulgar#1#2% - {\savecolor - \colo_helpers_activate\p_math_fractions_color - {\restorecolor#1}\Uskewed/{\restorecolor#2}} +\definemathfraction + [\s!vfrac] + [\v!horizontal] + [\c!hfactor=20, + \c!vfactor=10] -\protected\def\math_frac_normal_vulgar#1#2% - {{#1}\Uskewed/{#2}} +%D For Mikael Sundqvist who found out that most inline fractions look real bad: -\permanent\protected\def\vfrac#1#2% - {\bgroup - \edef\p_math_fractions_color{\namedmathfractionparameter\s!vfrac\c!color}% - \ifempty\p_math_fractions_color - \expandafter\math_frac_normal_vulgar - \else - \expandafter\math_frac_colored_vulgar - \fi - {#1}% - {#2}% - \egroup} +\pushoverloadmode -\appendtoks - \edef\p_hfactor{\namedmathfractionparameter\s!vfrac\c!hfactor}% - \edef\p_vfactor{\namedmathfractionparameter\s!vfrac\c!vfactor}% - \Umathskewedfractionhgap\textstyle \p_hfactor\fontemwidth \mathstylefont\textstyle - \Umathskewedfractionhgap\scriptstyle \p_hfactor\fontemwidth \mathstylefont\scriptstyle - \Umathskewedfractionhgap\scriptscriptstyle\p_hfactor\fontemwidth \mathstylefont\scriptscriptstyle - \Umathskewedfractionvgap\textstyle \p_vfactor\fontexheight\mathstylefont\textstyle - \Umathskewedfractionvgap\scriptstyle \p_vfactor\fontexheight\mathstylefont\scriptstyle - \Umathskewedfractionvgap\scriptscriptstyle\p_vfactor\fontexheight\mathstylefont\scriptscriptstyle -\to \everysetupmathfraction +%ifdefined\d \let\text_d\d \else \let\text_d\firstofoneargument \fi +\ifdefined\f \let\text_f\f \else \let\text_f\firstofoneargument \fi -\setupmathfraction - [\s!vfrac] - [\c!hfactor=.2, - \c!vfactor=.1] +\definemathfraction + [f] + [\c!strut=\v!math] + +% \definemathfraction +% [d] +% [\c!method=\v!line, +% \c!strut=\v!math] + +\aliased\let\math_f\f +%aliased\let\math_d\d + +\permanent\protected\def\d{\mathortext\math_d\text_d} +%permanent\protected\def\f{\mathortext\math_f\text_f} + +% \setupmathfraction +% [%strut=math, +% \c!hfactor=100, +% \c!vfactor=100] + +\popoverloadmode \protect \endinput @@ -716,7 +776,7 @@ % \hss$\textstyle/$\hss % \egroup % \lower -% \Umathskewedfractionvgap\textstyle +% \Umathskewedfractionvgapskewedfractionvgap\textstyle % \hbox\bgroup % $\hskip\dimexpr\Umathskewedfractionhgap\textstyle/2\relax\scriptstyle#2$% % \egroup diff --git a/tex/context/base/mkxl/math-ini.lmt b/tex/context/base/mkxl/math-ini.lmt index 4ac76fa62..f41170a97 100644 --- a/tex/context/base/mkxl/math-ini.lmt +++ b/tex/context/base/mkxl/math-ini.lmt @@ -31,6 +31,8 @@ local ctx_doifelsesomething = commands.doifelsesomething local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) +trace_defining = true + local report_math = logs.reporter("mathematics","initializing") mathematics = mathematics or { } @@ -47,86 +49,159 @@ local texsetattribute = tex.setattribute local setmathcode = tex.setmathcode local setdelcode = tex.setdelcode -local families = allocate { - mr = 0, - mb = 1, -} +-- These are different from mkiv with luatex. ---- to be checked .. a few defaults in char-def that should be alpha - -local classes = allocate { - ord = 0, -- mathordcomm mathord - op = 1, -- mathopcomm mathop - bin = 2, -- mathbincomm mathbin - rel = 3, -- mathrelcomm mathrel - open = 4, -- mathopencomm mathopen - middle = 4, - close = 5, -- mathclosecomm mathclose - punct = 6, -- mathpunctcomm mathpunct - alpha = 7, -- mathalphacomm firstofoneargument - accent = 8, -- class 0 - radical = 9, - xaccent = 10, -- class 3 - topaccent = 11, -- class 0 - botaccent = 12, -- class 0 - under = 13, - over = 14, - delimiter = 15, - inner = 0, -- mathinnercomm mathinner - nothing = 0, -- mathnothingcomm firstofoneargument - choice = 0, -- mathchoicecomm @@mathchoicecomm - box = 0, -- mathboxcomm @@mathboxcomm - limop = 1, -- mathlimopcomm @@mathlimopcomm - nolop = 1, -- mathnolopcomm @@mathnolopcomm - -- - ordinary = 0, -- ord - alphabetic = 7, -- alpha - unknown = 0, -- nothing - default = 0, -- nothing - punctuation = 6, -- punct - normal = 0, -- nothing - opening = 4, -- open - closing = 5, -- close - binary = 2, -- bin - relation = 3, -- rel - fence = 0, -- unknown - diacritic = 8, -- accent - large = 1, -- op - variable = 7, -- alphabetic - number = 7, -- alphabetic - root = 16, -- a private one +local classes = allocate { } +local classnames = allocate { } +local maxengineclass = 63 +local lastengineclass = 0 +local lastprivateclass = maxengineclass + +for k, v in next, nodes.noadcodes do + if type(k) == "string"then + classes[k] = v + local n = classnames[v] + if not n or #k < #n then + classnames[v] = k + end + elseif k > lastengineclass then + lastengineclass = k + end +end + +local ordinary_class = classes.ordinary +local operator_class = classes.operator +local binary_class = classes.binary +local relation_class = classes.relation +local open_class = classes.open +local close_class = classes.close +local punctuation_class = classes.punctuation +local middle_class = classes.middle +local accent_class = classes.accent +local radical_class = classes.radical +local fraction_class = classes.fraction +local under_class = classes.under +local over_class = classes.over +local fenced_class = classes.fenced +local ghost_class = classes.ghost + +classes.ord = ordinary_class +classes.op = operator_class +classes.bin = binary_class +classes.rel = relation_class +classes.opening = open_class -- will go +classes.closing = close_class -- will go +classes.punct = punctuation_class +classes.frac = fraction_class +classes.rad = radical_class +classes.fen = fenced_class +classes.gst = ghost_class + +classes.limop = operator_class +classes.limoperator = operator_class +classes.nolop = operator_class +classes.nolimoperator = operator_class +classes.large = operator_class +classes.largeoperator = operator_class + +-- special in the engine : variable active inner vcenter + +local function registerengineclass(name,short) + local class = classes[name] + if not class then + if lastengineclass < maxengineclass then + lastengineclass = lastengineclass + 1 + class = lastengineclass + classnames[class] = short or name + else + class = ordinary_class + end + classes[name] = class + end + return class +end + +local explicit_class = registerengineclass("explicit","expl") +local imaginary_class = registerengineclass("imaginary","im") +local diferential_class = registerengineclass("differential","dif") +local exponential_class = registerengineclass("exponential","exp") +local function_class = registerengineclass("function","fnc") +local digit_class = registerengineclass("digit","dig") +local division_class = registerengineclass("division","div") +local factorial_class = registerengineclass("factorial","fac") + +classes["begin"] = 62 classnames[62] = "begin" +classes["end"] = 63 classnames[63] = "end" + +local function registerprivateclass(name) + local class = classes[name] + if not class then + lastprivateclass = lastprivateclass + 1 + class = lastprivateclass + classes[name] = class + -- also setup + end + return class +end + +local function toengineclass(class) + if type(class) == "string" then + return classes[class] or ordinary_class + elseif class > lastengineclass then + return ordinary_class + else + return class + end +end + +implement { + name = "registerengineclass", + public = true, + protected = true, + arguments = { "optional", "optional" }, + actions = registerengineclass, } -local open_class = 4 -local middle_class = 4 -local close_class = 5 -local accent_class = 8 -local radical_class = 9 -local topaccent_class = 11 -local botaccent_class = 12 -local under_class = 13 -local over_class = 14 -local delimiter_class = 15 -local root_class = 16 +local topaccent_class = registerprivateclass("topaccent") +local botaccent_class = registerprivateclass("botaccent") +local delimiter_class = registerprivateclass("delimiter") +local root_class = registerprivateclass("root") +local prime_class = registerprivateclass("prime") local accents = allocate { accent = true, -- some can be both - topaccent = true, [11] = true, - botaccent = true, [12] = true, - under = true, [13] = true, - over = true, [14] = true, + topaccent = true, [topaccent_class] = true, + botaccent = true, [botaccent_class] = true, + under = true, [under_class] = true, + over = true, [over_class] = true, unknown = false, } +local integer_value = tokens.values.integer + +implement { + name = "mathclassvalue", + -- usage = "value", + public = true, + arguments = "string", + actions = function(name) + -- return integer_value, classes[name] or ordinary_class + context(tostring(classes[name] or ordinary_class)) + end +} + +-- used in math-tag: so there we need to make things ord etc to fit within +-- mathml + local codes = allocate { - ordinary = 0, [0] = "ordinary", - largeoperator = 1, "largeoperator", - binaryoperator = 2, "binaryoperator", - relation = 3, "relation", - openingsymbol = 4, "openingsymbol", - closingsymbol = 5, "closingsymbol", - punctuation = 6, "punctuation", - variable = 7, "variable", + ordinary = ordinary_class, [ordinary_class] = "ordinary", + largeoperator = operator_class, [operator_class] = "largeoperator", + binaryoperator = binary_class, [binary_class] = "binaryoperator", + relation = relation_class, [relation_class] = "relation", + openingsymbol = open_class, [open_class] = "openingsymbol", + closingsymbol = close_class, [close_class] = "closingsymbol", + punctuation = punctuation_class, [punctuation_class] = "punctuation", + middlesymbol = middle_class, [middle_class] = "middlesymbol", } local extensibles = allocate { @@ -169,61 +244,69 @@ function mathematics.virtualize(unicode,virtual) end end -mathematics.extensibles = extensibles -mathematics.classes = classes -mathematics.codes = codes ------------.accents = codes -mathematics.families = families -mathematics.virtualized = virtualized +mathematics.extensibles = extensibles +mathematics.classes = classes +mathematics.toengineclass = toengineclass +mathematics.classnames = classnames +mathematics.codes = codes +-----------.accents = codes +mathematics.virtualized = virtualized do - -- not that many so no need to reuse tables - local setmathcharacter = function(class,family,slot,unicode,mset,dset) - if mset and codes[class] then -- regular codes < 7 + if mset and class ~= ordinary_class then setmathcode("global",slot,class,family,unicode) mset = false end - if dset and class == open_class or class == close_class or class == middle_class then + if dset and (class == open_class or class == close_class or class == middle_class or class == division_class) then setdelcode("global",slot,family,unicode,0,0) dset = false end return mset, dset end - -- todo: make nice setters for this in lua + local function report(class,engine,family,unicode,name) + local nametype = type(name) + if nametype == "string" then + report_math("class %a, engine %a, family %a, char %C, name %a",class,engine,family,unicode,name) + elseif nametype == "number" then + report_math("class %a, engine %a, family %a, char %C, number %U",class,engine,family,unicode,name) + else + report_math("class %a, engine %a, family %a, char %C",class,engine,family,unicode) + end + end - local f_accent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] - local f_topaccent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] - local f_botaccent = formatters[ [[\defUmathbotaccent \%s{%X}{%X}{%X}]] ] - local f_over = formatters[ [[\defUdelimiterover \%s{%X}{%X}{%X}]] ] - local f_under = formatters[ [[\defUdelimiterunder\%s{%X}{%X}{%X}]] ] - local f_fence = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] - local f_delimiter = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] - local f_radical = formatters[ [[\defUradical \%s{%X}{%X}]] ] - local f_root = formatters[ [[\defUroot \%s{%X}{%X}]] ] - local f_char = formatters[ [[\defUmathchar \%s{%X}{%X}{%X}]] ] + local f_accent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] + local f_fixedtopaccent = formatters[ [[\defUmathfixedtopaccent \%s{%X}{%X}{%X}]] ] + local f_fixedbotaccent = formatters[ [[\defUmathfixedbotaccent \%s{%X}{%X}{%X}]] ] + local f_topaccent = formatters[ [[\defUmathtopaccent \%s{%X}{%X}{%X}]] ] + local f_botaccent = formatters[ [[\defUmathbotaccent \%s{%X}{%X}{%X}]] ] + local f_over = formatters[ [[\defUdelimiterover \%s{%X}{%X}{%X}]] ] + local f_under = formatters[ [[\defUdelimiterunder\%s{%X}{%X}{%X}]] ] + local f_fence = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] + local f_delimiter = formatters[ [[\defUdelimiter \%s{%X}{%X}{%X}]] ] + local f_radical = formatters[ [[\defUradical \%s{%X}{%X}]] ] + local f_root = formatters[ [[\defUroot \%s{%X}{%X}]] ] + local f_char = formatters[ [[\defUmathchar \%s{%X}{%X}{%X}]] ] local texmathchardef = tex.mathchardef - local setmathsymbol = function(name,class,family,slot) -- hex is nicer for tracing + local setmathsymbol = function(name,class,engine,family,slot,stretch) -- hex is nicer for tracing if class == accent_class then ctx_sprint(f_topaccent(name,0,family,slot)) elseif class == topaccent_class then - ctx_sprint(f_topaccent(name,0,family,slot)) + ctx_sprint((stretch and f_topaccent or f_fixedtopaccent)(name,0,family,slot)) elseif class == botaccent_class then - ctx_sprint(f_botaccent(name,0,family,slot)) + ctx_sprint((stretch and f_botaccent or f_fixedbotaccent)(name,0,family,slot)) elseif class == over_class then ctx_sprint(f_over(name,0,family,slot)) elseif class == under_class then ctx_sprint(f_under(name,0,family,slot)) elseif class == open_class or class == close_class or class == middle_class then --- setdelcode("global",slot,{family,slot,0,0}) setdelcode("global",slot,family,slot,0,0) - ctx_sprint(f_fence(name,class,family,slot)) + ctx_sprint(f_fence(name,engine,family,slot)) elseif class == delimiter_class then --- setdelcode("global",slot,{family,slot,0,0}) setdelcode("global",slot,family,slot,0,0) ctx_sprint(f_delimiter(name,0,family,slot)) elseif class == radical_class then @@ -231,29 +314,31 @@ do elseif class == root_class then ctx_sprint(f_root(name,family,slot)) elseif texmathchardef then - texmathchardef(name,class,family,slot,"permanent") + texmathchardef(name,engine,family,slot,"permanent") else -- beware, open/close and other specials should not end up here - ctx_sprint(f_char(name,class,family,slot)) + ctx_sprint(f_char(name,engine,family,slot)) end end - local function report(class,family,unicode,name) - local nametype = type(name) - if nametype == "string" then - report_math("class name %a, class %a, family %a, char %C, name %a",classname,class,family,unicode,name) - elseif nametype == "number" then - report_math("class name %a, class %a, family %a, char %C, number %U",classname,class,family,unicode,name) - else - report_math("class name %a, class %a, family %a, char %C", classname,class,family,unicode) + function mathematics.define() + if trace_defining then + logs.startfilelogging(report_math,"math defined from character definitions") end - end - - -- there will be a combined \(math)chardef (tracker) - - function mathematics.define() -- we now always use family zero local family = 0 local data = characters.data + -- + local function remap(first,last) + for unicode=utfbyte(first),utfbyte(last) do + setmathcode("global",unicode,ordinary_class,family,unicode) + end + end + remap("0","9") + remap("A","Z") + remap("a","z") + -- + setdelcode("global",0x2E,0,0,0,0) -- period is special + -- for unicode, character in sortedhash(data) do local symbol = character.mathsymbol local mset = true @@ -262,11 +347,11 @@ do local other = data[symbol] local class = other.mathclass if class then - class = classes[class] or class -- no real checks needed + local engine = toengineclass(class) if trace_defining then - report(class,family,unicode,symbol) + report(class,engine,family,unicode,symbol) end - mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) + mset, dset = setmathcharacter(engine,family,unicode,symbol,mset,dset) end local spec = other.mathspec if spec then @@ -274,84 +359,103 @@ do local m = spec[i] local class = m.class if class then - class = classes[class] or class -- no real checks needed - mset, dset = setmathcharacter(class,family,unicode,symbol,mset,dset) + local engine = toengineclass(class) + -- todo: trace + mset, dset = setmathcharacter(engine,family,unicode,symbol,mset,dset) end end end end - local mathclass = character.mathclass - local mathspec = character.mathspec - if mathspec then - if mathclass then - local name = character.mathname + local class = character.mathclass + local spec = character.mathspec + local name = character.mathname + local stretch = character.mathstretch + if spec then + local done = false + if class then if name then report_math("fatal error, conflicting mathclass and mathspec for %C",unicode) os.exit() else - local class = classes[mathclass] or mathclass -- no real checks needed - if not class then - if trace_defining then - report("unknown",family,unicode) - end - else - if trace_defining then - report(class,family,unicode) - end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) + class = classes[class] or ordinary_class + local engine = toengineclass(class) + if trace_defining then + report(class,engine,family,unicode) end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) + done = true end end - for i=1,#mathspec do - local m = mathspec[i] - local name = m.name - local class = m.class + for i=1,#spec do + local m = spec[i] + local name = m.name + local class = m.class or class if class then - class = classes[class] or class -- no real checks needed + class = classes[class] or ordinary_class + else + class = ordinary_class + end + if class then + local engine = toengineclass(class) if name then if trace_defining then - report(class,family,unicode,name) + report(class,engine,family,unicode,name) end - setmathsymbol(name,class,family,unicode) + setmathsymbol(name,class,engine,family,unicode,stretch) else - name = (class == classes.variable or class == classes.number) and character.adobename -- bad + name = (class == classes.ordinary or class == classes.digit) and character.adobename -- bad if name and trace_defining then - report(class,family,unicode,name) + report(class,engine,family,unicode,name) end end - mset, dset = setmathcharacter(class,family,unicode,m.unicode or unicode,mset,dset) -- see solidus + if not done then + mset, dset = setmathcharacter(engine,family,unicode,m.unicode or unicode,mset,dset) -- see solidus + done = true + end end end - elseif mathclass then - local name = character.mathname - local class = classes[mathclass] or mathclass -- no real checks needed - if not class then - if trace_defining then - report("unknown",family,unicode,name) - end - elseif name == false then - if trace_defining then - report(class,family,unicode,name) - end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) + else + if class then + class = classes[class] or ordinary_class else - -- if not name then - -- name = character.contextname -- too dangerous, we loose textslash and a few more - -- end - if name then + class = ordinary_class + end + if name ~= nil then + local engine = toengineclass(class) + if name == false then if trace_defining then - report(class,family,unicode,name) + report(class,engine,family,unicode,name) end - setmathsymbol(name,class,family,unicode) + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) else - if trace_defining then - report(class,family,unicode,character.adobename) + -- if not name then + -- name = character.contextname -- too dangerous, we loose textslash and a few more + -- end + if name then + if trace_defining then + report(class,engine,family,unicode,name) + end + setmathsymbol(name,class,engine,family,unicode,stretch) + else + if trace_defining then + report(class,engine,family,unicode,character.adobename) + end end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) end - mset, dset = setmathcharacter(class,family,unicode,unicode,mset,dset) + elseif class ~= ordinary_class then + local engine = toengineclass(class) + if trace_defining then + report(class,engine,family,unicode,character.adobename) + end + mset, dset = setmathcharacter(engine,family,unicode,unicode,mset,dset) end end end + -- + if trace_defining then + logs.stopfilelogging() + end end end @@ -596,17 +700,19 @@ end -- 2: step 2 -- 3: htdp * 1.33^n -- 4: size * 1.33^n +-- 5: use lfg function mathematics.big(tfmdata,unicode,n,method) local t = tfmdata.characters local c = t[unicode] if c and n > 0 then - local vv = c.vvariants or c.next and t[c.next].vvariants - if vv then - local vvn = vv[n] - return vvn and vvn.glyph or vv[#vv].glyph or unicode - elseif method == 1 or method == 2 then - if method == 2 then -- large steps + if method == 1 or method == 2 or method == 5 then + if method == 5 then + local b = tfmdata.bigslots + if b then + n = (n > #b and b[#b]) or b[n] or n + end + elseif method == 2 then -- large steps n = n * 2 end local next = c.next @@ -754,7 +860,7 @@ implement { -- weird to do this here but it's a side affect of math anyway -interfaces.implement { +implement { name = "enableasciimode", onlyonce = true, actions = resolvers.macros.enablecomment, diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl index 990341c99..fbfc7a972 100644 --- a/tex/context/base/mkxl/math-ini.mkxl +++ b/tex/context/base/mkxl/math-ini.mkxl @@ -76,10 +76,343 @@ \registerctxluafile{math-tag}{autosuffix} \registerctxluafile{math-fbk}{autosuffix} \registerctxluafile{math-dir}{} -\registerctxluafile{math-spa}{} +\registerctxluafile{math-spa}{autosuffix} \registerctxluafile{math-fnt}{autosuffix} \registerctxluafile{math-pre}{autosuffix} +%D Basic spacing: + +\mathfencesmode \plusone % unpack + +% These need to be set because otherwise the engine will not honor some font +% properties. It also permits tracing. These might become engine defaults. As a +% consequence we no longer check for traditional fonts but one can use font control +% options. + +% \mathcontrolmode\plusone + +\mathfontcontrol\numexpr + \zerocount + +\overrulemathcontrolcode % let the node family/font win over current family/font + +\underrulemathcontrolcode % idem + +\radicalrulemathcontrolcode % idem + +\fractionrulemathcontrolcode % idem + +\accentskewhalfmathcontrolcode % fall back to half width skewing when no topaccent is given + +\accentskewapplymathcontrolcode % use topaccent, otherwise use skew char + % + checkligatureandkernmathcontrolcode % old fonts + +\applyverticalitalickernmathcontrolcode % best do this indeed + +\applyordinaryitalickernmathcontrolcode % best do this indeed + % +\applycharitalickernmathcontrolcode % not done + % +\reboxcharitalickernmathcontrolcode % old code path + +\applyboxeditalickernmathcontrolcode % best do this indeed + +\staircasekernmathcontrolcode % use these when set + +\applytextitalickernmathcontrolcode + +\checktextitalickernmathcontrolcode + % +\checkspaceitalickernmathcontrolcode % old code path + +\applyscriptitalickernmathcontrolcode + +\italicshapekernmathcontrolcode % instead of adding pre italic to the shift, inject a kern +\relax + +% \mathpenaltiesmode\plusone + +% These are frozen values because otherwise we need to sunc them when the predefined +% muskip (internal) registers are changed. + +\immutable\mugluespecdef\defaultthickermuskip 7mu plus 5.0mu +\immutable\mugluespecdef\defaultthickmuskip 5mu plus 5mu +\immutable\mugluespecdef\defaultmedmuskip 4mu plus 2mu minus 4mu +\immutable\mugluespecdef\defaultthinmuskip 3mu +\immutable\mugluespecdef\defaulttinymuskip 1mu + +\immutable\mugluespecdef\halfthickmuskip 2.5mu plus 2.5mu +\immutable\mugluespecdef\halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu +\immutable\mugluespecdef\halfthinmuskip 1.5mu +\immutable\mugluespecdef\halftinymuskip 0.5mu + +\immutable\mugluespecdef\hairmuskip .15mu + +\immutable\integerdef \defaultrelpenalty 500 +\immutable\integerdef \defaultbinoppenalty 700 +\immutable\integerdef \defaultprerelpenalty -100 +\immutable\integerdef \defaultprebinoppenalty -100 + +\newmuskip\thickermuskip \thickermuskip \defaultthickermuskip + +% more friendly in setups: + +\setnewconstant\mathordinarycode \mathclassvalue ordinary \aliased\let\mathordcode \mathordinarycode +\setnewconstant\mathoperatorcode \mathclassvalue operator \aliased\let\mathopcode \mathoperatorcode +\setnewconstant\mathbinarycode \mathclassvalue binary \aliased\let\mathbincode \mathbinarycode +\setnewconstant\mathrelationcode \mathclassvalue relation \aliased\let\mathrelcode \mathrelationcode +\setnewconstant\mathopencode \mathclassvalue open +\setnewconstant\mathclosecode \mathclassvalue close +\setnewconstant\mathpunctuationcode \mathclassvalue punctuation \aliased\let\mathpunctcode\mathpunctuationcode +\setnewconstant\mathinnercode \mathclassvalue inner +\setnewconstant\mathovercode \mathclassvalue over +\setnewconstant\mathundercode \mathclassvalue under +\setnewconstant\mathfractioncode \mathclassvalue fraction +\setnewconstant\mathradicalcode \mathclassvalue radical +\setnewconstant\mathmiddlecode \mathclassvalue middle +\setnewconstant\mathaccentcode \mathclassvalue accent +\setnewconstant\mathfencedcode \mathclassvalue fenced +\setnewconstant\mathghostcode \mathclassvalue ghost +\setnewconstant\mathvariablecode \mathclassvalue variable +\setnewconstant\mathactivecode \mathclassvalue active +\setnewconstant\mathvcentercode \mathclassvalue vcenter +\setnewconstant\mathimaginarycode \mathclassvalue imaginary +\setnewconstant\mathdifferentialcode \mathclassvalue differential +\setnewconstant\mathexponentialcode \mathclassvalue exponential +\setnewconstant\mathfunctioncode \mathclassvalue function +\setnewconstant\mathdigitcode \mathclassvalue digit +\setnewconstant\mathexplicitcode \mathclassvalue explicit +\setnewconstant\mathdivisioncode \mathclassvalue division +\setnewconstant\mathfactorialcode \mathclassvalue factorial + +\setnewconstant\mathbegincode \mathclassvalue begin +\setnewconstant\mathendcode \mathclassvalue end + +%setnewconstant\mathtopaccentcode \mathclassvalue topaccent % these are private and above 31 +%setnewconstant\mathbotaccentcode \mathclassvalue botaccent % these are private and above 31 +%setnewconstant\mathdelimitercode \mathclassvalue delimiter % these are private and above 31 +%setnewconstant\mathrootcode \mathclassvalue root % these are private and above 31 +%setnewconstant\mathprimecode \mathclassvalue prime % these are private and above 31 + +%letmathspacing \mathimaginarycode \mathordinarycode \mathordinarycode \mathordinarycode \mathordinarycode +%letmathspacing \mathdifferentialcode \mathordinarycode \mathordinarycode \mathordinarycode \mathordinarycode +%letmathspacing \mathexponentialcode \mathordinarycode \mathordinarycode \mathordinarycode \mathordinarycode +%letmathspacing \mathfunctioncode \mathordinarycode \mathordinarycode \mathordinarycode \mathordinarycode +%letmathspacing \mathdigitcode \mathordinarycode \mathordinarycode \mathordinarycode \mathordinarycode + +\copymathspacing \mathimaginarycode \mathordinarycode +\copymathspacing \mathdifferentialcode \mathordinarycode +\copymathspacing \mathfactorialcode \mathordinarycode +\copymathspacing \mathexponentialcode \mathordinarycode +\copymathspacing \mathfunctioncode \mathordinarycode +\copymathspacing \mathdigitcode \mathordinarycode + +\setnewconstant\mathlimopcode \plusone +\setnewconstant\mathnolopcode \plusone + +% obsolete + +\setnewconstant\mathboxcode \zerocount +\setnewconstant\mathchoicecode \zerocount +\setnewconstant\mathalphacode \zerocount +\setnewconstant\mathnothingcode \zerocount + +\pushoverloadmode + \untraced\permanent\protected\def\binoppenalty {\setmathpostpenalty\mathbinarycode} + \untraced\permanent\protected\def\prebinoppenalty{\setmathprepenalty \mathbinarycode} + \untraced\permanent\protected\def\relpenalty {\setmathpostpenalty\mathrelationcode} + \untraced\permanent\protected\def\prerelpenalty {\setmathprepenalty \mathrelationcode} +\popoverloadmode + +% \newcount\binoppenalty +% \newcount\prebinoppenalty +% \newcount\relpenalty +% \newcount\prerelpenalty + +% topaccent botaccent .. but do we ever need these + +\permanent\protected\def\ordordspacing {\setmathspacing \mathordinarycode \mathordinarycode } +\permanent\protected\def\ordopspacing {\setmathspacing \mathordinarycode \mathoperatorcode } +\permanent\protected\def\ordbinspacing {\setmathspacing \mathordinarycode \mathbinarycode } +\permanent\protected\def\ordrelspacing {\setmathspacing \mathordinarycode \mathrelationcode } +\permanent\protected\def\ordopenspacing {\setmathspacing \mathordinarycode \mathopencode } +\permanent\protected\def\ordclosespacing {\setmathspacing \mathordinarycode \mathclosecode } +\permanent\protected\def\ordpunctspacing {\setmathspacing \mathordinarycode \mathpunctuationcode} +\permanent\protected\def\ordinnerspacing {\setmathspacing \mathordinarycode \mathinnercode } +\permanent\protected\def\ordfracspacing {\setmathspacing \mathordinarycode \mathfractioncode } +\permanent\protected\def\ordradspacing {\setmathspacing \mathordinarycode \mathradicalcode } +\permanent\protected\def\ordmiddlespacing {\setmathspacing \mathordinarycode \mathmiddlecode } +\permanent\protected\def\ordaccentspacing {\setmathspacing \mathordinarycode \mathaccentcode } + +\permanent\protected\def\opordspacing {\setmathspacing \mathoperatorcode \mathordinarycode } +\permanent\protected\def\opopspacing {\setmathspacing \mathoperatorcode \mathoperatorcode } +\permanent\protected\def\opbinspacing {\setmathspacing \mathoperatorcode \mathbinarycode } +\permanent\protected\def\oprelspacing {\setmathspacing \mathoperatorcode \mathrelationcode } +\permanent\protected\def\opopenspacing {\setmathspacing \mathoperatorcode \mathopencode } +\permanent\protected\def\opclosespacing {\setmathspacing \mathoperatorcode \mathclosecode } +\permanent\protected\def\oppunctspacing {\setmathspacing \mathoperatorcode \mathpunctuationcode} +\permanent\protected\def\opinnerspacing {\setmathspacing \mathoperatorcode \mathinnercode } +\permanent\protected\def\opfracspacing {\setmathspacing \mathoperatorcode \mathfractioncode } +\permanent\protected\def\opradspacing {\setmathspacing \mathoperatorcode \mathradicalcode } +\permanent\protected\def\opmiddlespacing {\setmathspacing \mathoperatorcode \mathmiddlecode } +\permanent\protected\def\opaccentspacing {\setmathspacing \mathoperatorcode \mathaccentcode } + +\permanent\protected\def\binordspacing {\setmathspacing \mathbinarycode \mathordinarycode } +\permanent\protected\def\binopspacing {\setmathspacing \mathbinarycode \mathoperatorcode } +\permanent\protected\def\binbinspacing {\setmathspacing \mathbinarycode \mathbinarycode } +\permanent\protected\def\binrelspacing {\setmathspacing \mathbinarycode \mathrelationcode } +\permanent\protected\def\binopenspacing {\setmathspacing \mathbinarycode \mathopencode } +\permanent\protected\def\binclosespacing {\setmathspacing \mathbinarycode \mathclosecode } +\permanent\protected\def\binpunctspacing {\setmathspacing \mathbinarycode \mathpunctuationcode} +\permanent\protected\def\bininnerspacing {\setmathspacing \mathbinarycode \mathinnercode } +\permanent\protected\def\binfracspacing {\setmathspacing \mathbinarycode \mathfractioncode } +\permanent\protected\def\binradspacing {\setmathspacing \mathbinarycode \mathradicalcode } +\permanent\protected\def\binmiddlespacing {\setmathspacing \mathbinarycode \mathmiddlecode } +\permanent\protected\def\binaccentspacing {\setmathspacing \mathbinarycode \mathaccentcode } + +\permanent\protected\def\relordspacing {\setmathspacing \mathrelationcode \mathordinarycode } +\permanent\protected\def\relopspacing {\setmathspacing \mathrelationcode \mathoperatorcode } +\permanent\protected\def\relbinspacing {\setmathspacing \mathrelationcode \mathbinarycode } +\permanent\protected\def\relrelspacing {\setmathspacing \mathrelationcode \mathrelationcode } +\permanent\protected\def\relopenspacing {\setmathspacing \mathrelationcode \mathopencode } +\permanent\protected\def\relclosespacing {\setmathspacing \mathrelationcode \mathclosecode } +\permanent\protected\def\relpunctspacing {\setmathspacing \mathrelationcode \mathpunctuationcode} +\permanent\protected\def\relinnerspacing {\setmathspacing \mathrelationcode \mathinnercode } +\permanent\protected\def\relfracspacing {\setmathspacing \mathrelationcode \mathfractioncode } +\permanent\protected\def\relradspacing {\setmathspacing \mathrelationcode \mathradicalcode } +\permanent\protected\def\relmiddlespacing {\setmathspacing \mathrelationcode \mathmiddlecode } +\permanent\protected\def\relaccentspacing {\setmathspacing \mathrelationcode \mathaccentcode } + +\permanent\protected\def\openordspacing {\setmathspacing \mathopencode \mathordinarycode } +\permanent\protected\def\openopspacing {\setmathspacing \mathopencode \mathoperatorcode } +\permanent\protected\def\openbinspacing {\setmathspacing \mathopencode \mathbinarycode } +\permanent\protected\def\openrelspacing {\setmathspacing \mathopencode \mathrelationcode } +\permanent\protected\def\openopenspacing {\setmathspacing \mathopencode \mathopencode } +\permanent\protected\def\openclosespacing {\setmathspacing \mathopencode \mathclosecode } +\permanent\protected\def\openpunctspacing {\setmathspacing \mathopencode \mathpunctuationcode} +\permanent\protected\def\openinnerspacing {\setmathspacing \mathopencode \mathinnercode } +\permanent\protected\def\openfracspacing {\setmathspacing \mathopencode \mathfractioncode } +\permanent\protected\def\openradspacing {\setmathspacing \mathopencode \mathradicalcode } +\permanent\protected\def\openmiddlespacing {\setmathspacing \mathopencode \mathmiddlecode } +\permanent\protected\def\openaccentspacing {\setmathspacing \mathopencode \mathaccentcode } + +\permanent\protected\def\closeordspacing {\setmathspacing \mathclosecode \mathordinarycode } +\permanent\protected\def\closeopspacing {\setmathspacing \mathclosecode \mathoperatorcode } +\permanent\protected\def\closebinspacing {\setmathspacing \mathclosecode \mathbinarycode } +\permanent\protected\def\closerelspacing {\setmathspacing \mathclosecode \mathrelationcode } +\permanent\protected\def\closeopenspacing {\setmathspacing \mathclosecode \mathopencode } +\permanent\protected\def\closeclosespacing {\setmathspacing \mathclosecode \mathclosecode } +\permanent\protected\def\closepunctspacing {\setmathspacing \mathclosecode \mathpunctuationcode} +\permanent\protected\def\closeinnerspacing {\setmathspacing \mathclosecode \mathinnercode } +\permanent\protected\def\closefracspacing {\setmathspacing \mathclosecode \mathfractioncode } +\permanent\protected\def\closeradspacing {\setmathspacing \mathclosecode \mathradicalcode } +\permanent\protected\def\closemiddlespacing {\setmathspacing \mathclosecode \mathmiddlecode } +\permanent\protected\def\closeaccentspacing {\setmathspacing \mathclosecode \mathaccentcode } + +\permanent\protected\def\punctordspacing {\setmathspacing \mathpunctuationcode \mathordinarycode } +\permanent\protected\def\punctopspacing {\setmathspacing \mathpunctuationcode \mathoperatorcode } +\permanent\protected\def\punctbinspacing {\setmathspacing \mathpunctuationcode \mathbinarycode } +\permanent\protected\def\punctrelspacing {\setmathspacing \mathpunctuationcode \mathrelationcode } +\permanent\protected\def\punctopenspacing {\setmathspacing \mathpunctuationcode \mathopencode } +\permanent\protected\def\punctclosespacing {\setmathspacing \mathpunctuationcode \mathclosecode } +\permanent\protected\def\punctpunctspacing {\setmathspacing \mathpunctuationcode \mathpunctuationcode} +\permanent\protected\def\punctinnerspacing {\setmathspacing \mathpunctuationcode \mathinnercode } +\permanent\protected\def\punctfracspacing {\setmathspacing \mathpunctuationcode \mathfractioncode } +\permanent\protected\def\punctradspacing {\setmathspacing \mathpunctuationcode \mathradicalcode } +\permanent\protected\def\punctmiddlespacing {\setmathspacing \mathpunctuationcode \mathmiddlecode } +\permanent\protected\def\punctaccentspacing {\setmathspacing \mathpunctuationcode \mathaccentcode } + +\permanent\protected\def\innerordspacing {\setmathspacing \mathinnercode \mathordinarycode } +\permanent\protected\def\inneropspacing {\setmathspacing \mathinnercode \mathoperatorcode } +\permanent\protected\def\innerbinspacing {\setmathspacing \mathinnercode \mathbinarycode } +\permanent\protected\def\innerrelspacing {\setmathspacing \mathinnercode \mathrelationcode } +\permanent\protected\def\inneropenspacing {\setmathspacing \mathinnercode \mathopencode } +\permanent\protected\def\innerclosespacing {\setmathspacing \mathinnercode \mathclosecode } +\permanent\protected\def\innerpunctspacing {\setmathspacing \mathinnercode \mathpunctuationcode} +\permanent\protected\def\innerinnerspacing {\setmathspacing \mathinnercode \mathinnercode } +\permanent\protected\def\innerfracspacing {\setmathspacing \mathinnercode \mathfractioncode } +\permanent\protected\def\innerradspacing {\setmathspacing \mathinnercode \mathradicalcode } +\permanent\protected\def\innermiddlespacing {\setmathspacing \mathinnercode \mathmiddlecode } +\permanent\protected\def\inneraccentspacing {\setmathspacing \mathinnercode \mathaccentcode } + +\permanent\protected\def\fracordspacing {\setmathspacing \mathfractioncode \mathordinarycode } +\permanent\protected\def\fracopspacing {\setmathspacing \mathfractioncode \mathoperatorcode } +\permanent\protected\def\fracbinspacing {\setmathspacing \mathfractioncode \mathbinarycode } +\permanent\protected\def\fracrelspacing {\setmathspacing \mathfractioncode \mathrelationcode } +\permanent\protected\def\fracopenspacing {\setmathspacing \mathfractioncode \mathopencode } +\permanent\protected\def\fracclosespacing {\setmathspacing \mathfractioncode \mathclosecode } +\permanent\protected\def\fracpunctspacing {\setmathspacing \mathfractioncode \mathpunctuationcode} +\permanent\protected\def\fracinnerspacing {\setmathspacing \mathfractioncode \mathinnercode } +\permanent\protected\def\fracfracspacing {\setmathspacing \mathfractioncode \mathfractioncode } +\permanent\protected\def\fracradspacing {\setmathspacing \mathfractioncode \mathradicalcode } +\permanent\protected\def\fracmiddlespacing {\setmathspacing \mathfractioncode \mathmiddlecode } +\permanent\protected\def\fracaccentspacing {\setmathspacing \mathfractioncode \mathaccentcode } + +\permanent\protected\def\radordspacing {\setmathspacing \mathradicalcode \mathordinarycode } +\permanent\protected\def\radopspacing {\setmathspacing \mathradicalcode \mathoperatorcode } +\permanent\protected\def\radbinspacing {\setmathspacing \mathradicalcode \mathbinarycode } +\permanent\protected\def\radrelspacing {\setmathspacing \mathradicalcode \mathrelationcode } +\permanent\protected\def\radopenspacing {\setmathspacing \mathradicalcode \mathopencode } +\permanent\protected\def\radclosespacing {\setmathspacing \mathradicalcode \mathclosecode } +\permanent\protected\def\radpunctspacing {\setmathspacing \mathradicalcode \mathpunctuationcode} +\permanent\protected\def\radinnerspacing {\setmathspacing \mathradicalcode \mathinnercode } +\permanent\protected\def\radfracspacing {\setmathspacing \mathradicalcode \mathfractioncode } +\permanent\protected\def\radradspacing {\setmathspacing \mathradicalcode \mathradicalcode } +\permanent\protected\def\radmiddlespacing {\setmathspacing \mathradicalcode \mathmiddlecode } +\permanent\protected\def\radaccentspacing {\setmathspacing \mathradicalcode \mathaccentcode } + +\permanent\protected\def\middleordspacing {\setmathspacing \mathmiddlecode \mathordinarycode } +\permanent\protected\def\middleopspacing {\setmathspacing \mathmiddlecode \mathoperatorcode } +\permanent\protected\def\middlebinspacing {\setmathspacing \mathmiddlecode \mathbinarycode } +\permanent\protected\def\middlerelspacing {\setmathspacing \mathmiddlecode \mathrelationcode } +\permanent\protected\def\middleopenspacing {\setmathspacing \mathmiddlecode \mathopencode } +\permanent\protected\def\middleclosespacing {\setmathspacing \mathmiddlecode \mathclosecode } +\permanent\protected\def\middlepunctspacing {\setmathspacing \mathmiddlecode \mathpunctuationcode} +\permanent\protected\def\middleinnerspacing {\setmathspacing \mathmiddlecode \mathinnercode } +\permanent\protected\def\middlefracspacing {\setmathspacing \mathmiddlecode \mathfractioncode } +\permanent\protected\def\middleradspacing {\setmathspacing \mathmiddlecode \mathradicalcode } +\permanent\protected\def\middlemiddlespacing{\setmathspacing \mathmiddlecode \mathmiddlecode } +\permanent\protected\def\middleaccentspacing{\setmathspacing \mathmiddlecode \mathaccentcode } + +\permanent\protected\def\accentordspacing {\setmathspacing \mathaccentcode \mathordinarycode } +\permanent\protected\def\accentopspacing {\setmathspacing \mathaccentcode \mathoperatorcode } +\permanent\protected\def\accentbinspacing {\setmathspacing \mathaccentcode \mathbinarycode } +\permanent\protected\def\accentrelspacing {\setmathspacing \mathaccentcode \mathrelationcode } +\permanent\protected\def\accentopenspacing {\setmathspacing \mathaccentcode \mathopencode } +\permanent\protected\def\accentclosespacing {\setmathspacing \mathaccentcode \mathclosecode } +\permanent\protected\def\accentpunctspacing {\setmathspacing \mathaccentcode \mathpunctuationcode} +\permanent\protected\def\accentinnerspacing {\setmathspacing \mathaccentcode \mathinnercode } +\permanent\protected\def\accentfracspacing {\setmathspacing \mathaccentcode \mathfractioncode } +\permanent\protected\def\accentradspacing {\setmathspacing \mathaccentcode \mathradicalcode } +\permanent\protected\def\accentmiddlespacing{\setmathspacing \mathaccentcode \mathmiddlecode } +\permanent\protected\def\accentaccentspacing{\setmathspacing \mathaccentcode \mathaccentcode } + +%D In the end Mikael and I prefer for this: + +% \setmathignore\Umathspacebeforescript\plusone +% \setmathignore\Umathspaceafterscript \plusone + +\setmathignore \Umathspacebeforescript\zerocount +\setmathignore \Umathspaceafterscript \zerocount + +\mathslackmode \plusone + +\setmathoptions\mathoperatorcode \plusthree +\setmathoptions\mathbinarycode \plusthree +\setmathoptions\mathrelationcode \plusthree +\setmathoptions\mathopencode \plusthree +\setmathoptions\mathclosecode \plusthree +\setmathoptions\mathpunctuationcode\plusthree +\setmathoptions\mathfractioncode \plusthree + +%D For now \unknown + +\permanent\protected\def\math_discretionary_plus {\discretionary class \mathbinarycode {$+$}{$+$}{$+$}} +\permanent\protected\def\math_discretionary_minus{\discretionary class \mathbinarycode {$-$}{$-$}{$-$}} + +\newtoks\everymathdiscretionaries + +\appendtoks + \enforced\let\+\math_discretionary_plus + \enforced\let\-\math_discretionary_minus +\to \everymathdiscretionaries + +\appendtoks + \ifconditional\c_math_discretionaries + \the\everymathdiscretionaries + \fi +\to \everymathematics + +\setfalse\c_math_discretionaries + +\installtexexperiment + {mathematics.discretionaries} + {\settrue \c_math_discretionaries} + {\setfalse\c_math_discretionaries} + %D A starter: %D %D \startbuffer @@ -123,13 +456,13 @@ \definesystemattribute[displaymath] [public] -\mathflattenmode\numexpr - \ordmathflattencode - +\binmathflattencode - +\relmathflattencode - +\punctmathflattencode - +\innermathflattencode -\relax +% \mathflattenmode\numexpr +% \ordmathflattencode +% +\binmathflattencode +% +\relmathflattencode +% +\punctmathflattencode +% +\innermathflattencode +% \relax \ifdefined\ordlimits\else \let\ordlimits\Umathlimits % downward compatible @@ -166,6 +499,12 @@ \settrue\indisplaymath \fi} +\permanent\protected\def\forceinlinemath + {\ifmmode + \textstyle + \setfalse\indisplaymath + \fi} + \permanent\protected\def\startforceddisplaymath {\startimath \displaystyle @@ -223,19 +562,6 @@ \installmacrostack\currentmathematics -% \permanent\protected\def\startmathematics % no grouping, if ever then also an optional second -% {\doifelsenextoptionalcs\math_mathematics_start_yes\math_mathematics_start_nop} -% -% \protected\def\math_mathematics_start_yes[#1]% -% {\push_macro_currentmathematics -% \edef\currentmathematics{#1}% check for valid -% \the\everyswitchmathematics} -% -% \protected\def\math_mathematics_start_nop -% {\push_macro_currentmathematics -% \let\currentmathematics\empty -% \the\everyswitchmathematics} - \permanent\protected\tolerant\def\startmathematics[#1]% no grouping, if ever then also an optional second {\push_macro_currentmathematics \edef\currentmathematics{#1}% check for valid @@ -267,7 +593,7 @@ \fi} \def\math_m_yes_math[#1]#2% - {#2} + {#2} % grouping permits \mathbf etc \def\math_m_yes_text[#1]% {\begingroup @@ -304,7 +630,7 @@ \def\math_m_yes_text_normal#1% {\the\everyswitchmathematics\relax \normalstartimath - #1% + \begingroup#1\endgroup % grouping permits aftergroups trickery \normalstopimath \endgroup} @@ -314,26 +640,31 @@ #1% \else \normalstartimath - #1% + \begingroup#1\endgroup % grouping permits aftergroups trickery \normalstopimath \fi} -% e.g.: \definemathematics[i:mp][setups=i:tight,openup=yes] +%D maybe more setters -\immutable\mugluespecdef\defaultthickmuskip 5mu plus 5mu -\immutable\mugluespecdef\defaultmedmuskip 4mu plus 2mu minus 4mu -\immutable\mugluespecdef\defaultthinmuskip 3mu +\permanent\protected\def\dm#1% + {\relax + \ifmmode + \beginmathgroup\forcedisplaymath#1\endmathgroup + \else + \startimath\begingroup\forcedisplaymath#1\endgroup\stopimath + \fi} -\immutable\mugluespecdef\halfthickmuskip 2.5mu plus 2.5mu -\immutable\mugluespecdef\halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu -\immutable\mugluespecdef\halfthinmuskip 1.5mu +\permanent\protected\def\im#1% + {\relax + \ifmmode + \beginmathgroup\forceinlinemath#1\endmathgroup + \else + \startimath#1\stopimath + \fi} -\immutable\mugluespecdef\hairmuskip .15mu +% \aliased\let\m \mathematics % we keep the simple versions -\immutable\integerdef \defaultrelpenalty 500 -\immutable\integerdef \defaultbinoppenalty 700 -\immutable\integerdef \defaultprerelpenalty -100 -\immutable\integerdef \defaultprebinoppenalty -100 +% e.g.: \definemathematics[i:mp][setups=i:tight,openup=yes] % we need to control these otherwise: % @@ -344,6 +675,7 @@ \thickmuskip \defaultthickmuskip \medmuskip \defaultmedmuskip \thinmuskip \defaultthinmuskip + \tinymuskip \defaulttinymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\maxdimen @@ -354,6 +686,7 @@ \thickmuskip \defaultthickmuskip \medmuskip \defaultmedmuskip \thinmuskip \defaultthinmuskip + \tinymuskip \defaulttinymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\defaultprebinoppenalty @@ -364,6 +697,7 @@ \thickmuskip \halfthickmuskip \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip + \tinymuskip \halftinymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\maxdimen @@ -375,10 +709,12 @@ \thickmuskip \halfthickmuskip \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip + \tinymuskip \halftinymuskip \else \thickmuskip 1\halfthickmuskip \medmuskip 1\halfmedmuskip \thinmuskip 1\halfthinmuskip + \tinymuskip 1\halftinymuskip \fi \relpenalty \defaultrelpenalty \binoppenalty \maxdimen @@ -391,10 +727,12 @@ \thickmuskip \halfthickmuskip \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip + \tinymuskip \halftinymuskip \else \thickmuskip 1\halfthickmuskip \medmuskip 1\halfmedmuskip \thinmuskip 1\halfthinmuskip + \tinymuskip 1\halftinymuskip \fi \relpenalty \maxdimen \binoppenalty \maxdimen @@ -402,8 +740,209 @@ \prerelpenalty \maxdimen \stopsetups +% this will reset the spacing to default values + +% \Umathspacingmode\allmathstyles\plusone % always pair driven + +% todo: use fullnames instead shirt ones + +\startsetups math:spacing:presets + \resetmathspacing + % \ordordspacing \allmathstyles \zeromuskip + \inherited\ordopspacing \allmathstyles \thinmuskip + \inherited\ordbinspacing \allsplitstyles \medmuskip + \inherited\ordbinspacing \allscriptstyles\tinymuskip + \inherited\ordrelspacing \allsplitstyles \thickmuskip + \inherited\ordrelspacing \allscriptstyles\tinymuskip + % \inherited\ordopenspacing \allmathstyles \zeromuskip + \inherited\ordmiddlespacing \allsplitstyles \medmuskip + \inherited\ordmiddlespacing \allscriptstyles\tinymuskip + % \inherited\ordclosespacing \allmathstyles \zeromuskip + % \inherited\ordpunctspacing \allmathstyles \zeromuskip + \inherited\ordinnerspacing \allsplitstyles \thinmuskip + \inherited\ordinnerspacing \allscriptstyles\tinymuskip + \inherited\ordfracspacing \allmathstyles \tinymuskip + \inherited\ordradspacing \allmathstyles \tinymuskip + \inherited\opordspacing \allmathstyles \thinmuskip + \inherited\opopspacing \allmathstyles \thinmuskip + %%\inherited \opbinspacing \allmathstyles \zeromuskip + \inherited\oprelspacing \allsplitstyles \thickmuskip + \inherited\oprelspacing \allscriptstyles\tinymuskip + % \inherited\opopenspacing \allmathstyles \zeromuskip + \inherited\opmiddlespacing \allsplitstyles \medmuskip + \inherited\opmiddlespacing \allscriptstyles\tinymuskip + % \inherited\opclosespacing \allmathstyles \zeromuskip + % \inherited\oppunctspacing \allmathstyles \zeromuskip + \inherited\opinnerspacing \allsplitstyles \thinmuskip + \inherited\opinnerspacing \allscriptstyles\tinymuskip + \inherited\opfracspacing \allmathstyles \thinmuskip + \inherited\opradspacing \allmathstyles \thinmuskip + \inherited\binordspacing \allsplitstyles \medmuskip + \inherited\binordspacing \allscriptstyles\tinymuskip + \inherited\binopspacing \allsplitstyles \medmuskip + \inherited\binopspacing \allscriptstyles\tinymuskip + %% \inherited\binbinspacing \allmathstyles \zeromuskip + %% \inherited\binrelspacing \allmathstyles \zeromuskip + \inherited\binopenspacing \allsplitstyles \medmuskip + \inherited\binopenspacing \allscriptstyles\tinymuskip + \inherited\binmiddlespacing \allsplitstyles \medmuskip + \inherited\binmiddlespacing \allscriptstyles\tinymuskip + %% \inherited\binclosespacing \allmathstyles \zeromuskip + %% \inherited\binpunctspacing \allmathstyles \zeromuskip + \inherited\bininnerspacing \allsplitstyles \medmuskip + \inherited\bininnerspacing \allscriptstyles\tinymuskip + \inherited\binfracspacing \allsplitstyles \medmuskip + \inherited\binfracspacing \allscriptstyles\tinymuskip + \inherited\binradspacing \allsplitstyles \medmuskip + \inherited\binradspacing \allscriptstyles\tinymuskip + \inherited\relordspacing \allsplitstyles \thickmuskip + \inherited\relordspacing \allscriptstyles\tinymuskip + \inherited\relopspacing \allsplitstyles \thickmuskip + \inherited\relopspacing \allscriptstyles\tinymuskip + %% \inherited\relbinspacing \allmathstyles \zeromuskip + % \inherited\relrelspacing \allmathstyles \zeromuskip + \inherited\relopenspacing \allsplitstyles \thickmuskip + \inherited\relopenspacing \allscriptstyles\tinymuskip + \inherited\relmiddlespacing \allsplitstyles \thickmuskip + \inherited\relmiddlespacing \allscriptstyles\thinmuskip + % \inherited\relclosespacing \allmathstyles \zeromuskip + % \inherited\relpunctspacing \allmathstyles \zeromuskip + \inherited\relinnerspacing \allsplitstyles \thickmuskip + \inherited\relinnerspacing \allscriptstyles\tinymuskip + \inherited\relfracspacing \allsplitstyles \thickmuskip + \inherited\relfracspacing \allscriptstyles\tinymuskip + \inherited\relradspacing \allsplitstyles \thickmuskip + \inherited\relradspacing \allscriptstyles\tinymuskip + % \inherited\openordspacing \allmathstyles \zeromuskip + % \inherited\openopspacing \allmathstyles \zeromuskip + %% \inherited\openbinspacing \allmathstyles \zeromuskip + % \inherited\openrelspacing \allmathstyles \zeromuskip + % \inherited\openopenspacing \allmathstyles \zeromuskip + % \inherited\openmiddlespacing \allmathstyles \zeromuskip + % \inherited\openclosespacing \allmathstyles \zeromuskip + % \inherited\openpunctspacing \allmathstyles \zeromuskip + % \inherited\openinnerspacing \allmathstyles \zeromuskip + \inherited\openfracspacing \allmathstyles \tinymuskip + % \inherited\openradspacing \allmathstyles \zeromuskip + % \inherited\closeordspacing \allmathstyles \zeromuskip + \inherited\closeopspacing \allmathstyles \thinmuskip + \inherited\closebinspacing \allsplitstyles \medmuskip + \inherited\closebinspacing \allscriptstyles\tinymuskip + \inherited\closerelspacing \allsplitstyles \thickmuskip + \inherited\closerelspacing \allscriptstyles\tinymuskip + % \inherited\closeopenspacing \allmathstyles \zeromuskip + % \inherited\closemiddlespacing \allmathstyles \zeromuskip + % \inherited\closeclosespacing \allmathstyles \zeromuskip + % \inherited\closepunctspacing \allmathstyles \zeromuskip + \inherited\closeinnerspacing \allsplitstyles \thinmuskip + \inherited\closeinnerspacing \allscriptstyles\tinymuskip + \inherited\closefracspacing \allsplitstyles \thinmuskip + \inherited\closefracspacing \allscriptstyles\tinymuskip + % \inherited\closeradspacing \allmathstyles \zeromuskip + \inherited\punctordspacing \allsplitstyles \thinmuskip + \inherited\punctordspacing \allscriptstyles\tinymuskip + \inherited\punctopspacing \allsplitstyles \thinmuskip + \inherited\punctopspacing \allscriptstyles\tinymuskip + %% \inherited\punctbinspacing \allmathstyles \zeromuskip + \inherited\punctrelspacing \allsplitstyles \thinmuskip + \inherited\punctrelspacing \allscriptstyles\tinymuskip + \inherited\punctopenspacing \allsplitstyles \thinmuskip + \inherited\punctopenspacing \allscriptstyles\tinymuskip + \inherited\punctmiddlespacing \allsplitstyles \thinmuskip + \inherited\punctmiddlespacing \allscriptstyles\tinymuskip + \inherited\punctclosespacing \allsplitstyles \thinmuskip + \inherited\punctclosespacing \allscriptstyles\tinymuskip + \inherited\punctpunctspacing \allsplitstyles \thinmuskip + \inherited\punctpunctspacing \allscriptstyles\tinymuskip + \inherited\punctinnerspacing \allsplitstyles \thinmuskip + \inherited\punctinnerspacing \allscriptstyles\tinymuskip + \inherited\punctfracspacing \allsplitstyles \thinmuskip + \inherited\punctfracspacing \allscriptstyles\tinymuskip + \inherited\punctradspacing \allsplitstyles \thinmuskip + \inherited\punctradspacing \allscriptstyles\tinymuskip + \inherited\innerordspacing \allsplitstyles \thinmuskip + \inherited\innerordspacing \allscriptstyles\tinymuskip + \inherited\inneropspacing \allmathstyles \thinmuskip + \inherited\innerbinspacing \allsplitstyles \medmuskip + \inherited\innerbinspacing \allscriptstyles\tinymuskip + \inherited\innerrelspacing \allsplitstyles \thickmuskip + \inherited\innerrelspacing \allscriptstyles\tinymuskip + \inherited\inneropenspacing \allsplitstyles \thinmuskip + \inherited\inneropenspacing \allscriptstyles\tinymuskip + \inherited\innermiddlespacing \allsplitstyles \thinmuskip + \inherited\innermiddlespacing \allscriptstyles\tinymuskip + % \inherited\innerclosespacing \allmathstyles \zeromuskip + \inherited\innerpunctspacing \allsplitstyles \thinmuskip + \inherited\innerpunctspacing \allscriptstyles\tinymuskip + \inherited\innerinnerspacing \allsplitstyles \thinmuskip + \inherited\innerinnerspacing \allscriptstyles\tinymuskip + \inherited\innerfracspacing \allsplitstyles \thinmuskip + \inherited\innerfracspacing \allscriptstyles\tinymuskip + \inherited\innerradspacing \allsplitstyles \thinmuskip + \inherited\innerradspacing \allscriptstyles\tinymuskip + \inherited\fracordspacing \allmathstyles \tinymuskip + \inherited\fracopspacing \allmathstyles \thinmuskip + \inherited\fracbinspacing \allsplitstyles \medmuskip + \inherited\fracbinspacing \allscriptstyles\tinymuskip + \inherited\fracrelspacing \allsplitstyles \thickmuskip + \inherited\fracrelspacing \allscriptstyles\tinymuskip + \inherited\fracopenspacing \allsplitstyles \thinmuskip + \inherited\fracopenspacing \allscriptstyles\tinymuskip + \inherited\fracmiddlespacing \allsplitstyles \medmuskip + \inherited\fracmiddlespacing \allscriptstyles\tinymuskip + \inherited\fracclosespacing \allmathstyles \tinymuskip + % \inherited\fracpunctspacing \allmathstyles \zeromuskip + \inherited\fracinnerspacing \allsplitstyles \thinmuskip + \inherited\fracinnerspacing \allscriptstyles\tinymuskip + \inherited\fracfracspacing \allsplitstyles \thinmuskip + \inherited\fracfracspacing \allscriptstyles\tinymuskip + \inherited\fracradspacing \allmathstyles \tinymuskip + \inherited\radordspacing \allsplitstyles \tinymuskip + \inherited\radopspacing \allmathstyles \thinmuskip + \inherited\radbinspacing \allsplitstyles \medmuskip + \inherited\radbinspacing \allscriptstyles\tinymuskip + \inherited\radrelspacing \allsplitstyles \thickmuskip + \inherited\radrelspacing \allscriptstyles\tinymuskip + % \inherited\radopenspacing \allmathstyles \zeromuskip + % \inherited\radmiddlespacing \allmathstyles \zeromuskip + % \inherited\radclosespacing \allmathstyles \zeromuskip + % \inherited\radpunctspacing \allmathstyles \zeromuskip + \inherited\radinnerspacing \allsplitstyles \thinmuskip + \inherited\radinnerspacing \allscriptstyles\tinymuskip + \inherited\radfracspacing \allmathstyles \tinymuskip + \inherited\radradspacing \allmathstyles \tinymuskip + \inherited\middleordspacing \allsplitstyles \medmuskip + \inherited\middleordspacing \allscriptstyles\tinymuskip + \inherited\middleopspacing \allmathstyles \thinmuskip + \inherited\middlebinspacing \allsplitstyles \medmuskip + \inherited\middlebinspacing \allscriptstyles\tinymuskip + \inherited\middlerelspacing \allsplitstyles \thickmuskip + \inherited\middlerelspacing \allscriptstyles\tinymuskip + % \inherited\middleopenspacing \allmathstyles \zeromuskip + % \inherited\middlemiddlespacing \allmathstyles \zeromuskip + % \inherited\middleclosespacing \allmathstyles \zeromuskip + % \inherited\middlepunctspacing \allmathstyles \zeromuskip + \inherited\middleinnerspacing \allsplitstyles \thinmuskip + \inherited\middleinnerspacing \allscriptstyles\tinymuskip + \inherited\middlefracspacing \allsplitstyles \medmuskip + \inherited\middlefracspacing \allscriptstyles\tinymuskip + % \inherited\middleradspacing \allmathstyles \zeromuskip + % + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \tinymuskip +\stopsetups + +\directsetup{math:spacing:default} +\directsetup{math:spacing:presets} + % \dorecurse{80}{test \m[i:tight]{\red \fakeformula} test } +%setupmathematics [\c!setups=math:spacing:default] + \definemathematics[i:default][\c!setups=math:spacing:equal] \definemathematics[i:half] [\c!setups=math:spacing:half] \definemathematics[i:tight] [\c!setups=math:spacing:tight] @@ -488,33 +1027,71 @@ \aliased\let\setmathfontstylealternative\setmathfontstylealternate \aliased\let\mathalternate \setmathfontalternate -\permanent\protected\def\mathupright {\setmathattribute\s!regular\s!tf\setmathfontstylealternate\s!tf} -\permanent\protected\def\mathitalic {\setmathattribute\s!regular\s!it\setmathfontstylealternate\s!it} +% \permanent\protected\def\mathupright {\setmathattribute\s!regular\s!tf\setmathfontstylealternate\s!tf} +% \permanent\protected\def\mathitalic {\setmathattribute\s!regular\s!it\setmathfontstylealternate\s!it} +% \permanent\protected\def\mathscript {\setmathalphabet \s!script \setmathfontstylealternate\s!script} +% \permanent\protected\def\mathfraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} +% \permanent\protected\def\mathblackboard{\setmathalphabet \s!blackboard\setmathfontstylealternate\s!blackboard} + +\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} +\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} +\permanent\protected\def\mathscript {\mathgroupedcommandcs\math_script} +\permanent\protected\def\mathfraktur {\mathgroupedcommandcs\math_fraktur} +\permanent\protected\def\mathblackboard{\mathgroupedcommandcs\math_blackboard} -\permanent\protected\def\mathscript {\setmathalphabet \s!script \setmathfontstylealternate\s!script} -\permanent\protected\def\mathfraktur {\setmathalphabet \s!fraktur \setmathfontstylealternate\s!fraktur} -\permanent\protected\def\mathblackboard{\setmathalphabet \s!blackboard\setmathfontstylealternate\s!blackboard} +% \permanent\protected\def\mathrm{\setmathattribute\s!rm\s!tf\setmathfontstylealternate\s!tf} +% \permanent\protected\def\mathss{\setmathattribute\s!ss\s!tf\setmathfontstylealternate\s!tf} +% \permanent\protected\def\mathtt{\setmathattribute\s!tt\s!tf\setmathfontstylealternate\s!tf} +% +% \permanent\protected\def\mathtf{\setmathfontstyle\s!tf\setmathfontstylealternate\s!tf} +% \permanent\protected\def\mathsl{\setmathfontstyle\s!it\setmathfontstylealternate\s!it} % no sl +% \permanent\protected\def\mathit{\setmathfontstyle\s!it\setmathfontstylealternate\s!it} +% +% \permanent\protected\def\mathbf{\setmathfontstyle\s!bf\setmathfontstylealternate\s!bf} +% \permanent\protected\def\mathbs{\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} % no sl +% \permanent\protected\def\mathbi{\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} -\permanent\protected\def\mathrm {\setmathattribute\s!rm\s!tf\setmathfontstylealternate\s!tf} -\permanent\protected\def\mathss {\setmathattribute\s!ss\s!tf\setmathfontstylealternate\s!tf} -\permanent\protected\def\mathtt {\setmathattribute\s!tt\s!tf\setmathfontstylealternate\s!tf} +\permanent\protected\def\math_rm{\setmathattribute\s!rm\s!tf\setmathfontstylealternate\s!tf} +\permanent\protected\def\math_ss{\setmathattribute\s!ss\s!tf\setmathfontstylealternate\s!tf} +\permanent\protected\def\math_tt{\setmathattribute\s!tt\s!tf\setmathfontstylealternate\s!tf} -\permanent\protected\def\mathtf {\setmathfontstyle\s!tf\setmathfontstylealternate\s!tf} -\permanent\protected\def\mathsl {\setmathfontstyle\s!it\setmathfontstylealternate\s!it} % no sl -\permanent\protected\def\mathit {\setmathfontstyle\s!it\setmathfontstylealternate\s!it} +\permanent\protected\def\math_tf{\setmathfontstyle\s!tf\setmathfontstylealternate\s!tf} +\permanent\protected\def\math_sl{\setmathfontstyle\s!it\setmathfontstylealternate\s!it} % no sl +\permanent\protected\def\math_it{\setmathfontstyle\s!it\setmathfontstylealternate\s!it} -\permanent\protected\def\mathbf {\setmathfontstyle\s!bf\setmathfontstylealternate\s!bf} -\permanent\protected\def\mathbs {\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} % no sl -\permanent\protected\def\mathbi {\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} +\permanent\protected\def\math_bf{\setmathfontstyle\s!bf\setmathfontstylealternate\s!bf} +\permanent\protected\def\math_bs{\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} % no sl +\permanent\protected\def\math_bi{\setmathfontstyle\s!bi\setmathfontstylealternate\s!bi} -\aliased\let\mathdefault\mathitalic +\permanent\protected\def\mathrm{\mathgroupedcommandcs\math_rm\relax} +\permanent\protected\def\mathss{\mathgroupedcommandcs\math_ss\relax} +\permanent\protected\def\mathtt{\mathgroupedcommandcs\math_tt\relax} + +\permanent\protected\def\mathtf{\mathgroupedcommandcs\math_tf\relax} +\permanent\protected\def\mathsl{\mathgroupedcommandcs\math_sl\relax} +\permanent\protected\def\mathit{\mathgroupedcommandcs\math_it\relax} + +\permanent\protected\def\mathbf{\mathgroupedcommandcs\math_bf\relax} +\permanent\protected\def\mathbs{\mathgroupedcommandcs\math_bs\relax} +\permanent\protected\def\mathbi{\mathgroupedcommandcs\math_bi\relax} + +\aliased\let\math_default\math_italic +\aliased\let\mathdefault \math_italic \appendtoks \edef\p_default{\mathematicsparameter\c!default}% \ifx\p_default\v!normal - \enforced\let\mathdefault\mathupright + \enforced\let\mathdefault \math_upright + \enforced\let\math_default\math_upright \else - \enforced\let\mathdefault\mathitalic + \enforced\let\mathdefault \math_italic + \enforced\let\math_default\math_italic \fi \to \everysetupmathematics @@ -538,9 +1115,9 @@ \permanent\protected\def\fraktur {\ifmmode\expandafter\mathfraktur \fi} \permanent\protected\def\gothic {\ifmmode\expandafter\mathfraktur \fi} -\permanent\protected\def\mathcal #1{{\mathscript #1}} % for AMS compatibility -\permanent\protected\def\mathfrak#1{{\mathfraktur #1}} % for AMS compatibility -\permanent\protected\def\mathbb #1{{\mathblackboard#1}} % for AMS compatibility +\permanent\protected\def\mathcal {\mathgroupedcommandcs\math_script \relax} % for AMS compatibility +\permanent\protected\def\mathfrak{\mathgroupedcommandcs\math_fraktur \relax} % for AMS compatibility +\permanent\protected\def\mathbb {\mathgroupedcommandcs\math_blackboard\relax} % for AMS compatibility \ifdefined\normaltf \else \permanent\let\normaltf\tf \fi \permanent\protected\def\tf{\ifmmode\expandafter\mathtf\else\expandafter\normaltf\fi} \ifdefined\normalbf \else \permanent\let\normalbf\bf \fi \permanent\protected\def\bf{\ifmmode\expandafter\mathbf\else\expandafter\normalbf\fi} @@ -563,7 +1140,7 @@ % 5: $e=mc^2 \quad \mb e=mc^2$ \prependtoks - \mathdefault + \math_default \to \everymathematics %D We could set the rendering attribute at the \LUA\ end but as there can be many @@ -635,32 +1212,40 @@ \installcorenamespace{mathcodecommand} -\permanent\protected\def\mathlimop#1{\mathop{#1}} %no \limits +\permanent\protected\def\mathlimop#1{\normalmathop{#1}} %no \limits \permanent\protected\def\mathbox #1{\dontleavehmode\hbox\Ustartmath\mathsurround\zeropoint#1\Ustopmath} -\permanent\protected\def\mathnolop#1{\mathop{#1}\nolimits} +\permanent\protected\def\mathnolop#1{\normalmathop{#1}\nolimits} + +% \permanent\protected\def\mathlimop#1{\mathatom \mathoperatorcode options "C0000 {#1}} % auto "40000 + "80000 +% \permanent\protected\def\mathnolop#1{\mathatom \mathoperatorcode options "80000 {#1}} \aliased\let\mathnothing\firstofoneunexpanded \aliased\let\mathalpha \firstofoneunexpanded % todo 'frac' and 'rad' -\setnewconstant\mathordcode \zerocount \letcsname\??mathcodecommand ord\endcsname\mathord -\setnewconstant\mathopcode \plusone \letcsname\??mathcodecommand op\endcsname\mathop -\setnewconstant\mathbincode \plustwo \letcsname\??mathcodecommand bin\endcsname\mathbin -\setnewconstant\mathrelcode \plusthree \letcsname\??mathcodecommand rel\endcsname\mathrel -\setnewconstant\mathopencode \plusfour \letcsname\??mathcodecommand open\endcsname\mathopen -\setnewconstant\mathclosecode \plusfive \letcsname\??mathcodecommand close\endcsname\mathclose -\setnewconstant\mathpunctcode \plussix \letcsname\??mathcodecommand punct\endcsname\mathpunct -\setnewconstant\mathalphacode \plusseven \letcsname\??mathcodecommand alpha\endcsname\mathalpha -\setnewconstant\mathinnercode \zerocount \letcsname\??mathcodecommand inner\endcsname\mathinner -\setnewconstant\mathnothingcode \zerocount \letcsname\??mathcodecommand nothing\endcsname\mathnothing -\setnewconstant\mathlimopcode \plusone \letcsname\??mathcodecommand limop\endcsname\mathlimop -\setnewconstant\mathnolopcode \plusone \letcsname\??mathcodecommand nolop\endcsname\mathnolop -\setnewconstant\mathboxcode \zerocount \letcsname\??mathcodecommand box\endcsname\mathbox -\setnewconstant\mathchoicecode \zerocount %letcsname\??mathcodecommand choice\endcsname\mathnothing - -\setnewconstant\mathaccentcode \pluseight -\setnewconstant\mathradicalcode \plusnine +% why not \aliased ? + +\letcsname\??mathcodecommand ord\endcsname\mathord +\letcsname\??mathcodecommand op\endcsname\mathop +\letcsname\??mathcodecommand bin\endcsname\mathbin +\letcsname\??mathcodecommand rel\endcsname\mathrel +\letcsname\??mathcodecommand open\endcsname\mathopen +\letcsname\??mathcodecommand close\endcsname\mathclose +\letcsname\??mathcodecommand punct\endcsname\mathpunct +\letcsname\??mathcodecommand inner\endcsname\mathinner % hm +%letcsname\??mathcodecommand fraction\endcsname\mathnothing +%letcsname\??mathcodecommand radical\endcsname\mathnothing +%letcsname\??mathcodecommand middle\endcsname\mathnothing +\letcsname\??mathcodecommand limop\endcsname\mathlimop +\letcsname\??mathcodecommand nolop\endcsname\mathnolop + +% obsolete + +\letcsname\??mathcodecommand box\endcsname\mathbox +%letcsname\??mathcodecommand choice\endcsname\mathnothing +\letcsname\??mathcodecommand alpha\endcsname\mathalpha % hm +\letcsname\??mathcodecommand nothing\endcsname\mathnothing \permanent \def\mathcodenumber #1{\the\csname math#1code\endcsname} \permanent\protected\def\mathcodecommand#1{\csname\??mathcodecommand#1\endcsname} @@ -742,79 +1327,51 @@ % \relax % \hskip-.01\emwidth} -\protected\def\math_strut_ht#1% nasty! - {\s!height\dimexpr(\fontcharht#1\c_math_strut/\glyphscale)*\mathscale#1\relax} +\let\math_strut_math_style\normalmathstyle -\protected\def\math_strut_dp#1% nasty! - {\s!depth \dimexpr(\fontchardp#1\c_math_strut/\glyphscale)*\mathscale#1\relax} +% using \s!font \mathstylefontid\mathstyle\fam would needs expansion and guesswork -\protected\def\math_strut_htdp#1% nasty! - {\math_strut_ht{#1}% - \math_strut_dp{#1}} - -\protected\def\math_strut_normal - {\vrule +\appendtoks + \Umathruleheight\alltextstyles \strutheightfactor\fontspecifiedsize\textfont \zerocount + \Umathruledepth \alltextstyles \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 + {\normalsrule \s!width \zeropoint - \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}% + \s!fam \fam + \s!char \c_math_strut \relax} -\protected\def\math_strut_visual - {\hskip-.01\emwidth - \vrule - \s!width .02\emwidth - \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}% - \relax - \hskip-.01\emwidth} - -\permanent\protected\def\math_strut_height_normal - {\vrule +\permanent\protected\def\math_strut_height + {\normalsrule \s!width \zeropoint - \normalexpanded{\math_strut_ht{\mathstylefont\normalmathstyle}}% \s!depth \zeropoint + \s!fam \fam + \s!char \c_math_strut \relax} -\permanent\protected\def\math_strut_height_visual - {\hskip-.01\emwidth - \vrule - \s!width .02\emwidth - \normalexpanded{\math_strut_ht{\mathstylefont\normalmathstyle}}% - \s!depth \zeropoint - \relax - \hskip-.01\emwidth} - -\permanent\protected\def\math_strut_depth_normal - {\vrule +\permanent\protected\def\math_strut_depth + {\normalsrule \s!width \zeropoint \s!height\zeropoint - \normalexpanded{\math_strut_dp{\mathstylefont\normalmathstyle}}% + \s!fam \fam + \s!char \c_math_strut \relax} -\permanent\protected\def\math_strut_depth_visual - {\hskip-.01\emwidth - \vrule - \s!width .02\emwidth - \s!height\zeropoint - \normalexpanded{\math_strut_dp{\mathstylefont\normalmathstyle}}% - \relax - \hskip-.01\emwidth} - \permanent\protected\def\showmathstruts % let's not overload \math_strut_normal - {\enforced\let\math_strut \math_strut_visual - \enforced\let\math_strut_height\math_strut_height_visual - \enforced\let\math_strut_depth \math_strut_depth_visual} - -\let\math_strut \math_strut_normal -\let\math_strut_height\math_strut_height_normal -\let\math_strut_depth \math_strut_depth_normal - -% \protected\def\mathstrut{\mathcodecommand{nothing}{\math_strut}} + {\showmakeup[strut]} \pushoverloadmode - - \definemathcommand [mathstrut] {\math_strut} - \definemathcommand [mathheightstrut] {\math_strut_height} - \definemathcommand [mathdepthstrut] {\math_strut_depth} - + \permanent\protected\def\mathstrut {\math_strut} + \permanent\protected\def\mathheightstrut{\math_strut_height} + \permanent\protected\def\mathdepthstrut {\math_strut_depth} \popoverloadmode %D We could have a arg variant \unknown\ but not now. @@ -887,8 +1444,8 @@ \let\math_tags_mo\firstofoneunexpanded \let\math_tags_mi\firstofoneunexpanded -\protected\def\math_tags_mn#1{\begingroup\mathupright\math_set_o_both#1\endgroup} -\protected\def\math_tags_ms#1{\begingroup\mathupright\math_set_p_both#1\endgroup} % why not just \text +\protected\def\math_tags_mn#1{\begingroup\math_upright\math_set_o_both#1\endgroup} +\protected\def\math_tags_ms#1{\begingroup\math_upright\math_set_p_both#1\endgroup} % why not just \text % Once this is stable we can store the number at the tex end which is % faster. Functions getnumbers >= 1000. @@ -901,52 +1458,72 @@ \c!functionstyle=, % rm ss etc i.e. known alternatives, otherwise math \c!functioncolor=] -\protected\def\math_mfunction_styled +% \protected\def\math_mfunction_styled +% {%\begingroup +% \usemathematicscolorparameter\c!functioncolor +% \edef\p_functionstyle{\mathematicsparameter\c!functionstyle}% +% \ifempty\p_functionstyle +% \expandafter\math_mfunction_styled_none +% \orelse\ifcsname\??alternativestyle\p_functionstyle\endcsname +% \expandafter\math_mfunction_styled_text +% \else +% \expandafter\math_mfunction_styled_math +% \fi} +% +% \protected\def\math_mfunction_styled_text#1% +% {\expandafter$\expandafter\mathoptext\expandafter{\lastnamedcs#1}$% +% %{\normalexpanded{$\mathoptext{\csname\??alternativestyle\p_functionstyle\endcsname#1}$}% +% }%\endgroup} +% +% \protected\def\math_mfunction_styled_math#1% +% {\p_functionstyle +% #1% +% }%\endgroup} +% +% \protected\def\math_mfunction_styled_none#1% +% {\math_upright +% #1% +% }%\endgroup} +% +% \permanent\protected\def\mfunction#1% +% {\mathatom mathfont class \mathfunctioncode \bgroup +% \math_tags_mfunctiontxt{#1}\c_apply_function +% \hbox{\math_mfunction_styled{#1}}% +% \egroup} +% +% \permanent\protected\def\mfunctionlabeltext#1% +% {\mathatom mathfont class \mathfunctioncode \bgroup +% \math_tags_mfunctionlab{#1}\c_apply_function +% \hbox{\math_mfunction_styled{\mathlabeltext{#1}}}% +% \egroup} + +\def\math_function_handle#1#2% {\begingroup \usemathematicscolorparameter\c!functioncolor \edef\p_functionstyle{\mathematicsparameter\c!functionstyle}% \ifempty\p_functionstyle - \expandafter\math_mfunction_styled_none + \expandafter\math_upright \orelse\ifcsname\??alternativestyle\p_functionstyle\endcsname - \expandafter\math_mfunction_styled_text + \expandafter\lastnamedcs \else - \expandafter\math_mfunction_styled_math - \fi} - -\protected\def\math_mfunction_styled_text#1% - %{\mathoptext{\csname\??alternativestyle\p_functionstyle\endcsname#1}% - {\expandafter\mathoptext\expandafter{\lastnamedcs#1}% - \endgroup} - -\protected\def\math_mfunction_styled_math#1% - {\p_functionstyle - #1% - \endgroup} - -\protected\def\math_mfunction_styled_none#1% - {\mathupright - #1% - \endgroup} - -\permanent\protected\def\mfunction#1% - {\begingroup - \math_tags_mfunctiontxt{#1}\c_apply_function - \math_mfunction_styled{#1}% + \expandafter\p_functionstyle + \fi + \mathatom mathfont class \mathfunctioncode \bgroup + \math_tags_mfunctionlab{#2}\c_apply_function % maybe move this before mathatom + #1{#2}% + \egroup \endgroup} -\permanent\protected\def\mfunctionlabeltext#1% - {\begingroup - \math_tags_mfunctionlab{#1}\c_apply_function - \math_mfunction_styled{\mathlabeltext{#1}}% - \endgroup} +\permanent\protected\def\mfunction {\math_function_handle\firstofoneargument} +\permanent\protected\def\mfunctionlabeltext{\math_function_handle\mathlabeltext} \let\math_tags_mfunctiontxt\gobbletwoarguments \let\math_tags_mfunctionlab\gobbletwoarguments -\permanent\protected\def\math_tags_mo_indeed#1{\begingroup \c_attr_mathcategory\plusone #1\endgroup} -\permanent\protected\def\math_tags_mi_indeed#1{\begingroup \c_attr_mathcategory\plustwo #1\endgroup} -\permanent\protected\def\math_tags_mn_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusthree\math_set_o_both#1\endgroup} -\permanent\protected\def\math_tags_ms_indeed#1{\begingroup\mathupright\c_attr_mathcategory\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext +\permanent\protected\def\math_tags_mo_indeed#1{\begingroup \c_attr_mathcategory\plusone #1\endgroup} +\permanent\protected\def\math_tags_mi_indeed#1{\begingroup \c_attr_mathcategory\plustwo #1\endgroup} +\permanent\protected\def\math_tags_mn_indeed#1{\begingroup\math_upright\c_attr_mathcategory\plusthree\math_set_o_both#1\endgroup} +\permanent\protected\def\math_tags_ms_indeed#1{\begingroup\math_upright\c_attr_mathcategory\plusfour \math_set_p_both#1\endgroup} % todo: mathoptext \newconditional\c_apply_function @@ -1063,7 +1640,7 @@ \activatemathcharacter\underscoreasciicode \activatemathcharacter\ampersandasciicode -\permanent\def\normalmathaligntab{&} % \let\normalmathaligntab\aligntab does to work well in a let to & (a def works ok) +\permanent\def\normalmathaligntab{&} % \let\normalmathaligntab\aligntab doesn;t work well in a let to & (a def works ok) \appendtoks \edef\p_ampersand{\mathematicsparameter\s!ampersand}% @@ -1773,6 +2350,8 @@ \bgroup + % This can adn will be replaced by classes: + \catcode\c_math_comma \activecatcode \catcode\c_math_period \activecatcode \catcode\c_math_semicolon\activecatcode @@ -1902,20 +2481,24 @@ % 7 = crampedscriptscript \permanent\def\uncramped#1% - {{\ifmathstyle + {\beginmathgroup + \ifmathstyle \or \displaystyle \or \or \textstyle \or \or \scriptstyle \or \or \scriptscriptstyle \fi - #1}} + #1% + \endmathgroup} \permanent\def\cramped#1% - {{\ifmathstyle + {\beginmathgroup + \ifmathstyle \crampeddisplaystyle \or \or % 0 -> 1 \crampedtextstyle \or \or % 2 -> 3 \crampedscriptstyle \or \or % 4 -> 5 \crampedscriptscriptstyle \fi % 6 -> 7 - #1}} + #1% + \endmathgroup} \permanent\def\triggermathstyle#1{\Ustyle\numexpr#1\relax} %permanent\def\mathstyletrigger#1{\numexpr#1\relax} @@ -1986,6 +2569,9 @@ \textface \fi} +% \permanent\def\mathstyleface#1% #1 is number (\normalmathstyle) +% {\mathstylefont#1\relax} + \permanent\def\mathsmallstyleface#1% #1 is number (\normalmathstyle) {\ifcase\numexpr#1\relax \scriptface \or @@ -1999,6 +2585,19 @@ \scriptface \fi} +% \permanent\def\mathsmallstyleface#1% #1 is number (\normalmathstyle) +% {\mathstylefont\ifcase\numexpr#1\relax +% \scriptstyle \or +% \scriptstyle \or +% \scriptstyle \or +% \scriptstyle \or +% \scriptscriptstyle \or +% \scriptscriptstyle \or +% \scriptscriptstyle \or +% \scriptscriptstyle \else +% \scriptstyle +% \fi} + \permanent\def\mathstylecommand#1#2#3% {\ifcase\numexpr\normalmathstyle\relax \expandafter#1\or @@ -2570,7 +3169,7 @@ \mathscriptboxmode \plustwo % lists and boxes \mathscriptcharmode \plusone % lists and boxes %mathscriptboxmode \plusthree % lists and boxes with \boundary=1 (also for testing and demo) -\mathrulethicknessmode\plusone % adaptive +%mathrulethicknessmode\plusone % adaptive \permanent\protected\def\mathtext {\mathortext{\math_text_choice_font\relax}\hbox} \permanent\protected\def\mathword {\mathortext{\math_text_choice_word\relax}\hbox} @@ -3132,28 +3731,41 @@ \installcorenamespace{mathspacing} -\protected\def\math_spacing_set#1#2% maybe some day \allmathstyles - {\relax - #1\displaystyle #2% - #1\crampeddisplaystyle#2% - #1\textstyle #2% - #1\scriptstyle #2% - #1\crampedscriptstyle #2% - #1\scriptstyle #2% - #1\crampedscriptstyle #2% - \relax} +% \protected\def\math_spacing_set#1#2% maybe some day \allmathstyles +% {\relax +% #1\displaystyle #2% +% #1\crampeddisplaystyle#2% +% #1\textstyle #2% +% #1\scriptstyle #2% +% #1\crampedscriptstyle #2% +% #1\scriptstyle #2% +% #1\crampedscriptstyle #2% +% \relax} +% +% \permanent\tolerant\protected\def\definemathspacing[#1]#*[#2]#*[#3]% +% {\ifcstok{#2}\v!horizontal +% \edefcsname\??mathspacing#1\endcsname +% {\math_spacing_set\Umathxscale{\ifchknum#3\or#3\else\plusthousand\fi\relax}}% +% \orelse\ifcstok{#2}\v!vertical +% \edefcsname\??mathspacing#1\endcsname +% {\math_spacing_set\Umathyscale{\ifchknum#3\or#3\else\plusthousand\fi\relax}}% +% \else +% \edefcsname\??mathspacing#1\endcsname +% {\math_spacing_set\Umathxscale{\ifchknum#2\or\number#2\else\plusthousand\fi\relax}% +% \math_spacing_set\Umathyscale{\ifchknum#3\or\number#3\orelse\ifchknum#2\or\number#2\else\plusthousand\fi\relax}}% +% \fi} \permanent\tolerant\protected\def\definemathspacing[#1]#*[#2]#*[#3]% {\ifcstok{#2}\v!horizontal \edefcsname\??mathspacing#1\endcsname - {\math_spacing_set\Umathxscale{\ifchknum#3\or#3\else\plusthousand\fi\relax}}% + {\Umathxscale\allmathstyles\ifchknum#3\or#3\else\plusthousand\fi\relax}% \orelse\ifcstok{#2}\v!vertical \edefcsname\??mathspacing#1\endcsname - {\math_spacing_set\Umathyscale{\ifchknum#3\or#3\else\plusthousand\fi\relax}}% + {\Umathyscale\allmathstyles\ifchknum#3\or#3\else\plusthousand\fi\relax}% \else \edefcsname\??mathspacing#1\endcsname - {\math_spacing_set\Umathxscale{\ifchknum#2\or\number#2\else\plusthousand\fi\relax}% - \math_spacing_set\Umathyscale{\ifchknum#3\or\number#3\orelse\ifchknum#2\or\number#2\else\plusthousand\fi\relax}}% + {\Umathxscale\allmathstyles\ifchknum#2\or\number#2\else\plusthousand\fi\relax + \Umathyscale\allmathstyles\ifchknum#3\or\number#3\orelse\ifchknum#2\or\number#2\else\plusthousand\fi\relax}% \fi} \definemathspacing[\v!normal] [1000] [1000] @@ -3167,6 +3779,66 @@ \permanent\protected\def\setupmathspacing[#1]% {\begincsname\??mathspacing#1\endcsname} +\installcorenamespace {mathclasses} + +% \defcsname\??mathspacing +\endcsname +% {\expandedloop\zerocount\plusseven\plusone +% {\Umathxscale +% \the\currentloopiterator +% \numexpr\Umathxscale\the\currentloopiterator+\plushundred\relax +% \Umathyscale +% \the\currentloopiterator +% \numexpr\Umathxscale\the\currentloopiterator+\plushundred\relax}} +% +% \defcsname\??mathspacing -\endcsname +% {\expandedloop\zerocount\plusseven\plusone +% {\Umathxscale +% \the\currentloopiterator +% \numexpr\Umathxscale\the\currentloopiterator-\plushundred\relax +% \Umathyscale +% \the\currentloopiterator +% \numexpr\Umathxscale\the\currentloopiterator-\plushundred\relax}} + +% can become a lua call that globally defined it, then we can have +% partials + +% todo: fences and stackers should be done the same: number or +% name + +\letcsname\??mathclasses \endcsname\normalmathord +\letcsname\??mathclasses ord\endcsname\normalmathord +\letcsname\??mathclasses ordinary\endcsname\normalmathord +\letcsname\??mathclasses op\endcsname\normalmathop +\letcsname\??mathclasses operator\endcsname\normalmathop +\letcsname\??mathclasses rel\endcsname\normalmathrel +\letcsname\??mathclasses relation\endcsname\normalmathrel +\letcsname\??mathclasses bin\endcsname\normalmathbin +\letcsname\??mathclasses binary\endcsname\normalmathbin +\letcsname\??mathclasses punct\endcsname\normalmathbin +\letcsname\??mathclasses punctuation\endcsname\normalmathbin +\letcsname\??mathclasses frac\endcsname\normalmathfrac +\letcsname\??mathclasses fraction\endcsname\normalmathfrac +\letcsname\??mathclasses rad\endcsname\normalmathrad +\letcsname\??mathclasses radical\endcsname\normalmathrad + +\def\math_class_by_parameter#1% + {\normalexpanded{\noexpand\math_class_by_parameter_indeed{#1\c!mathclass}}} + +\def\math_class_by_parameter_indeed#1% + {\csname\??mathclasses\ifcsname\??mathclasses#1\endcsname#1\fi\endcsname} + +%D For now we define this here: + +\ifdefined\d \let\text_d\d \else \let\text_d\firstofoneargument \fi + +\pushoverloadmode + + \permanent\protected\def\math_d{\mathatom unpack \mathdifferentialcode{d}} + + \permanent\protected\def\d{\mathortext\math_d\text_d} + +\popoverloadmode + \protect \endinput % % not used (yet) diff --git a/tex/context/base/mkxl/math-int.mkxl b/tex/context/base/mkxl/math-int.mkxl index 462c6587b..30d9643cf 100644 --- a/tex/context/base/mkxl/math-int.mkxl +++ b/tex/context/base/mkxl/math-int.mkxl @@ -13,29 +13,10 @@ \writestatus{loading}{ConTeXt Math Macros / Integrals} -% todo: int and sum etc can be stackers +%D This is replaced by the operator module. \unprotect -%D \startbuffer -%D $\int _a^b f(x) dx $ and also -%D $\iint _a^b f(x,y) dxdy$, -%D $\iiint _a^b f(x,y) dxdy$, -%D \startformula -%D \int _a^b f(x) dx \quad -%D \iint _a^b f(x) dx \quad -%D \iiint _a^b f(x) dx \quad -%D \stopformula -%D \stopbuffer -%D -%D Default: \getbuffer -%D -%D Displaylimits: \setupmathematics[integral=displaylimits] \getbuffer -%D -%D Limits: \setupmathematics[integral=limits] \getbuffer - -%D Adapted to mkiv by HH from code by AM. - \installcorenamespace{mathintegral} \newconstant\mathintlimitmode @@ -64,78 +45,16 @@ \letcsname\??mathintegral none\endcsname\plusfour \appendtoks - \mathintlimitmode\executeifdefined{\??mathintegral\mathematicsparameter\s!integral}\zerocount + \mathintlimitmode + \ifcsname\??mathintegral\mathematicsparameter\s!integral\endcsname + \lastnamedcs + \else + \zerocount + \fi \to \everyswitchmathematics \setupmathematics -% [\v!integral=nolimits] - [\v!integral=autolimits] - -%D The following code is used for fallbacks and might become obsolete once -%D we have enough \OPENTYPE\ math fonts. - -% \def\math_repeated_integal_i -% {\int} - -% \def\math_repeated_integal_ii -% {\math_repeated_integal_i -% \math_repeated_integral_kern -% \math_repeated_integal_i -% \math_repeat_integral_finish -% \intlimits} - -% \def\math_repeated_integal_iii -% {\math_repeated_integal_i -% \math_repeated_integral_kern -% \math_repeated_integal_ii} -% -% \def\math_repeated_integal_iiii -% {\math_repeated_integal_i -% \math_repeated_integral_kern -% \math_repeated_integal_iii} -% -% \protected\def\math_repeat_integral#1% -% {\let\math_repeat_integral_finish\donothing -% \iffontchar\textfont\zerocount#1\relax -% \expandafter\math_repeat_integral_real -% \else -% \expandafter\math_repeat_integral_fake -% \fi} -% -% \def\math_repeat_integral_fake#1#2% -% {\let\math_repeat_integral_fake_symbol#2% -% \futurelet\next\math_repeat_integral_fake_indeed} -% -% \def\math_repeat_integral_real#1#2% -% {#1} -% -% \definemathcommand [iint] {\math_repeat_integral{"0222C}\normalint \math_repeated_integal_ii } % double -% \definemathcommand [iiint] {\math_repeat_integral{"0222D}\normaliint \math_repeated_integal_iii } % tripple -% \definemathcommand [iiiint] {\math_repeat_integral{"FFFFF}\normaliiint\math_repeated_integal_iiii} % quadruple -% -% \def\math_repeated_integral_kern -% {\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}} -% -% \def\math_repeat_integral_fake_indeed -% {\ifx\next\limits -% \math_repeated_integral_correction -% \orelse\ifx\next\displaylimits -% \math_repeated_integral_correction -% \orelse\ifx\next\nolimits -% % nothing -% \orelse\ifcase\mathintlimitmode -% % nothing -% \else -% \math_repeated_integral_correction -% \fi -% \math_repeat_integral_fake_symbol} -% -% \def\math_repeated_integral_correction -% {\mkern-7mu\mathchoice{\mkern-2mu}{}{}{}% -% \mathop\bgroup\mkern7mu\mathchoice{\mkern2mu}{}{}{}\let\math_repeat_integral_finish\egroup} -% -% %D If the \type{\limits} option is used after \type {\iint}, use \type -% %D {\mathop} and fudge the left hand space a bit to make the subscript -% %D visually centered. +% [\c!integral=nolimits] + [\c!integral=autolimits] \protect \endinput diff --git a/tex/context/base/mkxl/math-lop.mkxl b/tex/context/base/mkxl/math-lop.mkxl new file mode 100644 index 000000000..c860b1318 --- /dev/null +++ b/tex/context/base/mkxl/math-lop.mkxl @@ -0,0 +1,143 @@ +%D \module +%D [ file=math-lop, +%D version=2022.02.10, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Large operators, +%D author={Hans Hagen & Mikael Sundqvist}, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\writestatus{loading}{ConTeXt Math Macros / Large Operators} + +% $\textstyle \Uoperator \Udelimiter "0 \fam "222B {t} {b} {x}$\blank +% $\textstyle \Uoperator \Udelimiter "0 \fam "222B {t} {b} {\frac{1}{x}}$\blank +% $\displaystyle x + \Uoperator \Udelimiter "0 \fam "222B {t} {b} {\frac{1}{x}}$\blank +% $ x + \Uoperator nolimits \Udelimiter "0 \fam "222B {t} {b} {\frac{1}{x}}$\blank +% $ x + \Uoperator limits \Udelimiter "0 \fam "222B {t} {b} {\frac{1}{x}}$\blank + +\unprotect + +\installcorenamespace{mathoperators} +\installcorenamespace{mathoperatormethod} + +\installcommandhandler \??mathoperators {mathoperator} \??mathoperators + +\setupmathoperator + [\c!left=\zerocount]% so we always have something + +\aliased\let\setupmathoperators\setupmathoperator + +\appendtoks + % todo: only define when there's left or right + \protected\instance\edefcsname\currentmathoperator\endcsname{\math_operator{\currentmathoperator}}% + % todo: under definition control + \protected\instance\edefcsname\e!start\currentmathoperator\endcsname{\math_operator_start{\currentmathoperator}}% + \protected\instance\edefcsname\e!stop \currentmathoperator\endcsname{\math_operator_stop}% +\to \everydefinemathoperator + +% more generic: + +\defcsname\??mathoperatormethod\v!horizontal\endcsname{nolimits } +\defcsname\??mathoperatormethod\v!vertical \endcsname{limits } + +% The ones we wlready had: + +\letcsname\??mathoperatormethod \v!auto\endcsname\empty +\letcsname\??mathoperatormethod autolimits\endcsname\empty +\letcsname\??mathoperatormethod nolimits\expandafter\endcsname\csname\??mathoperatormethod\v!horizontal\endcsname +\letcsname\??mathoperatormethod limits\expandafter\endcsname\csname\??mathoperatormethod\v!vertical \endcsname + +\installlocalcurrenthandler\??mathoperators {mathoperator} + +\protected\def\math_operator_operator#1#2% + {\setlocalmathoperatorcurrent{#1}% \edef\currentmathoperator{#1}% + \setupcurrentmathoperator[#2]% + \Uoperator + \usedcolorparameterattributes{\mathoperatorparameter\c!color}% + \begincsname\??mathoperatormethod\mathoperatorparameter\c!method\endcsname + \ifchkdim\mathoperatorparameter\c!size\or + \s!depth \mathoperatorparameter\c!size + \s!height\mathoperatorparameter\c!size + \s!axis + \orelse\ifcstok{\mathoperatorparameter\c!size}\v!auto + \s!auto + \fi + \s!class \mathoperatorcode + % todo: find a way to pick up or pass sup/sub to here + \Udelimiter \zerocount \fam \mathoperatorparameter\c!left + {\edef\m_operator_text{\mathoperatorparameter\c!top}% + \ifempty\m_operator_text\else + \mathstrut % todo: make option + \dousecolorparameter{\mathoperatorparameter\c!topcolor} + \m_operator_text + \fi}% + {\edef\m_operator_text{\mathoperatorparameter\c!bottom}% + \ifempty\m_operator_text\else + \mathstrut % todo: make option + \dousecolorparameter{\mathoperatorparameter\c!bottomcolor} + \m_operator_text + \fi}} + +\tolerant\protected\def\math_operator#1#*[#2]#*#:#=% mandate braces + {\math_operator_operator{#1}{#2}#3\Uright.} + +\tolerant\protected\def\math_operator_start#1#*[#2]% + {\math_operator_operator{#1}{#2}} + +\protected\def\math_operator_stop + {\Uright.} +% {\Uright\Udelimiter\zerocount \fam \zerocount } + +% \def\math_operator_default_size % is now the auto option +% {\ifconditional\indisplaymath\ifcase\Umathoperatorsize=\maxdimen\else +% \Umathoperatorsize\displaystyle +% \fi\fi} + +% TODO: Add 4 (inherited) classes and then define them automatically from char-def +% instead. + +\setupmathoperators [integrals] [\c!size=\v!auto,\c!method=\mathematicsparameter\c!integral] % cf Mikael's wish +\setupmathoperators [summations] [\c!size=\v!auto] +\setupmathoperators [products] [\c!size=\v!auto] +\setupmathoperators [operators] [\c!size=\v!auto] + +\definemathoperator [integral] [integrals] [\c!left="222B] % these might go unless we decide +\definemathoperator [iintegral] [integrals] [\c!left="222C] % to have verbose parents but who +\definemathoperator [iiintegral] [integrals] [\c!left="222D] % will use them + +\definemathoperator [int] [integrals] [\c!left="222B] % INTEGRAL +\definemathoperator [iint] [integrals] [\c!left="222C] % DOUBLE INTEGRAL +\definemathoperator [iiint] [integrals] [\c!left="222D] % TRIPLE INTEGRAL +\definemathoperator [iiiint] [integrals] [\c!left="2A0C] % QUADRUPLE INTEGRAL OPERATOR +\definemathoperator [oint] [integrals] [\c!left="222E] % CONTOUR INTEGRAL +\definemathoperator [oiint] [integrals] [\c!left="222F] % SURFACE INTEGRAL +\definemathoperator [oiiint] [integrals] [\c!left="2230] % VOLUME INTEGRAL +\definemathoperator [intc] [integrals] [\c!left="2231] % CLOCKWISE INTEGRAL +\definemathoperator [ointc] [integrals] [\c!left="2232] % CLOCKWISE CONTOUR INTEGRAL +\definemathoperator [aointc] [integrals] [\c!left="2233] % ANTI CLOCKWISE CONTOUR INTEGRAL + +\definemathoperator [sum] [summations] [\c!left="2211] % N-ARY SUMMATION + +\definemathoperator [prod] [products] [\c!left="220F] % N-ARY PRODUCT +\definemathoperator [coprod] [products] [\c!left="2210] % N-ARY COPRODUCT + +% todo: middles too + +\definemathoperator [bigwedge] [operators] [\c!left="22C0] % N-ARY LOGICAL AND +\definemathoperator [bigvee] [operators] [\c!left="22C1] % N-ARY LOGICAL OR +\definemathoperator [bigcap] [operators] [\c!left="22C2] % N-ARY LOGICAL INTERSECTION +\definemathoperator [bigcup] [operators] [\c!left="22C3] % N-ARY UNION +\definemathoperator [bigodot] [operators] [\c!left="2A00] % N-ARY CIRCLED DOT OPERATOR +\definemathoperator [bigoplus] [operators] [\c!left="2A01] % N-ARY CIRCLED PLUS OPERATOR +\definemathoperator [bigotimes] [operators] [\c!left="2A02] % N-ARY CIRCLED TIMES OPERATOR +\definemathoperator [bigudot] [operators] [\c!left="2A03] % N-ARY UNION OPERATOR WITH DOT +\definemathoperator [biguplus] [operators] [\c!left="2A04] % N-ARY UNION OPERATOR WITH PLUS +\definemathoperator [bigsqcap] [operators] [\c!left="2A05] % N-ARY SQUARE INTERSECTION OPERATOR +\definemathoperator [bigsqcup] [operators] [\c!left="2A06] % N-ARY SQUARE UNION OPERATOR +\definemathoperator [bigtimes] [operators] [\c!left="2A09] % N-ARY TIMES OPERATOR + +\protect \endinput diff --git a/tex/context/base/mkxl/math-noa.lmt b/tex/context/base/mkxl/math-noa.lmt index 3699ae03c..e035a9f68 100644 --- a/tex/context/base/mkxl/math-noa.lmt +++ b/tex/context/base/mkxl/math-noa.lmt @@ -7,6 +7,9 @@ if not modules then modules = { } end modules ['math-noa'] = { license = "see context related readme files" } +-- if specials and (specials[1] == "char" or specials[1] == "font") then -- can we avoid this +-- ... better create a reverse mapping from the already present vectors + -- beware: this is experimental code and there will be a more generic (attribute value -- driven) interface too but for the moment this is ok (sometime in 2015-2016 i will -- start cleaning up as by then the bigger picture is clear and code has been used for @@ -108,6 +111,7 @@ local setattrlist = nuts.setattrlist local setwidth = nuts.setwidth local setheight = nuts.setheight local setdepth = nuts.setdepth +local setoptions = nuts.setoptions local getfield = nuts.getfield local getnext = nuts.getnext @@ -185,19 +189,22 @@ local nodecodes = nodes.nodecodes local noadcodes = nodes.noadcodes local fencecodes = nodes.fencecodes -local ordinarynoad_code = noadcodes.ordinary -local operatornoad_code = noadcodes.operator -local binarynoad_code = noadcodes.binary -local relationnoad_code = noadcodes.relation -local opennoad_code = noadcodes.open -local closenoad_code = noadcodes.close +local ordinarynoad_code = noadcodes.ordinary +local operatornoad_code = noadcodes.operator +local binarynoad_code = noadcodes.binary +local relationnoad_code = noadcodes.relation +local opennoad_code = noadcodes.open +local closenoad_code = noadcodes.close +local middlenoad_code = noadcodes.middle local punctuationnoad_code = noadcodes.punctuation -local innernoad_code = noadcodes.inner -local undernoad_code = noadcodes.under -local overnoad_code = noadcodes.over -local vcenternoad_code = noadcodes.vcenter -local fractionnoad_code = noadcodes.fraction -local radicalnoad_code = noadcodes.radical +local innernoad_code = noadcodes.inner +local fencednoad_code = noadcodes.fenced +local undernoad_code = noadcodes.under +local overnoad_code = noadcodes.over +local vcenternoad_code = noadcodes.vcenter +local fractionnoad_code = noadcodes.fraction +local radicalnoad_code = noadcodes.radical +local accentnoad_code = noadcodes.accent local noad_code = nodecodes.noad local accent_code = nodecodes.accent @@ -230,6 +237,8 @@ local rightfence_code = fencecodes.right -- local gf = getfield local gt = setmetatableindex("number") getfield = function(n,f) gt[f] = gt[f] + 1 return gf(n,f) end mathematics.GETFIELD = gt -- local sf = setfield local st = setmetatableindex("number") setfield = function(n,f,v) st[f] = st[f] + 1 sf(n,f,v) end mathematics.SETFIELD = st +-- TODO : get rid of done + local function process(start,what,n,parent) if n then @@ -280,10 +289,9 @@ local function process(start,what,n,parent) local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list noad = getsup (start) if noad then process(noad,what,n,start) end -- list noad = getsub (start) if noad then process(noad,what,n,start) end -- list - if getsubpre then noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list - end + noad = getfield(start,"prime") if noad then process(noad,what,n,start) end -- list elseif id == mathchar_code or id == mathtextchar_code or id == delimiter_code then break elseif id == subbox_code or id == submlist_code then @@ -300,24 +308,24 @@ local function process(start,what,n,parent) noad = getfield(start,"scriptscript") if noad then process(noad,what,n,start) end -- list elseif id == fence_code then local noad = getfield(start,"delimiter") if noad then process(noad,what,n,start) end -- delimiter + noad = getfield(start,"top") if noad then process(noad,what,n,start) end -- list + noad = getfield(start,"bottom") if noad then process(noad,what,n,start) end -- list elseif id == radical_code then local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list noad = getsup (start) if noad then process(noad,what,n,start) end -- list noad = getsub (start) if noad then process(noad,what,n,start) end -- list - if getsubpre then noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list - end + noad = getfield(start,"prime") if noad then process(noad,what,n,start) end -- delimiter noad = getfield(start,"left") if noad then process(noad,what,n,start) end -- delimiter noad = getfield(start,"degree") if noad then process(noad,what,n,start) end -- list elseif id == accent_code then local noad = getnucleus(start) if noad then process(noad,what,n,start) end -- list noad = getsup (start) if noad then process(noad,what,n,start) end -- list noad = getsub (start) if noad then process(noad,what,n,start) end -- list - if getsubpre then noad = getsuppre (start) if noad then process(noad,what,n,start) end -- list noad = getsubpre (start) if noad then process(noad,what,n,start) end -- list - end + noad = getfield(start,"prime") if noad then process(noad,what,n,start) end -- list noad = getfield(start,"topaccent") if noad then process(noad,what,n,start) end -- list noad = getfield(start,"botaccent") if noad then process(noad,what,n,start) end -- list -- elseif id == style_code then @@ -341,10 +349,9 @@ local function processnested(current,what,n) noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list noad = getsup (current) if noad then process(noad,what,n,current) end -- list noad = getsub (current) if noad then process(noad,what,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list - end + noad = getfield (current,"prime") if noad then process(noad,what,n,current) end -- list elseif id == subbox_code or id == submlist_code then noad = getlist(current) if noad then process(noad,what,n,current) end -- list (not getlist !) elseif id == fraction_code then @@ -359,24 +366,24 @@ local function processnested(current,what,n) noad = getfield(current,"scriptscript") if noad then process(noad,what,n,current) end -- list elseif id == fence_code then noad = getfield(current,"delimiter") if noad then process(noad,what,n,current) end -- delimiter + noad = getfield(current,"top") if noad then process(noad,what,n,current) end -- list + noad = getfield(current,"bottom") if noad then process(noad,what,n,current) end -- list elseif id == radical_code then noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list noad = getsup (current) if noad then process(noad,what,n,current) end -- list noad = getsub (current) if noad then process(noad,what,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list - end + noad = getfield(current,"prime") if noad then process(noad,what,n,current) end -- list noad = getfield(current,"left") if noad then process(noad,what,n,current) end -- delimiter noad = getfield(current,"degree") if noad then process(noad,what,n,current) end -- list elseif id == accent_code then noad = getnucleus(current) if noad then process(noad,what,n,current) end -- list noad = getsup (current) if noad then process(noad,what,n,current) end -- list noad = getsub (current) if noad then process(noad,what,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,what,n,current) end -- list noad = getsubpre (current) if noad then process(noad,what,n,current) end -- list - end + noad = getfield(current,"prime") if noad then process(noad,what,n,current) end -- list noad = getfield(current,"topaccent") if noad then process(noad,what,n,current) end -- list noad = getfield(current,"botaccent") if noad then process(noad,what,n,current) end -- list end @@ -389,10 +396,9 @@ local function processstep(current,process,n,id) noad = getnucleus(current) if noad then process(noad,n,current) end -- list noad = getsup (current) if noad then process(noad,n,current) end -- list noad = getsub (current) if noad then process(noad,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,n,current) end -- list noad = getsubpre (current) if noad then process(noad,n,current) end -- list - end + noad = getfield (current,"prime") if noad then process(noad,n,current) end -- list elseif id == subbox_code or id == submlist_code then noad = getlist(current) if noad then process(noad,n,current) end -- list (not getlist !) elseif id == fraction_code then @@ -407,24 +413,24 @@ local function processstep(current,process,n,id) noad = getfield(current,"scriptscript") if noad then process(noad,n,current) end -- list elseif id == fence_code then noad = getfield(current,"delimiter") if noad then process(noad,n,current) end -- delimiter + noad = getfield(current,"top") if noad then process(noad,n,current) end -- list + noad = getfield(current,"bottom") if noad then process(noad,n,current) end -- list elseif id == radical_code then noad = getnucleus(current) if noad then process(noad,n,current) end -- list noad = getsup (current) if noad then process(noad,n,current) end -- list noad = getsub (current) if noad then process(noad,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,n,current) end -- list noad = getsubpre (current) if noad then process(noad,n,current) end -- list - end + noad = getfield(current,"prime") if noad then process(noad,n,current) end -- delimiter noad = getfield(current,"left") if noad then process(noad,n,current) end -- delimiter noad = getfield(current,"degree") if noad then process(noad,n,current) end -- list elseif id == accent_code then noad = getnucleus(current) if noad then process(noad,n,current) end -- list noad = getsup (current) if noad then process(noad,n,current) end -- list noad = getsub (current) if noad then process(noad,n,current) end -- list - if getsubpre then noad = getsuppre (current) if noad then process(noad,n,current) end -- list noad = getsubpre (current) if noad then process(noad,n,current) end -- list - end + noad = getfield(current,"prime") if noad then process(noad,n,current) end -- list noad = getfield(current,"topaccent") if noad then process(noad,n,current) end -- list noad = getfield(current,"botaccent") if noad then process(noad,n,current) end -- list end @@ -837,40 +843,44 @@ end do + -- todo: use registerattribute + local a_mathsize = privateattribute("mathsize") -- this might move into other fence code local resize = { } resize[fence_code] = function(pointer) local subtype = getsubtype(pointer) - if subtype == leftfence_code or subtype == rightfence_code then + -- if subtype == leftfence_code or subtype == rightfence_code then local a = getattr(pointer,a_mathsize) if a and a > 0 then local method = div(a,100) local size = a % 100 setattr(pointer,a_mathsize,0) local delimiter = getfield(pointer,"delimiter") - local chr, fnt, fam = getcharspec(delimiter) - if chr > 0 and fnt > 0 then - local data = fontdata[fnt] - local char = mathematics.big(data,chr,size,method) - local ht = getheight(pointer) - local dp = getdepth(pointer) - if ht == 1 or dp == 1 then -- 1 scaled point is a signal - local chardata = data.characters[char] - if ht == 1 then - setheight(pointer,chardata.height) + if delimiter then + local chr, fnt, fam = getcharspec(delimiter) + if chr > 0 and fnt > 0 then + local data = fontdata[fnt] + local char = mathematics.big(data,chr,size,method) + local ht = getheight(pointer) + local dp = getdepth(pointer) + if ht == 1 or dp == 1 then -- 1 scaled point is a signal + local chardata = data.characters[char] + if ht == 1 then + setheight(pointer,chardata.height) + end + if dp == 1 then + setdepth(pointer,chardata.depth) + end end - if dp == 1 then - setdepth(pointer,chardata.depth) + if trace_fences then + report_fences("replacing %C by %C using method %a and size %a",chr,char,method,size) end + setchar(delimiter,char) end - if trace_fences then - report_fences("replacing %C by %C using method %a and size %a",chr,char,method,size) - end - setchar(delimiter,char) end end - end + -- end end function handlers.resize(head,style,penalties) @@ -930,7 +940,7 @@ do -- f_c or "?" -- ) local list = new_submlist() - setsubtype(noad,innernoad_code) + setsubtype(noad,fencednoad_code) setnucleus(noad,list) setlist(list,f_o) setlink(f_o,o_next) -- prev of list is nil @@ -993,8 +1003,8 @@ do local f_c = makefence(rightfence_code,close) local c_prev = getprev(close) local f_next = getnext(first) - makelist(middle, close, f_o,f_next,c_prev,f_c) - -- close is now a list + makelist(middle,close,f_o,f_next,c_prev,f_c) + -- close is now a list : inner but should be fenced if c_prev ~= first then setlink(first,close) end @@ -1003,7 +1013,7 @@ do local stacks = setmetatableindex("table") - -- 1=open 2=close 3=middle 4=both + -- 1=open 2=close 3=middle 4=both : todo check both local function processfences(pointer,n,parent) local current = pointer @@ -1811,14 +1821,17 @@ do [binarynoad_code] = true, -- new [relationnoad_code] = true, [opennoad_code] = true, -- new + [middlenoad_code] = true, -- new [closenoad_code] = true, -- new [punctuationnoad_code] = true, -- new [innernoad_code] = false, + [fencednoad_code] = false, [undernoad_code] = false, [overnoad_code] = false, [vcenternoad_code] = false, - [fractionnoad_code] = false, + [fractionnoad_code] = true, [radicalnoad_code] = false, + [accentnoad_code] = true, } local reported = setmetatableindex("table") @@ -1928,111 +1941,64 @@ do end do - -- inner under over vcenter + -- todo: make a primes class local fixscripts = { } --- local movesub = { --- -- primes --- [0x2032] = 0xFE932, --- [0x2033] = 0xFE933, --- [0x2034] = 0xFE934, --- [0x2057] = 0xFE957, --- -- reverse primes --- [0x2035] = 0xFE935, --- [0x2036] = 0xFE936, --- [0x2037] = 0xFE937, --- } --- --- mathematics.virtualize(movesub) - local movesub = { + local primes = { -- primes - [0x2032] = 0x2032, - [0x2033] = 0x2033, - [0x2034] = 0x2034, - [0x2057] = 0x2057, + [0x2032] = true, + [0x2033] = true, + [0x2034] = true, + [0x2057] = true, -- reverse primes - [0x2035] = 0x2035, - [0x2036] = 0x2036, - [0x2037] = 0x2037, + [0x2035] = true, + [0x2036] = true, + [0x2037] = true, } - local nosuperscript_code = tex.mathoptioncodes.nosuperscript - - local function fixsupscript(parent,current,current_char,new_char) - if new_char ~= current_char and new_char ~= true then - setchar(current,new_char) - if trace_fixing then - report_fixing("fixing subscript, replacing superscript %U by %U",current_char,new_char) - end - else - if trace_fixing then - report_fixing("fixing subscript, superscript %U",current_char) - end - end - setfield(parent,"options",nosuperscript_code) - end - - local function move_none_none(parent,prev,nuc,oldchar,newchar) - fixsupscript(prev,nuc,oldchar,newchar) - local sub = getsub(parent) - setsup(prev,nuc) - setsub(prev,sub) - local dummy = copy_node(nuc) - setchar(dummy,0) - setnucleus(parent,dummy) - setsub(parent) - end - - local function move_none_psub(parent,prev,nuc,oldchar,newchar) - fixsupscript(prev,nuc,oldchar,newchar) - setsup(prev,nuc) - local dummy = copy_node(nuc) - setchar(dummy,0) - setnucleus(parent,dummy) - end + local fixable = { + [noad_code] = true, + [accent_code] = true, + [radical_code] = true, + [fraction_code] = true, + } fixscripts[mathchar_code] = function(pointer,what,n,parent,nested) -- todo: switch to turn in on and off if parent then - local oldchar = getchar(pointer) - local newchar = movesub[oldchar] - if newchar then + local char = getchar(pointer) + if char and primes[char] then local nuc = getnucleus(parent) if pointer == nuc then - local sub = getsub(pointer) - local sup = getsup(pointer) - if sub then - if sup then - -- print("[char] sub sup") - else - -- print("[char] sub ---") + local prev = getprev(parent) + if prev and fixable[getid(prev)] then + local prevsup = getsup(prev) + local prevsub = getsub(prev) + local primesup = getsup(parent) + local primesub = getsub(parent) + setfield(prev,"scriptorder",prevsub and 2 or 1) -- sub first + if primesup and not prevsup then + setsup(prev,primesup) + primesup = nil end - elseif sup then - -- print("[char] --- sup") - else - local prev = getprev(parent) - if prev and getid(prev) == noad_code then - local psub = getsub(prev) - local psup = getsup(prev) - if psub then - if psup then - -- print("sub sup [char] --- ---") - else - -- print("sub --- [char] --- ---") - move_none_psub(parent,prev,nuc,oldchar,newchar) - end - elseif psup then - -- print("--- sup [char] --- ---") - else - -- print("[char] --- ---") - move_none_none(parent,prev,nuc,oldchar,newchar) - end - else - -- print("no prev [char]") + if primesub and not prevsub then + setsub(prev,primesub) + primesub = nil + end + setfield(prev,"prime",nuc) + setnucleus(parent) + if not primesup then + setsup(parent) + end + if not primesub then + setsub(parent) + end + if not (primesup or primesub) then + setlink(prev,getnext(parent)) + flushnode(parent) + return true, prev, prev end end - else - -- print("[char]") end end end @@ -2119,10 +2085,12 @@ do [ordinarynoad_code] = "trace:db", [binarynoad_code] = "trace:dg", [opennoad_code] = "trace:dm", + [middlenoad_code] = "trace:dm", [closenoad_code] = "trace:dm", [punctuationnoad_code] = "trace:dc", -- [operatornoad_code] = "", -- [innernoad_code = "", + -- [fencednoad_code = "", -- [undernoad_code] = "", -- [overnoad_code] = "", -- [vcenternoad_code] = "", @@ -2176,6 +2144,7 @@ do relation = relationnoad_code, punctuation = punctuationnoad_code, inner = innernoad_code, + fenced = fencednoad_code, -- fraction = fractionnoad_code, -- radical = radicalnoad_code, } diff --git a/tex/context/base/mkxl/math-pln.mkxl b/tex/context/base/mkxl/math-pln.mkxl index 81008f37b..354f33a5f 100644 --- a/tex/context/base/mkxl/math-pln.mkxl +++ b/tex/context/base/mkxl/math-pln.mkxl @@ -26,7 +26,7 @@ \permanent\protected\def\hrulefill{\leaders\hrule\hfill} %protected\def\dotfill {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill} -% will move +% will move .. not used anyway \permanent\def\oalign#1% {\leavevmode % plain tex uses this @@ -41,9 +41,9 @@ % needs checking -\permanent\protected\def\choose{\atopwithdelims()} -\permanent\protected\def\brack {\atopwithdelims[]} -\permanent\protected\def\brace {\atopwithdelims\{\}} +\permanent\protected\def\choose{\atopwithdelims()} % used in korean test file, has to go +%permanent\protected\def\brack {\atopwithdelims[]} +%permanent\protected\def\brace {\atopwithdelims\{\}} % needs checking diff --git a/tex/context/base/mkxl/math-rad.mklx b/tex/context/base/mkxl/math-rad.mklx index 041681f0b..de8c2e9a6 100644 --- a/tex/context/base/mkxl/math-rad.mklx +++ b/tex/context/base/mkxl/math-rad.mklx @@ -30,19 +30,19 @@ \protected\def\sqrt{\doifelsenextoptionalcs\rootwithdegree\rootwithoutdegree} % will be redefined -\permanent\protected\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird - {\normalexpanded{\rootradical - {\normalunexpanded{#1}}% - {\noexpand\triggermathstyle{\number\normalmathstyle}% - \normalunexpanded{#2}}}} +% \permanent\protected\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird +% {\normalexpanded{\math_radical_common +% {\normalunexpanded{#1}}% +% {\noexpand\triggermathstyle{\number\normalmathstyle}% +% \normalunexpanded{#2}}}} % experimental new keyword: (maybe keywords should come after the symbol) % % \permanent\protected\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird % {\Uroot style \normalmathstyle "0 "221A {#1}{#2}} -\permanent\protected\def\rootwithdegree[#1]{\rootradical{#1}} -\permanent\protected\def\rootwithoutdegree {\rootradical {}} +\permanent\protected\def\rootwithdegree[#1]{\math_radical_common{#1}} +\permanent\protected\def\rootwithoutdegree {\math_radical_common {}} %D Even older stuff: @@ -89,7 +89,8 @@ \setupmathradical [\c!alternative=\v!normal, - \c!mpoffset=.25\exheight] + \c!mpoffset=.25\exheight, + \c!source=\zerocount] \appendtoks \frozen\protected\instance\edefcsname\currentmathradical\endcsname{\math_radical_handle{\currentmathradical}} @@ -98,10 +99,17 @@ \mutable\let\currentmathradical \empty \mutable\let\currentmathradicaldegree\empty -\tolerant\protected\def\math_radical_handle#tag#*[#degree]#:#body% +\setmathignore\Umathradicaldegreebefore\plusone + +\tolerant\protected\def\math_radical_handle#tag#*[#settings]#*[#degree]#:#body% {\begingroup \edef\currentmathradical{#tag}% - \edef\currentmathradicaldegree{#degree}% + \ifparameter#degree\or + \edef\currentmathradicaldegree{#degree}% + \setupcurrentmathradical[#settings]% + \else + \edef\currentmathradicaldegree{#settings}% + \fi \ifempty\currentmathradicaldegree \let\currentmathradicaldegree\m_math_no_degree \fi @@ -110,24 +118,38 @@ \def\m_math_no_degree{{}} +% for every font +% +% \appendtoks +% \Umathradicaldegreebefore\allmathstyles\zeropoint +% \to \everymathematics + % style width [options: left middle right] \def\math_radical_alternative{\csname\??mathradicalalternative\mathradicalparameter\c!alternative\endcsname} +\integerdef\c_radical_unicode "221A + +\protected\def\math_radical_common + {\Uroot + \s!source\numexpr\namedboxanchor{\mathradicalparameter\c!source}\relax + \s!style \normalmathstyle + \zerocount \c_radical_unicode} + \defcsname\??mathradicalalternative\v!default\endcsname % #body% - {\rootradical{\currentmathradicaldegree}} % {#body}} + {\math_radical_common{\currentmathradicaldegree}} % {#body}} \defcsname\??mathradicalalternative\v!normal\endcsname#body% {\edef\p_color{\mathradicalparameter\c!color}% \ifempty\p_color - \styledrootradical{\currentmathradicaldegree}{#body}% {} really needed as \rootradical expands first + \math_radical_common{\currentmathradicaldegree}{#body}% {} really needed as \rootradical expands first \orelse\ifempty\currentmathradicaldegree \pushcolor[\p_color]% - \styledrootradical{\currentmathradicaldegree}% + \math_radical_common{\currentmathradicaldegree}% {\popcolor#body}% \else \pushcolor[\p_color]% - \styledrootradical{\popcolor\currentmathradicaldegree\pushcolor[\p_color]}% + \math_radical_common{\popcolor\currentmathradicaldegree\pushcolor[\p_color]}% {\popcolor#body}% \fi} @@ -206,7 +228,8 @@ \c!mpoffset=.25\exheight] \appendtoks - \frozen\instance\setuevalue{\currentmathornament}{\math_ornament_handle{\currentmathornament}}% + \frozen\protected\instance\edefcsname\currentmathornament\endcsname + {\math_ornament_handle{\currentmathornament}}% \to \everydefinemathornament \protected\def\math_ornament_handle#tag#body% diff --git a/tex/context/base/mkxl/math-scr.mkxl b/tex/context/base/mkxl/math-scr.mkxl index 555f549f1..207f7fbf6 100644 --- a/tex/context/base/mkxl/math-scr.mkxl +++ b/tex/context/base/mkxl/math-scr.mkxl @@ -28,7 +28,7 @@ {\math_scripts_raised_symbol_indeed3\txx{#1}}} \def\math_scripts_raised_symbol_indeed#1#2#3% - {\mathord{{#2\raise.#1ex\hbox{#2\symbol[#3]}}}} + {\mathord{#2\raise.#1\exheight\hbox{#2\symbol[#3]}}} % redundant {} removed \def\math_scripts_raised_number#1% {\mathchoice diff --git a/tex/context/base/mkxl/math-spa.lmt b/tex/context/base/mkxl/math-spa.lmt new file mode 100644 index 000000000..35684847f --- /dev/null +++ b/tex/context/base/mkxl/math-spa.lmt @@ -0,0 +1,83 @@ +if not modules then modules = { } end modules ['math-spa'] = { + version = 1.001, + comment = "companion to math-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- for the moment (when testing) we use a penalty 1 + +local boundary_code = nodes.nodecodes.boundary +local glue_code = nodes.nodecodes.glue + +local nuts = nodes.nuts +local tonut = nodes.tonut +local tonode = nodes.tonode + +local getid = nuts.getid +local getnext = nuts.getnext +local getwidth = nuts.getwidth +local setglue = nuts.setglue +local getdimensions = nuts.dimensions +local nextglue = nuts.traversers.glue + +local texsetdimen = tex.setdimen + +local v_none = interfaces.variables.none +local v_auto = interfaces.variables.auto + +local method = v_none +local distance = 0 + +function noads.handlers.align(h) + if method ~= v_none then + if method == v_auto then + local s = h + while s do + local id = getid(s) + local n = getnext(s) + if id == boundary_code then -- check some type + if n and getid(n) == glue_code then + s = n + n = getnext(s) + end + local w = getdimensions(h,n) + distance + texsetdimen("global","d_strc_math_indent",w) + break + end + s = n + end + else + texsetdimen("global","d_strc_math_indent",distance) + end + for n in nextglue, h do + setglue(n,getwidth(n),0,0) + end + else + -- texsetdimen("global","d_strc_math_indent",0) + end +end + +interfaces.implement { + name = "setmathhang", + arguments = { + { + { "method", "string" }, + { "distance", "dimension" }, + } + }, + actions = function(t) + method = t.method or v_none + distance = t.distance or 0 + end +} + +interfaces.implement { + name = "resetmathhang", + actions = function(t) + method = v_none + distance = 0 + end +} + diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx index 5ae8857dd..970e1352d 100644 --- a/tex/context/base/mkxl/math-stc.mklx +++ b/tex/context/base/mkxl/math-stc.mklx @@ -153,7 +153,7 @@ \let\math_stackers_skip \hskip} \def\math_stackers_skip_indeed#amount% - {\filledhboxk{\unsetteststrut\strut\hskip#amount}} % \dontshowstruts + {\filledhboxk{\strut\hskip#amount}} \let\math_stackers_start_tagged_mid\relax \let\math_stackers_start_tagged_top\relax @@ -179,7 +179,7 @@ \c!right=, \c!mathclass=\s!rel, \c!alternative=\v!normal, - \c!voffset=.25\mathexheight, + \c!voffset=.25\mathexheight, % maybe less \c!hoffset=\zeropoint, \c!topoffset=\zeropoint, % for manual italic correction \c!distance=\mathstackersparameter\c!voffset, % distance between symbol and base (can be different from voffset) @@ -492,9 +492,9 @@ \permanent\tolerant\protected\def\definemathextensible[#1]#*[#2]#*[#3]% category name unicode {\ifarguments\or\or - \frozen\setuevalue{#1}{\math_stackers_auto_normal\noexpand\currentmathstackers{\number#2}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_auto_normal\noexpand\currentmathstackers{\number#2}}% \or - \frozen\setuevalue{#2}{\math_stackers_auto_normal{#1}{\number#3}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_normal{#1}{\number#3}}% \fi} \tolerant\protected\def\math_stackers_auto_normal#1#2#*[#3]#:#=#*#=% @@ -522,20 +522,6 @@ {\math_stackers_triplet\zerocount{#category}{#codepoint}{#toptext}{#bottomtext}% \endgroup} -%D The next one deals with under and over extensibles (arrows mostly): - -\installcorenamespace {mathclasses} - -\letcsname\??mathclasses \endcsname\mathord -\letcsname\??mathclasses rel\endcsname\mathrel -\letcsname\??mathclasses ord\endcsname\mathord - -\def\math_class_by_parameter#1% - {\normalexpanded{\noexpand\math_class_by_parameter_indeed{#1\c!mathclass}}} - -\def\math_class_by_parameter_indeed#1% - {\csname\??mathclasses\ifcsname\??mathclasses#1\endcsname#1\fi\endcsname} - % 1 0 name n 0 | 0 1 name n 0 | 1 1 name n n \let\math_stackers_stop_group\endgroup @@ -680,33 +666,33 @@ \permanent\tolerant\protected\def\definemathoverextensible[#1]#*[#2]#*[#3]% {\ifparameter#3\or - \frozen\setuevalue{#2}{\math_stackers_make_double\plusone \zerocount{#1}{\number#3}{0}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\plusone \zerocount{#1}{\number#3}{0}}% \else - \frozen\setuevalue{#1}{\math_stackers_make_double\plusone \zerocount\noexpand\currentmathstackers{\number#2}{0}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\plusone \zerocount\noexpand\currentmathstackers{\number#2}{0}}% \fi} \permanent\tolerant\protected\def\definemathunderextensible[#1]#*[#2]#*[#3]% {\ifparameter#3\or - \frozen\setuevalue{#2}{\math_stackers_make_double\zerocount\plusone{#1}{\number#3}{0}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\zerocount\plusone{#1}{\number#3}{0}}% \else - \frozen\setuevalue{#1}{\math_stackers_make_double\zerocount\plusone\noexpand\currentmathstackers{\number#2}{0}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\zerocount\plusone\noexpand\currentmathstackers{\number#2}{0}}% \fi} \permanent\tolerant\protected\def\definemathdoubleextensible[#1]#*[#2]#*[#3]#*[#4]% {\ifparameter#4\or - \frozen\setuevalue{#2}{\math_stackers_make_double\plusone \plusone{#1}{\number#3}{\number#4}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double\plusone \plusone{#1}{\number#3}{\number#4}}% \else - \frozen\setuevalue{#1}{\math_stackers_make_double\plusone \plusone\noexpand\currentmathstackers{\number#2}{\number#3}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double\plusone \plusone\noexpand\currentmathstackers{\number#2}{\number#3}}% \fi} \permanent\tolerant\protected\def\definemathover[#category]#spacer[#command]#spacer[#topcode]% - {\frozen\setuvalue{#command}{\math_stackers_handle_direct\plusone\zerocount{#category}{#topcode}{0}}} + {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\plusone\zerocount{#category}{#topcode}{0}}} \permanent\tolerant\protected\def\definemathunder[#category]#spacer[#command]#spacer[#bottomcode]% - {\frozen\setuvalue{#command}{\math_stackers_handle_direct\zerocount\plusone{#category}{#bottomcode}{0}}} + {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\zerocount\plusone{#category}{#bottomcode}{0}}} \permanent\tolerant\protected\def\definemathdouble[#category]#spacer[#command]#spacer[#topcode]#spacer[#bottomcode]% - {\frozen\setuvalue{#command}{\math_stackers_handle_direct\plusone\plusone{#category}{#topcode}{#bottomcode}}} + {\frozen\protected\defcsname#command\endcsname{\math_stackers_handle_direct\plusone\plusone{#category}{#topcode}{#bottomcode}}} \permanent\tolerant\protected\def\mathover[#category]#spacer[#settings]#:#topcode#text% {\begingroup @@ -883,16 +869,16 @@ \permanent\tolerant\protected\def\definemathovertextextensible[#1]#*[#2]#*[#3]% {\ifparameter#3\or - \frozen\setuevalue{#2}{\math_stackers_make_double_text\plusone{#1}{\number#3}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double_text\plusone{#1}{\number#3}}% \else - \frozen\setuevalue{#1}{\math_stackers_make_double_text\plusone\noexpand\currentmathstackers{\number#2}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double_text\plusone\noexpand\currentmathstackers{\number#2}}% \fi} \permanent\tolerant\protected\def\definemathundertextextensible[#1]#*[#2]#*[#3]% {\ifparameter#3\or - \frozen\setuevalue{#2}{\math_stackers_make_double_text\zerocount{#1}{\number#3}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_make_double_text\zerocount{#1}{\number#3}}% \else - \frozen\setuevalue{#1}{\math_stackers_make_double_text\zerocount\noexpand\currentmathstackers{\number#2}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_make_double_text\zerocount\noexpand\currentmathstackers{\number#2}}% \fi} \permanent\tolerant\protected\def\mathovertext[#category]% @@ -917,11 +903,11 @@ \permanent\tolerant\protected\def\definemathtriplet[#1]#*[#2]#*[#3]% category name default {\ifarguments\or - \frozen\setuevalue{#1}{\math_stackers_auto_triplet_nop[\noexpand\currentmathstackers]}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_auto_triplet_nop[\noexpand\currentmathstackers]}% \or - \frozen\setuevalue{#2}{\math_stackers_auto_triplet_nop[#1]}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_triplet_nop[#1]}% \or - \frozen\setuevalue{#2}{\math_stackers_auto_triplet_yes[#1][#3]}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_auto_triplet_yes[#1][#3]}% \fi} \tolerant\protected\def\math_stackers_auto_triplet_yes[#1][#2]#*[#3]#:#=#*#=% [#2]% #2 gobble spaces @@ -1171,39 +1157,78 @@ % alternatively we can move the original to FE* -\definemathoverextensible [\v!vfenced] [overbar] ["FE33E] % ["203E] -\definemathunderextensible [\v!vfenced] [underbar] ["FE33F] % ["203E] -\definemathdoubleextensible [\v!vfenced] [doublebar] ["FE33E] ["FE33F] +% \definemathoverextensible [\v!vfenced] [overbar] ["FE33E] % ["203E] +% \definemathunderextensible [\v!vfenced] [underbar] ["FE33F] % ["203E] +% \definemathdoubleextensible [\v!vfenced] [doublebar] ["FE33E] ["FE33F] +% +% \definemathoverextensible [\v!vfenced] [overbrace] ["FE3DE] % ["023DE] +% \definemathunderextensible [\v!vfenced] [underbrace] ["FE3DF] % ["023DF] +% \definemathdoubleextensible [\v!vfenced] [doublebrace] ["FE3DE] ["FE3DF] +% +% \definemathoverextensible [\v!vfenced] [overparent] ["FE3DC] % ["023DC] +% \definemathunderextensible [\v!vfenced] [underparent] ["FE3DD] % ["023DD] +% \definemathdoubleextensible [\v!vfenced] [doubleparent] ["FE3DC] ["FE3DD] +% +% \definemathoverextensible [\v!vfenced] [overbracket] ["FE3B4] % ["023B4] +% \definemathunderextensible [\v!vfenced] [underbracket] ["FE3B5] % ["023B5] +% \definemathdoubleextensible [\v!vfenced] [doublebracket] ["FE3B4] ["FE3B5] + +% \definemathoverextensible [\v!vfenced] [overbar] ["203E] +% \definemathunderextensible [\v!vfenced] [underbar] ["203E] +% \definemathdoubleextensible [\v!vfenced] [doublebar] ["203E] ["203E] -\definemathoverextensible [\v!vfenced] [overbrace] ["FE3DE] % ["023DE] -\definemathunderextensible [\v!vfenced] [underbrace] ["FE3DF] % ["023DF] -\definemathdoubleextensible [\v!vfenced] [doublebrace] ["FE3DE] ["FE3DF] +\definemathoverextensible [\v!vfenced] [overbar] ["203E] +\definemathunderextensible [\v!vfenced] [underbar] ["203E] % ["0332] +\definemathdoubleextensible [\v!vfenced] [doublebar] ["203E] ["203E] % ["0332] -\definemathoverextensible [\v!vfenced] [overparent] ["FE3DC] % ["023DC] -\definemathunderextensible [\v!vfenced] [underparent] ["FE3DD] % ["023DD] -\definemathdoubleextensible [\v!vfenced] [doubleparent] ["FE3DC] ["FE3DD] +\definemathoverextensible [\v!vfenced] [overbrace] ["23DE] +\definemathunderextensible [\v!vfenced] [underbrace] ["23DF] +\definemathdoubleextensible [\v!vfenced] [doublebrace] ["23DE] ["23DF] -\definemathoverextensible [\v!vfenced] [overbracket] ["FE3B4] % ["023B4] -\definemathunderextensible [\v!vfenced] [underbracket] ["FE3B5] % ["023B5] -\definemathdoubleextensible [\v!vfenced] [doublebracket] ["FE3B4] ["FE3B5] +\definemathoverextensible [\v!vfenced] [overparent] ["23DC] +\definemathunderextensible [\v!vfenced] [underparent] ["23DD] +\definemathdoubleextensible [\v!vfenced] [doubleparent] ["23DC] ["23DD] + +\definemathoverextensible [\v!vfenced] [overbracket] ["23B4] +\definemathunderextensible [\v!vfenced] [underbracket] ["23B5] +\definemathdoubleextensible [\v!vfenced] [doublebracket] ["23B4] ["23B5] + +% If we do this, we need to adapt the dimensions, so wel leave them accents: +% +% \definemathoverextensible[\v!vfenced][widebar] ["0305] +% \definemathoverextensible[\v!vfenced][widetilde]["0303] % \protected\def\mathopwithlimits#1#2{\mathop{#1{#2}}\limits} %D For mathml: -\definemathdoubleextensible [\v!both] [overbarunderbar] ["FE33E] ["FE33F] -\definemathdoubleextensible [\v!both] [overbraceunderbrace] ["FE3DE] ["FE3DF] -\definemathdoubleextensible [\v!both] [overparentunderparent] ["FE3DC] ["FE3DD] -\definemathdoubleextensible [\v!both] [overbracketunderbracket] ["FE3B4] ["FE3B5] - -\definemathovertextextensible [\v!bothtext] [overbartext] ["FE33E] -\definemathundertextextensible [\v!bothtext] [underbartext] ["FE33F] -\definemathovertextextensible [\v!bothtext] [overbracetext] ["FE3DE] -\definemathundertextextensible [\v!bothtext] [underbracetext] ["FE3DF] -\definemathovertextextensible [\v!bothtext] [overparenttext] ["FE3DC] -\definemathundertextextensible [\v!bothtext] [underparenttext] ["FE3DD] -\definemathovertextextensible [\v!bothtext] [overbrackettext] ["FE3B4] -\definemathundertextextensible [\v!bothtext] [underbrackettext] ["FE3B5] +% \definemathdoubleextensible [\v!both] [overbarunderbar] ["FE33E] ["FE33F] +% \definemathdoubleextensible [\v!both] [overbraceunderbrace] ["FE3DE] ["FE3DF] +% \definemathdoubleextensible [\v!both] [overparentunderparent] ["FE3DC] ["FE3DD] +% \definemathdoubleextensible [\v!both] [overbracketunderbracket] ["FE3B4] ["FE3B5] +% +% \definemathovertextextensible [\v!bothtext] [overbartext] ["FE33E] +% \definemathundertextextensible [\v!bothtext] [underbartext] ["FE33F] +% \definemathovertextextensible [\v!bothtext] [overbracetext] ["FE3DE] +% \definemathundertextextensible [\v!bothtext] [underbracetext] ["FE3DF] +% \definemathovertextextensible [\v!bothtext] [overparenttext] ["FE3DC] +% \definemathundertextextensible [\v!bothtext] [underparenttext] ["FE3DD] +% \definemathovertextextensible [\v!bothtext] [overbrackettext] ["FE3B4] +% \definemathundertextextensible [\v!bothtext] [underbrackettext] ["FE3B5] + +\definemathdoubleextensible [\v!both] [overbarunderbar] ["203E] ["203E] +\definemathdoubleextensible [\v!both] [overbraceunderbrace] ["23DE] ["23DF] +\definemathdoubleextensible [\v!both] [overparentunderparent] ["23DC] ["23DD] +\definemathdoubleextensible [\v!both] [overbracketunderbracket] ["23B4] ["23B5] + +\definemathovertextextensible [\v!bothtext] [overbartext] ["203E] +\definemathundertextextensible [\v!bothtext] [underbartext] ["203E] +\definemathovertextextensible [\v!bothtext] [overbracetext] ["23DE] +\definemathundertextextensible [\v!bothtext] [underbracetext] ["23DF] +\definemathovertextextensible [\v!bothtext] [overparenttext] ["23DC] +\definemathundertextextensible [\v!bothtext] [underparenttext] ["23DD] +\definemathovertextextensible [\v!bothtext] [overbrackettext] ["23B4] +\definemathundertextextensible [\v!bothtext] [underbrackettext] ["23B5] %D Some bonus ones (for the moment here): @@ -1326,9 +1351,9 @@ \permanent\tolerant\protected\def\definemathunstacked[#1]#*[#2]#*[#3]% category name unicode {\ifarguments\or\or - \frozen\setuevalue{#1}{\math_stackers_unstacked_normal\noexpand\currentmathstackers{\number#2}}% + \frozen\protected\edefcsname#1\endcsname{\math_stackers_unstacked_normal\noexpand\currentmathstackers{\number#2}}% \else - \frozen\setuevalue{#2}{\math_stackers_unstacked_normal{#1}{\number#3}}% + \frozen\protected\edefcsname#2\endcsname{\math_stackers_unstacked_normal{#1}{\number#3}}% \fi} \protected\def\math_stackers_unstacked_normal#category#codepoint% diff --git a/tex/context/base/mkxl/math-tag.lmt b/tex/context/base/mkxl/math-tag.lmt index 9ecc7047a..429191546 100644 --- a/tex/context/base/mkxl/math-tag.lmt +++ b/tex/context/base/mkxl/math-tag.lmt @@ -98,7 +98,6 @@ local chardata = characters.data local getmathcodes = tex.getmathcodes local mathcodes = mathematics.codes local ordinary_mathcode = mathcodes.ordinary -local variable_mathcode = mathcodes.variable local fromunicode16 = fonts.mappings.fromunicode16 local fontcharacters = fonts.hashes.characters @@ -223,7 +222,8 @@ process = function(start) -- we cannot use the processor as we have no finalizer local char = getchar(start) local code = getmathcodes(char) local tag - if code == ordinary_mathcode or code == variable_mathcode then + -- todo: we have way more now + if code == ordinary_mathcode then local ch = chardata[char] local mc = ch and ch.mathclass if mc == "number" then diff --git a/tex/context/base/mkxl/math-vfu.lmt b/tex/context/base/mkxl/math-vfu.lmt index abe336f53..0540331ab 100644 --- a/tex/context/base/mkxl/math-vfu.lmt +++ b/tex/context/base/mkxl/math-vfu.lmt @@ -85,7 +85,7 @@ local shared = { } local function brace(main,characters,id,size,unicode,first,rule,left,right,rule,last) if not characters[unicode] then characters[unicode] = { - hvariants = { + hparts = { { extender = 0, glyph = first }, { extender = 1, glyph = rule }, { extender = 0, glyph = left }, @@ -123,7 +123,7 @@ local function extension(main,characters,id,size,unicode,first,middle,last) if lw == 0 then lw = 1 end - chr.hvariants = { + chr.hparts = { { extender = 0, glyph = first, ["end"] = fw/2, start = 0, advance = fw }, { extender = 1, glyph = middle, ["end"] = mw/2, start = mw/2, advance = mw }, { extender = 0, glyph = last, ["end"] = 0, start = lw/2, advance = lw }, @@ -133,7 +133,7 @@ end local function parent(main,characters,id,size,unicode,first,rule,last) if not characters[unicode] then characters[unicode] = { - hvariants = { + hparts = { { extender = 0, glyph = first }, { extender = 1, glyph = rule }, { extender = 0, glyph = last }, @@ -661,10 +661,10 @@ local function copy_glyph(main,target,original,unicode,slot) break -- safeguard (when testing stuff) end end - local hv = olddata.hvariants + local hv = olddata.hparts if hv then hv = fastcopy(hv) - newdata.hvariants = hv + newdata.hparts = hv for i=1,#hv do local hvi = hv[i] local oldglyph = hvi.glyph @@ -679,10 +679,10 @@ local function copy_glyph(main,target,original,unicode,slot) hvi.glyph = addprivate(main,formatters["M-H-%H"](oldglyph),newdata) end end - local vv = olddata.vvariants + local vv = olddata.vparts if vv then vv = fastcopy(vv) - newdata.vvariants = vv + newdata.vparts = vv for i=1,#vv do local vvi = vv[i] local oldglyph = vvi.glyph @@ -1017,30 +1017,30 @@ function vfmath.define(specification,set,goodies) if n then t.next = offset + n elseif variants_done then - local vv = fci.vvariants + local vv = fci.vparts if vv then - t.vvariants = vv + t.vparts = vv end - local hv = fci.hvariants + local hv = fci.hparts if hv then - t.hvariants = hv + t.hparts = hv end else - local vv = fci.vvariants + local vv = fci.vparts if vv then for i=1,#vv do local vvi = vv[i] vvi.glyph = vvi.glyph + offset end - t.vvariants = vv + t.vparts = vv end - local hv = fci.hvariants + local hv = fci.hparts if hv then for i=1,#hv do local hvi = hv[i] hvi.glyph = hvi.glyph + offset end - t.hvariants = hv + t.hparts = hv end end characters[offset + index] = t @@ -1122,13 +1122,18 @@ function vfmath.define(specification,set,goodies) main.properties.math_is_scaled = true -- signal fonts.constructors.assignmathparameters(main,main) -- - main.MathConstants = main.mathparameters -- we directly pass it to TeX (bypasses the scaler) so this is needed + main.mathconstants = main.mathparameters -- we directly pass it to TeX (bypasses the scaler) so this is needed -- if trace_virtual or trace_timings then report_virtual("loading and virtualizing font %a at size %p took %0.3f seconds",name,size,os.clock()-start) end -- - main.oldmath = true + -- main.oldmath = true + -- + -- We bypass the scaler so ... + -- + main.MathConstants = main.mathconstants + main.nomath = false return main end diff --git a/tex/context/base/mkxl/mlib-int.lmt b/tex/context/base/mkxl/mlib-int.lmt index 208370a3c..e294a4fe5 100644 --- a/tex/context/base/mkxl/mlib-int.lmt +++ b/tex/context/base/mkxl/mlib-int.lmt @@ -153,18 +153,18 @@ registerdirect("OverlayRegion", function() return getmacro("m_overlay_reg -- registerscript("OnRightPage", function() return mpboolean(on_right_page ()) end) -- registerscript("OnOddPage", function() return mpboolean(is_odd_page ()) end) -- registerscript("InPageBody", function() return mpboolean(in_body_page ()) end) --- registerscript("LayoutHasChanged", function() return mpboolean(layout_has_changed()) end) registerdirect("PageFraction", function() return page_fraction () end) registerdirect("OnRightPage", function() return on_right_page () end) registerdirect("OnOddPage", function() return is_odd_page () end) registerdirect("InPageBody", function() return in_body_page () end) -registerdirect("LayoutHasChanged", function() return layout_has_changed() end) +registerdirect("LastChangedLayoutPage",function() return getcount("c_page_layouts_changed") end) +registerdirect("SwapMarginDimensions", function() token.expandmacro("swapmargindimensions") end) registerdirect("PageFraction", page_fraction ) registerdirect("OnRightPage", on_right_page ) registerdirect("OnOddPage", is_odd_page ) registerdirect("InPageBody", in_body_page ) -registerdirect("LayoutHasChanged", layout_has_changed) +-- registerdirect("LayoutHasChanged", layout_has_changed) registerdirect("defaultcolormodel", defaultcolormodel) diff --git a/tex/context/base/mkxl/mult-aux.mkxl b/tex/context/base/mkxl/mult-aux.mkxl index 864516ad5..e5850668b 100644 --- a/tex/context/base/mkxl/mult-aux.mkxl +++ b/tex/context/base/mkxl/mult-aux.mkxl @@ -1073,6 +1073,22 @@ \expandafter\noexpand\csname current#2parent\endcsname \expandafter\noexpand\csname inject#2parent\endcsname}} +%D Cheaper (assumes grouping at some point): + +\permanent\protected\def\mult_interfaces_install_local_current_injector#1#2#3#4% + {\protected\def#4##1% + {\advance#2\plusone + \edef#3{##1:\the#2}% \currentXXX + \edefcsname#1#3:\s!parent\endcsname{#1##1}}} + +\permanent\protected\def\installlocalcurrenthandler#1#2% \??XXX {XXX} + {\expandafter\newcount\csname#1:\s!counter\endcsname + \normalexpanded{\mult_interfaces_install_local_current_injector + {\noexpand#1}% + \expandafter\noexpand\csname #1:\s!counter\endcsname + \expandafter\noexpand\csname current#2\endcsname + \expandafter\noexpand\csname setlocal#2current\endcsname}} + % The \LUA\ based variant is twice as fast as the above but as said, we don't use % this one that often. It's more about less tracing than speed here. diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 1eae000e4..9ac124808 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -114,12 +114,14 @@ \definesystemconstant {all} \definesystemconstant {ampersand} \definesystemconstant {anchor} +\definesystemconstant {anchors} \definesystemconstant {ascii} \definesystemconstant {attribute} \definesystemconstant {attr} \definesystemconstant {author} \definesystemconstant {auto} \definesystemconstant {axis} +\definesystemconstant {noaxis} \definesystemconstant {exact} \definesystemconstant {a} \definesystemconstant {bf} @@ -151,9 +153,12 @@ \definesystemconstant {cg} \definesystemconstant {chain} \definesystemconstant {check} +\definesystemconstant {char} \definesystemconstant {child} \definesystemconstant {cite} \definesystemconstant {class} +\definesystemconstant {leftclass} +\definesystemconstant {rightclass} \definesystemconstant {clone} \definesystemconstant {cmyk} \definesystemconstant {cm} @@ -198,6 +203,7 @@ \definesystemconstant {fallbacks} \definesystemconstant {fallback} \definesystemconstant {false} +\definesystemconstant {fam} \definesystemconstant {fax} \definesystemconstant {features} \definesystemconstant {file} @@ -205,6 +211,7 @@ \definesystemconstant {fill} \definesystemconstant {fil} \definesystemconstant {first} +\definesystemconstant {fixed} \definesystemconstant {float} \definesystemconstant {font} \definesystemconstant {forget} @@ -226,6 +233,7 @@ \definesystemconstant {hastitle} \definesystemconstant {head} \definesystemconstant {height} +\definesystemconstant {hfactor} \definesystemconstant {hw} \definesystemconstant {hyphenmin} \definesystemconstant {indeed} @@ -380,7 +388,8 @@ \definesystemconstant {Support} \definesystemconstant {sygreek} \definesystemconstant {symbol} -\definesystemconstant {system} % not yet interfaces messages +\definesystemconstant {system} +\definesystemconstant {style} \definesystemconstant {text} \definesystemconstant {tex} \definesystemconstant {tf} @@ -397,12 +406,14 @@ \definesystemconstant {ucgreek} \definesystemconstant {uncramped} \definesystemconstant {unexpanded} -\definesystemconstant {Unicode} +\definesystemconstant {unpack} \definesystemconstant {unknown} +\definesystemconstant {Unicode} \definesystemconstant {userdata} \definesystemconstant {userpage} \definesystemconstant {user} \definesystemconstant {vfrac} +\definesystemconstant {vfactor} \definesystemconstant {white} \definesystemconstant {width} \definesystemconstant {xml} diff --git a/tex/context/base/mkxl/node-bck.mkxl b/tex/context/base/mkxl/node-bck.mkxl index 3c2fa015c..357180710 100644 --- a/tex/context/base/mkxl/node-bck.mkxl +++ b/tex/context/base/mkxl/node-bck.mkxl @@ -76,7 +76,7 @@ \permanent\protected\def\backgroundline{\dontleavehmode\node_backgrounds_boxes_add\hbox} \def\node_backgrounds_boxes_add#1[#2]% - {\clf_enablebackgroundboxes + {\localcontrolled{\clf_enablebackgroundboxes}% permits assignment #1\backgroundcolorattr{#2}} \protect \endinput diff --git a/tex/context/base/mkxl/node-ini.lmt b/tex/context/base/mkxl/node-ini.lmt index 2b09485db..75a97408b 100644 --- a/tex/context/base/mkxl/node-ini.lmt +++ b/tex/context/base/mkxl/node-ini.lmt @@ -20,32 +20,16 @@ local sortedhash, sortedkeys, swapped = table.sortedhash, table.sortedkeys, tabl few helper functions. These functions are rather optimized.</p> --ldx]]-- -nodes = nodes or { } -local nodes = nodes -nodes.handlers = nodes.handlers or { } +nodes = nodes or { } +local nodes = nodes +nodes.handlers = nodes.handlers or { } -local mark = utilities.storage.mark -local allocate = utilities.storage.allocate -local formatcolumns = utilities.formatters.formatcolumns +local mark = utilities.storage.mark +local allocate = utilities.storage.allocate +local formatcolumns = utilities.formatters.formatcolumns -local getsubtypes = node.subtypes -local getvalues = node.values - -tex.magicconstants = { -- we use tex.constants for something else - running = -1073741824, -- null_flag - maxdimen = 1073741823, -- max_dimen - -- trueinch = 4736286, -- obsolete -} - -do - local c = status.getconstants() - local t = { } - for k, v in next, c do - t[gsub(k,"_","")] = v - end - - tex.magicconstants = table.setmetatableindex(t,c) -end +local getsubtypes = node.subtypes +local getvalues = node.values local listcodes = mark(getsubtypes("list")) local rulecodes = mark(getsubtypes("rule")) @@ -151,6 +135,7 @@ noadcodes.rel = noadcodes.rel or noadcodes.relation noadcodes.punct = noadcodes.punct or noadcodes.punctuation noadcodes.rad = noadcodes.rad or noadcodes.radical noadcodes.frac = noadcodes.frac or noadcodes.fraction +noadcodes.acc = noadcodes.acc or noadcodes.accent -- so for now: @@ -161,6 +146,7 @@ noadcodes.relation = noadcodes.relation or noadcodes.rel noadcodes.punctuation = noadcodes.punctuation or noadcodes.punct noadcodes.radical = noadcodes.radical or noadcodes.rad noadcodes.fraction = noadcodes.fraction or noadcodes.frac +noadcodes.accent = noadcodes.accent or noadcodes.acc local subtypes = allocate { glue = gluecodes, diff --git a/tex/context/base/mkxl/node-res.lmt b/tex/context/base/mkxl/node-res.lmt index 93dc65b7b..da4283e7f 100644 --- a/tex/context/base/mkxl/node-res.lmt +++ b/tex/context/base/mkxl/node-res.lmt @@ -181,12 +181,13 @@ local lefttoright_code = nodes.dirvalues.lefttoright local rule = register_nut(new_nut(rule_code)) -- setdirection(rule, lefttoright_code) local emptyrule = register_nut(new_nut(rule_code,rulecodes.empty)) -- setdirection(rule, lefttoright_code) +local strutrule = register_nut(new_nut(rule_code,rulecodes.strut)) -- setdirection(rule, lefttoright_code) local userrule = register_nut(new_nut(rule_code,rulecodes.user)) -- setdirection(rule, lefttoright_code) local outlinerule = register_nut(new_nut(rule_code,rulecodes.outline)) -- setdirection(rule, lefttoright_code) local imagerule = register_nut(new_nut(rule_code,rulecodes.image)) -- setdirection(rule, lefttoright_code) local boxrule = register_nut(new_nut(rule_code,rulecodes.box)) -- setdirection(rule, lefttoright_code) -local hlist = register_nut(new_nut(nodecodes.hlist)) setdirection(hlist,lefttoright_code) -local vlist = register_nut(new_nut(nodecodes.vlist)) setdirection(vlist,lefttoright_code) +local hlist = register_nut(new_nut(nodecodes.hlist)) setdirection(hlist,lefttoright_code) +local vlist = register_nut(new_nut(nodecodes.vlist)) setdirection(vlist,lefttoright_code) function nutpool.glyph(fnt,chr) local n = copy_nut(glyph) @@ -357,6 +358,14 @@ function nutpool.emptyrule(width,height,depth) -- w/h/d == nil will let them ada return n end +function nutpool.strutrule(width,height,depth) -- w/h/d == nil will let them adapt + local n = copy_nut(strutrule) + if width or height or depth then + setwhd(n,width,height,depth) + end + return n +end + function nutpool.userrule(width,height,depth) -- w/h/d == nil will let them adapt local n = copy_nut(userrule) if width or height or depth then diff --git a/tex/context/base/mkxl/norm-ctx.mkxl b/tex/context/base/mkxl/norm-ctx.mkxl index fb67c5f24..0ec925896 100644 --- a/tex/context/base/mkxl/norm-ctx.mkxl +++ b/tex/context/base/mkxl/norm-ctx.mkxl @@ -15,118 +15,8 @@ %D A few more might end up here (like the weird ones in syst-ini). -\let\normalreqno\normaleqno - -% more friendly in setups: - -\aliased\let\ordordspacing \Umathordordspacing -\aliased\let\ordopspacing \Umathordopspacing -\aliased\let\ordbinspacing \Umathordbinspacing -\aliased\let\ordrelspacing \Umathordrelspacing -\aliased\let\ordopenspacing \Umathordopenspacing -\aliased\let\ordclosespacing \Umathordclosespacing -\aliased\let\ordpunctspacing \Umathordpunctspacing -\aliased\let\ordinnerspacing \Umathordinnerspacing -\aliased\let\ordfracspacing \Umathordfracspacing -\aliased\let\ordradspacing \Umathordradspacing - -\aliased\let\opordspacing \Umathopordspacing -\aliased\let\opopspacing \Umathopopspacing -\aliased\let\opbinspacing \Umathopbinspacing -\aliased\let\oprelspacing \Umathoprelspacing -\aliased\let\opopenspacing \Umathopopenspacing -\aliased\let\opclosespacing \Umathopclosespacing -\aliased\let\oppunctspacing \Umathoppunctspacing -\aliased\let\opinnerspacing \Umathopinnerspacing -\aliased\let\opfracspacing \Umathopfracspacing -\aliased\let\opradspacing \Umathopradspacing - -\aliased\let\binordspacing \Umathbinordspacing -\aliased\let\binopspacing \Umathbinopspacing -\aliased\let\binbinspacing \Umathbinbinspacing -\aliased\let\binrelspacing \Umathbinrelspacing -\aliased\let\binopenspacing \Umathbinopenspacing -\aliased\let\binclosespacing \Umathbinclosespacing -\aliased\let\binpunctspacing \Umathbinpunctspacing -\aliased\let\bininnerspacing \Umathbininnerspacing -\aliased\let\binfracspacing \Umathbinfracspacing -\aliased\let\binradspacing \Umathbinradspacing - -\aliased\let\relordspacing \Umathrelordspacing -\aliased\let\relopspacing \Umathrelopspacing -\aliased\let\relbinspacing \Umathrelbinspacing -\aliased\let\relrelspacing \Umathrelrelspacing -\aliased\let\relopenspacing \Umathrelopenspacing -\aliased\let\relclosespacing \Umathrelclosespacing -\aliased\let\relpunctspacing \Umathrelpunctspacing -\aliased\let\relinnerspacing \Umathrelinnerspacing -\aliased\let\relfracspacing \Umathrelfracspacing -\aliased\let\relradspacing \Umathrelradspacing - -\aliased\let\openordspacing \Umathopenordspacing -\aliased\let\openopspacing \Umathopenopspacing -\aliased\let\openbinspacing \Umathopenbinspacing -\aliased\let\openrelspacing \Umathopenrelspacing -\aliased\let\openopenspacing \Umathopenopenspacing -\aliased\let\openclosespacing \Umathopenclosespacing -\aliased\let\openpunctspacing \Umathopenpunctspacing -\aliased\let\openinnerspacing \Umathopeninnerspacing -\aliased\let\openfracspacing \Umathopenfracspacing -\aliased\let\openradspacing \Umathopenradspacing - -\aliased\let\closeordspacing \Umathcloseordspacing -\aliased\let\closeopspacing \Umathcloseopspacing -\aliased\let\closebinspacing \Umathclosebinspacing -\aliased\let\closerelspacing \Umathcloserelspacing -\aliased\let\closeopenspacing \Umathcloseopenspacing -\aliased\let\closeclosespacing \Umathcloseclosespacing -\aliased\let\closepunctspacing \Umathclosepunctspacing -\aliased\let\closeinnerspacing \Umathcloseinnerspacing -\aliased\let\closefracspacing \Umathclosefracspacing -\aliased\let\closeradspacing \Umathcloseradspacing - -\aliased\let\punctordspacing \Umathpunctordspacing -\aliased\let\punctopspacing \Umathpunctopspacing -\aliased\let\punctbinspacing \Umathpunctbinspacing -\aliased\let\punctrelspacing \Umathpunctrelspacing -\aliased\let\punctopenspacing \Umathpunctopenspacing -\aliased\let\punctclosespacing \Umathpunctclosespacing -\aliased\let\punctpunctspacing \Umathpunctpunctspacing -\aliased\let\punctinnerspacing \Umathpunctinnerspacing -\aliased\let\punctfracspacing \Umathpunctfracspacing -\aliased\let\punctradspacing \Umathpunctradspacing - -\aliased\let\innerordspacing \Umathinnerordspacing -\aliased\let\inneropspacing \Umathinneropspacing -\aliased\let\innerbinspacing \Umathinnerbinspacing -\aliased\let\innerrelspacing \Umathinnerrelspacing -\aliased\let\inneropenspacing \Umathinneropenspacing -\aliased\let\innerclosespacing \Umathinnerclosespacing -\aliased\let\innerpunctspacing \Umathinnerpunctspacing -\aliased\let\innerinnerspacing \Umathinnerinnerspacing -\aliased\let\innerfracspacing \Umathinnerfracspacing -\aliased\let\innerradspacing \Umathinnerradspacing - -\aliased\let\fracordspacing \Umathfracordspacing -\aliased\let\fracopspacing \Umathfracopspacing -\aliased\let\fracbinspacing \Umathfracbinspacing -\aliased\let\fracrelspacing \Umathfracrelspacing -\aliased\let\fracopenspacing \Umathfracopenspacing -\aliased\let\fracclosespacing \Umathfracclosespacing -\aliased\let\fracpunctspacing \Umathfracpunctspacing -\aliased\let\fracinnerspacing \Umathfracinnerspacing -\aliased\let\fracfracspacing \Umathfracfracspacing -\aliased\let\fracradspacing \Umathfracradspacing - -\aliased\let\radordspacing \Umathradordspacing -\aliased\let\radopspacing \Umathradopspacing -\aliased\let\radbinspacing \Umathradbinspacing -\aliased\let\radrelspacing \Umathradrelspacing -\aliased\let\radopenspacing \Umathradopenspacing -\aliased\let\radclosespacing \Umathradclosespacing -\aliased\let\radpunctspacing \Umathradpunctspacing -\aliased\let\radinnerspacing \Umathradinnerspacing -\aliased\let\radfracspacing \Umathradfracspacing -\aliased\let\radradspacing \Umathradradspacing +\let\normalreqno \normaleqno +%let\mathtopaccent \normaloverline +%let\mathbottomaccent\normalunderline \protect \endinput diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl index 9ed90a885..831ec1707 100644 --- a/tex/context/base/mkxl/pack-box.mkxl +++ b/tex/context/base/mkxl/pack-box.mkxl @@ -1118,13 +1118,13 @@ [\c!width=\overlaywidth,\c!height=\overlayheight] {\overlayimage{#1}}} -%D Here is an end December 2021 experimental feature: anchored boxes. This will move to -%D pack-box.mkxl +%D Here is an end December 2021 experimental feature: anchored boxes. \installcorenamespace{boxanchor} \installcorenamespace{boxanchorid} \installcorenamespace{boxanchorbox} \installcorenamespace{boxpreset} +\installcorenamespace{boxanchors} \installparameterhandler \??boxanchor {boxanchor} \installsetuphandler \??boxanchor {boxanchor} @@ -1221,16 +1221,16 @@ \expandafter\integerdef\csname\??boxpreset\v!left,\v!top \endcsname\leftheightlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!left,\v!depth \endcsname\leftdepthlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!left,\v!bottom \endcsname\leftdepthlistanchorcode -% + \expandafter\integerdef\csname\??boxpreset\v!right \endcsname\rightoriginlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!right,\v!height \endcsname\rightheightlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!right,\v!top \endcsname\rightheightlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!right,\v!depth \endcsname\rightdepthlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!right,\v!bottom \endcsname\rightdepthlistanchorcode -% \centeroriginlistanchorcode -% \centerheightlistanchorcode -% \centerdepthlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!line \endcsname\centeroriginlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!height \endcsname\centerheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!depth \endcsname\centerdepthlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!middle \endcsname\halfwaytotallistanchorcode \expandafter\integerdef\csname\??boxpreset\v!middle,\v!height\endcsname\halfwayheightlistanchorcode @@ -1240,6 +1240,67 @@ \expandafter\integerdef\csname\??boxpreset\v!middle,\v!left \endcsname\halfwayleftlistanchorcode \expandafter\integerdef\csname\??boxpreset\v!middle,\v!right \endcsname\halfwayrightlistanchorcode +% Musical timestamp: 2022-02-07 while listening Hypneurotic from The Blurred Horizon (n times); +% Jim Matheos with Gavin Harrison; very hypnotic indeed. + +\permanent\def\boxanchorpresetcode#1% + {\ifcsname\??boxpreset#1\endcsname\lastnamedcs\else\halfwaytotallistanchorcode\fi} + +\newcount\registeredboxanchor + +\permanent\protected\def\registerboxanchor + {\global\advance\registeredboxanchor\minusone} + +\permanent\protected\def\defineboxanchor[#1]% + {\registerboxanchor + \expandafter\integerdef\csname\??boxanchors#1\endcsname\registeredboxanchor} + +\permanent\def\namedboxanchor#1% + {\normalexpanded{\ifcsname\??boxanchors#1\endcsname\lastnamedcs\orelse\ifchknum#1\or#1\else\zerocount\fi}} + +\installcorenamespace{boxanchorcontent} + +\installparameterhandler \??boxanchorcontent {boxanchorcontent} +\installsetuphandler \??boxanchorcontent {boxanchorcontent} + +\setupboxanchorcontent + [\c!yoffset=\zeropoint, + \c!xoffset=\zeropoint, + \c!width=\zeropoint, + \c!location=\v!height, + \c!corner=\v!depth] + +\permanent\tolerant\protected\def\setboxanchor[#1]#*[#2]#*% assumes \defineboxanchor[#1] + {\begingroup + \dowithnextbox + {\setupcurrentboxanchorcontent[#2]% + \scratchxoffset\boxanchorcontentparameter\c!xoffset + \scratchyoffset\boxanchorcontentparameter\c!yoffset + \scratchcounter\namedboxanchor{#1}% + \registeranchorbox + \scratchcounter + \plusone % order + \hbox + \s!anchors % check order of these: + \boxanchorpresetcode{\boxanchorcontentparameter\c!corner} + \boxanchorpresetcode{\boxanchorcontentparameter\c!location} + \ifzeropt\scratchxoffset\else \s!xoffset \scratchxoffset\fi + \ifzeropt\scratchyoffset\else \s!yoffset \scratchyoffset\fi + \s!target \scratchcounter + {\box\nextbox}% + \endgroup}} + +% to be used as: +% +% \scratchcounter\registeredboxanchor +% +% \registeranchorbox +% \scratchcounter +% \plusone +% \ruledhbox{...} +% +% \hbox source \scratchcounter + % \negatexlistsigncode % \negateylistsigncode % \negatelistsigncode diff --git a/tex/context/base/mkxl/pack-lyr.mkxl b/tex/context/base/mkxl/pack-lyr.mkxl index 3c0352bf3..3b7e2324d 100644 --- a/tex/context/base/mkxl/pack-lyr.mkxl +++ b/tex/context/base/mkxl/pack-lyr.mkxl @@ -661,7 +661,7 @@ \ifx\p_pack_layers_position\v!yes \edef\p_pack_layers_region{\layerparameter\c!region}% \ifempty\p_pack_layers_region\else - \anch_mark_tagged_box\nextbox\p_pack_layers_region % was \layeranchor + \anch_mark_tagged_box\nextbox\p_pack_layers_region\zerocount % was \layeranchor \fi \fi \box\nextbox diff --git a/tex/context/base/mkxl/pack-mat.mkxl b/tex/context/base/mkxl/pack-mat.mkxl new file mode 100644 index 000000000..c0aa1cc94 --- /dev/null +++ b/tex/context/base/mkxl/pack-mat.mkxl @@ -0,0 +1,84 @@ +%D \module +%D [ file=pack-rul, % was core-rul, +%D version=2022.02.23, +%D title=\CONTEXT\ Packaging Macros, +%D subtitle=Ruled Math, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\writestatus{loading}{ConTeXt Packaging Macros / Ruled Math} + +%D This is a by product of the math improvement activity by Mikael Sundqvist and +%D myself. More might end up here and more control might be added. + +\unprotect + +\newconditional \c_framed_math_framed + +\installtextracker + {framed.math} + {\settrue \c_framed_math_framed} + {\setfalse\c_framed_math_framed} + +\tolerant\protected\def\mathframed[#1]#:#2% + {\begingroup + \ifconditional\c_framed_math_framed + \defineboxanchor[temp]% + \fi + \setmathatomrule\mathbegincode\mathbincode\allmathstyles\mathbegincode\mathbincode + \normalexpanded + {\setbox\scratchbox\hpack + \ifconditional\c_framed_math_framed + \s!source \namedboxanchor{temp} + \fi + \s!ymove \Umathaxis\Ustyle\mathstyle + \bgroup + \framed + [\c!location=\v!middle,#1] + {\startimath + \Ustyle\mathstyle + #2% + \stopimath}% + \egroup}% + \scratchcounterone\lastleftclass + \scratchcountertwo\lastrightclass + % \writestatus{!!}{[\number\lastleftclass,\number\lastrightclass]}% + \mathatom + \s!class \mathexplicitcode + \ifnum\scratchcounterone<\zerocount\else\s!leftclass \scratchcounterone\fi + \ifnum\scratchcountertwo<\zerocount\else\s!rightclass\scratchcountertwo\fi + \bgroup + \ifconditional\c_framed_math_framed + \setboxanchor[temp][\c!corner={\v!left,\v!bottom},\c!location={\v!right,\v!height}] + \hpack{\smallinfofont \the\scratchcounterone}% + \setboxanchor[temp][\c!corner={\v!right,\v!bottom},\c!location={\v!left,\v!height}] + \hpack{\smallinfofont \the\scratchcountertwo}% + \fi + \box\scratchbox + \egroup + \endgroup} + +%D \starttyping +%D \enabletrackers[framed.math] +%D +%D \startTEXpage[offset=10pt,width=40dk] +%D \showmakeup[mathglue] +%D \def\MyTest#1% +%D {$ x #1 x $\quad +%D $ x \mathframed[offset=0pt]{#1} x $\quad +%D $\displaystyle x #1 x $\quad +%D $\displaystyle x \mathframed[offset=0pt]{#1} x $} +%D \MyTest{>}\blank +%D \MyTest{+}\blank +%D \MyTest{!}\blank +%D \MyTest{+\frac{1}{2}+}\blank +%D \MyTest{\frac{1}{2}}\blank +%D \stopTEXpage +%D \stoptyping + +\protect diff --git a/tex/context/base/mkxl/page-bck.mkxl b/tex/context/base/mkxl/page-bck.mkxl index e955325e5..5c9b96fd7 100644 --- a/tex/context/base/mkxl/page-bck.mkxl +++ b/tex/context/base/mkxl/page-bck.mkxl @@ -354,7 +354,7 @@ \def\page_backgrounds_set_box#1% #2% {\global\setbox#1\vpack {\dontcomplain - \page_layouts_swap_margins + \page_layouts_swap_margins\v!background \ifconditional\swapbackgroundmargins \doifelsemarginswap \donothing {\enforced\swapcsvalues\v!rightmargin\v!leftmargin @@ -362,9 +362,6 @@ \fi \calculatereducedvsizes \offinterlineskip - % \ifconditional#2\relax - % \page_layouts_swap_margins_indeed % hm, this one gets nilled in \page_layouts_swap_margin anyway - % \fi \ifdim\topheight>\zeropoint \kern\dimexpr-\topheight-\topdistance\relax \page_backgrounds_set_box_row\v!top\topheight diff --git a/tex/context/base/mkxl/page-box.mklx b/tex/context/base/mkxl/page-box.mklx index c962b831a..56cb73f7a 100644 --- a/tex/context/base/mkxl/page-box.mklx +++ b/tex/context/base/mkxl/page-box.mklx @@ -250,11 +250,22 @@ % nearly always some displacement so no speedup test needed +% \def\page_boxes_apply_offsets#1% +% {\setbox#1\vpack to \paperheight +% {\hsize\paperwidth +% \vkern\topspace +% \hkern\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}% +% \box#1}% +% \dp#1\zeropoint} + \def\page_boxes_apply_offsets#1% {\setbox#1\vpack to \paperheight {\hsize\paperwidth \vkern\topspace \hkern\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}% +% \hkern\doifbothsides\backspace\backspace\cutspace +% \page_layouts_swap_margins\v!page +% \hkern\backspace \box#1}% \dp#1\zeropoint} diff --git a/tex/context/base/mkxl/page-flt.mkxl b/tex/context/base/mkxl/page-flt.mkxl index a97cc7f0d..a360dc42f 100644 --- a/tex/context/base/mkxl/page-flt.mkxl +++ b/tex/context/base/mkxl/page-flt.mkxl @@ -55,7 +55,7 @@ \newconditional\c_page_floats_center_box \settrue\c_page_floats_center_box \newconditional\c_page_floats_center_box_local \newconditional\c_page_floats_center_box_global -\newconditional\c_page_floats_compress_flushed \settrue\c_page_floats_compress_flushed +\newconditional\c_page_floats_compress_flushed \settrue\c_page_floats_compress_flushed \newdimen \d_page_floats_compress_distance diff --git a/tex/context/base/mkxl/page-lay.mkxl b/tex/context/base/mkxl/page-lay.mkxl index 835a3ca4b..4527759b3 100644 --- a/tex/context/base/mkxl/page-lay.mkxl +++ b/tex/context/base/mkxl/page-lay.mkxl @@ -123,7 +123,7 @@ \doifnothing{\directlayoutparameter\c!state}{\letlayoutparameter\c!state\v!start}% \to \everydefinelayout -\newconditional \layouthaschanged \settrue\layouthaschanged % used in mp +\newcount\c_page_layouts_changed \appendtoks \ifcase\layoutsetupmode @@ -155,13 +155,9 @@ \page_layouts_synchronize \page_layouts_check_next \fi - \global\settrue\layouthaschanged + \global\c_page_layouts_changed\realpageno \to \everysetuplayout -\appendtoks - \global\setfalse\layouthaschanged -\to \everyaftershipout - \permanent\def\doifelselayoutdefined#1% {\ifcsname\namedlayouthash{#1}\c!state\endcsname % maybe a helper \expandafter\firstoftwoarguments @@ -218,12 +214,22 @@ \newtoks\everyswapmargins % watch the order ! +\newconditional\marginsareswapped + \appendtoks + \ifconditional\marginsareswapped + \setfalse\marginsareswapped + \else + \settrue\marginsareswapped + \fi + % \enforced\swapcsvalues\leftmargindistance\rightmargindistance \enforced\swapcsvalues\leftedgedistance \rightedgedistance \enforced\swapcsvalues\leftmarginwidth \rightmarginwidth \enforced\swapcsvalues\leftedgewidth \rightedgewidth % + \enforced\swapcsvalues\backspace \cutspace + % \enforced\swapcsvalues\leftmargintotal \rightmargintotal \enforced\swapcsvalues\leftedgetotal \rightedgetotal \enforced\swapcsvalues\leftsidetotal \rightsidetotal @@ -754,9 +760,9 @@ \ifx\p_direction\v!reverse \enforced\global\swapcsvalues\naturalleftedgedistance \naturalrightedgedistance \enforced\global\swapcsvalues\naturalleftmargindistance\naturalrightmargindistance - \enforced\global\swapcsvalues\leftedgedistance \rightedgedistance \enforced\global\swapcsvalues\leftmargindistance \rightmargindistance \enforced\global\swapcsvalues\leftmarginwidth \rightmarginwidth + \enforced\global\swapcsvalues\leftedgedistance \rightedgedistance \enforced\global\swapcsvalues\leftedgewidth \rightedgewidth \enforced\global\swapcsvalues\backspace \cutspace \expandafter\setsystemmode @@ -1256,13 +1262,16 @@ \aliased\let\doifmarginswapelse\doifelsemarginswap \protected\def\page_layouts_swap_margins % name will change, frozen? - {\doifelsemarginswap\relax\page_layouts_swap_margins_indeed} + {\doifelsemarginswap\gobbleoneargument\page_layouts_swap_margins_indeed} -\protected\def\page_layouts_swap_margins_indeed - {\let\page_layouts_swap_margins \relax % to prevent local swapping - \let\page_layouts_swap_margins_indeed\relax % to prevent local swapping +\protected\def\page_layouts_swap_margins_indeed#1% + {\let\page_layouts_swap_margins\gobbleoneargument % to prevent local swapping + %\writestatus\m!layouts{swapping margins for #1}% \the\everyswapmargins} +\permanent\protected\def\swapmargindimensions + {\page_layouts_swap_margins\v!page} + \permanent\def\rightorleftpageaction {\ifdoublesided \expandafter\page_layouts_right_or_left_page_action @@ -1353,6 +1362,15 @@ \glet\page_grids_add_to_one\gobbleoneargument \glet\page_grids_add_to_mix\gobbleoneargument +%D Play safe: + +\appendtoks + \ifnum\realpageno>\plusone + \page[\v!odd]% + \setuplayout + \fi +\to \everysetuppagenumbering + %D The default dimensions are quite old and will not change. The funny fractions %D were introduced when we went from fixed dimensions to relative ones. Since %D \CONTEXT\ is a dutch package, the dimensions are based on the metric system. The diff --git a/tex/context/base/mkxl/page-mbk.mklx b/tex/context/base/mkxl/page-mbk.mklx index 05b09c79e..9999fb8c7 100644 --- a/tex/context/base/mkxl/page-mbk.mklx +++ b/tex/context/base/mkxl/page-mbk.mklx @@ -69,6 +69,12 @@ \c!inbetween=\blank, \c!bottom=\vfill] +\definesystemconstant{marginblock} + +\resetboxesincache \s!marginblock \s!marginblock + +\setfalse\c_page_margin_blocks_enabled + \permanent\tolerant\protected\def\startmarginblock[#tag]% {\begingroup \edef\currentmarginblock{#tag}% @@ -77,60 +83,45 @@ \page_margin_blocks_start_block_nop} \permanent\protected\def\stopmarginblock - {\doifelse{\marginblockparameter\c!state}\v!start - \page_margin_blocks_stop_block_yes - \page_margin_blocks_stop_block_nop + {\page_margin_blocks_stop_block \endgroup} -\def\page_margin_blocks_start_block_yes % 2 maal \vbox ivm \unvbox elders - {\showmessage\m!layouts4\empty - \global\settrue\c_page_margin_blocks_present - \global\setbox\b_page_margin_blocks\vtop\bgroup\vbox\bgroup - \hsize\marginblockparameter\c!width - \ifvoid\b_page_margin_blocks\else - \unvbox\b_page_margin_blocks - \marginblockparameter\c!inbetween - \fi - \usealignparameter\marginblockparameter - \usemarginblockstyleandcolor\c!style\c!color - \begstrut - \ignorespaces} +\def\page_margin_blocks_start_block_yes + {%\showmessage\m!layouts4\empty + \global\settrue\c_page_margin_blocks_enabled + \dowithnextboxcs + \page_margin_blocks_start_block_save + \vbox\bgroup + \let\page_margin_blocks_stop_block\page_margin_blocks_stop_block_yes + \hsize\marginblockparameter\c!width + \usealignparameter\marginblockparameter + \usemarginblockstyleandcolor\c!style\c!color + \begstrut + \ignorespaces} \def\page_margin_blocks_stop_block_yes {\removeunwantedspaces \endstrut - \egroup \egroup} +\def\page_margin_blocks_start_block_save + {\putboxincache\s!marginblock{+}\nextbox} + \def\page_margin_blocks_start_block_nop - {\showmessage\m!layouts5\empty + {%\showmessage\m!layouts5\empty \marginblockparameter\c!before \bgroup + \let\page_margin_blocks_stop_block\page_margin_blocks_stop_block_nop \usemarginblockstyleandcolor\c!style\c!color} \def\page_margin_blocks_stop_block_nop {\egroup \marginblockparameter\c!after} -\def\page_margin_blocks_reshape - {\ifdim\ht\b_page_margin_blocks_prepared>\zeropoint - \beginofshapebox - \unvbox\b_page_margin_blocks_prepared - \endofshapebox - \reshapebox - {\box\shapebox}% - \setbox\b_page_margin_blocks_prepared\vbox to \textheight - {\marginblockparameter\c!top - \flushshapebox - \marginblockparameter\c!bottom}% - \fi} - \permanent\protected\def\checkmarginblocks - {\ifvoid\b_page_margin_blocks - \global\setfalse\c_page_margin_blocks_present - \else - \page_margin_blocks_check_indeed - \fi} + {\ifconditional\c_page_margin_blocks_enabled\ifcase\getboxcountfromcache\s!marginblock\else + \expandafter\page_margin_blocks_check_indeed + \fi\fi} \def\page_margin_blocks_check_indeed {\ifcsname\??marginblocklocation\marginblockparameter\c!location\endcsname @@ -138,39 +129,58 @@ \csname\??marginblocklocation\marginblockparameter\c!location\endcsname \else \global\setbox\b_page_margin_blocks\emptybox - \global\setfalse\c_page_margin_blocks_present \fi} \def\page_margin_blocks_prepare_box - {\setbox\b_page_margin_blocks_prepared\vbox - {\forgetall - \splittopskip\topskip - \ifvoid\b_page_margin_blocks\else - \ifdim\ht\b_page_margin_blocks>\textheight - \vsplit\b_page_margin_blocks to \textheight - \else - \unvbox\b_page_margin_blocks - \fi + {\begingroup + \scratchcounter\zerocount + \localcontrolledloop \plusone \getboxcountfromcache\s!marginblock \plusone + {\scratchcounter\currentloopiterator + \setbox\scratchbox\vbox\bgroup + \marginblockparameter\c!top + \localcontrolledloop \plusone \scratchcounter \plusone + {\ifcase\currentloopiterator\or + \marginblockparameter\c!before + \else + \marginblockparameter\c!inbetween + \fi + \setbox\scratchbox\emptyvbox + \ht\scratchbox\getboxhtfromcache\s!marginblock{\number\currentloopiterator}% + \dp\scratchbox\getboxdpfromcache\s!marginblock{\number\currentloopiterator}% + \box\scratchbox + \marginblockparameter\c!after}% + \marginblockparameter\c!bottom + \egroup + \ifdim\htdp\scratchbox>\textheight + \advance\scratchcounter\minusone + %\writestatus{quit}{\the\scratchcounter=>\the\htdp\scratchbox} + \quitloop + \else + %\writestatus{progress}{\the\htdp\scratchbox} \fi}% - \page_margin_blocks_reshape - \setbox\b_page_margin_blocks_prepared\vbox - {\marginblockparameter\c!before - \box\b_page_margin_blocks_prepared - \marginblockparameter\c!after}} + \ifcase\scratchcounter\else + \global\setbox\b_page_margin_blocks_prepared\vbox to \textheight\bgroup + \marginblockparameter\c!top + \localcontrolledloop \plusone \scratchcounter \plusone + {\ifcase\currentloopiterator\or + \marginblockparameter\c!before + \else + \marginblockparameter\c!inbetween + \fi + \getboxfromcache\s!marginblock{\number\currentloopiterator}\scratchbox + \box\scratchbox + \marginblockparameter\c!after}% + \marginblockparameter\c!bottom + \egroup + \pruneboxesincache\s!marginblock + \ifcase\getboxcountfromcache\s!marginblock\relax + \global\settrue\c_page_margin_blocks_enabled + \fi + \fi + \endgroup} % inner outer -\setvalue{\??marginblocklocation\v!left }{\page_margin_blocks_set_l_box} -\setvalue{\??marginblocklocation\v!right }{\page_margin_blocks_set_r_box} -\setvalue{\??marginblocklocation\v!inmargin}{\doifbothsidesoverruled - \page_margin_blocks_set_r_box - \page_margin_blocks_set_r_box - \page_margin_blocks_set_l_box} -\setvalue{\??marginblocklocation\v!middle }{\doifbothsidesoverruled - \page_margin_blocks_set_r_box - \page_margin_blocks_set_l_box - \page_margin_blocks_set_r_box} - \permanent\protected\def\page_margin_blocks_place_r_yes {\setbox\b_page_margin_blocks_prepared\hbox to \rightmarginwidth {\marginblockparameter\c!left @@ -196,6 +206,21 @@ \def\page_margin_blocks_set_r_box{\enforced\aliased\let\placerightmarginblock\page_margin_blocks_place_r_yes} \def\page_margin_blocks_set_l_box{\enforced\aliased\let\placeleftmarginblock \page_margin_blocks_place_l_yes} +\letcsname\??marginblocklocation\v!left \endcsname\page_margin_blocks_set_l_box +\letcsname\??marginblocklocation\v!right\endcsname\page_margin_blocks_set_r_box + +\defcsname\??marginblocklocation\v!inmargin\endcsname + {\doifbothsidesoverruled + \page_margin_blocks_set_r_box + \page_margin_blocks_set_r_box + \page_margin_blocks_set_l_box} + +\defcsname\??marginblocklocation\v!middle\endcsname + {\doifbothsidesoverruled + \page_margin_blocks_set_r_box + \page_margin_blocks_set_l_box + \page_margin_blocks_set_r_box} + % margin floats (keyword 'margin' in option list) \protected\def\page_margin_blocks_process_float @@ -204,40 +229,41 @@ \page_margin_blocks_process_float_nop} \def\page_margin_blocks_process_float_yes - {\global\setbox\b_page_margin_blocks\vbox - {\hsize\marginblockparameter\c!width - \unvcopy\b_page_margin_blocks - \ifvoid\b_page_margin_blocks\else - \expandafter\marginblockparameter\expandafter\c!inbetween - \fi - \box\floatbox - \filbreak}% - \ifdim\ht\b_page_margin_blocks>\textheight - % page_floats_report_saved % no saving done anyway - \else - \page_floats_report_total - \fi} + {\global\settrue\c_page_margin_blocks_enabled + \putboxincache\s!marginblock{+}\floatbox} \def\page_margin_blocks_process_float_nop {\handlefloatmethod\v!here} -\def\page_margin_blocks_float_before - {\ifconditional\c_page_margin_blocks_enabled - \doifinset\v!margin\floatlocation\endgraf - \fi} - -\def\page_margin_blocks_float_set_hsize - {\ifconditional\c_page_margin_blocks_enabled - \doifinset\v!margin\floatlocation{\hsize\rootmarginblockparameter\c!width}% - \fi} - \appendtoks - \ifvoid\b_page_margin_blocks \else + \ifcase\getboxcountfromcache\s!marginblock\else \writestatus\m!layouts{beware: there are left-over margin floats!}% \fi \to \everystoptext \permanent\protected\def\flushmarginblocks - {\page_otr_command_flush_margin_blocks} + {\ifconditional\c_page_margin_blocks_enabled + \page_otr_command_flush_margin_blocks + \fi} + +\permanent\tolerant\protected\def\flushallmarginblocks[#1]% + {\ifconditional\c_page_margin_blocks_enabled + \begingroup + \scratchcounterone\getboxcountfromcache\s!marginblock\relax + \ifcase\scratchcounterone\else + \scratchcountertwo\ifparameter#1\or\numexpr\scratchcounterone-#1+\plusone\relax\else\plusone\fi + \localcontrolledloop \scratchcountertwo \scratchcounterone \plusone + {\ifcase\currentloopiterator\or + \marginblockparameter\c!before + \else + \marginblockparameter\c!inbetween + \fi + \getboxfromcache\s!marginblock{\number\currentloopiterator}\scratchbox + \box\scratchbox + \marginblockparameter\c!after}% + \pruneboxesincache\s!marginblock + \fi + \endgroup + \fi} \protect \endinput diff --git a/tex/context/base/mkxl/page-one.mkxl b/tex/context/base/mkxl/page-one.mkxl index 61f9172ea..f900d561d 100644 --- a/tex/context/base/mkxl/page-one.mkxl +++ b/tex/context/base/mkxl/page-one.mkxl @@ -284,6 +284,7 @@ % baseline \unskip % new per 2019-06-18, otherwise weird bottom floats \vkern\dimexpr\maxdepth-\d_page_one_natural_depth\relax + % \srule depth \dimexpr\maxdepth-\d_page_one_natural_depth\relax \page_otr_command_flush_bottom_insertions \fi \fakepagenotes}% diff --git a/tex/context/base/mkxl/page-sid.mkxl b/tex/context/base/mkxl/page-sid.mkxl index 1ff587120..8959a0e3d 100644 --- a/tex/context/base/mkxl/page-sid.mkxl +++ b/tex/context/base/mkxl/page-sid.mkxl @@ -534,7 +534,7 @@ \egroup}} \def\page_sides_flush_floats_normal - {\ifdim\scratchdimen>\htdp\strutbox + {\ifdim\scratchdimen>\struthtdp \strut \else \m_pages_strut diff --git a/tex/context/base/mkxl/page-str.lmt b/tex/context/base/mkxl/page-str.lmt new file mode 100644 index 000000000..9c2562cc4 --- /dev/null +++ b/tex/context/base/mkxl/page-str.lmt @@ -0,0 +1,320 @@ +if not modules then modules = { } end modules ['page-str'] = { + version = 1.001, + comment = "companion to page-str.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- streams -> managers.streams + +-- work in progresss .. unfinished .. non-optimized + +local concat, insert, remove = table.concat, table.insert, table.remove + +local nodes, node = nodes, node + +local tasks = nodes.tasks + +local implement = interfaces.implement + +local nodecodes = nodes.nodecodes + +local nuts = nodes.nuts +local tonut = nodes.tonut +local slide_node_list = nuts.slide +local write_node = nuts.write +local flushnode = nuts.flush +local copy_node_list = nuts.copylist +local vpack_node_list = nuts.vpack +local new_strut = nuts.pool.strutrule + +----- getbox = nuts.getbox +local setlink = nuts.setlink +local getlist = nuts.getlist +local setlist = nuts.setlist +local getwhd = nuts.getwhd +local setwhd = nuts.setwhd +local setattrlist = nuts.setattrlist + +local settings_to_array = utilities.parsers.settings_to_array + +local enableaction = nodes.tasks.enableaction + +local texgetdimen = tex.getdimen + +local trace_collecting = false trackers.register("streams.collecting", function(v) trace_collecting = v end) +local trace_flushing = false trackers.register("streams.flushing", function(v) trace_flushing = v end) + +local report_streams = logs.reporter("streams") + +streams = streams or { } -- might move to the builders namespace +local streams = streams + +-- maybe store head and tail ... first we need usage + +local data = { } +local name = nil +local stack = { } + +function streams.enable(newname) + if newname == "default" then + name = nil + else + name = newname + end +end + +function streams.disable() + name = stack[#stack] +end + +function streams.start(newname) + insert(stack,name) + name = newname +end + +function streams.stop(newname) + name = remove(stack) +end + +function streams.collect(head,where) + if name and head and name ~= "default" then + local head = tonut(head) + local dana = data[name] + if not dana then + dana = { } + data[name] = dana + end + local last = dana[#dana] + if last then + local tail = slide_node_list(last) + setlink(tail,head) + elseif last == false then + dana[#dana] = head + else + dana[1] = head + end + if trace_collecting then + report_streams("appending snippet %a to slot %s",name,#dana) + end + return nil + else + return head + end +end + +function streams.push(thename) + if not thename or thename == "" then + thename = name + end + if thename and thename ~= "" then + local dana = data[thename] + if dana then + dana[#dana+1] = false + if trace_collecting then + report_streams("pushing snippet %a",thename) + end + end + end +end + +function streams.flush(name,copy) -- problem: we need to migrate afterwards + local dana = data[name] + if dana then + local dn = #dana + if dn == 0 then + -- nothing to flush + elseif copy then + if trace_flushing then + report_streams("flushing copies of %s slots of %a",dn,name) + end + for i=1,dn do + local di = dana[i] + if di then + write_node(copy_node_list(getlist(di))) -- list, will be option + end + end + if copy then + data[name] = nil + end + else + if trace_flushing then + report_streams("flushing %s slots of %a",dn,name) + end + for i=1,dn do + local di = dana[i] + if di then + write_node(getlist(di)) -- list, will be option + setlist(di) + flushnode(di) + end + end + end + end +end + +function streams.synchronize(list) -- this is an experiment ! + -- we don't optimize this as we want to trace in detail + list = settings_to_array(list) + local max = 0 + if trace_flushing then + report_streams("synchronizing list: % t",list) + end + for i=1,#list do + local dana = data[list[i]] + if dana then + local n = #dana + if n > max then + max = n + end + end + end + if trace_flushing then + report_streams("maximum number of slots: %s",max) + end + for m=1,max do + local height, depth = 0, 0 + for i=1,#list do + local name = list[i] + local dana = data[name] + if dana then + local slot = dana[m] + if slot then + local vbox = vpack_node_list(slot) + local wd, ht, dp = getwhd(vbox) + if ht > height then + height = ht + end + if dp > depth then + depth = dp + end + dana[m] = vbox + if trace_flushing then + report_streams("slot %s of %a is packed to height %p and depth %p",m,name,ht,dp) + end + end + end + end + if trace_flushing then + report_streams("slot %s has max height %p and max depth %p",m,height,depth) + end + local strutht = texgetdimen("globalbodyfontstrutheight") + local strutdp = texgetdimen("globalbodyfontstrutdepth") + local struthtdp = strutht + strutdp + for i=1,#list do + local name = list[i] + local dana = data[name] + if dana then + local vbox = dana[m] + if vbox then + local wd, ht, dp = getwhd(vbox) + local delta_height = height - ht + local delta_depth = depth - dp + if delta_height > 0 or delta_depth > 0 then + if false then + -- actually we need to add glue and repack + setwhd(vbox,false,height,depth) + if trace_flushing then + report_streams("slot %s of %a with delta (%p,%p) is compensated",m,i,delta_height,delta_depth) + end + else + -- this is not yet ok as we also need to keep an eye on vertical spacing + -- so we might need to do some splitting or whatever + local list = getlist(vbox) + local tail = list and slide_node_list(list) + local n = 0 + local delta = delta_height -- for tracing + while delta > 0 do + -- we need to add some interline penalties + local strut = new_strut(0,strutht,strutdp) + setattrlist(strut,vbox) + if tail then + -- todo: inject at a better place + setlink(tail,strut) + end + tail = strut + n = n + 1 + delta = delta - struthtdp + end + dana[m] = vpack_node_list(getlist(vbox)) + setlist(vbox) + flushnode(vbox) + if trace_flushing then + report_streams("slot %s:%s with delta (%p,%p) is compensated by %s lines",m,i,delta_height,delta_depth,n) + end + end + end + end + else + -- make dummy + end + end + end +end + +-- hm, nut or node + +tasks.appendaction("mvlbuilders", "normalizers", "streams.collect") + +tasks.disableaction("mvlbuilders", "streams.collect") + +function streams.initialize() + enableaction("mvlbuilders","streams.collect") + function streams.initialize() end +end + +-- todo: remove empty last { }'s +-- todo: better names, enable etc + +implement { + name = "initializestream", + actions = streams.initialize, + onlyonce = true, +} + +implement { + name = "enablestream", + actions = streams.enable, + arguments = "string" +} + +implement { + name = "disablestream", + actions = streams.disable +} + +implement { + name = "startstream", + actions = streams.start, + arguments = "string" +} + +implement { + name = "stopstream", + actions = streams.stop +} + +implement { + name = "flushstream", + actions = streams.flush, + arguments = "string" +} + +implement { + name = "flushstreamcopy", + actions = streams.flush, + arguments = { "string", true } +} + +implement { + name = "synchronizestream", + actions = streams.synchronize, + arguments = "string" +} + +implement { + name = "pushstream", + actions = streams.push, + arguments = "string" +} diff --git a/tex/context/base/mkxl/page-str.mkxl b/tex/context/base/mkxl/page-str.mkxl index d6e01ea59..067283ee0 100644 --- a/tex/context/base/mkxl/page-str.mkxl +++ b/tex/context/base/mkxl/page-str.mkxl @@ -27,7 +27,7 @@ %D %D Remark: marknotes are gone, at least for a while. -\registerctxluafile{page-str}{} +\registerctxluafile{page-str}{autosuffix} \unprotect diff --git a/tex/context/base/mkxl/page-txt.mklx b/tex/context/base/mkxl/page-txt.mklx index 4d80cfa76..a66dc0829 100644 --- a/tex/context/base/mkxl/page-txt.mklx +++ b/tex/context/base/mkxl/page-txt.mklx @@ -866,7 +866,7 @@ {\setbox\b_page_layouts_element\vpack {\dontcomplain \calculatereducedvsizes - \page_layouts_swap_margins + \page_layouts_swap_margins\v!text \offinterlineskip \vkern\dimexpr-\topheight-\topdistance\relax \the\toptextcontent @@ -896,12 +896,12 @@ {\offinterlineskip \calculatereducedvsizes \calculatehsizes - \page_layouts_swap_margins + \page_layouts_swap_margins\v!page \vkern\dimexpr\headerheight+\headerdistance+\textdistance\relax \dontleavehmode \hpack to \makeupwidth {\begingroup - \page_layouts_swap_margins + % \page_layouts_swap_margins\v!page \goleftonpage \ifdim\leftedgewidth>\zeropoint \the\leftedgetextcontent diff --git a/tex/context/base/mkxl/spac-hor.mkxl b/tex/context/base/mkxl/spac-hor.mkxl index c8ac4c74c..ee9001e62 100644 --- a/tex/context/base/mkxl/spac-hor.mkxl +++ b/tex/context/base/mkxl/spac-hor.mkxl @@ -23,6 +23,7 @@ \bitwiseflip \normalizelinemode \normalizelinenormalizecode \bitwiseflip \normalizelinemode \clipwidthnormalizecode \bitwiseflip \normalizelinemode \flattendiscretionariesnormalizecode +\bitwiseflip \normalizelinemode \flattenleadersnormalizecode % neglectable overhead %bitwiseflip \normalizelinemode \discardzerotabskipsnormalizecode \let\v_spac_indentation_current\empty % amount/keyword @@ -900,6 +901,8 @@ % \box\b_spac_indentations_a % \endgroup} +%D Struts are done differently now. +%D %D The only complication lays in \type{\strut}. In \PLAIN\ \TEX\ a \type{\strut} is %D defined as: %D diff --git a/tex/context/base/mkxl/spac-par.mkxl b/tex/context/base/mkxl/spac-par.mkxl index d382a6c8c..098595dfe 100644 --- a/tex/context/base/mkxl/spac-par.mkxl +++ b/tex/context/base/mkxl/spac-par.mkxl @@ -39,7 +39,7 @@ + \widowpenaltyfrozenparcode + \clubpenaltyfrozenparcode + \brokenpenaltyfrozenparcode - + \shapingpenaltiesfrozenparcode + + \shapingpenaltyfrozenparcode + \orphanpenaltyfrozenparcode \relax @@ -83,7 +83,7 @@ + \shapefrozenparcode % \parshape % \linefrozenparcode % \baselineskip \lineskip \lineskiplimit + \hyphenationfrozenparcode % \hyphenationmode - + \shapingpenaltiesfrozenparcode % \shapingpenaltiesmode + + \shapingpenaltyfrozenparcode % \shapingpenaltymode + \orphanpenaltyfrozenparcode \relax diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index 3f40d98cf..68f74c9ee 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -825,22 +825,20 @@ %D %D But we do things differently. -\newbox\strutbox +\newbox\b_strut_box +\newbox\b_strut_tmp -\setbox\strutbox\hpack{\vrule\s!height8.5pt\s!depth3.5pt\s!width\zeropoint} % just a start - -% \permanent\protected\def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox} -% -% \protected\def\strut -% {\relax -% \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox} -% -% \aliased\let\normalstrut\strut +\permanent\protected\def\strutbox % not to be used but this is sort of an alias + {\beginlocalcontrol + \setbox\b_strut_tmp\hpack{\normalsrule\s!height\strutht\s!depth\strutdp}% just a start + \endlocalcontrol + \b_strut_tmp} %D The double \type {\hbox} construction enables us to backtrack boxes. -\overloaded\let\strutht\undefined \newdimen\strutht -\overloaded\let\strutdp\undefined \newdimen\strutdp +\overloaded\let\strutht \undefined \newdimen\strutht +\overloaded\let\strutdp \undefined \newdimen\strutdp +\overloaded\let\struthtdp\undefined \newdimen\struthtdp \permanent\protected\def\setstrut {\ifgridsnapping @@ -884,9 +882,9 @@ \dosetstrut} \permanent\protected\def\setcharstrut#1% - {\setbox\strutbox\hbox{#1}% no \hpack, in case we have smallcaps - \strutht\ht\strutbox - \strutdp\dp\strutbox + {\setbox\b_strut_box\hbox{#1}% no \hpack, in case we have smallcaps + \strutht\ht\b_strut_box + \strutdp\dp\b_strut_box \dosetstrut} \permanent\protected\def\settightstrut @@ -903,13 +901,17 @@ \permanent\protected\def\charhtstrut {\begingroup \setcharstrut{GJY}% - \vrule\s!width\zeropoint\s!depth\zeropoint\s!height\strutht + \normalsrule + \s!depth \zeropoint + \s!height\strutht \endgroup} \permanent\protected\def\chardpstrut {\begingroup \setcharstrut{gjy}% - \vrule\s!width\zeropoint\s!depth\strutdp\s!height\zeropoint + \normalsrule + \s!depth \strutdp + \s!height\zeropoint \endgroup} %D Because of all the callbacks in mkiv, we avoid unnecessary boxes ... maybe use an @@ -919,143 +921,82 @@ \permanent\protected\def\dosetstrut {\enforced\let\strut\normalstrut - \ifabsnum\dimexpr\strutht+\strutdp-\lineheight\relax<\plustwo + \ifabsnum\dimexpr\struthtdp-\lineheight\relax<\plustwo % compensate rounding error /- 1sp to avoid too many % 1sp baselineskips in for instance verbatim % \strutht\dimexpr\lineheight-\strutdp\relax % better: \strutdp\dimexpr\lineheight-\strutht\relax \struttotal\lineheight - \else - \struttotal\dimexpr\strutht+\strutdp\relax \fi + \struthtdp\dimexpr\strutht+\strutdp\relax \strutheight\strutht \strutdepth \strutdp - \ifdim\strutwidth=\zeropoint - \spac_struts_set_hide - \else - \spac_struts_set_vide - \fi} - -\def\spac_struts_set_hide - {\setbox\strutbox\hpack - {\vrule - \s!width \zeropoint - \s!height\strutht - \s!depth \strutdp}} + \struttotal \struthtdp} \newconstant\c_strut_visual_mode -\def\spac_struts_set_vide - {\setbox\strutbox\hpack % at some time this extra wrapping was needed - {\spac_struts_vide_hbox to \zeropoint - {\ifcase\c_strut_visual_mode - \spac_struts_black - \or - \spac_struts_color - \else - \spac_struts_black - \fi}}} - -\def\spac_struts_black - {\vrule - \s!width \strutwidth - \s!height\strutht - \s!depth \strutdp - \hss} - -\def\spac_struts_color - {\hss % new, will be option - \scratchwidth.1\struthtdp - \begingroup - \directcolor[f:b:t]% - \vrule - \s!width \scratchwidth - \s!height\strutht - \s!depth \strutdp - \kern-\scratchwidth - \vrule - \s!width \scratchwidth - \s!height\zeropoint - \s!depth \strutdp - \endgroup - \kern-.625\scratchwidth - \vrule - \s!width .25\scratchwidth - \s!height\strutht - \s!depth \strutdp - \hss} - -\let\spac_struts_vide_hbox\hbox % overloaded in trac-vis.mkiv - %D The dimen \type {\struttotal} holds the exact size of the strut; occasionally a %D one scaled point difference can show up with the lineheight. This is more %D efficient (less callbacks): -\newbox\b_spac_struts_empty \setbox\b_spac_struts_empty\emptyhbox - -\def\spac_struts_set_hide - {\setbox\strutbox\copy\b_spac_struts_empty - \ht\strutbox\strutht - \dp\strutbox\strutdp} - \permanent\protected\def\strut % still callbacks for \hbox{\strut} {\relax \dontleavehmode - \copy\strutbox} - -% \protected\def\strut % slightly faster -% {\relax -% \ifmmode\copy\else\dontleavehmode\unhcopy\fi\strutbox} + \normalsrule + \s!height\strutht + \s!depth \strutdp + \relax} \aliased\let\normalstrut\strut \permanent\protected\def\halfstrut {\relax \dontleavehmode - \begingroup - \setbox\scratchbox\copy\strutbox - \ht\scratchbox\dimexpr\strutht/\plustwo\relax - \dp\scratchbox\dimexpr\strutdp/\plustwo\relax - \box\scratchbox - \endgroup} + \normalsrule + \s!height.5\strutht + \s!depth .5\strutdp + \relax} \permanent\protected\def\quarterstrut {\relax \dontleavehmode - \begingroup - \setbox\scratchbox\copy\strutbox - \ht\scratchbox\dimexpr\strutht/\plusfour\relax - \dp\scratchbox\dimexpr\strutdp/\plusfour\relax - \box\scratchbox - \endgroup} + \normalsrule + \s!height.25\strutht + \s!depth .25\strutdp + \relax} \permanent\protected\def\depthstrut {\relax \dontleavehmode - \begingroup - \setbox\scratchbox\copy\strutbox - \ht\scratchbox\dimexpr\strutht-\struthtdp/\plustwo\relax % assumes that ht > lineheight/2 - \box\scratchbox - \endgroup} + \normalsrule + \s!height\dimexpr\strutht-\struthtdp/\plustwo\relax + \s!depth \strutdp + \relax} \permanent\protected\def\halflinestrut {\relax \dontleavehmode - \begingroup - \setbox\scratchbox\copy\strutbox - \ht\scratchbox\dimexpr\strutht-.5\strutht-.5\strutdp\relax - \box\scratchbox - \endgroup} + \normalsrule + \s!height\dimexpr\strutht-.5\struthtdp\relax + \s!depth \strutdp + \relax} \permanent\protected\def\noheightstrut {\relax \dontleavehmode - \begingroup - \setbox\scratchbox\copy\strutbox - \ht\scratchbox\zeropoint - \box\scratchbox - \endgroup} + \normalsrule + \s!height\zeropoint + \s!depth \strutdp + \relax} + +\permanent\protected\def\nodepthstrut + {\relax + \dontleavehmode + \normalsrule + \s!height\strutht + \s!depth \zeropoint + \relax} %D Sometimes a capstrut comes in handy %D @@ -1095,32 +1036,16 @@ \fi} \permanent\protected\def\showstruts % adapts .. is wrong - {\c_strut_visual_mode\zerocount - \setteststrut - \settestcrlf} - -\permanent\protected\def\showcolorstruts % adapts .. is wrong - {\c_strut_visual_mode\plusone - \setteststrut + {\showmakeup[strut]% \settestcrlf} -\permanent\protected\def\setteststrut - {\strutwidth.8\onepoint - \setstrut} - -\permanent\protected\def\dontshowstruts - {\unsetteststrut - \settestcrlf} - -\permanent\protected\def\unsetteststrut - {\strutwidth\zeropoint - \setstrut} +\aliased\let\showcolorstruts\showstruts \mutable\def\autostrutfactor{1.1} \permanent\protected\def\setautostrut {\begingroup - \setbox\scratchbox\copy\strutbox + \setbox\scratchbox\copy\b_strut_box \setstrut \ifdim\strutht>\autostrutfactor\ht\scratchbox \endgroup \setstrut @@ -1138,7 +1063,6 @@ {\the\everysetnostrut} \appendtoks - \setbox\strutbox\copy\nostrutbox \enforced\let\strut \empty \enforced\let\endstrut\empty \enforced\let\begstrut\empty @@ -1468,10 +1392,10 @@ %D To be checked: -\newbox\b_spac_struts_saved - -\permanent\protected\def\savestrut {\setbox\b_spac_struts_saved\copy\strutbox} -\permanent\protected\def\savedstrut{\copy \b_spac_struts_saved} +% \newbox\b_spac_struts_saved +% +% \permanent\protected\def\savestrut {\setbox\b_spac_struts_saved\copy\b_strut_box} +% \permanent\protected\def\savedstrut{\copy \b_spac_struts_saved} %D Good old blank redone: diff --git a/tex/context/base/mkxl/strc-flt.mklx b/tex/context/base/mkxl/strc-flt.mklx index 862aa7ff9..5eb18baac 100644 --- a/tex/context/base/mkxl/strc-flt.mklx +++ b/tex/context/base/mkxl/strc-flt.mklx @@ -1533,7 +1533,7 @@ \whitespace \blank[\rootfloatparameter\c!spacebefore]% \doifnotinset\v!tall\floatlocation - {\dp\floatbox\openstrutdepth}% dp\strutbox}% % toegevoegd + {\dp\floatbox\openstrutdepth}% \strutdp % toegevoegd \box\floatbox \dostoptagged \blank[\rootfloatparameter\c!spaceafter]% diff --git a/tex/context/base/mkxl/strc-mat.mkxl b/tex/context/base/mkxl/strc-mat.mkxl index 39c70fe87..edfe9d97f 100644 --- a/tex/context/base/mkxl/strc-mat.mkxl +++ b/tex/context/base/mkxl/strc-mat.mkxl @@ -874,8 +874,8 @@ % for the moment (when testing) we use a penalty 1 -\protected\def\strc_math_align_here{\ifmmode\penalty\plusone\fi}% -\protected\def\strc_math_break_here{\ifmmode\hfill\break \fi}% +\protected\def\strc_math_align_here{\ifmmode\boundary\plusone\fi}% +\protected\def\strc_math_break_here{\ifmmode\hfill\break\fi}% \ifdefined\alignhere \else \aliased\let\alignhere\relax \fi \ifdefined\breakhere \else \aliased\let\breakhere\relax \fi diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx index d5e054962..61c1085f1 100644 --- a/tex/context/base/mkxl/strc-ref.mklx +++ b/tex/context/base/mkxl/strc-ref.mklx @@ -444,8 +444,8 @@ {\referenceprefix}% {#label}% {% - height \ht\strutbox - depth \dp\strutbox + height \strutht + depth \strutdp \extrareferencearguments }% \relax @@ -1483,8 +1483,8 @@ {\referenceprefix}% {#label}% {% - height \ht\strutbox - depth \dp\strutbox + height \strutht + depth \strutdp \extrareferencearguments }% \relax @@ -1535,8 +1535,8 @@ \iflocation \clf_doifelsereference{\referenceprefix}{#label}{\extrareferencearguments}% {\clf_injectcurrentreferencehtdp - \ht\strutbox - \dp\strutbox + \strutht + \strutdp \relax \setlocationattributes \setstrut % can be option @@ -1592,8 +1592,8 @@ \protected\def\strc_references_start_goto_yes {\clf_injectcurrentreferencehtdp - \ht\strutbox - \dp\strutbox + \strutht + \strutdp \relax \setlocationattributes \setstrut % can be option diff --git a/tex/context/base/mkxl/supp-box.lmt b/tex/context/base/mkxl/supp-box.lmt index 93b97b48e..ae4e32353 100644 --- a/tex/context/base/mkxl/supp-box.lmt +++ b/tex/context/base/mkxl/supp-box.lmt @@ -602,6 +602,20 @@ do setbox(box,b or nil) end + function boxes.prune(category) + -- this one assumes an indexed list + local c = cache[category] + local t = { } + local n = 0 + for i=1,#c do + local ci = c[i] + if ci then + n = n + 1 ; t[n] = ci + end + end + cache[category] = t + end + local function dimensions(category,name) name = tonumber(name) or name local b = cache[category][name] @@ -703,6 +717,14 @@ do } implement { + name = "pruneboxesincache", + public = true, + protected = true, + arguments = "string", + actions = boxes.prune, + } + + implement { name = "disposeboxesincache", public = true, protected = true, @@ -760,6 +782,18 @@ do } implement { + name = "getboxhtdpfromcache", + arguments = "2 strings", + public = true, + protected = true, + usage = "value", + actions = function(category,name) + local w, h, d = dimensions(category,name) + return dimension_value, h + d + end, + } + + implement { name = "putnextboxincache", public = true, protected = true, diff --git a/tex/context/base/mkxl/supp-box.mkxl b/tex/context/base/mkxl/supp-box.mkxl index b980107e4..fe96505a0 100644 --- a/tex/context/base/mkxl/supp-box.mkxl +++ b/tex/context/base/mkxl/supp-box.mkxl @@ -40,10 +40,10 @@ %D not, you're in trouble). These shortcuts can be used like a dimension, opposite %D to the core macros \type {\strutdepth} and alike, which are values. - \def\strutdp {\dp\strutbox} % overloaded in spac-ver - \def\strutht {\ht\strutbox} % overloaded in spac-ver + \def\strutdp {\dp\strutbox} % overloaded in spac-ver + \def\strutht {\ht\strutbox} % overloaded in spac-ver \permanent\protected\def\strutwd {\wd\strutbox} -\permanent\protected\def\struthtdp{\dimexpr\strutht+\strutdp\relax} + \def\struthtdp{\htdp\strutbox} % overloaded in spac-ver \permanent\protected\def\strutgap {\dimexpr\strutht-\strutdp\relax} %D \macros @@ -330,7 +330,7 @@ %D We also define plain's \type {\mathstrut}. -\permanent\protected\def\mathstrut{\vphantom(} % can be made faster by inlining +\permanent\protected\def\mathstrut{\Ustack{\vphantom(}} % can be made faster by inlining %D \macros %D {getboxheight} @@ -2027,7 +2027,7 @@ \permanent\protected\def\bbox{\hpack\bgroup\dowithnextboxcs\syst_boxes_bbox_finish\hbox} \def\syst_boxes_tbox_finish - {\scratchheight\ht\strutbox + {\scratchheight\strutht \scratchdepth\dimexpr\htdp\nextbox-\scratchheight\relax \ht\nextbox\scratchheight \dp\nextbox\scratchdepth @@ -2036,7 +2036,7 @@ \egroup} \def\syst_boxes_bbox_finish - {\scratchdepth\dp\strutbox + {\scratchdepth\strutdp \scratchheight\dimexpr\htdp\nextbox-\scratchdepth\relax \dp\nextbox\scratchdepth \ht\nextbox\scratchheight @@ -2457,6 +2457,7 @@ % \getboxwdfromcache % {category} {name} % \getboxhtfromcache % {category} {name} % \getboxdpfromcache % {category} {name} +% \getboxhtdpfromcache % {category} {name} %D \macros %D {removedepth, obeydepth} @@ -2812,10 +2813,10 @@ \permanent\protected\def\linebox {\hpack\bgroup\dowithnextbox - {\scratchdimen\dimexpr\dimexpr\htdp\nextbox-\lineheight\relax/2+\dp\strutbox\relax + {\scratchdimen\dimexpr\dimexpr\htdp\nextbox-\lineheight\relax/2+\strutdp\relax \setbox\nextbox\hpack{\lower\scratchdimen\box\nextbox}% - \ht\nextbox\ht\strutbox - \dp\nextbox\dp\strutbox + \ht\nextbox\strutht + \dp\nextbox\strutdp \box\nextbox \egroup} \hbox} diff --git a/tex/context/base/mkxl/symb-ini.mkxl b/tex/context/base/mkxl/symb-ini.mkxl index ce489ee5a..e26892e4d 100644 --- a/tex/context/base/mkxl/symb-ini.mkxl +++ b/tex/context/base/mkxl/symb-ini.mkxl @@ -143,7 +143,7 @@ \csname\??symbol#1\endcsname\relax \endgroup} -\letvalue{\??symbol}\firstofoneargument +\letcsname\??symbol\endcsname\firstofoneargument \permanent\def\directsymbol#1#2% no \relax, there can be an argument, see lists {\begincsname\??symbol#1:#2\endcsname} diff --git a/tex/context/base/mkxl/syst-aux.mkxl b/tex/context/base/mkxl/syst-aux.mkxl index aceb52aac..ced19dcd2 100644 --- a/tex/context/base/mkxl/syst-aux.mkxl +++ b/tex/context/base/mkxl/syst-aux.mkxl @@ -4186,6 +4186,21 @@ %D {\groupedcommand{\raggedcenter\bf}{\par}} %D \stoptyping +%D For math we use this: + +\permanent\protected\def\mathgroupedcommandcs#1% + {\let\m_syst_helpers_handle_group_b#1% + \futureexpandis\bgroup\syst_helpers_handle_math_group_normal\syst_helpers_handle_math_group_nop} + +\protected\def\syst_helpers_handle_math_group_normal#1% + {\beginmathgroup + \m_syst_helpers_handle_group_b + #1% + \endmathgroup} + +\protected\def\syst_helpers_handle_math_group_nop + {\m_syst_helpers_handle_group_b} + % %D \macros % %D {checkdefined} % %D @@ -5903,7 +5918,7 @@ %D \setdimensionwithunit\scratchdimen{10cm}{cm} %D \setdimensionwithunit\scratchdimen{10cm}{} %D \freezedimensionwithunit\SomeWidth{\textwidth} -%D \freezedimensionwithunit\SomeDepth{\dp\strutbox} +%D \freezedimensionwithunit\SomeDepth{\strutdp} %D \stoptyping %D %D As an alternative for the next macro we can use a global assignment inside a box. diff --git a/tex/context/base/mkxl/syst-fnt.mkxl b/tex/context/base/mkxl/syst-fnt.mkxl index e6029d805..62239917f 100644 --- a/tex/context/base/mkxl/syst-fnt.mkxl +++ b/tex/context/base/mkxl/syst-fnt.mkxl @@ -23,13 +23,25 @@ \immutable\protected\def\fontemwidth {\scaledfontdimen\plussix } \immutable\protected\def\fontextraspace {\scaledfontdimen\plusseven} -\immutable\protected\def\slantperpoint {\scaledfontdimen\plusone \font} -\immutable\protected\def\interwordspace {\scaledfontdimen\plustwo \font} -\immutable\protected\def\interwordstretch {\scaledfontdimen\plusthree\font} -\immutable\protected\def\interwordshrink {\scaledfontdimen\plusfour \font} -\immutable\protected\def\exheight {\scaledfontdimen\plusfive \font} -\immutable\protected\def\emwidth {\scaledfontdimen\plussix \font} -\immutable\protected\def\extraspace {\scaledfontdimen\plusseven\font} +%immutable\protected\def\slantperpoint {\scaledfontdimen\plusone \font} +%immutable\protected\def\interwordspace {\scaledfontdimen\plustwo \font} +%immutable\protected\def\interwordstretch {\scaledfontdimen\plusthree\font} +%immutable\protected\def\interwordshrink {\scaledfontdimen\plusfour \font} +%immutable\protected\def\exheight {\scaledfontdimen\plusfive \font} +%immutable\protected\def\emwidth {\scaledfontdimen\plussix \font} +%immutable\protected\def\extraspace {\scaledfontdimen\plusseven\font} + +%D This saves a little bit of overhead but more important, it gives less tracing, +%D and for practical reasone we keep this indirectness because we syntax highlight +%D these pseudo constants different than primitives. + +\immutable\aliased\let\slantperpoint \scaledslantperpoint +\immutable\aliased\let\interwordspace \scaledinterwordspace +\immutable\aliased\let\interwordstretch \scaledinterwordstretch +\immutable\aliased\let\interwordshrink \scaledinterwordshrink +\immutable\aliased\let\exheight \scaledexheight +\immutable\aliased\let\emwidth \scaledemwidth +\immutable\aliased\let\extraspace \scaledextraspace \aliased\let\mathaxisheight\Umathaxis % takes style diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index 605a4c334..6f3ccd89f 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -296,30 +296,44 @@ % 255 : page % 256 - : user defined -%D Later on, the \type {\c_syst_max_allocated_register} variable will be halfed so -%D that while local allocators will use the 22* range. So we have plenty of room -%D reserved for more private ones. +%D Later on, the \type {\c_syst_max_allocated_*} variables will be halfed so that +%D while local allocators will use the 23* range. So we have plenty of room reserved +%D for more private ones. + +\directlua {tex.magicconstants = status.getconstants()} % this will be reset later on \permanent\countdef\c_syst_min_allocated_register = 201 \c_syst_min_allocated_register = 256 % can change -\permanent\countdef\c_syst_max_allocated_register = 202 \c_syst_max_allocated_register = 65535 % is adapted later on + \permanent\countdef\c_syst_min_allocated_iohandle = 203 \c_syst_min_allocated_iohandle = 0 \permanent\countdef\c_syst_max_allocated_iohandle = 204 \c_syst_max_allocated_iohandle = 1023 -\permanent\countdef\c_syst_min_allocated_attribute = 205 \c_syst_min_allocated_attribute = 1024 % 0-1023 : private -\permanent\countdef\c_syst_min_allocated_mark = 206 \c_syst_min_allocated_mark = 16 % a few scratch ones -\permanent\countdef\c_syst_max_allocated_mark = 207 \c_syst_max_allocated_mark = 1024 % max 10K in luametatex anyway - -\permanent\countdef\c_syst_last_allocated_count = 211 \c_syst_last_allocated_count = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_dimen = 212 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_skip = 213 \c_syst_last_allocated_skip = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_muskip = 214 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_box = 215 \c_syst_last_allocated_box = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_toks = 216 \c_syst_last_allocated_toks = \c_syst_min_allocated_register -\permanent\countdef\c_syst_last_allocated_read = 217 \c_syst_last_allocated_read = \c_syst_min_allocated_iohandle -\permanent\countdef\c_syst_last_allocated_write = 218 \c_syst_last_allocated_write = \c_syst_min_allocated_iohandle -\permanent\countdef\c_syst_last_allocated_marks = 219 \c_syst_last_allocated_marks = \c_syst_min_allocated_mark - -\permanent\countdef\c_syst_min_counter_value = 253 \c_syst_min_counter_value = -"7FFFFFFF -\permanent\countdef\c_syst_max_counter_value = 254 \c_syst_max_counter_value = "7FFFFFFF + +\permanent\countdef\c_syst_min_allocated_mark = 205 \c_syst_min_allocated_mark = 16 % a few scratch ones +\permanent\countdef\c_syst_max_allocated_mark = 206 \c_syst_max_allocated_mark = 1024 % max 10K in luametatex anyway + +\permanent\countdef\c_syst_min_allocated_attribute = 207 \c_syst_min_allocated_attribute = 1024 % 0-1023 : private +\permanent\countdef\c_syst_max_allocated_attribute = 208 \c_syst_min_allocated_attribute = \directlua{tex.write(tex.magicconstants.max_attribute_register_index)} % 65535 % no allocator, managed differently + +\permanent\countdef\c_syst_max_allocated_count = 211 \c_syst_max_allocated_count = \directlua{tex.write(tex.magicconstants.max_int_register_index)} % 65535 % is adapted later on +\permanent\countdef\c_syst_max_allocated_dimen = 212 \c_syst_max_allocated_dimen = \directlua{tex.write(tex.magicconstants.max_dimen_register_index)} % idem +\permanent\countdef\c_syst_max_allocated_skip = 213 \c_syst_max_allocated_skip = \directlua{tex.write(tex.magicconstants.max_glue_register_index)} % idem +\permanent\countdef\c_syst_max_allocated_muskip = 214 \c_syst_max_allocated_muskip = \directlua{tex.write(tex.magicconstants.max_mu_glue_register_index)} % idem +\permanent\countdef\c_syst_max_allocated_box = 215 \c_syst_max_allocated_box = \directlua{tex.write(tex.magicconstants.max_box_register_index)} % idem +\permanent\countdef\c_syst_max_allocated_toks = 216 \c_syst_max_allocated_toks = \directlua{tex.write(tex.magicconstants.max_toks_register_index)} % idem +\permanent\countdef\c_syst_max_allocated_read = 217 \c_syst_max_allocated_read = \c_syst_max_allocated_iohandle +\permanent\countdef\c_syst_max_allocated_write = 218 \c_syst_max_allocated_write = \c_syst_max_allocated_iohandle + +\permanent\countdef\c_syst_last_allocated_count = 221 \c_syst_last_allocated_count = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_dimen = 222 \c_syst_last_allocated_dimen = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_skip = 223 \c_syst_last_allocated_skip = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_muskip = 224 \c_syst_last_allocated_muskip = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_box = 225 \c_syst_last_allocated_box = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_toks = 226 \c_syst_last_allocated_toks = \c_syst_min_allocated_register +\permanent\countdef\c_syst_last_allocated_read = 227 \c_syst_last_allocated_read = \c_syst_min_allocated_iohandle +\permanent\countdef\c_syst_last_allocated_write = 228 \c_syst_last_allocated_write = \c_syst_min_allocated_iohandle +\permanent\countdef\c_syst_last_allocated_marks = 229 \c_syst_last_allocated_marks = \c_syst_min_allocated_mark + +\permanent\countdef\c_syst_min_counter_value = 253 \c_syst_min_counter_value = -"7FFFFFFF +\permanent\countdef\c_syst_max_counter_value = 254 \c_syst_max_counter_value = "7FFFFFFF \immutable\integerdef\zerocount 0 \immutable\integerdef\plusone 1 @@ -339,15 +353,15 @@ %D The allocators share a common helper macro. Marks might be changed to work in lower %D regions and we always assumes allocation. -\permanent\protected\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_register} -\permanent\protected\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_register} -\permanent\protected\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_register} -\permanent\protected\def\newmuskip{\syst_basics_allocate\c_syst_last_allocated_muskip\muskip\muskipdef \c_syst_max_allocated_register} -\permanent\protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \integerdef\c_syst_max_allocated_register} -\permanent\protected\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_register} -\permanent\protected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \integerdef\c_syst_max_allocated_iohandle} -\permanent\protected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \integerdef\c_syst_max_allocated_iohandle} -\permanent\protected\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \integerdef\c_syst_max_allocated_mark } +\permanent\protected\def\newcount {\syst_basics_allocate\c_syst_last_allocated_count \count \countdef \c_syst_max_allocated_count} +\permanent\protected\def\newdimen {\syst_basics_allocate\c_syst_last_allocated_dimen \dimen \dimendef \c_syst_max_allocated_dimen} +\permanent\protected\def\newskip {\syst_basics_allocate\c_syst_last_allocated_skip \skip \skipdef \c_syst_max_allocated_skip} +\permanent\protected\def\newmuskip{\syst_basics_allocate\c_syst_last_allocated_muskip\muskip\muskipdef \c_syst_max_allocated_muskip} +\permanent\protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \integerdef\c_syst_max_allocated_box} +\permanent\protected\def\newtoks {\syst_basics_allocate\c_syst_last_allocated_toks \toks \toksdef \c_syst_max_allocated_toks} +\permanent\protected\def\newread {\syst_basics_allocate\c_syst_last_allocated_read \read \integerdef\c_syst_max_allocated_read} +\permanent\protected\def\newwrite {\syst_basics_allocate\c_syst_last_allocated_write \write \integerdef\c_syst_max_allocated_write} +\permanent\protected\def\newmarks {\syst_basics_allocate\c_syst_last_allocated_marks \marks \integerdef\c_syst_max_allocated_mark} \firstvalidlanguage \plusone % so zero is ignored in hyphenation, this might become the default @@ -424,9 +438,6 @@ %D Since the number of chars exceed 256 now, we can use \type {\chardef} instead of %D the more limited \type {\mathchardef}. -% \protected\def\newbox {\syst_basics_allocate\c_syst_last_allocated_box \box \chardef\c_syst_max_allocated_register} -% \protected\def\newmarks{\syst_basics_allocate\c_syst_last_allocated_marks\marks\chardef\c_syst_max_allocated_register} - %D Attributes are something very \LUATEX. In \CONTEXT\ you are not supposed to use %D the attributes directly but always allocate then first. For instance attribute~0 %D is reserved for special purposes (this might change). Attributes in the range @@ -434,7 +445,7 @@ \immutable\integerdef\attributeunsetvalue\c_syst_min_counter_value % used to be \minusone -% \permanent\protected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register} +% \permanent\protected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_attribute} % %D Not used by \CONTEXT\ but for instance \PICTEX\ needs it. It's a trick to force % %D strings instead of tokens that take more memory. @@ -739,14 +750,16 @@ % For now: -\permanent\protected\def\defUmathtopaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathaccent "#2 "#3 "#4 }} -\permanent\protected\def\defUmathbotaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathbotaccent "#2 "#3 "#4 }} -\permanent\protected\def\defUdelimiterover #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterover "#2 "#3 }} -\permanent\protected\def\defUdelimiterunder #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterunder "#2 "#3 }} -\permanent\protected\def\defUdelimiter #1#2#3#4{\global\immutable\protected\def#1{\Udelimiter "#2 "#3 "#4 }} -\permanent\protected\def\defUradical #1#2#3{\global\immutable\protected\def#1{\Uradical "#2 "#3 }} -\permanent\protected\def\defUroot #1#2#3{\global\immutable\protected\def#1{\Uroot "#2 "#3 }} -\permanent\protected\def\defUmathchar #1#2#3#4{\global\immutable\Umathchardef #1 "#2 "#3 "#4 } +\permanent\protected\def\defUmathfixedtopaccent#1#2#3#4{\global\immutable\protected\def#1{\Umathtopaccent \s!fixed "#2 "#3 "#4 }} +\permanent\protected\def\defUmathfixedbotaccent#1#2#3#4{\global\immutable\protected\def#1{\Umathbotaccent \s!fixed "#2 "#3 "#4 }} +\permanent\protected\def\defUmathtopaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathtopaccent "#2 "#3 "#4 }} +\permanent\protected\def\defUmathbotaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathbotaccent "#2 "#3 "#4 }} +\permanent\protected\def\defUdelimiterover #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterover "#2 "#3 }} +\permanent\protected\def\defUdelimiterunder #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterunder "#2 "#3 }} +\permanent\protected\def\defUdelimiter #1#2#3#4{\global\immutable\protected\def#1{\Udelimiter "#2 "#3 "#4 }} +\permanent\protected\def\defUradical #1#2#3{\global\immutable\protected\def#1{\Uradical "#2 "#3 }} +\permanent\protected\def\defUroot #1#2#3{\global\immutable\protected\def#1{\Uroot "#2 "#3 }} +\permanent\protected\def\defUmathchar #1#2#3#4{\global\immutable\Umathchardef #1 "#2 "#3 "#4 } %D For a while we keep the following, as systems like tikz need it. Best not use %D that one \CONTEXT. It will probably move to the tikz loader. @@ -1130,7 +1143,7 @@ \permanent\def\hidewidth % for alignment entries that can stick out {\hskip\hideskip} -\permanent\def\ialign % initialized \halign +\permanent\def\ialign % initialized \halign, to be used grouped! {\everycr\emptytoks \tabskip\zeroskip \halign} @@ -1308,29 +1321,28 @@ %D %D There is a little extra overhead in the overload protection but not that much. -\permanent\countdef\c_syst_local_count = 221 \c_syst_local_count = \c_syst_max_allocated_register -\permanent\countdef\c_syst_local_dimen = 222 \c_syst_local_dimen = \c_syst_local_count -\permanent\countdef\c_syst_local_skip = 223 \c_syst_local_skip = \c_syst_local_count -\permanent\countdef\c_syst_local_muskip = 224 \c_syst_local_muskip = \c_syst_local_count -\permanent\countdef\c_syst_local_box = 225 \c_syst_local_box = \c_syst_local_count -\permanent\countdef\c_syst_local_toks = 226 \c_syst_local_toks = \c_syst_local_count -\permanent\countdef\c_syst_local_read = 227 \c_syst_local_read = \c_syst_local_count -\permanent\countdef\c_syst_local_write = 228 \c_syst_local_write = \c_syst_local_count - -\c_syst_max_allocated_register \numexpr\c_syst_max_allocated_register:2\relax % floor +\permanent\countdef\c_syst_local_count = 231 \c_syst_local_count = \c_syst_max_allocated_count +\permanent\countdef\c_syst_local_dimen = 232 \c_syst_local_dimen = \c_syst_max_allocated_dimen +\permanent\countdef\c_syst_local_skip = 233 \c_syst_local_skip = \c_syst_max_allocated_skip +\permanent\countdef\c_syst_local_muskip = 234 \c_syst_local_muskip = \c_syst_max_allocated_muskip +\permanent\countdef\c_syst_local_box = 235 \c_syst_local_box = \c_syst_max_allocated_box +\permanent\countdef\c_syst_local_toks = 236 \c_syst_local_toks = \c_syst_max_allocated_toks +\permanent\countdef\c_syst_local_read = 237 \c_syst_local_read = \c_syst_max_allocated_read +\permanent\countdef\c_syst_local_write = 238 \c_syst_local_write = \c_syst_max_allocated_write + +\c_syst_max_allocated_count \numexpr\c_syst_max_allocated_count :2\relax % floor +\c_syst_max_allocated_dimen \numexpr\c_syst_max_allocated_dimen :2\relax % floor +\c_syst_max_allocated_skip \numexpr\c_syst_max_allocated_skip :2\relax % floor +\c_syst_max_allocated_muskip \numexpr\c_syst_max_allocated_muskip :2\relax % floor +\c_syst_max_allocated_toks \numexpr\c_syst_max_allocated_toks :2\relax % floor +\c_syst_max_allocated_box \numexpr\c_syst_max_allocated_box :2\relax % floor +\c_syst_max_allocated_read \numexpr\c_syst_max_allocated_read :2\relax % floor +\c_syst_max_allocated_write \numexpr\c_syst_max_allocated_write :2\relax % floor \permanent\protected\def\syst_local_overflow#1#2{\writestatus\m!system{no room for local #1 \string#2}\wait} -\permanent\protected\def\setnewlocaldimen#1% - {\ifnum\c_syst_local_dimen>\c_syst_max_allocated_register - \advance\c_syst_local_dimen\minusone\dimendef#1\c_syst_local_dimen - \else - \syst_local_overflow_dimen#1% - \fi - #1} - \permanent\protected\def\setnewlocalcount#1% - {\ifnum\c_syst_local_count>\c_syst_max_allocated_register + {\ifnum\c_syst_local_count>\c_syst_max_allocated_count \advance\c_syst_local_count\minusone \overloaded\frozen\countdef#1\c_syst_local_count \else @@ -1338,8 +1350,16 @@ \fi #1} +\permanent\protected\def\setnewlocaldimen#1% + {\ifnum\c_syst_local_dimen>\c_syst_max_allocated_dimen + \advance\c_syst_local_dimen\minusone\dimendef#1\c_syst_local_dimen + \else + \syst_local_overflow_dimen#1% + \fi + #1} + \permanent\protected\def\setnewlocalskip#1% - {\ifnum\c_syst_local_skip>\c_syst_max_allocated_register + {\ifnum\c_syst_local_skip>\c_syst_max_allocated_skip \advance\c_syst_local_skip\minusone \overloaded\frozen\skipdef#1\c_syst_local_skip \else @@ -1348,7 +1368,7 @@ #1} \permanent\protected\def\setnewlocalmuskip#1% - {\ifnum\c_syst_local_muskip>\c_syst_max_allocated_register + {\ifnum\c_syst_local_muskip>\c_syst_max_allocated_muskip \advance\c_syst_local_muskip\minusone \overloaded\frozen\muskipdef#1\c_syst_local_muskip \else @@ -1357,7 +1377,7 @@ #1} \permanent\protected\def\setnewlocaltoks#1% - {\ifnum\c_syst_local_toks>\c_syst_max_allocated_register + {\ifnum\c_syst_local_toks>\c_syst_max_allocated_toks \advance\c_syst_local_toks\minusone \overloaded\frozen\toksdef#1\c_syst_local_toks \else @@ -1366,7 +1386,7 @@ #1} \permanent\protected\def\setnewlocalbox#1% - {\ifnum\c_syst_local_box>\c_syst_max_allocated_register + {\ifnum\c_syst_local_box>\c_syst_max_allocated_box \advance\c_syst_local_box\minusone \overloaded\frozen\integerdef#1\c_syst_local_box \else @@ -1375,7 +1395,7 @@ \setbox#1} \permanent\protected\def\newlocalread#1% so no set - {\ifnum\c_syst_local_read>\c_syst_max_allocated_register + {\ifnum\c_syst_local_read>\c_syst_max_allocated_read \advance\c_syst_local_read\minusone \overloaded\frozen\integerdef#1\c_syst_local_read \else @@ -1383,7 +1403,7 @@ \fi} \permanent\protected\def\newlocalwrite#1% so no set - {\ifnum\c_syst_local_write>\c_syst_max_allocated_register + {\ifnum\c_syst_local_write>\c_syst_max_allocated_write \advance\c_syst_local_write\minusone \overloaded\frozen\integerdef#1\c_syst_local_write \else @@ -1435,4 +1455,8 @@ \tracingfullboxes\zerocount +%D We don't do this: + +% \setdefaultmathcodes % initializes traditional codes + \protect \endinput diff --git a/tex/context/base/mkxl/toks-aux.lmt b/tex/context/base/mkxl/toks-aux.lmt index c7d2fb2fc..f1bac2093 100644 --- a/tex/context/base/mkxl/toks-aux.lmt +++ b/tex/context/base/mkxl/toks-aux.lmt @@ -10,6 +10,24 @@ local max = math.max local formatters, gsub, char, gmatch = string.formatters, string.gsub, string.char, string.gmatch local concat = table.concat +do + + -- tex.magicconstants = { -- we use tex.constants for something else + -- running = -1073741824, -- null_flag + -- maxdimen = 1073741823, -- max_dimen + -- -- trueinch = 4736286, -- obsolete + -- } + + local c = status.getconstants() + local t = { } + for k, v in next, c do + t[gsub(k,"_","")] = v + end + + tex.magicconstants = table.setmetatableindex(t,c) + +end + -- todo : locals from scanners local function flags(t) @@ -165,8 +183,8 @@ tex.glyphoptioncodes = getthem(tex.getglyphoptionvalues, "glyphoptioncode") tex.groupcodes = getthem(tex.getgroupvalues, "groupcode") tex.hyphenationcodes = getthem(tex.gethyphenationvalues, "hyphenationcode") tex.mathcontrolcodes = getthem(tex.getmathcontrolvalues, "mathcontrolcode") -tex.mathflattencodes = getthem(tex.getmathflattenvalues, "mathflattencode") -tex.mathoptioncodes = getthem(tex.getmathoptionvalues, "") -- only at lua end +---.mathflattencodes = getthem(tex.getmathflattenvalues, "mathflattencode") +tex.noadoptioncodes = getthem(tex.getnoadoptionvalues, "") -- only at lua end tex.normalizecodes = getthem(tex.getnormalizevalues, "normalizecode") tex.automigrationcodes = getthem(tex.getautomigrationvalues, "automigrationcode") -- only at lua end tex.parcontextcodes = getthem(tex.getparcontextvalues, "parcontextcode") diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index e2c4133b4..255e26230 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -40,6 +40,7 @@ local setsubtype = nuts.setsubtype local setattr = nuts.setattr local setwidth = nuts.setwidth local setshift = nuts.setshift +local setoffsets = nuts.setoffsets local getid = nuts.getid local getfont = nuts.getfont @@ -410,7 +411,7 @@ local function sometext(str,layer,color,textcolor,lap,variant) info = hpack_nodes(info) local width = getwidth(info) if variant then - nuts.setoffsets(info,0,variant*exheight) + setoffsets(info,0,variant*exheight) end if lap then info = new_hlist(setlink(new_kern(-width),info)) @@ -835,7 +836,14 @@ local ruledbox do local info = setlink( this and copylist(this) or nil, (force_origin and emptyrule(wd,ht,dp)) -- we accept some overhead - or (dp == 0 and outlinerule and outlinerule(wd,ht,dp,linewidth)) + or dp == 0 and userrule { + width = wd, + height = ht, + line = linewidth, + type = "box", + baseline = false, + + } or userrule { width = wd, height = ht, @@ -843,6 +851,7 @@ local ruledbox do line = linewidth, type = "box", dashed = 3*size, + } ) -- @@ -972,6 +981,7 @@ end local ruledglue, ruledmathglue do local effectiveglue = nuts.effectiveglue + local iszeroglue = nuts.iszeroglue local gluecodes = nodes.gluecodes @@ -1002,6 +1012,7 @@ local ruledglue, ruledmathglue do local g_cache_is = caches["indentskip"] local g_cache_cs = caches["correctionskip"] local g_cache_gn = caches["gluename"] + local g_cache_gz = caches["gluezero"] local tags = { -- [userskip_code] = "US", @@ -1051,18 +1062,43 @@ local ruledglue, ruledmathglue do -- we sometimes pass previous as we can have issues in math (not watertight for all) - local f_amount = formatters["%s:%0.3f"] - local mathvalues = nodes.mathvalues + local f_amount = formatters["%s:%0.3f"] + local mathvalues = nodes.mathvalues + + mathvalues[-1] = "left" + mathvalues[-2] = "right" + + local morehack = setmetatableindex(function(t,k) + local v = mathematics.classnames[k] -- yet unknown +-- v = v and string.sub(v,1,4) or string.formatters["x%02x"](k) + v = v and string.sub(v,1,3) or string.formatters["x%02x"](k) + t[k] = v + return v + end) - local function gluename(name,layer,color) - local info = g_cache_gn[name] + local temphack = setmetatableindex(function(t,k) + local v = mathvalues[k] + if v then + v = gsub(v,"spacing","") -- old + else + v = k - 256 + v = morehack[v//64] ..morehack[v%64] + end + t[k] = v + return v + end) + + local function gluename(current,layer,color) + local name = getfont(current) + local zero = iszeroglue(current) + local info = zero and g_cache_gz[name] or g_cache_gn[name] if not info then - local text = hpack_string((gsub(mathvalues[name],"spacing","")),usedfont) - local rule = new_rule(emwidth/fraction,2*exheight,2.75*exheight) + local text = hpack_string(temphack[name],usedfont) + local rule = new_rule(emwidth/fraction,2*exheight,(zero and 4.25 or 2.75)*exheight) local list = getlist(text) setlisttransparency(list,color) settransparency(rule,color) - setshift(text,2*exheight) + setshift(text,(zero and 3.5 or 2)*exheight) info = new_hlist(setlink(rule,text)) setattr(info,a_layer,layer) g_cache_gn[name] = info @@ -1071,7 +1107,7 @@ local ruledglue, ruledmathglue do end ruledmathglue = function(head,current) - return insertnodebefore(head,current,gluename(getfont(current),l_glue,"trace:m")) + return insertnodebefore(head,current,gluename(current,l_glue,"trace:m")) end ruledglue = function(head,current,vertical,parent) @@ -1182,6 +1218,23 @@ local ruledkern do end +local ruledstrut do + + local strut_size = 65536 / 2 + local strut_code = nodes.rulecodes.strut + + ruledstrut = function(head,current) + if getsubtype(current) == strut_code and getwidth(current) == 0 then + -- maybe force gray + setwidth(current,strut_size) + setattr(current,a_layer,l_strut) + head, current = insertnodeafter(head,current,new_kern(-strut_size)) + end + return head, getnext(current) + end + +end + local ruleditalic do local i_cache = caches["italic"] @@ -1340,6 +1393,7 @@ do local par_code = nodecodes.par local mark_code = nodecodes.mark local insert_code = nodecodes.insert + local rule_code = nodecodes.rule local kerncodes = nodes.kerncodes local fontkern_code = kerncodes.fontkern @@ -1481,9 +1535,10 @@ do elseif a == unsetvalue then goto list end - if trace_strut then - setattr(current,a_layer,l_strut) - elseif id == glyph_code then + -- if trace_strut then + -- setattr(current,a_layer,l_strut) + -- else + if id == glyph_code then if trace_glyph then head, current = ruledglyph(head,current,previous) end @@ -1515,6 +1570,10 @@ do end elseif id == hlist_code or id == vlist_code then goto list + elseif id == rule_code then + if trace_strut then + head, current = ruledstrut(head,current) + end elseif id == whatsit_code then if trace_whatsit then head, current = ruledwhatsit(head,current) @@ -1766,7 +1825,7 @@ do actions = { setvisual, context } } - implement { + implement { name = "setvisuallayer", arguments = "string", actions = visualizers.setlayer diff --git a/tex/context/base/mkxl/type-imp-bengali.mkxl b/tex/context/base/mkxl/type-imp-bengali.mkxl new file mode 100644 index 000000000..84a0b6402 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-bengali.mkxl @@ -0,0 +1,73 @@ +%D \module +%D [ file=type-imp-bengali, +%D version=2022.02.02, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Bengali, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\starttypescriptcollection[bengali] + + \doifunknownfontfeature {bengali-bold-30} {\definefontfeature[bengali-bold-30][boldened-30]} + + % Symbolic names for fonts: + + \starttypescript [\s!serif] [murty-bangla] + \definefontsynonym [MurtyBengali-Regular] [\s!name:murtybanglaregular] [\s!features=bengali-two] + \definefontsynonym [MurtyBengali-Bold] [\s!name:murtybanglaregular] [\s!features={bengali-two,bengali-bold-30}] + \stoptypescript + + \starttypescript [\s!sans] [baloo-da, baloo-da-extrabold] + \definefontsynonym [BalooDa2-Regular] [\s!name:balooda2regular] [\s!features=bengali-two] + \definefontsynonym [BalooDa2-Medium] [\s!name:balooda2medium] [\s!features=bengali-two] + \definefontsynonym [BalooDa2-Semibold] [\s!name:balooda2semibold] [\s!features=bengali-two] + \definefontsynonym [BalooDa2-Bold] [\s!name:balooda2bold] [\s!features=bengali-two] + \definefontsynonym [BalooDa2-Extrabold] [\s!name:balooda2extrabold] [\s!features=bengali-two] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!sans] [baloo-da] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooDa2-Regular] + \definefontsynonym [\s!SansSlanted] [BalooDa2-Medium] + \definefontsynonym [\s!SansBold] [BalooDa2-Bold] + \definefontsynonym [\s!SansBoldSlanted] [BalooDa2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-da-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooDa2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooDa2-Semibold] + \definefontsynonym [\s!SansBold] [BalooDa2-Extrabold] + \definefontsynonym [\s!SansBoldSlanted] [BalooDa2-Bold] + \stoptypescript + + \starttypescript [\s!serif] [murty-bangla] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [MurtyBengali-Regular] + \definefontsynonym [\s!SerifBold] [MurtyBengali-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [baloo-da, baloo-da-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!rscale=1.1] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [murty-bangla] + \definetypeface [murty-bangla] [\s!rm] [\s!serif] [murty-bangla] [\s!default] [\s!rscale=1.1] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-devanagari.mkxl b/tex/context/base/mkxl/type-imp-devanagari.mkxl new file mode 100644 index 000000000..4fb082094 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-devanagari.mkxl @@ -0,0 +1,244 @@ +%D \module +%D [ file=type-imp-devanagari, +%D version=2022.02.02, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Devanagari, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D This collection uses rscaling so that the fonts can be used alongside. + +\starttypescriptcollection[devanagari] + + \definefontfeature + [shobhikafeatures] + [devanagari-two] + [goodies=shobhika.lfg, + indic={movematra=auto,conjuncts=quit}, + sanitizer=dev2rkrf] + + \definefontfeature + [baloofeatures] + [shobhikafeatures] + + \definefontfeature + [amitafeatures] + [devanagari-two] + [goodies=shobhika.lfg, + sanitizer=dev2rkrf] + + \definefontfeature + [jainifeatures] + [shobhikafeatures] + [\s!ss01=yes,ss05=yes] + + \definefontfeature + [adishilafeatures] + [devanagari-one] + [indic={movematra=auto,conjuncts=quit}] + + % Symbolic names for fonts: + + \starttypescript [\s!serif] [adishila] + \definefontsynonym [Adishila-Regular] [\s!name:adishilaregular] [\s!features=adishilafeatures] + \definefontsynonym [Adishila-Bold] [\s!name:adishilabold] [\s!features=adishilafeatures] + \definefontsynonym [Adishila-Italic] [\s!name:adishilaitalic] [\s!features=adishilafeatures] + \definefontsynonym [Adishila-BoldItalic] [\s!name:adishilabolditalic] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-semibold] + \definefontsynonym [AdishilaSemibold-Regular] [\s!name:adishilasemiboldregular] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSemibold-Italic] [\s!name:adishilasemibolditalic] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-heavy] + \definefontsynonym [AdishilaHeavy-Regular] [\s!name:adishilaheavyregular] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaHeavy-Italic] [\s!name:adishilaheavyitalic] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-dev] + \definefontsynonym [AdishilaDev-Regular] [\s!name:adishiladevregular] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaDev-Bold] [\s!name:adishiladevbold] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-dev-guru] + \definefontsynonym [AdishilaDev-Guru] [\s!name:adishiladevguru] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-san] + \definefontsynonym [AdishilaSan-Regular] [\s!name:adishilasanregular] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSan-Bold] [\s!name:adishilasanbold] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSan-Italic] [\s!name:adishilasanitalic] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSan-BoldItalic] [\s!name:adishilasanbolditalic] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [adishila-san-letterpress] + \definefontsynonym [AdishilaSanLetterpress-Regular] [\s!name:adishilasanletterpressregular] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSanLetterpress-Bold] [\s!name:adishilasanletterpressbold] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSanLetterpress-Italic] [\s!name:adishilasanletterpressitalic] [\s!features=adishilafeatures] + \definefontsynonym [AdishilaSanLetterpress-BoldItalic] [\s!name:adishilasanletterpressbolditalic] [\s!features=adishilafeatures] + \stoptypescript + + \starttypescript [\s!serif] [shobhika] + \definefontsynonym [Shobhika-Regular] [\s!name:shobhikaregular] [\s!features=shobhikafeatures] + \definefontsynonym [Shobhika-Bold] [\s!name:shobhikabold] [\s!features=shobhikafeatures] + \stoptypescript + + \starttypescript [\s!sans] [baloo,baloo-extrabold] + \definefontsynonym [Baloo2-Regular] [\s!name:baloo2regular] [\s!features=baloofeatures] + \definefontsynonym [Baloo2-Medium] [\s!name:baloo2medium] [\s!features=baloofeatures] + \definefontsynonym [Baloo2-Semibold] [\s!name:baloo2semibold] [\s!features=baloofeatures] + \definefontsynonym [Baloo2-Bold] [\s!name:baloo2bold] [\s!features=baloofeatures] + \definefontsynonym [Baloo2-Extrabold] [\s!name:baloo2extrabold] [\s!features=baloofeatures] + \stoptypescript + + \starttypescript [\s!serif] [jaini] + \definefontsynonym [Jaini-Regular] [\s!name:jainiregular] [\s!features=jainifeatures] + \stoptypescript + + \starttypescript [\s!serif] [jaini-purva] + \definefontsynonym [JainiPurva-Regular] [\s!name:jainipurvaregular] [\s!features=jainifeatures] + \stoptypescript + + \starttypescript [\s!serif] [amita] + \definefontsynonym [Amita-Regular] [\s!name:amitaregular] [\s!features=amitafeatures] + \definefontsynonym [Amita-Bold] [\s!name:amitabold] [\s!features=amitafeatures] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!serif] [adishila] [\s!name] + \definefontsynonym [\s!Serif] [Adishila-Regular] + \definefontsynonym [\s!SerifBold] [Adishila-Bold] + \definefontsynonym [\s!SerifItalic] [Adishila-Italic] + \definefontsynonym [\s!SerifBoldItalic] [Adishila-BoldItalic] + \stoptypescript + + \starttypescript [\s!serif] [adishila-semibold] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaSemibold-Regular] + \definefontsynonym [\s!SerifItalic] [AdishilaSemibold-Italic] + \stoptypescript + + \starttypescript [\s!serif] [adishila-heavy] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaHeavy-Regular] + \definefontsynonym [\s!SerifItalic] [AdishilaHeavy-Italic] + \stoptypescript + + \starttypescript [\s!serif] [adishila-dev] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaDev-Regular] + \definefontsynonym [\s!SerifBold] [AdishilaDev-Bold] + \stoptypescript + + \starttypescript [\s!serif] [adishila-dev-guru] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaDev-Guru] + \stoptypescript + + \starttypescript [\s!serif] [adishila-san] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaSan-Regular] + \definefontsynonym [\s!SerifBold] [AdishilaSan-Bold] + \definefontsynonym [\s!SerifItalic] [AdishilaSan-Italic] + \definefontsynonym [\s!SerifBoldItalic] [AdishilaSan-BoldItalic] + \stoptypescript + + \starttypescript [\s!serif] [adishila-san-letterpress] [\s!name] + \definefontsynonym [\s!Serif] [AdishilaSanLetterpress-Regular] + \definefontsynonym [\s!SerifBold] [AdishilaSanLetterpress-Bold] + \definefontsynonym [\s!SerifItalic] [AdishilaSanLetterpress-Italic] + \definefontsynonym [\s!SerifBoldItalic] [AdishilaSanLetterpress-BoldItalic] + \stoptypescript + + \starttypescript [\s!serif] [shobhika] [\s!name] + \definefontsynonym [\s!Serif] [Shobhika-Regular] + \definefontsynonym [\s!SerifBold] [Shobhika-Bold] + \stoptypescript + + \starttypescript [\s!sans] [baloo] [\s!name] + \definefontsynonym [\s!Sans] [Baloo2-Regular] + \definefontsynonym [\s!SansBold] [Baloo2-Bold] + \definefontsynonym [\s!SansItalic] [Baloo2-Medium] + \definefontsynonym [\s!SansBoldItalic] [Baloo2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-extrabold] [\s!name] + \definefontsynonym [\s!Sans] [Baloo2-Medium] + \definefontsynonym [\s!SansItalic] [Baloo2-Semibold] + \definefontsynonym [\s!SansBoldItalic] [Baloo2-Bold] + \definefontsynonym [\s!SansBold] [Baloo2-Extrabold] + \stoptypescript + + \starttypescript [\s!serif] [jaini] [\s!name] + \definefontsynonym [\s!Serif] [Jaini-Regular] + \stoptypescript + + \starttypescript [\s!serif] [jaini-purva] [\s!name] + \definefontsynonym [\s!Serif] [JainiPurva-Regular] + \stoptypescript + + \starttypescript [\s!serif] [amita] [\s!name] + \definefontsynonym [\s!Serif] [Amita-Regular] + \definefontsynonym [\s!SerifBold] [Amita-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [adishila] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.42] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + \starttypescript [adishila-semibold,adishila-heavy] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.46] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [adishila-dev] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.65] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [adishila-dev-guru,adishila-san,adishila-san-letterpress] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.62] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [shobhika] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [baloo,baloo-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [jaini,jaini-purva] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.5] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [amita] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.2] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-gujarati.mkxl b/tex/context/base/mkxl/type-imp-gujarati.mkxl new file mode 100644 index 000000000..d7f3f7072 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-gujarati.mkxl @@ -0,0 +1,77 @@ +%D \module +%D [ file=type-imp-gujarati, +%D version=2022.02.02, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Gujarati, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\starttypescriptcollection[gujarati] + + \definefontfeature + [baloobhaifeatures] + [gujarati-two] + [goodies=bhai.lfg, + indic={movematra=auto,conjuncts=quit}, + sanitizer=gjr2rkrf] + + % Symbolic names for fonts: + \starttypescript [\s!serif] [noto-serif-gujarati] + \definefontsynonym [NotoSerifGujarati-Regular] [\s!name:notoserifgujaratiregular] [\s!features=baloobhaifeatures] + \definefontsynonym [NotoSerifGujarati-Bold] [\s!name:notoserifgujaratibold] [\s!features=baloobhaifeatures] + \stoptypescript + + \starttypescript [\s!sans] [baloo-bhai, baloo-bhai-extrabold] + \definefontsynonym [BalooBhai2-Regular] [\s!name:baloobhai2regular] [\s!features=baloobhaifeatures] + \definefontsynonym [BalooBhai2-Medium] [\s!name:baloobhai2medium] [\s!features=baloobhaifeatures] + \definefontsynonym [BalooBhai2-Semibold] [\s!name:baloobhai2semibold] [\s!features=baloobhaifeatures] + \definefontsynonym [BalooBhai2-Bold] [\s!name:baloobhai2bold] [\s!features=baloobhaifeatures] + \definefontsynonym [BalooBhai2-Extrabold] [\s!name:baloobhai2extrabold] [\s!features=baloobhaifeatures] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!serif] [noto-serif-gujarati] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [NotoSerifGujarati-Regular] + \definefontsynonym [\s!SerifBold] [NotoSerifGujarati-Bold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-bhai] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooBhai2-Regular] + \definefontsynonym [\s!SansSlanted] [BalooBhai2-Medium] + \definefontsynonym [\s!SansBold] [BalooBhai2-Bold] + \definefontsynonym [\s!SansBoldSlanted] [BalooBhai2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-bhai-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooBhai2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooBhai2-Semibold] + \definefontsynonym [\s!SansBold] [BalooBhai2-Extrabold] + \definefontsynonym [\s!SansBoldSlanted] [BalooBhai2-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [baloo-bhai, baloo-bhai-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!rscale=1.1] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [noto-serif-gujarati] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.1] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-indic.mkxl b/tex/context/base/mkxl/type-imp-indic.mkxl new file mode 100644 index 000000000..aeda08337 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-indic.mkxl @@ -0,0 +1,800 @@ +%D \module +%D [ file=type-imp-indic, +%D version=2022.02.02, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=A Collection of Indic Fonts, +%D author=Sreeram & Hans, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D This file is a compation to the other indic typescript that evolved out +%D of a series of experiments with fonts and extensive research by Sreeram +%D with respect to them either or not supporting level one and level two +%D features. When there are issues, just ask on the mailing list. + +\definefilesynonym [type-imp-adishila.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-semibold.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-heavy.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-dev.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-dev-guru.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-san.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-adishila-san-letterpress.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-shobhika.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-baloo-extrabold.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-baloo.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-jaini.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-jaini-purva.mkxl] [type-imp-devanagari.mkxl] +\definefilesynonym [type-imp-amita.mkxl] [type-imp-devanagari.mkxl] + +\definefilesynonym [type-imp-rit-rachana.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-panmana.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-ezhuthu.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-karumbi.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-chilanka.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-anjali-oldlipi.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-dyuthi.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-tn-joy.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-tn-joy-extrabold.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-gayathri.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-gayathri-thin.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-manjari.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-manjari-thin.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-baloo-chettan.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-baloo-chettan-extrabold.mkxl] [type-imp-malayalam.mkxl] +\definefilesynonym [type-imp-rit-sundar.mkxl] [type-imp-malayalam.mkxl] + +\definefilesynonym [type-imp-baloo-tammudu.mkxl] [type-imp-telugu.mkxl] +\definefilesynonym [type-imp-baloo-tammudu-extrabold.mkxl] [type-imp-telugu.mkxl] +\definefilesynonym [type-imp-murty-telugu.mkxl] [type-imp-telugu.mkxl] + +\definefilesynonym [type-imp-murty-kannada.mkxl] [type-imp-kannada.mkxl] + +\definefilesynonym [type-imp-baloo-thambi.mkxl] [type-imp-tamil.mkxl] +\definefilesynonym [type-imp-baloo-thambi-extrabold.mkxl] [type-imp-tamil.mkxl] + +\definefilesynonym [type-imp-baloo-bhai.mkxl] [type-imp-gujarati.mkxl] +\definefilesynonym [type-imp-baloo-bhai-extrabold.mkxl] [type-imp-gujarati.mkxl] +\definefilesynonym [type-imp-noto-serif-gujarati.mkxl] [type-imp-gujarati.mkxl] + +\definefilesynonym [type-imp-baloo-da.mkxl] [type-imp-bengali.mkxl] +\definefilesynonym [type-imp-baloo-da-extrabold.mkxl] [type-imp-bengali.mkxl] +\definefilesynonym [type-imp-murty-bangla.mkxl] [type-imp-bengali.mkxl] + +\continueifinputfile{type-imp-indic.mkxl} + +% \usetypescriptfile[type-imp-indic] + +\usemodule[article-basics] + +\setupbodyfont + [pagella] + +\setuphead + [title] + [alternative=middle, + hidenumber=yes, + after={\blank[halfline]}, + before={\blank[line]}, + page=no, + style=\bfb] + +\definedescription + [fs] + [alternative=left, + title=yes, + width=3cm, + distance=0cm, + before=, + after=, + headstyle={\switchtobodyfont[pagella]}] + +\usetransliteration + [indic] + +\definetransliteration + [devatoiast] + [color=blue, + vector={deva to iast}, + before=] + +\definetransliteration + [devatomlym] + [vector={deva to mlym}] + +\definetransliteration + [devatotlgu] + [vector={deva to tlgu}] + +\definetransliteration + [devatoknda] + [vector={deva to knda}] + +\definetransliteration + [devatogujr] + [vector={deva to gujr}] + +\definetransliteration + [devatobngl] + [vector={deva to bngl}] + +\definebuffer[words] +\definebuffer[iastbuffer] + +\language[sa] + +\starttext + +\startbuffer[words] +दंष्ट्रा श्रेयस्करी त्रेता विक्रेता तच्छ्री अङ्कित शृङ्गार क्व्य शार्ङ्ग निरृति +क्रतुवित्त बर्हिस् प्रेप्सित अङ्घ्रि पङ्क्ति कर्त्तव्य कर्तव्य श्लाघ्यम् +अवप्लुतम् युङ्क्ष्वा क्षेत्रज्ञ अग्निमीळे चँद्र हर्त्रे श्री आर्द्रं +\stopbuffer + +\startbuffer +\getbuffer[words] +\stopbuffer + + +% \startbuffer[iastbuffer] +% \startdevatoiast[before=\blank,after=\blank] +% \getbuffer +% \stopdevatoiast +% \stopbuffer +% +% \getbuffer[iastbuffer] + +% +% +% Devanagari +% +% +\starttitle[title={Adishila}] + \start + \switchtobodyfont[adishila] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila Semibold}] + \start + \switchtobodyfont[adishila-semibold] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila Heavy}] + \start + \switchtobodyfont[adishila-heavy] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila Dev}] + \start + \switchtobodyfont[adishila-dev] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila Dev}] + \start + \switchtobodyfont[adishila-dev-guru] + \startfs{Guru} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila San}] + \start + \switchtobodyfont[adishila-san] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Adishila San Letterpress}] + \start + \switchtobodyfont[adishila-san-letterpress] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Shobhika}] + \start + \switchtobodyfont[shobhika] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo 2 Extra Bold}] + \start + \switchtobodyfont[baloo-extrabold] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo 2}] + \start + \switchtobodyfont[baloo] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Jaini}] + \start + \switchtobodyfont[jaini] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Jaini Purva}] + \start + \switchtobodyfont[jaini-purva] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Amita}] + \start + \switchtobodyfont[amita] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle +% +% +% Malayalam +% +% +\startbuffer +\startdevatomlym +\getbuffer[words] +\stopdevatomlym +\stopbuffer + +\starttitle[title={RIT Rachana}] + \start + \switchtobodyfont[rit-rachana] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\it\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bi\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Panmana}] + \start + \switchtobodyfont[panmana] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Ezhuthu}] + \start + \switchtobodyfont[ezhuthu] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Slanted} + {\sl\getbuffer} + \stopfs + \startfs{Bold Slanted} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Karumbi}] + \start + \switchtobodyfont[karumbi] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Chilanka}] + \start + \switchtobodyfont[chilanka] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Anjali Old Lipi}] + \start + \switchtobodyfont[anjali-oldlipi] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={Dyuthi}] + \start + \switchtobodyfont[dyuthi] + \startfs{Regular} + \getbuffer + \stopfs + \stop +\stoptitle + +\starttitle[title={TN Joy}] + \start + \switchtobodyfont[tn-joy] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={TN Joy Extrabold}] + \start + \switchtobodyfont[tn-joy-extrabold] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Gayathri}] + \start + \switchtobodyfont[gayathri] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\sl\getbuffer} + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Gayathri Thin}] + \start + \switchtobodyfont[gayathri-thin] + \startfs{Thin (R)} + \getbuffer + \stopfs + \startfs{Bold*} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Manjari}] + \start + \switchtobodyfont[manjari] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Manjari Thin}] + \start + \switchtobodyfont[manjari-thin] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Chettan 2}] + \start + \switchtobodyfont[baloo-chettan] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Medium \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Semibold \type{\bs}} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Chettan 2 Extrabold}] + \start + \switchtobodyfont[baloo-chettan-extrabold] + \startfs{Medium \type{\tf}} + \getbuffer + \stopfs + \startfs{Extrabold \type{\bf}} + {\bf\getbuffer} + \stopfs + \startfs{Semibold \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Bold \type{\bs}} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={RIT Sundar}] + \start + \switchtobodyfont[rit-sundar] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle +% +% +% Telugu +% +% +\startbuffer +\startdevatotlgu +\getbuffer[words] +\stopdevatotlgu +\stopbuffer + +\starttitle[title={Baloo Tammudu 2}] + \start + \switchtobodyfont[baloo-tammudu] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Slanted} + {\sl\getbuffer} + \stopfs + \startfs{Bold Slanted} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Tammudu 2 Extrabold}] + \start + \switchtobodyfont[baloo-tammudu-extrabold] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \startfs{Italic} + {\sl\getbuffer} + \stopfs + \startfs{Bold Italic} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Murty Telugu}] + \start + \switchtobodyfont[murty-telugu] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Regular} + {\sl\getbuffer} + \stopfs + \startfs{Regular} + {\bf\getbuffer} + \stopfs + \startfs{Regular} + {\bs\getbuffer} + \stopfs + \stop +\stoptitle +% +% +% Kannada +% +% +\startbuffer +\startdevatoknda +\getbuffer[words] +\stopdevatoknda +\stopbuffer + +\starttitle[title={Murty Kannada}] + \start + \switchtobodyfont[murty-kannada] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Regular} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle +% +% +% Tamil +% +% +\start +\language[ta] +\startbuffer +சிற்றமபலம் புயல் காற்று முன்னர் அதே எதெ அதை ஔவையார் +தொடர்கதை கிழால்லி அழைப்பு வாயிலாக இயற்கை நுழைவாயில் +இளமை காஞ்சி கச்சி இல்க்கியம் ஸ்ரீ +\stopbuffer + +\starttitle[title={Baloo Thambi 2}] + \start + \switchtobodyfont[baloo-thambi] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{ஂMedium \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Semibold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Thambi 2 Extrabold}] + \start + \switchtobodyfont[baloo-thambi-extrabold] + \startfs{Medium} + \getbuffer + \stopfs + \startfs{Semibold \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Bold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Extrabold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle +\stop +% +% +% Gujarati +% +% +\startbuffer +\startdevatogujr +\getbuffer[words] +\stopdevatogujr +\stopbuffer + +\starttitle[title={Baloo Bhai 2}] + \start + \switchtobodyfont[baloo-bhai] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{ஂMedium \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Semibold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Bhai 2 Extrabold}] + \start + \switchtobodyfont[baloo-bhai-extrabold] + \startfs{Medium} + \getbuffer + \stopfs + \startfs{Semibold \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Bold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Extrabold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Noto Serif Gujarati}] + \start + \switchtobodyfont[noto-serif-gujarati] + \startfs{Medium} + \getbuffer + \stopfs + \startfs{Extrabold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle +% +% +% Bengali +% +% +\startbuffer +\startdevatobngl +\getbuffer[words] +\stopdevatobngl +\stopbuffer + +\starttitle[title={Baloo Da 2}] + \start + \switchtobodyfont[baloo-da] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Medium \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Semibold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Bold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Baloo Da 2 Extrabold}] + \start + \switchtobodyfont[baloo-da-extrabold] + \startfs{Medium} + \getbuffer + \stopfs + \startfs{Semibold \type{\sl}} + {\sl\getbuffer} + \stopfs + \startfs{Bold \type{\bs}} + {\bs\getbuffer} + \stopfs + \startfs{Extrabold} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\starttitle[title={Murty Bengali}] + \start + \switchtobodyfont[murty-bangla] + \startfs{Regular} + \getbuffer + \stopfs + \startfs{Regular} + {\bf\getbuffer} + \stopfs + \stop +\stoptitle + +\stoptext diff --git a/tex/context/base/mkxl/type-imp-kannada.mkxl b/tex/context/base/mkxl/type-imp-kannada.mkxl new file mode 100644 index 000000000..4838075b2 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-kannada.mkxl @@ -0,0 +1,73 @@ +%D \module +%D [ file=type-imp-kannada, +%D version=2022.01.27, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Dekannada, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\starttypescriptcollection[kannada] + + \doifunknownfontfeature {kannada-bold-30} {\definefontfeature[kannada-bold-30][boldened-30]} + + % Symbolic names for fonts: + + \starttypescript [\s!serif] [murty-kannada] + \definefontsynonym [MurtyKannada-Regular] [\s!name:murtykannadaregular] [\s!features=kannada-two] + \definefontsynonym [MurtyKannada-Bold] [\s!name:murtykannadaregular] [\s!features={kannada-two,kannada-bold-30}] + \stoptypescript + + \starttypescript [\s!sans] [baloo-tamma, baloo-tamma-extrabold] + \definefontsynonym [BalooTamma2-Regular] [\s!name:balootamma2regular] [\s!features=kannada-two] + \definefontsynonym [BalooTamma2-Medium] [\s!name:balootamma2medium] [\s!features=kannada-two] + \definefontsynonym [BalooTamma2-Semibold] [\s!name:balootamma2semibold] [\s!features=kannada-two] + \definefontsynonym [BalooTamma2-Bold] [\s!name:balootamma2bold] [\s!features=kannada-two] + \definefontsynonym [BalooTamma2-Extrabold] [\s!name:balootamma2extrabold] [\s!features=kannada-two] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!sans] [baloo-tamma] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooTamma2-Regular] + \definefontsynonym [\s!SansSlanted] [BalooTamma2-Medium] + \definefontsynonym [\s!SansBold] [BalooTamma2-Bold] + \definefontsynonym [\s!SansBoldSlanted] [BalooTamma2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-tamma-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooTamma2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooTamma2-Semibold] + \definefontsynonym [\s!SansBold] [BalooTamma2-Extrabold] + \definefontsynonym [\s!SansBoldSlanted] [BalooTamma2-Bold] + \stoptypescript + + \starttypescript [\s!serif] [murty-kannada] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [MurtyKannada-Regular] + \definefontsynonym [\s!SerifBold] [MurtyKannada-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [baloo-tamma, baloo-tamma-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [murty-kannada] + \definetypeface [murty-kannada] [\s!rm] [\s!serif] [murty-kannada] [\s!default] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-malayalam.mkxl b/tex/context/base/mkxl/type-imp-malayalam.mkxl new file mode 100644 index 000000000..67a35d472 --- /dev/null +++ b/tex/context/base/mkxl/type-imp-malayalam.mkxl @@ -0,0 +1,224 @@ +%D \module +%D [ file=type-imp-malayam, +%D version=2022.01.27, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Demalayalam, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D This collection uses rscaling so that the fonts can be used alongside. + +\starttypescriptcollection[malayalam] + + \doifunknownfontfeature {malayalam-bold-30} {\definefontfeature[malayalam-bold-30][boldened-30]} + + % Symbolic names for fonts: + + \starttypescript [\s!serif] [rit-rachana] + \definefontsynonym [RITRachana-Regular] [\s!name:ritrachanaregular] [\s!features=malayalam-two] + \definefontsynonym [RITRachana-Bold] [\s!name:ritrachanabold] [\s!features=malayalam-two] + \definefontsynonym [RITRachana-Italic] [\s!name:ritrachanaitalic] [\s!features=malayalam-two] + \definefontsynonym [RITRachana-BoldItalic] [\s!name:ritrachanabolditalic] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!serif] [panmana] + \definefontsynonym [Panmana-Regular] [\s!name:panmanaregular] [\s!features=malayalam-two] + \definefontsynonym [Panmana-Bold] [\s!name:panmanaregular] [\s!features={malayalam-two,malayalam-bold-30}] + \stoptypescript + + \starttypescript [\s!serif] [rit-sundar] + \definefontsynonym [RITSundar-Regular] [\s!name:ritsundarbold] [\s!features=malayalam-two] + \definefontsynonym [RITSundar-Bold] [\s!name:ritsundarbold] [\s!features={malayalam-two,malayalam-bold-30}] + \stoptypescript + + \starttypescript [\s!sans] [tn-joy, tn-joy-extrabold] + \definefontsynonym [TNJoy-Regular] [\s!name:tnjoyregular] [\s!features=malayalam-two] + \definefontsynonym [TNJoy-Bold] [\s!name:tnjoybold] [\s!features=malayalam-two] + \definefontsynonym [TNJoy-Extrabold] [\s!name:tnjoyextrabold] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [ezhuthu] + \definefontsynonym [Ezhuthu-Regular] [\s!name:ezhuthuregular] [\s!features=malayalam-two] + \definefontsynonym [Ezhuthu-Bold] [\s!name:ezhuthuregular] [\s!features={malayalam-two,malayalam-bold-30}] + \stoptypescript + + \starttypescript [\s!sans] [baloo-chettan,baloo-chettan-extrabold] + \definefontsynonym [BalooChettan2-Regular] [\s!name:baloochettan2regular] [\s!features=malayalam-two] + \definefontsynonym [BalooChettan2-Medium] [\s!name:baloochettan2medium] [\s!features=malayalam-two] + \definefontsynonym [BalooChettan2-Semibold] [\s!name:baloochettan2semibold] [\s!features=malayalam-two] + \definefontsynonym [BalooChettan2-Bold] [\s!name:baloochettan2bold] [\s!features=malayalam-two] + \definefontsynonym [BalooChettan2-Extrabold] [\s!name:baloochettan2extrabold] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [gayathri, gayathri-thin] + \definefontsynonym [Gayathri-Regular] [\s!name:gayathriregular] [\s!features=malayalam-two] + \definefontsynonym [Gayathri-Bold] [\s!name:gayathribold] [\s!features=malayalam-two] + \definefontsynonym [Gayathri-Thin] [\s!name:gayathrithin] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [manjari,manjari-thin] + \definefontsynonym [Manjari-Regular] [\s!name:manjariregular] [\s!features=malayalam-two] + \definefontsynonym [Manjari-Bold] [\s!name:manjaribold] [\s!features=malayalam-two] + \definefontsynonym [Manjari-Thin] [\s!name:manjarithin] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [karumbi] + \definefontsynonym [Karumbi-Regular] [\s!name:karumbiregular] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [chilanka] + \definefontsynonym [Chilanka-Regular] [\s!name:chilankaregular] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [anjali-oldlipi] + \definefontsynonym [Anjali-Oldlipi-Regular] [\s!name:anjalioldlipiregular] [\s!features=malayalam-two] + \stoptypescript + + \starttypescript [\s!sans] [dyuthi] + \definefontsynonym [Dyuthi-Regular] [\s!name:dyuthiregular] [\s!features=malayalam-two] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!serif] [rit-rachana] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [RITRachana-Regular] + \definefontsynonym [\s!SerifBold] [RITRachana-Bold] + \definefontsynonym [\s!SerifItalic] [RITRachana-Italic] + \definefontsynonym [\s!SerifBoldItalic] [RITRachana-BoldItalic] + \stoptypescript + + \starttypescript [\s!serif] [panmana] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [Panmana-Regular] + \definefontsynonym [\s!SerifBold] [Panmana-Bold] + \stoptypescript + + \starttypescript [\s!serif] [rit-sundar] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [RITSundar-Regular] + \definefontsynonym [\s!SerifBold] [RITSundar-Bold] + \stoptypescript + + \starttypescript [\s!sans] [tn-joy] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [TNJoy-Regular] + \definefontsynonym [\s!SansBold] [TNJoy-Bold] + \stoptypescript + + \starttypescript [\s!sans] [tn-joy-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [TNJoy-Bold] + \definefontsynonym [\s!SansBold] [TNJoy-Extrabold] + \stoptypescript + + \starttypescript [\s!sans] [ezhuthu] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Ezhuthu-Regular] + \definefontsynonym [\s!SansBold] [Ezhuthu-Bold] + \stoptypescript + + \starttypescript [\s!sans] [karumbi] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Karumbi-Regular] + \definefontsynonym [\s!SansBold] [Karumbi-Bold] + \stoptypescript + + \starttypescript [\s!sans] [chilanka] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Chilanka-Regular] + \stoptypescript + + \starttypescript [\s!sans] [anjali-oldlipi] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Anjali-Oldlipi-Regular] + \stoptypescript + + \starttypescript [\s!sans] [dyuthi] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Dyuthi-Regular] + \stoptypescript + + \starttypescript [\s!sans] [gayathri] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Gayathri-Regular] + \definefontsynonym [\s!SansBold] [Gayathri-Bold] + \stoptypescript + + \starttypescript [\s!sans] [gayathri-thin] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Gayathri-Thin] + \definefontsynonym [\s!SansBold] [Gayathri-Regular] + \stoptypescript + + \starttypescript [\s!sans] [manjari] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans ] [Manjari-Regular] + \definefontsynonym [\s!SansBold] [Manjari-Bold] + \stoptypescript + + \starttypescript [\s!sans] [manjari-thin] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [Manjari-Thin] + \definefontsynonym [\s!SansBold] [Manjari-Regular] + \stoptypescript + + \starttypescript [\s!sans] [baloo-chettan] [\s!name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [BalooChettan2-Regular] + \definefontsynonym [\s!SansBold] [BalooChettan2-Bold] + \definefontsynonym [\s!SansSlanted] [BalooChettan2-Medium] + \definefontsynonym [\s!SansBoldSlanted] [BalooChettan2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-chettan-extrabold] [name] + \setups[\s!font:\s!fallback:\s!sans] + \definefontsynonym [\s!Sans] [BalooChettan2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooChettan2-Semibold] + \definefontsynonym [\s!SansBoldSlanted] [BalooChettan2-Bold] + \definefontsynonym [\s!SansBold] [BalooChettan2-Extrabold] + \stoptypescript + + % Typefaces: + + \starttypescript [rit-rachana,rit-sundar,panmana] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] [\s!rscale=1.25] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [ezhuthu,karumbi,tn-joy,tn-joy-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!rscale=1.25] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [chilanka,anjali-oldlipi] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [dyuthi,gayathri,gayathri-thin,manjari,manjari-thin] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] [\s!rscale=1.1] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [baloo-chettan,baloo-chettan-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [baloo-chettan] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-tamil.mkxl b/tex/context/base/mkxl/type-imp-tamil.mkxl new file mode 100644 index 000000000..90516365e --- /dev/null +++ b/tex/context/base/mkxl/type-imp-tamil.mkxl @@ -0,0 +1,53 @@ +%D \module +%D [ file=type-imp-tamil, +%D version=2022.02.02, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Tamil, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\starttypescriptcollection[tamil] + + % Symbolic names for fonts: + + \starttypescript [\s!sans] [baloo-thambi, baloo-thambi-extrabold] + \definefontsynonym [BalooThambi2-Regular] [\s!name:baloothambi2regular] [\s!features=tamil-two] + \definefontsynonym [BalooThambi2-Medium] [\s!name:baloothambi2medium] [\s!features=tamil-two] + \definefontsynonym [BalooThambi2-Semibold] [\s!name:baloothambi2semibold] [\s!features=tamil-two] + \definefontsynonym [BalooThambi2-Bold] [\s!name:baloothambi2bold] [\s!features=tamil-two] + \definefontsynonym [BalooThambi2-Extrabold] [\s!name:baloothambi2extrabold] [\s!features=tamil-two] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!sans] [baloo-thambi] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooThambi2-Regular] + \definefontsynonym [\s!SansSlanted] [BalooThambi2-Medium] + \definefontsynonym [\s!SansBold] [BalooThambi2-Bold] + \definefontsynonym [\s!SansBoldSlanted] [BalooThambi2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-thambi-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooThambi2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooThambi2-Semibold] + \definefontsynonym [\s!SansBold] [BalooThambi2-Extrabold] + \definefontsynonym [\s!SansBoldSlanted] [BalooThambi2-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [baloo-thambi, baloo-thambi-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/type-imp-telugu.mkxl b/tex/context/base/mkxl/type-imp-telugu.mkxl new file mode 100644 index 000000000..33d07664c --- /dev/null +++ b/tex/context/base/mkxl/type-imp-telugu.mkxl @@ -0,0 +1,74 @@ +%D \module +%D [ file=type-imp-telugu, +%D version=2022.01.27, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Telugu, +%D author=śrīrāma (Sreeram), +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\starttypescriptcollection[telugu] + + \doifunknownfontfeature {telugu-bold-30} {\definefontfeature[telugu-bold-30][boldened-30]} + \doifunknownfontfeature {telugu-slant} {\definefontfeature[telugu-slant][slant=0.25]} + + % Symbolic names for fonts: + + \starttypescript [\s!serif] [murty-telugu] + \definefontsynonym [MurtyTelugu-Regular] [\s!name:murtyteluguregular] [\s!features=telugu-two] + \definefontsynonym [MurtyTelugu-Bold] [\s!name:murtyteluguregular] [\s!features={telugu-two,telugu-bold-30}] + \stoptypescript + + \starttypescript [\s!sans] [baloo-tammudu, baloo-tammudu-extrabold] + \definefontsynonym [BalooTammudu2-Regular] [\s!name:balootammudu2regular] [\s!features=telugu-two] + \definefontsynonym [BalooTammudu2-Medium] [\s!name:balootammudu2medium] [\s!features=telugu-two] + \definefontsynonym [BalooTammudu2-Semibold] [\s!name:balootammudu2semibold] [\s!features=telugu-two] + \definefontsynonym [BalooTammudu2-Bold] [\s!name:balootammudu2bold] [\s!features=telugu-two] + \definefontsynonym [BalooTammudu2-Extrabold] [\s!name:balootammudu2extrabold] [\s!features=telugu-two] + \stoptypescript + + % Grouping of styles: + + \starttypescript [\s!sans] [baloo-tammudu] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooTammudu2-Regular] + \definefontsynonym [\s!SansSlanted] [BalooTammudu2-Medium] + \definefontsynonym [\s!SansBold] [BalooTammudu2-Bold] + \definefontsynonym [\s!SansBoldSlanted] [BalooTammudu2-Semibold] + \stoptypescript + + \starttypescript [\s!sans] [baloo-tammudu-extrabold] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Sans] [BalooTammudu2-Medium] + \definefontsynonym [\s!SansSlanted] [BalooTammudu2-Semibold] + \definefontsynonym [\s!SansBold] [BalooTammudu2-Extrabold] + \definefontsynonym [\s!SansBoldSlanted] [BalooTammudu2-Bold] + \stoptypescript + + \starttypescript [\s!serif] [murty-telugu] [\s!name] + \setups[\s!font:\s!fallback:\s!serif] + \definefontsynonym [\s!Serif] [MurtyTelugu-Regular] + \definefontsynonym [\s!SerifBold] [MurtyTelugu-Bold] + \stoptypescript + + % Typefaces: + + \starttypescript [baloo-tammudu, baloo-tammudu-extrabold] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + + \starttypescript [murty-telugu] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [murty-telugu] [\s!default] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [dejavu] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [dejavu] [\s!default] + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/base/mkxl/typo-mar.lmt b/tex/context/base/mkxl/typo-mar.lmt index b590c9ecf..87eafb062 100644 --- a/tex/context/base/mkxl/typo-mar.lmt +++ b/tex/context/base/mkxl/typo-mar.lmt @@ -82,8 +82,6 @@ local setwidth = nuts.setwidth local getheight = nuts.getheight local setattrlist = nuts.setattrlist - -local getbox = nuts.getbox local takebox = nuts.takebox local setprop = nuts.setprop @@ -105,6 +103,7 @@ local new_usernode = nodepool.usernode local latelua = nodepool.latelua local texgetdimen = tex.getdimen + local texgetcount = tex.getcount local texget = tex.get @@ -270,8 +269,8 @@ function margins.save(t) if t.number then local leftmargindistance = texgetdimen("naturalleftmargindistance") local rightmargindistance = texgetdimen("naturalrightmargindistance") - local strutbox = getbox("strutbox") - local _, strutht, strutdp = getwhd(strutbox) + local strutht = texgetdimen("strutht") + local strutdp = texgetdimen("strutdp") -- better make a new table and make t entry in t t.box = content t.n = nofsaved diff --git a/tex/context/base/mkxl/typo-mar.mkxl b/tex/context/base/mkxl/typo-mar.mkxl index 4862ee671..242797a5d 100644 --- a/tex/context/base/mkxl/typo-mar.mkxl +++ b/tex/context/base/mkxl/typo-mar.mkxl @@ -174,7 +174,7 @@ \docheckpagestate\s!margintext\nofmargintexts %\doifelserightpagestate\s!margintext\nofmargintexts\relax\relax \realpageno\realpagestateno - \page_layouts_swap_margins} + \page_layouts_swap_margins\v!margin} \permanent\protected\def\margindata {\iftrialtypesetting diff --git a/tex/context/fonts/mkiv/asana-math.lfg b/tex/context/fonts/mkiv/asana-math.lfg index 63e2aab69..0e8beb9e3 100644 --- a/tex/context/fonts/mkiv/asana-math.lfg +++ b/tex/context/fonts/mkiv/asana-math.lfg @@ -37,33 +37,6 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { - tweaks = { - aftercopying = { - { - tweak = "version", - expected = "Version 000.958", - message = "this font is not supported", - }, - { - tweak = "dimensions", - list = { - -- nothing yet - } - }, - { - tweak = "fixprimes", - factor = 0.85, - scale = 0.65, - smaller = true, - }, - { - tweak = "checkspacing", - }, - { - tweak = "addscripts", - }, - }, - }, parameters = { -- DisplayOperatorMinHeight = 0, -- more -- StackBottomDisplayStyleShiftDown = 0, @@ -86,7 +59,46 @@ return { StretchStackGapAboveMin = less, StretchStackGapBelowMin = less, StretchStackTopShiftUp = less, - } + NoLimitSupFactor = 0, + NoLimitSubFactor = 1200, + AccentBaseDepth = 300, + }, + tweaks = { + aftercopying = { + { + tweak = "version", + expected = "Version 000.958", + message = "this font is not supported", + }, + { + tweak = "dimensions", + list = { + -- nothing yet + } + }, + -- { + -- tweak = "fixprimes", + -- factor = 0.85, + -- scale = 0.65, + -- smaller = true, + -- }, + { + tweak = "checkspacing", + }, + { + tweak = "addscripts", + }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, + }, + }, + bigslots = { + 1, 2, 3, 4 + }, } } diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg index 65f51446a..af1df417d 100644 --- a/tex/context/fonts/mkiv/bonum-math.lfg +++ b/tex/context/fonts/mkiv/bonum-math.lfg @@ -24,6 +24,11 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentBaseDepth = 50, + }, tweaks = { aftercopying = { { @@ -33,103 +38,146 @@ return { { tweak = "dimensions", list = { -- offset width italic - [0x00393] = { -0.05, 0.875, 0 }, -- \Gamma - [0x00394] = { -0.05, 0.875, 0 }, -- \Delta - [0x00398] = { -0.05, 0.9, 0 }, -- \Theta - [0x0039B] = { -0.075, 0.85, 0 }, -- \Lambda - [0x0039E] = { -0.075, 0.85, 0 }, -- \Xi - [0x003A0] = { -0.075, 0.85, 0 }, -- \Pi - [0x003A3] = { -0.075, 0.85, 0 }, -- \Sigma - [0x003A5] = { -0.075, 0.85, 0 }, -- \Upsilon - [0x003A6] = { -0.05, 0.9, 0 }, -- \Phi - [0x003A8] = { -0.05, 0.9, 0 }, -- \Psi - [0x003A9] = { -0.05, 0.9, 0 }, -- \Omega - [0x02202] = { -0.075, 0.825, 0 }, -- \partial - [0x1D436] = { -0.1, 1, 0 }, -- C - [0x1D43A] = { -0.1, 1, 0 }, -- G - [0x1D442] = { -0.1, 1, 0 }, -- O - [0x1D444] = { -0.05, 1.025, 0 }, -- Q - [0x1D445] = { -0.025, 1.05, 0 }, -- R - [0x1D446] = { -0.05, 1, 0 }, -- S - [0x1D447] = { -0.05, 1.05, 0.7 }, -- T - [0x1D448] = { -0.125, 1, 0.3 }, -- U - [0x1D449] = { -0.125, 1, 0.3 }, -- V - [0x1D44A] = { -0.075, 1, 0.3 }, -- W - [0x1D44B] = { 0.05, 1.1, 0.35 }, -- X - [0x1D44C] = { -0.075, 1.1, 0.35 }, -- Y - [0x1D44E] = { -0.05, 1.1, 0 }, -- a - [0x1D44F] = { -0.05, 1.1, 0 }, -- b - [0x1D450] = { -0.05, 1.1, 0 }, -- c - [0x1D451] = { -0.05, 1.1, 0 }, -- d - [0x1D452] = { -0.05, 1.1, 0 }, -- e - [0x1D453] = { 0.45, 1.85, 0.45 }, -- f - [0x1D454] = { 0.05, 1.1, 0 }, -- g - [0x0210E] = { -0.1, 1.05, 0 }, -- h - [0x1D456] = { -0.2, 1.1, 0 }, -- i - [0x1D457] = { 0.6, 1.7, 0.45 }, -- j - [0x1D458] = { -0.05, 1.1, 0 }, -- k - [0x1D459] = { -0.15, 1.1, 0 }, -- l - [0x1D45A] = { -0.05, 1, 0 }, -- m - [0x1D45B] = { -0.1, 1, 0 }, -- n - [0x1D45C] = { -0.05, 1.1, 0 }, -- o - [0x1D45D] = { 0, 1.05, 0 }, -- p - [0x1D45E] = { -0.05, 1.05, 0 }, -- q - [0x1D45F] = { -0.1, 1.15, 0 }, -- r - [0x1D460] = { -0.05, 1.05, 0 }, -- s - [0x1D461] = { -0.15, 1.1, 0 }, -- t - [0x1D462] = { -0.1, 1.05, 0 }, -- u - [0x1D463] = { -0.1, 1.05, 0 }, -- v - [0x1D464] = { -0.05, 1.05, 0 }, -- w - [0x1D465] = { 0, 1.175, 0 }, -- x - [0x1D466] = { -0.05, 1.05, 0 }, -- y - [0x1D467] = { -0.05, 1.1, 0 }, -- z - [0x1D6FC] = { -0.075, 0.825, 0 }, -- \alpha - [0x1D6FD] = { 0, 0.85, 0 }, -- \beta - [0x1D6FE] = { -0.075, 0.825, 0.05 }, -- \gamma - [0x1D6FF] = { -0.1, 0.8, 0 }, -- \delta - [0x1D716] = { -0.1, 0.8, 0 }, -- \epsilon - [0x1D700] = { -0.1, 0.8, 0 }, -- \varepsilon - [0x1D701] = { -0.1, 0.8, 0 }, -- \zeta - [0x1D702] = { -0.1, 0.8, 0 }, -- \eta - [0x1D703] = { -0.1, 0.8, 0 }, -- \theta - [0x1D717] = { -0.075, 0.85, 0 }, -- \vartheta - [0x1D704] = { -0.1, 0.8, 0 }, -- \iota - [0x1D705] = { -0.075, 0.825, 0 }, -- \kappa - [0x1D718] = { -0.075, 0.825, 0 }, -- \varkappa - [0x1D706] = { -0.075, 0.825, 0 }, -- \lambda - [0x1D707] = { -0.075, 0.825, 0 }, -- \mu - [0x1D708] = { -0.075, 0.825, 0 }, -- \nu - [0x1D709] = { -0.075, 0.825, 0 }, -- \xi - [0x1D70A] = { -0.075, 0.825, 0 }, -- \omicron - [0x1D70B] = { -0.075, 0.825, 0 }, -- \pi - [0x1D71B] = { -0.07, 0.85, 0 }, -- \varpi - [0x1D70C] = { -0.075, 0.85, 0 }, -- \rho - [0x1D71A] = { -0.075, 0.85, 0 }, -- \varrho - [0x1D70E] = { -0.075, 0.85, 0 }, -- \sigma - [0x1D70D] = { -0.075, 0.85, 0 }, -- \varsigma - [0x1D70F] = { -0.08, 0.825, 0 }, -- \tau - [0x1D710] = { -0.08, 0.825, 0 }, -- \upsilon - [0x1D719] = { -0.075, 0.85, 0 }, -- \phi - [0x1D711] = { -0.075, 0.85, 0 }, -- \varphi - [0x1D712] = { -0.075, 0.85, 0 }, -- \chi - [0x1D713] = { -0.075, 0.85, 0 }, -- \psi - [0x1D714] = { -0.05, 0.875, 0 }, -- \omega + [0x00393] = { -0.05, 0.875, 0 }, -- \Gamma + [0x00394] = { -0.05, 0.875, 0 }, -- \Delta + [0x00398] = { -0.05, 0.9, 0 }, -- \Theta + [0x0039B] = { -0.075, 0.85, 0 }, -- \Lambda + [0x0039E] = { -0.075, 0.85, 0 }, -- \Xi + [0x003A0] = { -0.075, 0.85, 0 }, -- \Pi + [0x003A3] = { -0.075, 0.85, 0 }, -- \Sigma + [0x003A5] = { -0.075, 0.85, 0 }, -- \Upsilon + [0x003A6] = { -0.05, 0.9, 0 }, -- \Phi + [0x003A8] = { -0.05, 0.9, 0 }, -- \Psi + [0x003A9] = { -0.05, 0.9, 0 }, -- \Omega + [0x02202] = { -0.075, 0.825, 0 }, -- \partial + [0x1D436] = { -0.1, 1, 0 }, -- C + [0x1D43A] = { -0.1, 1, 0 }, -- G + [0x1D442] = { -0.1, 1, 0 }, -- O + [0x1D444] = { -0.05, 1.025, 0 }, -- Q + [0x1D445] = { -0.025, 1.05, 0 }, -- R + [0x1D446] = { -0.05, 1, 0 }, -- S + [0x1D447] = { -0.05, 1.05, 0.7 }, -- T + [0x1D448] = { -0.125, 1, 0.3 }, -- U + [0x1D449] = { -0.125, 1, 0.3 }, -- V + [0x1D44A] = { -0.075, 1, 0.3 }, -- W + [0x1D44B] = { 0.05, 1.1, 0.35 }, -- X + [0x1D44C] = { -0.075, 1.1, 0.35 }, -- Y + [0x1D44E] = { -0.05, 1.1, 0, 0.8 }, -- a + [0x1D44F] = { -0.05, 1.1, 0 }, -- b + [0x1D450] = { -0.05, 1.1, 0, 0.9 }, -- c + [0x1D451] = { -0.05, 1.1, 0, 0.75 }, -- d + [0x1D452] = { -0.05, 1.1, 0, 0.9 }, -- e + [0x1D453] = { 0.45, 1.85, 0.45 }, -- f + [0x1D454] = { 0.05, 1.1, 0, 0.9 }, -- g + [0x0210E] = { -0.1, 1.05, 0, 1.15 }, -- h + [0x1D456] = { -0.2, 1.1, 0 }, -- i + [0x1D457] = { 0.6, 1.7, 0.45 }, -- j + [0x1D458] = { -0.05, 1.1, 0, 1.15 }, -- k + [0x1D459] = { -0.15, 1.1, 0, 0.8 }, -- l + [0x1D45A] = { -0.05, 1, 0 }, -- m + [0x1D45B] = { -0.1, 1, 0, 0.9 }, -- n + [0x1D45C] = { -0.05, 1.1, 0, 0.9 }, -- o + [0x1D45D] = { 0, 1.05, 0 }, -- p + [0x1D45E] = { -0.05, 1.05, 0, 0.9 }, -- q + [0x1D45F] = { -0.1, 1.15, 0, 0.9 }, -- r + [0x1D460] = { -0.05, 1.05, 0 }, -- s + [0x1D461] = { -0.15, 1.1, 0, 0.9 }, -- t + [0x1D462] = { -0.1, 1.05, 0, 0.85 }, -- u + [0x1D463] = { -0.1, 1.05, 0, 0.85 }, -- v + [0x1D464] = { -0.05, 1.05, 0, 0.95 }, -- w + [0x1D465] = { 0, 1.175, 0, 0.9 }, -- x + [0x1D466] = { -0.05, 1.05, 0 }, -- y + [0x1D467] = { -0.05, 1.1, 0, 0.9 }, -- z + [0x1D6FC] = { -0.075, 0.825, 0 }, -- \alpha + [0x1D6FD] = { 0, 0.85, 0, 1.1 }, -- \beta + [0x1D6FE] = { -0.075, 0.825, 0.05, 1.05 }, -- \gamma + [0x1D6FF] = { -0.1, 0.8, 0 }, -- \delta + [0x1D716] = { -0.1, 0.8, 0 }, -- \epsilon + [0x1D700] = { -0.1, 0.8, 0 }, -- \varepsilon + [0x1D701] = { -0.1, 0.8, 0 }, -- \zeta + [0x1D702] = { -0.1, 0.8, 0, 1.05 }, -- \eta + [0x1D703] = { -0.1, 0.8, 0 }, -- \theta + [0x1D717] = { -0.075, 0.85, 0, 1.03 }, -- \vartheta + [0x1D704] = { -0.1, 0.8, 0, 1.05 }, -- \iota + [0x1D705] = { -0.075, 0.825, 0 }, -- \kappa + [0x1D706] = { -0.075, 0.825, 0, 1.05 }, -- \lambda + [0x1D707] = { -0.075, 0.825, 0, 1.03 }, -- \mu + [0x1D708] = { -0.075, 0.825, 0, 1.03 }, -- \nu + [0x1D709] = { -0.075, 0.825, 0 }, -- \xi + [0x1D70A] = { -0.075, 0.825, 0, 1.03 }, -- \omicron + [0x1D70B] = { -0.075, 0.825, 0 }, -- \pi + [0x1D71B] = { -0.07, 0.85, 0 }, -- \varpi + [0x1D70C] = { -0.075, 0.85, 0 }, -- \rho + [0x1D71A] = { -0.075, 0.85, 0 }, -- \varrho + [0x1D70D] = { -0.075, 0.85, 0, 1.02 }, -- \varsigma + [0x1D70E] = { -0.075, 0.85, 0 }, -- \sigma + [0x1D70F] = { -0.08, 0.825, 0, 1.05 }, -- \tau + [0x1D710] = { -0.08, 0.825, 0, 1.03 }, -- \upsilon + [0x1D719] = { -0.075, 0.85, 0 }, -- \phi + [0x1D711] = { -0.075, 0.85, 0, 1.02 }, -- \varphi + [0x1D712] = { -0.075, 0.85, 0 }, -- \chi + [0x1D713] = { -0.075, 0.85, 0 }, -- \psi + [0x1D714] = { -0.05, 0.875, 0 }, -- \omega + -- [0x1D718] = { -0.075, 0.825, 0, 1.03 }, -- \varkappa + [0x1D719] = { -0.075, 0.85, 0 }, -- \phi + [0x1D41B] = { 0, 1, 0, 1.5 }, -- bold lowercase upright b + [0x1D41D] = { 0, 1, 0, 0.6 }, -- bold lowercase upright d + [0x1D41F] = { 0, 1.25, 0, 0.8 }, -- bold lowercase upright f + [0x1D420] = { 0, 1, 0, 0.6 }, -- bold lowercase upright g + [0x1D421] = { 0, 1, 0, 1.5 }, -- bold lowercase upright h + [0x1D424] = { 0, 1, 0, 1.5 }, -- bold lowercase upright k + [0x1D425] = { 0, 1, 0, 0.75 }, -- bold lowercase upright l + [0x1D42A] = { 0, 1, 0, 0.9 }, -- bold lowercase upright q + [0x1D42B] = { 0, 1, 0, 0.9 }, -- bold lowercase upright r + [0x1D42C] = { 0, 1, 0, 0.9 }, -- bold lowercase upright s + [0x1D482] = { 0, 1, 0, 0.9 }, -- bold lowercase italic a + [0x1D483] = { 0, 1, 0, 1.1 }, -- bold lowercase italic b + [0x1D484] = { 0, 1, 0, 0.95 }, -- bold lowercase italic c + [0x1D485] = { 0, 1, 0, 0.75 }, -- bold lowercase italic d + [0x1D486] = { 0, 1, 0, 0.95 }, -- bold lowercase italic e + [0x1D487] = { 0, 1, 0, 0.95 }, -- bold lowercase italic f + [0x1D488] = { 0, 1, 0, 0.9 }, -- bold lowercase italic g + [0x1D489] = { 0, 1, 0, 1.2 }, -- bold lowercase italic h + -- [0x1D48A] = { 0, 1, 0, 0.6 }, -- bold lowercase italic i + -- [0x1D48B] = { 0, 1, 0, 0.8 }, -- bold lowercase italic j + [0x1D48C] = { 0, 1, 0, 1.2 }, -- bold lowercase italic k + [0x1D48D] = { 0, 1, 0, 0.9 }, -- bold lowercase italic l + [0x1D492] = { 0, 1, 0, 0.85 }, -- bold lowercase italic q + [0x1D493] = { 0, 1, 0, 0.9 }, -- bold lowercase italic r + [0x1D497] = { 0, 1, 0, 0.9 }, -- bold lowercase italic v + [0x1D499] = { 0, 1, 0, 0.9 }, -- bold lowercase italic x + [0x1D49A] = { 0, 1, 0, 0.95 }, -- bold lowercase italic y + [0x1D49B] = { 0, 1, 0, 1.1 }, -- bold lowercase italic z + [0x1D743] = { 0, 1, 0, 1.7 }, -- bold lowercase italic greek xi }, }, { tweak = "fixprimes", - scale = 0.8, - smaller = true, - factor = 0.9, + -- scale = 0.8, + -- smaller = true, + factor = 1.1, }, { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, + -- { + -- tweak = "fixanchors", + -- factor = .5, + -- }, }, }, alternates = { dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, }, + bigslots = { + 1, 3, 5, 7 + }, -- -- experimental fixes for mkiv: -- diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg index d641784d7..4fe564cea 100644 --- a/tex/context/fonts/mkiv/cambria-math.lfg +++ b/tex/context/fonts/mkiv/cambria-math.lfg @@ -32,34 +32,21 @@ local dimensions, kerns, kernpairs if CONTEXTLMTXMODE == 0 then end -local patches = fonts.handlers.otf.enhancers.patches - -local function patch(data,filename,threshold) - local m = data.metadata.math - if m then - local d = m.DisplayOperatorMinHeight or 0 - if d < threshold then - patches.report("DisplayOperatorMinHeight(%s -> %s)",d,threshold) - m.DisplayOperatorMinHeight = threshold - end - end -end - -patches.register("after","analyze math","cambria", function(data,filename) patch(data,filename,2800) end) -patches.register("after","analyze math","cambmath",function(data,filename) patch(data,filename,2800) end) - --- This is a runtime fix, but then we need to explicitly set --- the goodies parameter for the font. As a demonstration we --- we do both. - -local function FixDisplayOperatorMinHeight(value,target,original) - local o = original.mathparameters.DisplayOperatorMinHeight - if o < 2800 then - return 2800 * target.parameters.factor - else - return value -- already scaled - end -end +-- local patches = fonts.handlers.otf.enhancers.patches +-- +-- local function patch(data,filename,threshold) +-- local m = data.metadata.math +-- if m then +-- local d = m.DisplayOperatorMinHeight or 0 +-- if d < threshold then +-- patches.report("DisplayOperatorMinHeight(%s -> %s)",d,threshold) +-- m.DisplayOperatorMinHeight = threshold +-- end +-- end +-- end +-- +-- patches.register("after","analyze math","cambria", function(data,filename) patch(data,filename,2800) end) +-- patches.register("after","analyze math","cambmath",function(data,filename) patch(data,filename,2800) end) return { name = "cambria-math", @@ -68,19 +55,49 @@ return { author = "Hans Hagen", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + DisplayOperatorMinHeight = 2800, + AccentBaseDepth = 300, + }, tweaks = { aftercopying = { { tweak = "dimensions", list = { - [0x1D43D] = { 0.25, 1.15, 0.2}, -- J + -- [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] = { 0.25, 1.15, 0.2 }, -- J + [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f + -- [0x1D487] = { 0, 1, 0, 1.3}, -- bold lower case italic f }, }, { tweak = "fixprimes", - scale = 0.7, - smaller = true, - factor = 0.8, + scale = 0.9, + -- smaller = true, + factor = 0.9, }, { tweak = "checkspacing", @@ -88,10 +105,27 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + list = { "over", "under" }, + -- list = { + -- [0x203E] = { factor = "over" }, -- overbar + -- [0x203E] = { factor = "under" }, -- underbar + -- [0x23DE] = { factor = "over" }, -- overbrace + -- [0x23DF] = { factor = "under" }, -- underbrace + -- [0x23DC] = { factor = "over" }, -- overparent + -- [0x23DD] = { factor = "under" }, -- underparent + -- [0x23B4] = { factor = "over" }, -- overbracket + -- [0x23B5] = { factor = "under" }, -- underbracket + -- } + }, + { + tweak = "addrules", + }, }, }, - parameters = { - DisplayOperatorMinHeight = FixDisplayOperatorMinHeight, + bigslots = { + 1, 2, 3, 4 }, -- -- experimental fixes for mkiv: diff --git a/tex/context/fonts/mkiv/concrete-math.lfg b/tex/context/fonts/mkiv/concrete-math.lfg new file mode 100644 index 000000000..ecd910eb0 --- /dev/null +++ b/tex/context/fonts/mkiv/concrete-math.lfg @@ -0,0 +1,29 @@ +-- this file might go away and is for experiments only + +return { + name = "concrete-math", + version = "1.00", + comment = "Goodies that complement concrete math.", + author = "Hans Hagen", + copyright = "ConTeXt development team", + mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + }, + tweaks = { + aftercopying = { + -- { + -- tweak = "fixprimes", + -- factor = 0.9, + -- }, + }, + }, + bigslots = { + 1, 2, 3, 4 + }, + }, + +} + + diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg index f214f0bb5..3c262fab5 100644 --- a/tex/context/fonts/mkiv/dejavu-math.lfg +++ b/tex/context/fonts/mkiv/dejavu-math.lfg @@ -17,6 +17,12 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + FractionRuleThickness = 60, + AccentBaseDepth = 30, + }, tweaks = { aftercopying = { { @@ -26,15 +32,15 @@ return { { tweak = "dimensions", list = { - -- [0x1D449] = { 0, .8, .2 }, - -- [0x1D44A] = { 0, .8, .2 }, + -- [0x1D449] = { 0, .8, .2 }, + -- [0x1D44A] = { 0, .8, .2 }, ["0x1D449:0x1D44A"] = { 0, .8, .2 }, } }, { tweak = "fixprimes", - scale = 0.9, - smaller = true, + -- scale = 0.9, + -- smaller = true, factor = 0.8, }, { @@ -43,11 +49,20 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, alternates = { dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, }, + bigslots = { + 1, 3, 5, 7 + }, -- -- experimental fixes for mkiv: -- diff --git a/tex/context/fonts/mkiv/ebgaramond.lfg b/tex/context/fonts/mkiv/ebgaramond.lfg deleted file mode 100644 index 0e91141d4..000000000 --- a/tex/context/fonts/mkiv/ebgaramond.lfg +++ /dev/null @@ -1,87 +0,0 @@ -return { - name = "ebgaramond", - version = "1.00", - comment = "Goodies that complement ebgaramond.", - author = "Hans Hagen & Mikael Sundqvist", - copyright = "ConTeXt development team", - mathematics = { - tweaks = { - aftercopying = { - { - tweak = "version", - expected = "Version 2019-08-16", - }, - { - tweak = "dimensions", - list = { - -- offset width italic - [0x00393] = { 0.05, 1.05, 0.075 }, -- \Gamma - -- [0x003A6] = { 0.05, 1.05, 0 }, -- \Phi difficult! - [0x003A8] = { 0.05, 1.05, 0.075 }, -- \Psi - [0x02113] = { 0, 1, 0.075 }, -- \ell - [0x1D436] = { 0, 1, 0.05 }, -- C - [0x1D43D] = { 0.3, 1.4, 0.1 }, -- J - [0x1D44B] = { 0, 1, 0.05 }, -- X - [0x1D450] = { 0, 1.1, 0 }, -- c - [0x1D451] = { 0, 1, 0.05 }, -- d - [0x1D452] = { 0, 1.1, 0.05 }, -- e - [0x1D453] = { 0.15, 1.15, 0.1 }, -- f - [0x1D454] = { 0.1, 1.2, 0.1 }, -- g - [0xF0276] = { 0, 1.1, 0 }, -- h - [0x1D457] = { 0.2, 1.25, 0.05 }, -- j - [0x1D459] = { 0, 1, 0.05 }, -- l - [0x1D45D] = { 0.15, 1.15, 0 }, -- p - [0x1D45E] = { 0, 1.05, 0 }, -- q - [0x1D45F] = { 0, 1.05, 0 }, -- r - [0x1D461] = { 0, 1, 0.1 }, -- t - [0x1D465] = { 0.05, 1.1, 0.05 }, -- x - [0x1D466] = { 0.2, 1.2, 0 }, -- y - [0x1D6FD] = { 0.05, 1.1, 0.05 }, -- \beta - [0x1D6FE] = { 0, 1.05, 0 }, -- \gamma - [0x1D6FF] = { 0, 1, 0.1 }, -- \delta - [0x1D716] = { 0, 1.1, 0 }, -- \epsilon - [0x1D700] = { 0, 1.1, 0 }, -- \varepsilon - [0x1D701] = { 0, 1, 0.15 }, -- \zeta - [0x1D703] = { 0, 1, 0.1 }, -- \theta - [0x1D705] = { 0, 1, 0.1 }, -- \kappa - [0x1D706] = { 0.05, 1.1, 0 }, -- \lambda - [0x1D707] = { 0.05, 1.05, 0 }, -- \mu - [0x1D708] = { 0, 1.1, 0 }, -- \nu - [0x1D709] = { 0, 1.1, 0 }, -- \xi - [0x1D70B] = { 0, 1.05, 0 }, -- \pi - [0x1D70C] = { 0.2, 1.2, 0 }, -- \rho - [0x1D70E] = { 0, 1, 0.1 }, -- \sigma - [0x1D70F] = { 0.05, 1.05, 0.1 }, -- \tau - [0x1D712] = { 0.15, 1.2, 0.05 }, -- \chi - [0x1D713] = { 0.05, 1.05, 0.05 }, -- \psi - }, - }, - { - tweak = "fixprimes", - scale = 0.75, - smaller = true, - factor = 0.8, - fake = 0.75, - }, - { - tweak = "checkspacing", - }, - { - tweak = "addscripts", - }, - }, - }, - alternates = { - partial = { feature = 'ss02', value = 1, comment = "Curved partial" }, - semibold = { feature = 'ss04', value = 1, comment = "Semibold" }, - extrabold = { feature = 'ss05', value = 1, comment = "Extrabold" }, - hbar = { feature = 'ss06', value = 1, comment = "Horizontal bar for h-bar" }, - integral = { feature = 'ss07', value = 1, comment = "A more slanted integral sign" }, - tilde = { feature = 'ss09', value = 1, comment = "A tilde variant" }, - outbendingh = { feature = 'ss10', value = 1, comment = "Out-bending h" }, - largeoperators = { feature = 'ss11', value = 1, comment = "Larger operators" }, - }, - }, -} - - diff --git a/tex/context/fonts/mkiv/erewhon-math.lfg b/tex/context/fonts/mkiv/erewhon-math.lfg new file mode 100644 index 000000000..d5b576f76 --- /dev/null +++ b/tex/context/fonts/mkiv/erewhon-math.lfg @@ -0,0 +1,44 @@ +-- this file might go away and is for experiments only + +return { + name = "erewhon-math", + version = "1.00", + comment = "Goodies that complement erewhon math.", + author = "Hans Hagen", + copyright = "ConTeXt development team", + mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentBaseHeight = 0, + AccentBaseDepth = 60, + }, + tweaks = { + aftercopying = { + { + tweak = "fixprimes", + factor = 0.9, + scale = 0.9, + }, + { + tweak = "checkspacing", + }, + { + tweak = "addscripts", + }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, + }, + }, + bigslots = { + 1, 2, 3, 4 + }, + }, + +} + + diff --git a/tex/context/fonts/mkiv/euler-math.lfg b/tex/context/fonts/mkiv/euler-math.lfg index 77b144754..cb3ec36a0 100644 --- a/tex/context/fonts/mkiv/euler-math.lfg +++ b/tex/context/fonts/mkiv/euler-math.lfg @@ -6,8 +6,7 @@ return { comment = "Goodies that complement euler math.", author = "Hans Hagen", copyright = "ConTeXt development team", - - mathematics = { + mathematics = { tweaks = { aftercopying = { { @@ -19,6 +18,9 @@ return { }, }, }, + bigslots = { + 1, 3, 5, 7 + }, }, diff --git a/tex/context/fonts/mkiv/garamond-math.lfg b/tex/context/fonts/mkiv/garamond-math.lfg new file mode 100644 index 000000000..b002cc942 --- /dev/null +++ b/tex/context/fonts/mkiv/garamond-math.lfg @@ -0,0 +1,133 @@ +return { + name = "ebgaramond", + version = "1.00", + comment = "Goodies that complement ebgaramond.", + author = "Hans Hagen & Mikael Sundqvist", + copyright = "ConTeXt development team", + mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1200, + FractionRuleThickness = 60, + OverbarRuleThickness = 60, + -- RadicalRuleThickness = 60, + UnderbarRuleThickness = 60, + -- AccentBaseHeight = 0, + AccentBaseDepth = 75, + -- AccentTopShiftUp = -75, + -- FlattenedAccentTopShiftUp = -100, + }, + tweaks = { + aftercopying = { + { + tweak = "version", + expected = "Version 2019-08-16", + }, + { + 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] = { 0.05, 1.05, 0.075 }, -- \Gamma + -- [0x003A6] = { 0.05, 1.05, 0 }, -- \Phi difficult! + [0x003A8] = { 0.05, 1.05, 0.075 }, -- \Psi + [0x02113] = { 0, 1, 0.075 }, -- \ell + [0x1D436] = { 0, 1, 0.05 }, -- C + [0x1D43D] = { 0.3, 1.4, 0.1 }, -- J + [0x1D44B] = { 0, 1, 0.05 }, -- X + [0x1D44F] = { 0, 1, 0, 1.25 }, -- b + [0x1D450] = { 0, 1.1, 0 }, -- c + [0x1D451] = { 0, 1, 0.05, 0.8 }, -- d + [0x1D452] = { 0, 1.1, 0.05 }, -- e + [0x1D453] = { 0.15, 1.15, 0.1, 1.2 }, -- f + [0x1D454] = { 0.1, 1.2, 0.1 }, -- g + [0x0210E] = { 0, 1.1, 0, 1.4 }, -- h + [0x1D457] = { 0.2, 1.25, 0.05 }, -- j + [0x1D458] = { 0, 1, 0, 1.25 }, -- k + [0x1D459] = { 0, 1, 0.05 }, -- l + [0x1D45D] = { 0.15, 1.15, 0, 1.4 }, -- p + [0x1D45E] = { 0, 1.05, 0 }, -- q + [0x1D45F] = { 0, 1.05, 0 }, -- r + [0x1D461] = { 0, 1, 0.1 }, -- t + [0x1D465] = { 0.05, 1.1, 0.05 }, -- x + [0x1D466] = { 0.2, 1.2, 0, 1.35 }, -- y + [0x1D6FD] = { 0.05, 1.1, 0.05 }, -- \beta + [0x1D6FE] = { 0, 1.05, 0 }, -- \gamma + [0x1D6FF] = { 0, 1, 0.1 }, -- \delta + [0x1D716] = { 0, 1.1, 0 }, -- \epsilon + [0x1D700] = { 0, 1.1, 0 }, -- \varepsilon + [0x1D701] = { 0, 1, 0.15 }, -- \zeta + [0x1D703] = { 0, 1, 0.1 }, -- \theta + [0x1D705] = { 0, 1, 0.1 }, -- \kappa + [0x1D706] = { 0.05, 1.1, 0 }, -- \lambda + [0x1D707] = { 0.05, 1.05, 0 }, -- \mu + [0x1D708] = { 0, 1.1, 0 }, -- \nu + [0x1D709] = { 0, 1.1, 0 }, -- \xi + [0x1D70B] = { 0, 1.05, 0 }, -- \pi + [0x1D70C] = { 0.2, 1.2, 0 }, -- \rho + [0x1D70E] = { 0, 1, 0.1 }, -- \sigma + [0x1D70F] = { 0.05, 1.05, 0.1 }, -- \tau + [0x1D712] = { 0.15, 1.2, 0.05 }, -- \chi + [0x1D713] = { 0.05, 1.05, 0.05 }, -- \psi + }, + }, + { + tweak = "fixprimes", + scale = 0.9, + -- smaller = true, + factor = 0.9, + -- fake = 0.75, + }, + { + tweak = "checkspacing", + }, + { + tweak = "addscripts", + }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, + }, + }, + alternates = { + partial = { feature = 'ss02', value = 1, comment = "Curved partial" }, + semibold = { feature = 'ss04', value = 1, comment = "Semibold" }, + extrabold = { feature = 'ss05', value = 1, comment = "Extrabold" }, + hbar = { feature = 'ss06', value = 1, comment = "Horizontal bar for h-bar" }, + integral = { feature = 'ss07', value = 1, comment = "A more slanted integral sign" }, + tilde = { feature = 'ss09', value = 1, comment = "A tilde variant" }, + outbendingh = { feature = 'ss10', value = 1, comment = "Out-bending h" }, + largeoperators = { feature = 'ss11', value = 1, comment = "Larger operators" }, + }, + bigs = { + 1, 3, 5, 7 + }, + }, +} + + diff --git a/tex/context/fonts/mkiv/generic-math.lfg b/tex/context/fonts/mkiv/generic-math.lfg new file mode 100644 index 000000000..c14067cc5 --- /dev/null +++ b/tex/context/fonts/mkiv/generic-math.lfg @@ -0,0 +1,74 @@ +return { + name = "generic-math", + version = "1.00", + comment = "A starting point.", + author = "Hans Hagen", + copyright = "ConTeXt development team", + mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentBaseDepth = 150, + PrimeRaisePercent = 25, + PrimeShiftUp = "SuperscriptShiftUp", + PrimeBaselineDropMax = "SuperscriptBaselineDropMax", + PrimeShiftUpCramped = "SuperscriptShiftUpCramped", + PrimeSpaceAfter = 0, + PrimeWidthPercent = 50, + SpaceBeforeScript = "SpaceAfterScript", + NoLimitSupFactor = 0, + NoLimitSubFactor = 0, + AccentTopShiftUp = 0, + AccentBottomShiftDown = 0, + AccentBaseDepth = 0, + AccentFlattenedBaseDepth = 0, + }, + tweaks = { + aftercopying = { + { + tweak = "dimensions", + list = { + -- whatever + }, + }, + { + tweak = "fixprimes", + factor = 0.85, -- accent base height + smaller = true, -- replace multiples + scale = 0.75, -- glyph scale + fake = 0.75, -- replace multiples with this width proportion + -- keep = true, -- keep the text size prime (aka minute) + }, + { + tweak = "checkspacing", + }, + { + tweak = "addscripts", + }, + { + tweak = "accentdimensions", + list = { "over", "under" }, + -- list = { + -- [0x203E] = { factor = "over" }, -- overbar + -- [0x203E] = { factor = "under" }, -- underbar + -- [0x23DE] = { factor = "over" }, -- overbrace + -- [0x23DF] = { factor = "under" }, -- underbrace + -- [0x23DC] = { factor = "over" }, -- overparent + -- [0x23DD] = { factor = "under" }, -- underparent + -- [0x23B4] = { factor = "over" }, -- overbracket + -- [0x23B5] = { factor = "under" }, -- underbracket + -- } + }, + { + tweak = "addrules", + }, + }, + }, + bigslots = { + 1, 2, 3, 4 + }, + alternates = { + -- italic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Lowercase Italic" }, + }, + }, +} diff --git a/tex/context/fonts/mkiv/kpfonts-math.lfg b/tex/context/fonts/mkiv/kpfonts-math.lfg index bdeadd25a..695a6af32 100644 --- a/tex/context/fonts/mkiv/kpfonts-math.lfg +++ b/tex/context/fonts/mkiv/kpfonts-math.lfg @@ -5,6 +5,12 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + }, tweaks = { aftercopying = { { @@ -17,26 +23,33 @@ return { -- whatever }, }, - { - tweak = "fixprimes", - factor = 0.85, -- accent base height - smaller = true, -- replace multiples - scale = 0.75, -- glyph scale - fake = 0.75, -- replace multiples with this width proportion - -- keep = true, -- keep the text size prime (aka minute) - }, + -- { + -- tweak = "fixprimes", + -- factor = 0.85, -- accent base height + -- smaller = true, -- replace multiples + -- scale = 0.75, -- glyph scale + -- fake = 0.75, -- replace multiples with this width proportion + -- -- keep = true, -- keep the text size prime (aka minute) + -- }, { tweak = "checkspacing", }, { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, - parameters = { - }, alternates = { -- italic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Lowercase Italic" }, }, + bigslots = { + 1, 2, 3, 4 + }, }, } diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg index 908d78eea..1cf22f4d0 100644 --- a/tex/context/fonts/mkiv/libertinus-math.lfg +++ b/tex/context/fonts/mkiv/libertinus-math.lfg @@ -11,6 +11,17 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + FractionRuleThickness = 50, + OverbarRuleThickness = 50, + -- RadicalRuleThickness = 50, + UnderbarRuleThickness = 50, + -- AccentBaseHeight = 0, + -- AccentTopShiftUp = 0, + AccentBaseDepth = 10, + }, tweaks = { aftercopying = { { @@ -20,14 +31,40 @@ return { { tweak = "dimensions", list = { - -- nothing yet + [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] = { 0, 1, 0, 1.5 }, -- b + [0x1D451] = { 0, 1, 0, 1.2 }, -- d + [0x0210E] = { 0, 1, 0, 1.5 }, -- h + [0x1D458] = { 0, 1, 0, 1.5 }, -- k }, }, { tweak = "fixprimes", - scale = 0.8, - smaller = true, - factor = 0.85, + scale = 0.9, + -- smaller = true, + factor = 0.9, }, { tweak = "checkspacing", @@ -35,7 +72,16 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, + bigslots = { + 1, 3, 5, 7 + }, }, } diff --git a/tex/context/fonts/mkiv/lm-math.lfg b/tex/context/fonts/mkiv/lm-math.lfg index a0fd2c21c..2f5a69e36 100644 --- a/tex/context/fonts/mkiv/lm-math.lfg +++ b/tex/context/fonts/mkiv/lm-math.lfg @@ -235,6 +235,10 @@ return { author = "Hans Hagen", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + }, mapfiles = { "lm-math.map", "lm-rm.map", @@ -253,11 +257,5 @@ return { variables = { joinrelfactor = 3, -- default anyway }, - parameters = { -- test values - -- FactorA = 123.456, - -- FactorB = false, - -- FactorC = function(value,target,original) return 7.89 * target.factor end, - -- FactorD = "Hi There!", - }, } } diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg index 243087850..58db0e3a4 100644 --- a/tex/context/fonts/mkiv/lm.lfg +++ b/tex/context/fonts/mkiv/lm.lfg @@ -64,15 +64,37 @@ return { { tweak = "dimensions", list = { - -- nothing yet + [0x00060] = { yoffset = -0.05 }, -- grave + [0x000B4] = { yoffset = -0.05 }, -- acute + [0x002C6] = { yoffset = -0.05 }, -- hat + [0x002DC] = { yoffset = -0.05 }, -- tilde + [0x000AF] = { yoffset = -0.1 }, -- bar + [0x002D8] = { yoffset = -0.05 }, -- breve + [0x002D9] = { yoffset = -0.05 }, -- dot + [0x000A8] = { yoffset = -0.05 }, -- ddot + [0x020DB] = { yoffset = -0.15 }, -- dddot (seem to hit some max) + [0x002DA] = { yoffset = -0.05 }, -- ring + [0x002C7] = { yoffset = -0.05 }, -- check + [0x020D7] = { yoffset = -0.05 }, -- vec + [0x00300] = { yoffset = -0.07 , all=true }, -- widegrave + [0x00301] = { yoffset = -0.07 , all=true }, -- wideacute + [0x00302] = { yoffset = -0.1 , all=true }, -- widehat + [0x00303] = { yoffset = -0.09 , all=true }, -- widetilde + [0x00304] = { yoffset = -0.1 , all=true }, -- widebar + [0x00306] = { yoffset = -0.07 , all=true }, -- widebreve + [0x00307] = { yoffset = -0.05 , all=true }, -- widedot + [0x00308] = { yoffset = -0.05 , all=true }, -- wideddot + [0x020DB] = { yoffset = -0.075 , all=true }, -- widedddot + [0x0030A] = { yoffset = -0.05 , all=true }, -- widering + [0x0030C] = { yoffset = -0.075 , all=true }, -- widecheck }, }, { tweak = "fixprimes", - factor = 0.85, - smaller = true, - scale = 0.70, - fake = 0.6, + factor = 1.05, + -- smaller = true, + scale = 0.9, + -- fake = 0.6, }, { tweak = "checkspacing", @@ -83,6 +105,12 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, parameters = { @@ -95,7 +123,12 @@ return { end return o * target.parameters.factor end, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 50, }, + bigs = {1, 3, 5, 7}, -- -- experimental fixes for mkiv: -- diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg index eff1603fb..769965386 100644 --- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg +++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg @@ -25,17 +25,6 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end --- RadicalVerticalGap = 50 --- RadicalDisplayStyleVerticalGap = 175 - --- RadicalVerticalGap = 166 --- RadicalDisplayStyleVerticalGap = 345 - -local function FixRadicalDisplayStyleVerticalGap(value,target,original) - local o = original.mathparameters.RadicalVerticalGap -- 50 - return 2 * o * target.parameters.factor -end - return { name = "lucida-opentype-math", version = "1.00", @@ -43,6 +32,14 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + RadicalDisplayStyleVerticalGap = 100, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + FractionRuleThickness = 55, + AccentBaseHeight = 650, + AccentBaseDepth = 150, + }, tweaks = { aftercopying = { { @@ -52,28 +49,40 @@ return { { tweak = "dimensions", list = { - -- nothing yet + -- these we fix here + ["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 }, + -- these are done later using the AccentBase* parameters + -- [0x23DC] = { height = .2, yoffset = -0.8 }, + -- [0x23DD] = { depth = .6, yoffset = 0.4 }, }, }, - { - tweak = "fixprimes", - factor = 0.8, -- accent base height - smaller = true, -- replace multiples - scale = 0.75, -- glyph scale - fake = 0.65, -- replace multiples with this width proportion - -- keep = true, -- keep the text size prime (aka minute) - }, + { + tweak = "fixprimes", + factor = 0.9, -- accent base height + -- smaller = true, -- replace multiples + scale = 1, -- glyph scale + -- fake = 0.65, -- replace multiples with this width proportion + -- keep = true, -- keep the text size prime (aka minute) + }, { tweak = "checkspacing", }, { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, - parameters = { - RadicalDisplayStyleVerticalGap = FixRadicalDisplayStyleVerticalGap, - }, alternates = { italic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Lowercase Italic" }, arrow = { feature = 'ss02', value = 1, comment = "Mathematical Alternative Smaller Arrows" }, @@ -82,6 +91,9 @@ return { zero = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Zero" }, partial = { feature = 'ss20', value = 1, comment = "Mathematical Alternative Upright Partial Differential" }, }, + bigslots = { + 1, 2, 3, 4 + }, -- -- experimental fixes for mkiv: -- diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg index e4f42e18b..c80ade9be 100644 --- a/tex/context/fonts/mkiv/minion-math.lfg +++ b/tex/context/fonts/mkiv/minion-math.lfg @@ -51,6 +51,12 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, -- diff --git a/tex/context/fonts/mkiv/newcomputermodern-math.lfg b/tex/context/fonts/mkiv/newcomputermodern-math.lfg new file mode 100644 index 000000000..db05cb947 --- /dev/null +++ b/tex/context/fonts/mkiv/newcomputermodern-math.lfg @@ -0,0 +1,311 @@ +-- In order to be able to use beta math fonts, we use our own file name and +-- always remap. + +local dimensions, kerns if CONTEXTLMTXMODE == 0 then + + local kern_150 = { bottomright = { { kern = -150 } } } + local kern_200 = { bottomright = { { kern = -200 } } } + + kerns = { + [0x1D449] = kern_150, -- + [0x1D44A] = kern_200, -- 𝑊 + } + + dimensions = { + -- always applied + -- default = { + -- }, + -- driven by 'mathdimensions' feature + default = { + -- the root is quite displaced + [0x221A] = { + -- 73, -960, 853, 40 + yoffset = 960 - 40, + height = 960, + depth = 40, + }, + -- [0xFE932] = { xoffset = 50, width = 290 }, -- used prime + -- [0x2032] = { xoffset = 50, width = 290 }, -- prime + }, + -- -- seems ok now -- + -- signs = { + -- -- [0x00B1] = { -- ± + -- -- height = 500, depth = 0, + -- -- }, + -- -- [0x2213] = { -- ∓ + -- -- height = 500, depth = 0, + -- -- }, + -- -- move in boundingbox + -- [0x00B1] = { -- ± + -- yoffset = 100, + -- }, + -- [0x2213] = { -- ∓ + -- yoffset = -100, + -- }, + -- }, + } + +end + + +return { + name = "newcomputermodern", + version = "1.00", + comment = "Goodies that complement newcomputermodern.", + author = "Hans Hagen & Mikael Sundqvist", + copyright = "ConTeXt development team", + mathematics = { + parameters = { + FractionNumeratorDisplayStyleShiftUp = function(value,target,original) + local o = original.mathparameters.FractionNumeratorDisplayStyleShiftUp + if o > 675 then + o = 600 + else + -- probably tuned + end + return o * target.parameters.factor + end, + NoLimitSupFactor = 0, + NoLimitSubFactor = 1200, + }, + tweaks = { + aftercopying = { + { + tweak = "version", + expected = "Version 1.958", + }, + { + tweak = "dimensions", + list = { + -- nothing yet + }, + }, + -- { + -- tweak = "fixprimes", + -- factor = 0.85, + -- smaller = true, + -- scale = 0.70, + -- fake = 0.6, + -- }, + { + tweak = "checkspacing", + }, + { + tweak = "fixradicals", + }, + { + tweak = "addscripts", + }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, + }, + }, + bigs = { + 1, 3, 5, 7 + }, + -- + -- experimental fixes for mkiv: + -- + dimensions = dimensions, + kerns = kerns, + }, + filenames = { + ["latinmodern-math-regular.otf"] = { + "latinmodern-math.otf", -- the beta + "lmmath-regular.otf", + "latinmodernmath-regular.otf", + "lmmath-regular.otf", + "lmodernmath-regular.otf", + "lmodern-math.otf", + }, + }, + designsizes = { + ["LMMathRoman-Regular"] = { + ["4pt"] = "LMMath5-Regular@lmroman5-math", + ["5pt"] = "LMMath5-Regular@lmroman5-math", + ["6pt"] = "LMMath6-Regular@lmroman6-math", + ["7pt"] = "LMMath7-Regular@lmroman7-math", + ["8pt"] = "LMMath8-Regular@lmroman8-math", + ["9pt"] = "LMMath9-Regular@lmroman9-math", + ["10pt"] = "LMMath10-Regular@lmroman10-math", + ["11pt"] = "LMMath10-Regular@lmroman10-math", + ["12pt"] = "LMMath12-Regular@lmroman12-math", + default = "LMMath10-Regular@lmroman10-math" + }, + ["LMMathRoman-Bold"] = { -- not yet ready + ["4pt"] = "LMMath5-Regular@lmroman5-math", + ["5pt"] = "LMMath5-Regular@lmroman5-math", + ["6pt"] = "LMMath6-Regular@lmroman6-math", + ["7pt"] = "LMMath7-Regular@lmroman7-math", + ["8pt"] = "LMMath8-Regular@lmroman8-math", + ["9pt"] = "LMMath9-Regular@lmroman9-math", + ["10pt"] = "LMMath10-Regular@lmroman10-math", + ["11pt"] = "LMMath10-Regular@lmroman10-math", + ["12pt"] = "LMMath12-Regular@lmroman12-math", + default = "LMMath10-Regular@lmroman10-math" + }, + ["LMRoman-Regular"] = { + ["4pt"] = "file:lmroman5-regular", + ["5pt"] = "file:lmroman5-regular", + ["6pt"] = "file:lmroman6-regular", + ["7pt"] = "file:lmroman7-regular", + ["8pt"] = "file:lmroman8-regular", + ["9pt"] = "file:lmroman9-regular", + ["10pt"] = "file:lmroman10-regular", + ["11pt"] = "file:lmroman10-regular", + ["12pt"] = "file:lmroman12-regular", + default = "file:lmroman10-regular", + }, + ["LMRoman-Bold"] = { + ["4pt"] = "file:lmroman5-bold", + ["5pt"] = "file:lmroman5-bold", + ["6pt"] = "file:lmroman6-bold", + ["7pt"] = "file:lmroman7-bold", + ["8pt"] = "file:lmroman8-bold", + ["9pt"] = "file:lmroman9-bold", + ["10pt"] = "file:lmroman10-bold", + ["11pt"] = "file:lmroman10-bold", + ["12pt"] = "file:lmroman12-bold", + default = "file:lmroman10-bold", + }, + ["LMRoman-Demi"] = { + default = "file:lmromandemi10-regular", + }, + ["LMRoman-Italic"] = { + ["4pt"] = "file:lmroman7-italic", + ["5pt"] = "file:lmroman7-italic", + ["6pt"] = "file:lmroman7-italic", + ["7pt"] = "file:lmroman7-italic", + ["8pt"] = "file:lmroman8-italic", + ["9pt"] = "file:lmroman9-italic", + ["10pt"] = "file:lmroman10-italic", + ["11pt"] = "file:lmroman10-italic", + ["12pt"] = "file:lmroman12-italic", + default = "file:lmroman10-italic", + }, + ["LMRoman-Oblique"] = { + ["4pt"] = "file:lmromanslant8-regular", + ["5pt"] = "file:lmromanslant8-regular", + ["6pt"] = "file:lmromanslant8-regular", + ["7pt"] = "file:lmromanslant8-regular", + ["8pt"] = "file:lmromanslant8-regular", + ["9pt"] = "file:lmromanslant9-regular", + ["10pt"] = "file:lmromanslant10-regular", + ["11pt"] = "file:lmromanslant10-regular", + ["12pt"] = "file:lmromanslant12-regular", + default = "file:lmromanslant10-regular", + }, + ["LMRoman-BoldItalic"] = { + default = "file:lmroman10-bolditalic", + }, + ["LMRoman-BoldOblique"] = { + default = "file:lmromanslant10-bold", + }, + ["LMRoman-DemiOblique"] = { + default = "file:lmromandemi10-oblique", + }, + ["LMRoman-CapsRegular"] = { + default = "file:lmromancaps10-regular", + }, + ["LMRoman-CapsOblique"] = { + default = "file:lmromancaps10-oblique", + }, + ["LMRoman-Dunhill"] = { + default = "file:lmromandunh10-regular", + }, + ["LMRoman-DunhillOblique"] = { + default = "file:lmromandunh10-oblique", + }, + ["LMRoman-Unslanted"] = { + default = "file:lmromanunsl10-regular", + }, + ["LMSans-Regular"] = { + ["8pt"] = "file:lmsans8-regular", + ["9pt"] = "file:lmsans9-regular", + ["10pt"] = "file:lmsans10-regular", + ["11pt"] = "file:lmsans10-regular", + ["12pt"] = "file:lmsans12-regular", + default = "file:lmsans10-regular", + }, + ["LMSans-Oblique"] = { + ["8pt"] = "file:lmsans8-oblique", + ["9pt"] = "file:lmsans9-oblique", + ["10pt"] = "file:lmsans10-oblique", + ["11pt"] = "file:lmsans10-oblique", + ["12pt"] = "file:lmsans12-oblique", + default = "file:lmsans10-oblique", + }, + ["LMSans-Bold"] = { + default = "file:lmsans10-bold", + }, + ["LMSans-BoldOblique"] = { + default = "file:lmsans10-boldoblique", + }, + ["LMSans-DemiCondensed"] = { + default = "file:lmsansdemicond10-regular", + }, + ["LMSans-DemiCondensedOblique"] = { + default = "file:lmsansdemicond10-oblique", + }, + ["LMTypewriter-Regular"] = { + ["8pt"] = "file:lmmono8-regular", + ["9pt"] = "file:lmmono9-regular", + ["10pt"] = "file:lmmono10-regular", + ["11pt"] = "file:lmmono10-regular", + ["12pt"] = "file:lmmono12-regular", + default = "file:lmmono10-regular", + }, + ["LMTypewriter-Light"] = { + default = "file:lmmonolt10-regular", + }, + ["LMTypewriter-Dark"] = { + default = "file:lmmonolt10-bold", + }, + ["LMTypewriter-Italic"] = { + default = "file:lmmono10-italic", + }, + ["LMTypewriter-LightOblique"] = { + default = "file:lmmonolt10-oblique", + }, + ["LMTypewriter-Oblique"] = { + default = "file:lmmonoslant10-regular", + }, + ["LMTypewriter-DarkOblique"] = { + default = "file:lmmonolt10-boldoblique", + }, + ["LMTypewriter-LightCondensed"] = { + default = "file:lmmonoltcond10-regular", + }, + ["LMTypewriter-LightCondensedOblique"] = { + default = "file:lmmonoltcond10-oblique", + }, + ["LMTypewriterVarWd-Regular"] = { + default = "file:lmmonoproplt10-regular", + }, + ["LMTypewriterVarWd-Oblique"] = { + default = "file:lmmonoproplt10-oblique", + }, + ["LMTypewriterVarWd-Light"] = { + default = "file:lmmonoprop10-regular", + }, + ["LMTypewriterVarWd-LightOblique"] = { + default = "file:lmmonoprop10-oblique", + }, + ["LMTypewriterVarWd-Dark"] = { + default = "file:lmmonoproplt10-bold", + }, + ["LMTypewriterVarWd-DarkOblique"] = { + default = "file:lmmonoproplt10-boldoblique", + }, + ["LMTypewriter-CapsRegular"] = { + default = "file:lmmonocaps10-regular", + }, + ["LMTypewriter-CapsOblique"] = { + default = "file:lmmonocaps10-oblique", + }, + } +} diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg index 3ea465cf9..db2f30a0a 100644 --- a/tex/context/fonts/mkiv/pagella-math.lfg +++ b/tex/context/fonts/mkiv/pagella-math.lfg @@ -34,6 +34,13 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentTopShiftUp = 30, + -- AccentBaseHeight = 0, + AccentBaseDepth = 80, + }, tweaks = { aftercopying = { { @@ -55,19 +62,63 @@ return { { tweak = "dimensions", list = { -- offset width italic - [0x1D453] = { 0.50, 1.70, 0.6 }, -- f - [0x1D454] = { 0.10, 1.15, 0.2 }, -- g - [0x1D70F] = { -.10, 1, 0 }, -- \tau - [0x1D712] = { 0.1, 1.2, 0.1 }, -- \chi - [0x1D713] = { -0.05, 0.95, 0.1 }, -- \psi + -- [0x002C6] = { scale=.85, yoffset = .1, width = .85, height = .935 }, -- hat + -- [0x00302] = { scale=.85, yoffset = .1, width = .85, height = .935 }, -- hat + -- [0x002C6] = { scale=.75, yoffset = .2, advance = .75, width = .75, height = .90 }, -- hat + -- [0x00302] = { scale=.75, yoffset = .2, advance = .75, width = .75, height = .90 }, -- hat + [0x00060] = { yoffset = -0.035 }, -- grave + [0x000B4] = { yoffset = -0.035 }, -- acute + [0x002C6] = { yoffset = -0.035 }, -- hat + [0x002DC] = { yoffset = -0.035 }, -- tilde + [0x000AF] = { yoffset = -0.05 }, -- bar + [0x002D8] = { yoffset = -0.035 }, -- breve + [0x002D9] = { yoffset = -0.035 }, -- dot + [0x000A8] = { yoffset = -0.05 }, -- ddot + [0x020DB] = { yoffset = -0.06 }, -- dddot + -- [0x002DA] = { yoffset = -0.05 }, -- ring + -- [0x002C7] = { yoffset = -0.05 }, -- check + [0x020D7] = { yoffset = -0.05 }, -- vec + -- [0x00300] = { yoffset = -0.07 , all=true }, -- widegrave + -- [0x00301] = { yoffset = -0.07 , all=true }, -- wideacute + [0x00302] = { yoffset = -0.02 , all=true }, -- widehat + [0x00303] = { yoffset = -0.02 , all=true }, -- widetilde + [0x00304] = { yoffset = -0.05 , all=true }, -- widebar + [0x00306] = { yoffset = -0.03 , all=true }, -- widebreve + [0x00307] = { yoffset = -0.03 , all=true }, -- widedot + [0x00308] = { yoffset = -0.03 , all=true }, -- wideddot + -- [0x020DB] = { yoffset = 0.0 , all=true }, -- widedddot + -- [0x0030A] = { yoffset = -0.05 , all=true }, -- widering + [0x0030C] = { yoffset = -0.03 , all=true }, -- widecheck + [0x1D44E] = { 0, 1, 0, 0.9 }, -- a + [0x1D44F] = { 0, 1, 0, 1.3 }, -- b + [0x1D450] = { 0, 1, 0, 0.9 }, -- c + [0x1D451] = { 0, 1, 0, 0.7 }, -- d + [0x1D452] = { 0, 1, 0, 0.9 }, -- e + [0x1D453] = { 0.50, 1.70, 0.6 }, -- f + [0x1D454] = { 0.10, 1.15, 0.2 }, -- g + [0x0210E] = { 0, 1, 0, 1.3 }, -- h + [0x1D458] = { 0, 1, 0, 1.3 }, -- k + [0x1D459] = { 0, 1, 0, 0.9 }, -- l + [0x1D45E] = { 0, 1, 0, 0.9 }, -- q + [0x1D463] = { 0, 1, 0, 1.25 }, -- v + [0x1D464] = { 0, 1, 0, 1.2 }, -- w + [0x1D6FE] = { 0, 1, 0, 1.2 }, -- \gamma + [0x1D706] = { 0, 1, 0, 1.05 }, -- \lambda + [0x1D70A] = { 0, 1, 0, 1.2 }, -- \omicron + [0x1D70D] = { 0, 1, 0, 1.2 }, -- \varsigma + [0x1D70E] = { 0, 1, 0, 1.1 }, -- \sigma + [0x1D70F] = { -.10, 1, 0, 0.95 }, -- \tau + [0x1D712] = { 0.1, 1.2, 0.1 }, -- \chi + [0x1D713] = { -0.05, 0.95, 0.1 }, -- \psi + [0x1D71D] = { 0, 1, 0, 0.7 }, -- \varpi }, }, { tweak = "fixprimes", - factor = 0.85, - smaller = true, - scale = 0.70, - fake = 0.65, + factor = 0.9, + -- smaller = true, + scale = 0.9, + -- fake = 0.65, }, { tweak = "checkspacing", @@ -75,8 +126,17 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, + bigslots = { + 1, 3, 5, 7 + }, alternates = { dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, }, diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg index f2e6d2e9b..33efb6892 100644 --- a/tex/context/fonts/mkiv/schola-math.lfg +++ b/tex/context/fonts/mkiv/schola-math.lfg @@ -17,6 +17,12 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + }, tweaks = { aftercopying = { { @@ -31,9 +37,9 @@ return { }, { tweak = "fixprimes", - scale = 0.8, - smaller = true, - factor = 0.9, + scale = 0.85, + -- smaller = true, + factor = 1, }, { tweak = "checkspacing", @@ -41,8 +47,17 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, + bigslots = { + 1, 3, 5, 7 + }, alternates = { dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, }, diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg index 4c382babb..d698167aa 100644 --- a/tex/context/fonts/mkiv/stix-two-math.lfg +++ b/tex/context/fonts/mkiv/stix-two-math.lfg @@ -20,6 +20,12 @@ return { -- todo = { feature = 'ss14', value = 1, comment = "" }, circled = { feature = 'ss16', value = 1, comment = "Mathematical Alternative Circled Operators" }, }, + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + }, tweaks = { aftercopying = { { @@ -29,14 +35,35 @@ return { { tweak = "dimensions", list = { - -- nothing yet + -- [0x00060] = { yoffset = -0.035 }, -- grave + -- [0x000B4] = { yoffset = -0.035 }, -- acute + -- [0x002C6] = { yoffset = -0.035 }, -- hat + -- [0x002DC] = { yoffset = -0.035 }, -- tilde + -- [0x000AF] = { yoffset = -0.05 }, -- bar + -- [0x002D8] = { yoffset = -0.035 }, -- breve + [0x002D9] = { yoffset = -0.02 }, -- dot + [0x000A8] = { yoffset = -0.02 }, -- ddot + [0x020DB] = { yoffset = 0.04 }, -- dddot + -- [0x002DA] = { yoffset = -0.05 }, -- ring + -- [0x002C7] = { yoffset = -0.05 }, -- check + [0x020D7] = { yoffset = -0.07 }, -- vec + -- [0x00300] = { yoffset = -0.07 , all=true }, -- widegrave + -- [0x00301] = { yoffset = -0.07 , all=true }, -- wideacute + -- [0x00302] = { yoffset = -0.02 , all=true }, -- widehat + -- [0x00303] = { yoffset = -0.02 , all=true }, -- widetilde + -- [0x00304] = { yoffset = -0.05 , all=true }, -- widebar + -- [0x00306] = { yoffset = -0.03 , all=true }, -- widebreve + -- [0x00307] = { yoffset = -0.03 , all=true }, -- widedot + -- [0x00308] = { yoffset = -0.03 , all=true }, -- wideddot + -- [0x020DB] = { yoffset = 0.0 , all=true }, -- widedddot + -- [0x0030A] = { yoffset = -0.05 , all=true }, -- widering }, }, { tweak = "fixprimes", - scale = 0.7, - smaller = true, - factor = 0.85, + scale = 1, + -- smaller = true, + factor = 1, }, { tweak = "checkspacing", @@ -44,8 +71,17 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, + bigslots = { + 1, 3, 5, 7 + }, }, } diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg index fe6cc7956..2ad93c30b 100644 --- a/tex/context/fonts/mkiv/termes-math.lfg +++ b/tex/context/fonts/mkiv/termes-math.lfg @@ -25,6 +25,12 @@ return { author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { + parameters = { + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 50, + }, tweaks = { aftercopying = { { @@ -34,16 +40,27 @@ return { { tweak = "dimensions", list = { - [0x1D453] = { 0.6, 1.4, 1.2 }, -- f - [0x1D457] = { 0.5, 1.3, 1.7 }, -- j - [0x1D45D] = { 0.15, 1.15, 0 }, -- p + [0x1D44F] = { 0, 1, 0, 1.3 }, -- b + [0x1D451] = { 0, 1, 0, 0.8 }, -- d + [0x1D452] = { 0, 1, 0, 0.9 }, -- e + [0x0210E] = { 0, 1, 0, 1.3 }, -- h + [0x1D458] = { 0, 1, 0, 1.3 }, -- k + [0x1D453] = { 0.6, 1.4, 1.2, 1.5 }, -- f + [0x1D457] = { 0.5, 1.3, 1.7 }, -- j + [0x1D45D] = { 0.15, 1.15, 0, 1.4 }, -- p + [0x1D45E] = { 0, 1, 0, 0.9 }, -- q + [0x1D464] = { 0, 1, 0, 1.1 }, -- w + [0x1D6FE] = { 0, 1, 0, 1.1 }, -- \gamma + [0x1D706] = { 0, 1, 0, 1.05 }, -- \lambda + [0x1D70A] = { 0, 1, 0, 1.2 }, -- \omicron + [0x1D70F] = { 0, 1, 0, 1.05 }, -- \tau }, }, { tweak = "fixprimes", - scale = 0.7, - smaller = true, - factor = 0.9, + scale = 0.85, + -- smaller = true, + factor = 0.95, }, { tweak = "checkspacing", @@ -51,8 +68,17 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, + bigslots = { + 1, 3, 5, 7 + }, alternates = { dotless = { feature = 'dtls', value = 1, comment = "Mathematical Dotless Forms" }, }, diff --git a/tex/context/fonts/mkiv/tx-math.lfg b/tex/context/fonts/mkiv/tx-math.lfg index 58467129e..1acebfd5b 100644 --- a/tex/context/fonts/mkiv/tx-math.lfg +++ b/tex/context/fonts/mkiv/tx-math.lfg @@ -13,13 +13,13 @@ return { { name = "texgyretermes-regular.otf", features = "virtualmath", main = true }, { name = "texgyretermes-regular.otf", features = "virtualmath", vector = "tex-mr-missing" }, { name = "rtxr.tfm", vector = "tex-mr" }, - { name = "rtxptmri.tfm", vector = "tex-it", skewchar=0x7F }, - { name = "rtxmi.tfm", vector = "tex-mi", skewchar=0x7F }, - { name = "txsy.tfm", vector = "tex-sy", skewchar=0x30, parameters = true }, + { name = "rtxptmri.tfm", vector = "tex-it", skewchar = 0x7F }, + { name = "rtxmi.tfm", vector = "tex-mi", skewchar = 0x7F }, + { name = "txsy.tfm", vector = "tex-sy", skewchar = 0x30, parameters = true }, { name = "txex.tfm", vector = "tex-ex", extension = true }, { name = "txsya.tfm", vector = "tex-ma" }, { name = "txsyb.tfm", vector = "tex-mb" }, - { name = "texgyretermes-bold.otf", vector = "tex-bf", skewchar=0x7F }, + { name = "texgyretermes-bold.otf", vector = "tex-bf", skewchar = 0x7F }, { name = "texgyretermes-bolditalic.otf", vector = "tex-bi" }, { name = "lmsans10-regular.otf", vector = "tex-ss", optional=true }, { name = "lmmono10-regular.otf", vector = "tex-tt", optional=true }, diff --git a/tex/context/fonts/mkiv/type-imp-concrete.mkiv b/tex/context/fonts/mkiv/type-imp-concrete.mkiv new file mode 100644 index 000000000..72b0141a5 --- /dev/null +++ b/tex/context/fonts/mkiv/type-imp-concrete.mkiv @@ -0,0 +1,51 @@ +%\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] + \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] + \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] + \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] + \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] + \quittypescriptscanning + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-erewhon.mkiv b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv new file mode 100644 index 000000000..b8efcd7f9 --- /dev/null +++ b/tex/context/fonts/mkiv/type-imp-erewhon.mkiv @@ -0,0 +1,45 @@ +%\loadtypescriptfile[texgyre] +%\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!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] + \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] + \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] + \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!tt] [\s!mono] [inconsolata-mono] [\s!default] [\s!rscale=1.1] + \definetypeface [erewhon] [\s!mm] [\s!math] [erewhon-math] [\s!default] + \quittypescriptscanning + \stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-libertinus.mkiv b/tex/context/fonts/mkiv/type-imp-libertinus.mkiv index 00b2a6abd..38804cf79 100644 --- a/tex/context/fonts/mkiv/type-imp-libertinus.mkiv +++ b/tex/context/fonts/mkiv/type-imp-libertinus.mkiv @@ -72,6 +72,7 @@ \stoptypescript \starttypescript [\s!math] [libertinus] [\s!name] + \loadfontgoodies[libertinus-math] \definefontsynonym[\s!MathRoman ] [\s!file:libertinusmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=libertinus-math.lfg] \definefontsynonym[\s!MathRomanBold] [\s!file:libertinusmath-regular.otf] [\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=libertinus-math.lfg] \stoptypescript diff --git a/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv index e3417fca5..2494d1af2 100644 --- a/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv +++ b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv @@ -54,8 +54,8 @@ \starttypescript [\s!math] [modern-latin] \loadfontgoodies[lm] - \definefontsynonym [MathRoman] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,oldmath,lm-math-regular,mathextra},\s!goodies=lm] - \definefontsynonym [MathRomanBold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,oldmath,lm-math-bold,mathextra},\s!goodies=lm] + \definefontsynonym [MathRoman] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,lm-math-regular,mathextra},\s!goodies=lm] + \definefontsynonym [MathRomanBold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,lm-math-bold,mathextra},\s!goodies=lm] \stoptypescript \starttypescript [modern-latin,modernlatin] diff --git a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv index 1c9788a98..00b9cb964 100644 --- a/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-newcomputermodern.mkiv @@ -49,8 +49,8 @@ \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!MathRoman] [\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,mathextra},\s!goodies=newcomputermodern-math] + \definefontsynonym[\s!MathRomanBold][\s!file:newcmmath-regular][\s!features={\s!math\mathsizesuffix,newcomputermodern-math-bold,mathextra}\s!goodies=newcomputermodern-math] \stoptypescript \starttypescript [\s!serif] [newcomputermodern-book] [\s!name] diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg index d85e4b1b6..42a7052b9 100644 --- a/tex/context/fonts/mkiv/xits-math.lfg +++ b/tex/context/fonts/mkiv/xits-math.lfg @@ -38,6 +38,12 @@ return { { tweak = "addscripts", }, + { + tweak = "accentdimensions", + }, + { + tweak = "addrules", + }, }, }, alternates = { diff --git a/tex/context/fonts/mkxl/bhai.lfg b/tex/context/fonts/mkxl/bhai.lfg new file mode 100644 index 000000000..ab309e0b8 --- /dev/null +++ b/tex/context/fonts/mkxl/bhai.lfg @@ -0,0 +1,74 @@ +return { + name = "bhai", + version = "1.00", + comment = "Goodies that complement shobhika.", + author = "Hans Hagen & Sreeram", + copyright = "ConTeXt development team", + sanitizers = { + gjr2rkrf = { + mapping = { + ["કે્ર"] = "ક્રે", + ["કૈ્ર"] = "ક્રૈ", + ["ખે્ર"] = "ખ્રે", + ["ખૈ્ર"] = "ખ્રૈ", + ["ગે્ર"] = "ગ્રે", + ["ગૈ્ર"] = "ગ્રૈ", + ["ઘે્ર"] = "ઘ્રે", + ["ઘૈ્ર"] = "ઘ્રૈ", + -- not required: placeholder + -- ["ઙે્ર"] = "ઙ્રે", + -- ["ઙૈ્ર"] = "ઙ્રૈ", + ["ચે્ર"] = "ચ્રે", + ["ચૈ્ર"] = "ચ્રૈ", + ["છે્ર"] = "છ્રે", + ["છૈ્ર"] = "છ્રૈ", + ["જે્ર"] = "જ્રે", + ["જૈ્ર"] = "જ્રૈ", + ["ઝે્ર"] = "ઝ્રે", + ["ઝૈ્ર"] = "ઝ્રૈ", + ["ઞે્ર"] = "ઞ્રે", + ["ઞૈ્ર"] = "ઞ્રૈ", + ["ણે્ર"] = "ણ્રે", + ["ણૈ્ર"] = "ણ્રૈ", + ["તે્ર"] = "ત્રે", + ["તૈ્ર"] = "ત્રૈ", + ["થે્ર"] = "થ્રે", + ["થૈ્ર"] = "થ્રૈ", + ["દે્ર"] = "દ્રે", + ["દૈ્ર"] = "દ્રૈ", + ["ધે્ર"] = "ધ્રે", + ["ધૈ્ર"] = "ધ્રૈ", + ["ને્ર"] = "ન્રે", + ["નૈ્ર"] = "ન્રૈ", + ["પે્ર"] = "પ્રે", + ["પૈ્ર"] = "પ્રૈ", + ["ફે્ર"] = "ફ્રે", + ["ફૈ્ર"] = "ફ્રૈ", + ["બે્ર"] = "બ્રે", + ["બૈ્ર"] = "બ્રૈ", + ["ભે્ર"] = "ભ્રે", + ["ભૈ્ર"] = "ભ્રૈ", + ["મે્ર"] = "મ્રે", + ["મૈ્ર"] = "મ્રૈ", + ["યે્ર"] = "ય્રે", + ["યૈ્ર"] = "ય્રૈ", + -- some fonts might need this, some might not + -- ["લે્ર"] = "લ્રે", + -- ["લૈ્ર"] = "લ્રૈ", + ["વે્ર"] = "વ્રે", + ["વૈ્ર"] = "વ્રૈ", + ["સે્ર"] = "સ્રે", + ["સૈ્ર"] = "સ્રૈ", + ["શે્ર"] = "શ્રે", + ["શૈ્ર"] = "શ્રૈ", + ["ષે્ર"] = "ષ્રે", + ["ષૈ્ર"] = "ષ્રૈ", + ["હે્ર"] = "હ્રે", + ["હૈ્ર"] = "હ્રૈ", + -- some fonts might need this, some might not + -- ["ળે્ર"] = "ળ્રે", + -- ["ળૈ્ર"] = "ળ્રૈ", + } + } + } +} diff --git a/tex/context/fonts/mkxl/shobhika.lfg b/tex/context/fonts/mkxl/shobhika.lfg new file mode 100644 index 000000000..f9b7dc433 --- /dev/null +++ b/tex/context/fonts/mkxl/shobhika.lfg @@ -0,0 +1,74 @@ +return { + name = "shobhika", + version = "1.00", + comment = "Goodies that complement shobhika.", + author = "Hans Hagen & Sreeram", + copyright = "ConTeXt development team", + sanitizers = { + dev2rkrf = { + mapping = { + ["के्र"] = "क्रे", + ["कै्र"] = "क्रै", + ["खे्र"] = "ख्रे", + ["खै्र"] = "ख्रै", + ["गे्र"] = "ग्रे", + ["गै्र"] = "ग्रै", + ["घे्र"] = "घ्रे", + ["घै्र"] = "घ्रै", + -- not required: placeholder + -- ["ङे्र"] = "ङ्रे", + -- ["ङै्र"] = "ङ्रै", + ["चे्र"] = "च्रे", + ["चै्र"] = "च्रै", + ["छे्र"] = "छ्रे", + ["छै्र"] = "छ्रै", + ["जे्र"] = "ज्रे", + ["जै्र"] = "ज्रै", + ["झे्र"] = "झ्रे", + ["झै्र"] = "झ्रै", + ["ञे्र"] = "ञ्रे", + ["ञै्र"] = "ञ्रै", + ["णे्र"] = "ण्रे", + ["णै्र"] = "ण्रै", + ["ते्र"] = "त्रे", + ["तै्र"] = "त्रै", + ["थे्र"] = "थ्रे", + ["थै्र"] = "थ्रै", + ["दे्र"] = "द्रे", + ["दै्र"] = "द्रै", + ["धे्र"] = "ध्रे", + ["धै्र"] = "ध्रै", + ["ने्र"] = "न्रे", + ["नै्र"] = "न्रै", + ["पे्र"] = "प्रे", + ["पै्र"] = "प्रै", + ["फे्र"] = "फ्रे", + ["फै्र"] = "फ्रै", + ["बे्र"] = "ब्रे", + ["बै्र"] = "ब्रै", + ["भे्र"] = "भ्रे", + ["भै्र"] = "भ्रै", + ["मे्र"] = "म्रे", + ["मै्र"] = "म्रै", + ["ये्र"] = "य्रे", + ["यै्र"] = "य्रै", + -- some fonts might need this, some might not + -- ["ले्र"] = "ल्रे", + -- ["लै्र"] = "ल्रै", + ["वे्र"] = "व्रे", + ["वै्र"] = "व्रै", + ["से्र"] = "स्रे", + ["सै्र"] = "स्रै", + ["शे्र"] = "श्रे", + ["शै्र"] = "श्रै", + ["षे्र"] = "ष्रे", + ["षै्र"] = "ष्रै", + ["हे्र"] = "ह्रे", + ["है्र"] = "ह्रै", + -- some fonts might need this, some might not + -- ["ळे्र"] = "ळ्रे", + -- ["ळै्र"] = "ळ्रै", + } + } + } +} diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml index 7cd92518b..798a94760 100644 --- a/tex/context/interface/mkii/keys-cs.xml +++ b/tex/context/interface/mkii/keys-cs.xml @@ -284,7 +284,6 @@ <cd:variable name='inright' value='ivpravo'/> <cd:variable name='inrightedge' value='napravo'/> <cd:variable name='inrightmargin' value='napravyokraj'/> - <cd:variable name='integral' value='integral'/> <cd:variable name='interaction' value='interakce'/> <cd:variable name='interactionmenu' value='interaktivnimenu'/> <cd:variable name='interactive' value='interactive'/> @@ -722,6 +721,7 @@ <cd:constant name='bottom' value='spodek'/> <cd:constant name='bottomafter' value='bottomafter'/> <cd:constant name='bottombefore' value='bottombefore'/> + <cd:constant name='bottomcolor' value='bottomcolor'/> <cd:constant name='bottomcommand' value='bottomcommand'/> <cd:constant name='bottomdistance' value='vzdalenostspodku'/> <cd:constant name='bottomframe' value='ramecekdole'/> @@ -893,6 +893,7 @@ <cd:constant name='header' value='zahlavi'/> <cd:constant name='headerdistance' value='vzdalenostzahlavi'/> <cd:constant name='headerstate' value='statuszahlavi'/> + <cd:constant name='headindenting' value='headindenting'/> <cd:constant name='headlabel' value='popisekhlavicky'/> <cd:constant name='headnumber' value='cislonadpisu'/> <cd:constant name='headseparator' value='headseparator'/> @@ -924,6 +925,7 @@ <cd:constant name='inputfile' value='inputfile'/> <cd:constant name='insidesection' value='insidesection'/> <cd:constant name='instance' value='instance'/> + <cd:constant name='integral' value='integral'/> <cd:constant name='intent' value='intent'/> <cd:constant name='interaction' value='interakce'/> <cd:constant name='interlinespace' value='meziradkovamezera'/> @@ -966,6 +968,7 @@ <cd:constant name='leftquote' value='citovatvlevo'/> <cd:constant name='leftsample' value='leftsample'/> <cd:constant name='leftsentence' value='vetavlevo'/> + <cd:constant name='leftsource' value='leftsource'/> <cd:constant name='leftspeech' value='leftspeech'/> <cd:constant name='leftstyle' value='stylvlevo'/> <cd:constant name='leftsubsentence' value='podvetavlevo'/> @@ -998,7 +1001,9 @@ <cd:constant name='marstyle' value='stylsnacky'/> <cd:constant name='mask' value='mask'/> <cd:constant name='mathclass' value='mathclass'/> + <cd:constant name='mathdenominatorstyle' value='mathdenominatorstyle'/> <cd:constant name='mathlimits' value='mathlimits'/> + <cd:constant name='mathnumeratorstyle' value='mathnumeratorstyle'/> <cd:constant name='mathstyle' value='mathstyle'/> <cd:constant name='max' value='max'/> <cd:constant name='maxdepth' value='maxdepth'/> @@ -1010,6 +1015,7 @@ <cd:constant name='middle' value='stredni'/> <cd:constant name='middlecolor' value='middlecolor'/> <cd:constant name='middlecommand' value='middlecommand'/> + <cd:constant name='middlesource' value='middlesource'/> <cd:constant name='middlespeech' value='middlespeech'/> <cd:constant name='middlestyle' value='middlestyle'/> <cd:constant name='middletext' value='strednitext'/> @@ -1182,6 +1188,7 @@ <cd:constant name='rightquote' value='citovatvpravo'/> <cd:constant name='rightsample' value='rightsample'/> <cd:constant name='rightsentence' value='vetavpravo'/> + <cd:constant name='rightsource' value='rightsource'/> <cd:constant name='rightspeech' value='rightspeech'/> <cd:constant name='rightstyle' value='stylvpravo'/> <cd:constant name='rightsubsentence' value='podvetavpravo'/> @@ -1317,6 +1324,7 @@ <cd:constant name='toffset' value='toffset'/> <cd:constant name='tolerance' value='tolerance'/> <cd:constant name='top' value='vrsek'/> + <cd:constant name='topcolor' value='topcolor'/> <cd:constant name='topcommand' value='topcommand'/> <cd:constant name='topdistance' value='vzdalenostvrsku'/> <cd:constant name='topframe' value='rameceknahore'/> diff --git a/tex/context/interface/mkii/keys-fr.xml b/tex/context/interface/mkii/keys-fr.xml index 9dd507c6a..0cc90a6a0 100644 --- a/tex/context/interface/mkii/keys-fr.xml +++ b/tex/context/interface/mkii/keys-fr.xml @@ -284,7 +284,6 @@ <cd:variable name='inright' value='dansdroite'/> <cd:variable name='inrightedge' value='dansborddroit'/> <cd:variable name='inrightmargin' value='dansmargedroite'/> - <cd:variable name='integral' value='integrale'/> <cd:variable name='interaction' value='interaction'/> <cd:variable name='interactionmenu' value='menuinteraction'/> <cd:variable name='interactive' value='interactif'/> @@ -303,6 +302,7 @@ <cd:variable name='july' value='juillet'/> <cd:variable name='june' value='juin'/> <cd:variable name='keep' value='conserver'/> + <cd:variable name='keeptogether' value='conserverensemble'/> <cd:variable name='kerncharacters' value='approchercaracteres'/> <cd:variable name='knockout' value='knockout'/> <cd:variable name='label' value='etiquette'/> @@ -318,6 +318,7 @@ <cd:variable name='lefthanging' value='suspensiongauche'/> <cd:variable name='leftmargin' value='margegauche'/> <cd:variable name='leftpage' value='surpagegauche'/> + <cd:variable name='lefttext' value='textegauche'/> <cd:variable name='lefttoright' value='gaucheadroite'/> <cd:variable name='legend' value='legende'/> <cd:variable name='less' value='moins'/> @@ -479,6 +480,7 @@ <cd:variable name='righthanging' value='suspensiondroite'/> <cd:variable name='rightmargin' value='margedroite'/> <cd:variable name='rightpage' value='surpagedroite'/> + <cd:variable name='righttext' value='textedroite'/> <cd:variable name='righttoleft' value='droiteagauche'/> <cd:variable name='roman' value='romain'/> <cd:variable name='romannumerals' value='chiffresromains'/> @@ -719,6 +721,7 @@ <cd:constant name='bottom' value='bas'/> <cd:constant name='bottomafter' value='basaprès'/> <cd:constant name='bottombefore' value='basavant'/> + <cd:constant name='bottomcolor' value='bottomcolor'/> <cd:constant name='bottomcommand' value='commandebas'/> <cd:constant name='bottomdistance' value='distancebas'/> <cd:constant name='bottomframe' value='cadrebas'/> @@ -890,6 +893,7 @@ <cd:constant name='header' value='entête'/> <cd:constant name='headerdistance' value='distanceentête'/> <cd:constant name='headerstate' value='etatentête'/> + <cd:constant name='headindenting' value='headindenting'/> <cd:constant name='headlabel' value='etiquettetete'/> <cd:constant name='headnumber' value='numerotete'/> <cd:constant name='headseparator' value='separateurtete'/> @@ -921,6 +925,7 @@ <cd:constant name='inputfile' value='fichierentree'/> <cd:constant name='insidesection' value='auseinsection'/> <cd:constant name='instance' value='instance'/> + <cd:constant name='integral' value='integrale'/> <cd:constant name='intent' value='intention'/> <cd:constant name='interaction' value='interaction'/> <cd:constant name='interlinespace' value='espaceinterligne'/> @@ -963,6 +968,7 @@ <cd:constant name='leftquote' value='citergauche'/> <cd:constant name='leftsample' value='echantillongauche'/> <cd:constant name='leftsentence' value='phrasegauche'/> + <cd:constant name='leftsource' value='leftsource'/> <cd:constant name='leftspeech' value='discoursgauche'/> <cd:constant name='leftstyle' value='stylegauche'/> <cd:constant name='leftsubsentence' value='sousphrasegauche'/> @@ -995,7 +1001,9 @@ <cd:constant name='marstyle' value='stylerem'/> <cd:constant name='mask' value='masque'/> <cd:constant name='mathclass' value='classemath'/> + <cd:constant name='mathdenominatorstyle' value='mathdenominatorstyle'/> <cd:constant name='mathlimits' value='limitesmath'/> + <cd:constant name='mathnumeratorstyle' value='mathnumeratorstyle'/> <cd:constant name='mathstyle' value='stylemath'/> <cd:constant name='max' value='max'/> <cd:constant name='maxdepth' value='profondeurmax'/> @@ -1007,6 +1015,7 @@ <cd:constant name='middle' value='milieu'/> <cd:constant name='middlecolor' value='couleurmilieu'/> <cd:constant name='middlecommand' value='commandemilieu'/> + <cd:constant name='middlesource' value='middlesource'/> <cd:constant name='middlespeech' value='discoursmilieu'/> <cd:constant name='middlestyle' value='stylemilieu'/> <cd:constant name='middletext' value='textemilieu'/> @@ -1179,6 +1188,7 @@ <cd:constant name='rightquote' value='citerdroite'/> <cd:constant name='rightsample' value='echantillondroite'/> <cd:constant name='rightsentence' value='phrasedroite'/> + <cd:constant name='rightsource' value='rightsource'/> <cd:constant name='rightspeech' value='discoursdroite'/> <cd:constant name='rightstyle' value='styledroit'/> <cd:constant name='rightsubsentence' value='sousphrasedroite'/> @@ -1284,8 +1294,10 @@ <cd:constant name='synonymcommand' value='commandesynonyme'/> <cd:constant name='synonymstyle' value='stylesynonyme'/> <cd:constant name='tab' value='tab'/> + <cd:constant name='target' value='target'/> <cd:constant name='text' value='texte'/> <cd:constant name='textalign' value='alignertexte'/> + <cd:constant name='textalternative' value='textalternative'/> <cd:constant name='textcolor' value='couleurtexte'/> <cd:constant name='textcommand' value='commandetexte'/> <cd:constant name='textdistance' value='distancetexte'/> @@ -1312,6 +1324,7 @@ <cd:constant name='toffset' value='decalaget'/> <cd:constant name='tolerance' value='tolerance'/> <cd:constant name='top' value='haut'/> + <cd:constant name='topcolor' value='topcolor'/> <cd:constant name='topcommand' value='commandehaut'/> <cd:constant name='topdistance' value='distancehaut'/> <cd:constant name='topframe' value='cadrehaut'/> diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml index 70fc55c34..dcda83b79 100644 --- a/tex/context/interface/mkii/keys-pe.xml +++ b/tex/context/interface/mkii/keys-pe.xml @@ -284,7 +284,6 @@ <cd:variable name='inright' value='درونراست'/> <cd:variable name='inrightedge' value='درلبهراست'/> <cd:variable name='inrightmargin' value='درحاشیهراست'/> - <cd:variable name='integral' value='integral'/> <cd:variable name='interaction' value='پانل'/> <cd:variable name='interactionmenu' value='منویپانل'/> <cd:variable name='interactive' value='interactive'/> @@ -303,6 +302,7 @@ <cd:variable name='july' value='ژولای'/> <cd:variable name='june' value='ژوئن'/> <cd:variable name='keep' value='نگهدار'/> + <cd:variable name='keeptogether' value='keeptogether'/> <cd:variable name='kerncharacters' value='kerncharacters'/> <cd:variable name='knockout' value='knockout'/> <cd:variable name='label' value='برچسب'/> @@ -721,6 +721,7 @@ <cd:constant name='bottom' value='پایین'/> <cd:constant name='bottomafter' value='bottomafter'/> <cd:constant name='bottombefore' value='bottombefore'/> + <cd:constant name='bottomcolor' value='bottomcolor'/> <cd:constant name='bottomcommand' value='bottomcommand'/> <cd:constant name='bottomdistance' value='فاصلهپایین'/> <cd:constant name='bottomframe' value='قالبپایین'/> @@ -892,6 +893,7 @@ <cd:constant name='header' value='سربرگ'/> <cd:constant name='headerdistance' value='فاصلهسربرگ'/> <cd:constant name='headerstate' value='وضعیتسربرگ'/> + <cd:constant name='headindenting' value='headindenting'/> <cd:constant name='headlabel' value='برچسبسر'/> <cd:constant name='headnumber' value='شمارهسر'/> <cd:constant name='headseparator' value='headseparator'/> @@ -923,6 +925,7 @@ <cd:constant name='inputfile' value='پروندهورودی'/> <cd:constant name='insidesection' value='insidesection'/> <cd:constant name='instance' value='instance'/> + <cd:constant name='integral' value='integral'/> <cd:constant name='intent' value='intent'/> <cd:constant name='interaction' value='پانل'/> <cd:constant name='interlinespace' value='فضایبینخط'/> @@ -965,6 +968,7 @@ <cd:constant name='leftquote' value='نقلچپ'/> <cd:constant name='leftsample' value='leftsample'/> <cd:constant name='leftsentence' value='جملهچپ'/> + <cd:constant name='leftsource' value='leftsource'/> <cd:constant name='leftspeech' value='سخنرانیچپ'/> <cd:constant name='leftstyle' value='سبکچپ'/> <cd:constant name='leftsubsentence' value='زیرجملهچپ'/> @@ -997,7 +1001,9 @@ <cd:constant name='marstyle' value='سبکحاش'/> <cd:constant name='mask' value='mask'/> <cd:constant name='mathclass' value='mathclass'/> + <cd:constant name='mathdenominatorstyle' value='mathdenominatorstyle'/> <cd:constant name='mathlimits' value='mathlimits'/> + <cd:constant name='mathnumeratorstyle' value='mathnumeratorstyle'/> <cd:constant name='mathstyle' value='mathstyle'/> <cd:constant name='max' value='بیشترین'/> <cd:constant name='maxdepth' value='maxdepth'/> @@ -1009,6 +1015,7 @@ <cd:constant name='middle' value='میان'/> <cd:constant name='middlecolor' value='middlecolor'/> <cd:constant name='middlecommand' value='middlecommand'/> + <cd:constant name='middlesource' value='middlesource'/> <cd:constant name='middlespeech' value='سخنرانیمیانی'/> <cd:constant name='middlestyle' value='middlestyle'/> <cd:constant name='middletext' value='متنمیانی'/> @@ -1181,6 +1188,7 @@ <cd:constant name='rightquote' value='نقلراست'/> <cd:constant name='rightsample' value='rightsample'/> <cd:constant name='rightsentence' value='جملهراست'/> + <cd:constant name='rightsource' value='rightsource'/> <cd:constant name='rightspeech' value='سخنرانیراست'/> <cd:constant name='rightstyle' value='سبکراست'/> <cd:constant name='rightsubsentence' value='زیرجملهراست'/> @@ -1235,7 +1243,7 @@ <cd:constant name='solution' value='solution'/> <cd:constant name='sort' value='sort'/> <cd:constant name='sorttype' value='ترتیبتایپ'/> - <cd:constant name='source' value='منبع'/> + <cd:constant name='source' value='source'/> <cd:constant name='space' value='فضا'/> <cd:constant name='spaceafter' value='فضابعداز'/> <cd:constant name='spaceafterside' value='spaceafterside'/> @@ -1286,6 +1294,7 @@ <cd:constant name='synonymcommand' value='synonymcommand'/> <cd:constant name='synonymstyle' value='سبکمترادف'/> <cd:constant name='tab' value='تب'/> + <cd:constant name='target' value='target'/> <cd:constant name='text' value='متن'/> <cd:constant name='textalign' value='textalign'/> <cd:constant name='textalternative' value='textalternative'/> @@ -1315,6 +1324,7 @@ <cd:constant name='toffset' value='toffset'/> <cd:constant name='tolerance' value='بردباری'/> <cd:constant name='top' value='بالا'/> + <cd:constant name='topcolor' value='topcolor'/> <cd:constant name='topcommand' value='topcommand'/> <cd:constant name='topdistance' value='فاصلهبالا'/> <cd:constant name='topframe' value='قالبراست'/> diff --git a/tex/context/modules/mkiv/m-zint.mkiv b/tex/context/modules/mkiv/m-zint.mkiv index 7fe9f761c..87e0d382c 100644 --- a/tex/context/modules/mkiv/m-zint.mkiv +++ b/tex/context/modules/mkiv/m-zint.mkiv @@ -68,9 +68,12 @@ function moduledata.zint.generate(code,data,suffix,options) if not lfs.isfile(name) then local temp = file.addsuffix(base,"tmp") local code = numberofcode(code) - logs.simple("using 'zint' to generate '%s'",base) io.savedata(temp,data) - os.execute(format('%s --barcode=%s --output="%s" --input="%s" %s',zint,code,name,temp,options or "")) + local command = format('%s --barcode=%s %s --output="%s" --input="%s"',zint,code,options or "",name,temp) + logs.simple("using 'zint' to generate '%s'",base) + logs.simple("command '%s'",command) + print(command) + os.execute(command) os.remove(temp) end return name @@ -83,10 +86,10 @@ end \unexpanded\def\barcode[#1]% [alternative=,text=] {\bgroup \getdummyparameters - [\c!alternative=,\c!text=,#1]% + [\c!alternative=,\c!text=,\c!suffix=eps,\c!option=,#1]% \externalfigure - [\cldcontext{moduledata.zint.generate("\dummyparameter\c!alternative",\!!bs\dummyparameter\c!text\!!es)}]% - [#1,\c!alternative=,\c!text=]% + [\cldcontext{moduledata.zint.generate("\dummyparameter\c!alternative",\!!bs\dummyparameter\c!text\!!es,"\dummyparameter\c!suffix","\dummyparameter\c!option")}]% + [#1,\c!option=,\c!alternative=,\c!text=]% \egroup} \protect @@ -95,15 +98,17 @@ end \starttext - \externalfigure[\cldcontext{moduledata.zint.generate("PDF417",[[Hans Hagen]])}] - \blank - \externalfigure[\cldcontext{moduledata.zint.generate("PDF417","Ton Otten")}] - \blank - \externalfigure[\cldcontext{moduledata.zint.generate("ISBN","9789490688011")}] - \blank - \barcode[text=Does It Work?,width=\textwidth] - \blank - \barcode[alternative=isbn,text=9789490688011,width=3cm] +% \externalfigure[\cldcontext{moduledata.zint.generate("PDF417",[[Hans Hagen]])}] +% \blank +% \externalfigure[\cldcontext{moduledata.zint.generate("PDF417","Ton Otten")}] +% \blank +% \externalfigure[\cldcontext{moduledata.zint.generate("ISBN","9789490688011")}] +% \blank +% \barcode[text=Does It Work?,width=\textwidth] +% \blank +% \barcode[alternative=isbn,text=9789490688011,width=3cm] +% \blank + \barcode[alternative=datamatrix,text=whatever,width=3cm,option=--square] \stoptext diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua index fc697cae5..aed3258d2 100644 --- a/tex/context/modules/mkiv/s-math-characters.lua +++ b/tex/context/modules/mkiv/s-math-characters.lua @@ -157,8 +157,8 @@ local alllookups = collectalllookups(tfmdata,"math","dflt") -- skip else local next_sizes = char.next - local vvariants = char.vvariants or char.vert_variants - local hvariants = char.hvariants or char.horiz_variants + local vparts = char.vparts or char.vert_variants + local hparts = char.hparts or char.horiz_variants local mathclass = info.mathclass local mathspec = info.mathspec local mathsymbol = info.mathsymbol @@ -208,32 +208,33 @@ local alllookups = collectalllookups(tfmdata,"math","dflt") done[next_sizes] = true context.showmathcharactersnextentry(n,f_unicode(next_sizes),next_sizes) next_sizes = characters[next_sizes] - vvariants = next_sizes.vvariants or next_sizes.vert_variants or vvariants - hvariants = next_sizes.hvariants or next_sizes.horiz_variants or hvariants + vparts = next_sizes.vparts or next_sizes.vert_variants or vparts + hparts = next_sizes.hparts or next_sizes.horiz_variants or hparts if next_sizes then next_sizes = next_sizes.next end end end context.showmathcharactersstopnext() - if hvariants or vvariants then + if vparts or hparts then context.showmathcharactersbetweennextandvariants() end end - if hvariants then - context.showmathcharactersstarthvariants() - for i=1,#hvariants do -- we might go top-down in the original - local vi = hvariants[i] - context.showmathcharactershvariantsentry(i,f_unicode(vi.glyph),vi.glyph) + if vparts then + context.showmathcharactersstartvparts() + for i=1,#vparts do -- we might go top-down in the original + local vi = vparts[i] + context.showmathcharactersvpartsentry(i,f_unicode(vi.glyph),vi.glyph) end - context.showmathcharactersstophvariants() - elseif vvariants then - context.showmathcharactersstartvvariants() - for i=1,#vvariants do - local vi = vvariants[#vvariants-i+1] - context.showmathcharactersvvariantsentry(i,f_unicode(vi.glyph),vi.glyph) + context.showmathcharactersstopvparts() + end + if hparts then + context.showmathcharactersstarthparts() + for i=1,#hparts do + local hi = hparts[#hparts-i+1] + context.showmathcharactershpartsentry(i,f_unicode(hi.glyph),hi.glyph) end - context.showmathcharactersstopvvariants() + context.showmathcharactersstophparts() end local lookups = alllookups[unicode] if lookups then diff --git a/tex/context/modules/mkiv/s-math-characters.mkiv b/tex/context/modules/mkiv/s-math-characters.mkiv index e5e0d084f..c9011fbe1 100644 --- a/tex/context/modules/mkiv/s-math-characters.mkiv +++ b/tex/context/modules/mkiv/s-math-characters.mkiv @@ -20,33 +20,33 @@ \startsetups s-math-characters:reset - \let\showmathcharactersstart \relax - \let\showmathcharactersstop \relax - \let\showmathcharactersreference \gobbleoneargument - \let\showmathcharactersstartentry \relax - \let\showmathcharactersstopentry \relax - \let\showmathcharactersentryhexdectit \gobblethreearguments - \let\showmathcharactersentrywdhtdpic \gobblefourarguments - \let\showmathcharactersentryresource \gobbleoneargument - \let\showmathcharactersstartnext \relax - \let\showmathcharactersnextentry \gobblethreearguments - \let\showmathcharactersnextcycle \gobbleonearguments - \let\showmathcharactersstopnext \relax - \let\showmathcharactersstarthvariants \relax - \let\showmathcharactershvariantsentry \gobblethreearguments - \let\showmathcharactersstophvariants \relax - \let\showmathcharactersstartvvariants \showmathcharactersstarthvariants - \let\showmathcharactersvvariantsentry \showmathcharactershvariantsentry - \let\showmathcharactersstopvvariants \showmathcharactersstophvariants - \let\showmathcharactersbetweennextandvariants\relax - \let\showmathcharactersstartentryclassspec \relax - \let\showmathcharactersstopentryclassspec \relax - \let\showmathcharactersentryclassname \gobbletwoarguments - \let\showmathcharactersentrysymbol \gobbletwoarguments - \let\showmathcharactersstartlookupvariants \relax - \let\showmathcharacterslookupvariant \gobblefourarguments - \let\showmathcharactersstoplookupvariants \relax - \let\showmathcharacterssetrange \gobblethreearguments + \let\showmathcharactersstart \relax + \let\showmathcharactersstop \relax + \let\showmathcharactersreference \gobbleoneargument + \let\showmathcharactersstartentry \relax + \let\showmathcharactersstopentry \relax + \let\showmathcharactersentryhexdectit \gobblethreearguments + \let\showmathcharactersentrywdhtdpic \gobblefourarguments + \let\showmathcharactersentryresource \gobbleoneargument + \let\showmathcharactersstartnext \relax + \let\showmathcharactersnextentry \gobblethreearguments + \let\showmathcharactersnextcycle \gobbleonearguments + \let\showmathcharactersstopnext \relax + \let\showmathcharactersstarthparts \relax + \let\showmathcharactershpartsentry \gobblethreearguments + \let\showmathcharactersstophparts \relax + \let\showmathcharactersstartvparts \relax + \let\showmathcharactersvpartsentry \gobblethreearguments + \let\showmathcharactersstopvparts \relax + \let\showmathcharactersbetweennextandvparts\relax + \let\showmathcharactersstartentryclassspec \relax + \let\showmathcharactersstopentryclassspec \relax + \let\showmathcharactersentryclassname \gobbletwoarguments + \let\showmathcharactersentrysymbol \gobbletwoarguments + \let\showmathcharactersstartlookupvariants \relax + \let\showmathcharacterslookupvariant \gobblefourarguments + \let\showmathcharactersstoplookupvariants \relax + \let\showmathcharacterssetrange \gobblethreearguments \stopsetups @@ -70,7 +70,7 @@ {virtual:\space##1\par} \def\showmathcharactersstartnext - {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth + {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth\relax next:\space} \def\showmathcharactersnextentry##1##2##3% @@ -82,21 +82,25 @@ \def\showmathcharactersstopnext {\par\endgroup} - \def\showmathcharactersstarthvariants - {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth - variants:\space} + \def\showmathcharactersstartparts + {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth\relax + parts:\space} - \def\showmathcharactershvariantsentry##1##2##3% + \def\showmathcharacterspartsentry##1##2##3% {\ifnum##1>\plusone \space=>\space\fi##2~\ruledhbox{\char##3}} - \def\showmathcharactersstophvariants + \def\showmathcharactersstopparts {\par\endgroup} - \let\showmathcharactersstartvvariants\showmathcharactersstarthvariants - \let\showmathcharactersvvariantsentry\showmathcharactershvariantsentry - \let\showmathcharactersstopvvariants \showmathcharactersstophvariants + \let\showmathcharactersstartvparts\showmathcharactersstartparts + \let\showmathcharactersvpartsentry\showmathcharacterspartsentry + \let\showmathcharactersstopvparts \showmathcharactersstopparts - \def\showmathcharactersbetweennextandvariants + \let\showmathcharactersstarthparts\showmathcharactersstartparts + \let\showmathcharactershpartsentry\showmathcharacterspartsentry + \let\showmathcharactersstophparts \showmathcharactersstopparts + + \def\showmathcharactersbetweennextandparts {}% \space=>\space} \def\showmathcharactersentryclassname##1##2% @@ -106,7 +110,7 @@ {mathsymbol:\space##1~\ruledhbox{\char##2}\par} \def\showmathcharactersstartlookupvariants - {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth + {\par\begingroup\hangindent\emwidth\hangafter-\plushundred\hskip-\emwidth\relax lookupvariants:\space} \def\showmathcharacterslookupvariant##1##2##3##4% diff --git a/tex/context/modules/mkiv/s-math-parameters.lua b/tex/context/modules/mkiv/s-math-parameters.lua index 8e8c15a2d..73d5f4208 100644 --- a/tex/context/modules/mkiv/s-math-parameters.lua +++ b/tex/context/modules/mkiv/s-math-parameters.lua @@ -34,6 +34,28 @@ tables.parameters = { "spaceafterscript", "connectoroverlapmin", } +if CONTEXTLMTXMODE > 0 then + + tables.styleaxis = table.imerged ( tables.styleaxis, { + "frac", "rad", + } ) + + tables.parameters = table.imerged ( tables.parameters, { + "extrasupshift", "extrasubshift", "extrasuppreshift", "extrasubpreshift", + "extrasupspace", "extrasubspace", "extrasupprespace", "extrasubprespace", + -- "overlinevariant", "underlinevariant", + -- "overdelimitervariant", "underdelimitervariant", + -- "delimiterovervariant", "delimiterundervariant", + -- "hextensiblevariant", "vextensiblevariant", + -- "fractionvariant", "radicalvariant", "degreevariant", + -- "accentvariant", "topaccentvariant", "botaccentvariant", "overlayaccentvariant", + -- "numeratorvariant", "denominatorvariant", + -- "superscriptvariant", "subscriptvariant", + -- "stackvariant", + } ) + +end + tables.styles = { "display", "text", diff --git a/tex/context/modules/mkxl/m-svg.mkxl b/tex/context/modules/mkxl/m-svg.mkxl new file mode 100644 index 000000000..56a101979 --- /dev/null +++ b/tex/context/modules/mkxl/m-svg.mkxl @@ -0,0 +1,39 @@ +%D \module +%D [ file=m-svg, +%D version=2022.02.18, +%D title=\CONTEXT\ Extra Modules, +%D subtitle=SVG Helper Macros, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +\protected\def\showSVGcode#1#2% + {\ctxlua{metapost.showsvgpage{ + filename = "#1", + index = tonumber(#2), + method = "code" + }}} + +\protected\def\showSVGcodeG#1#2% + {\ctxlua{metapost.showsvgpage{ + filename = "#1", + index = tonumber(#2), + method = "code", + x = 0, + y = 1000, + width = 1000, + height = 1000, + noclip = true + }}} + +\protected\def\typeSVGcode#1#2% + {\ctxlua{metapost.typesvgpage{ + filename = "#1", + index = tonumber(#2) + }}} + +% \continueifinputfile{m-svg.mkxl} diff --git a/tex/context/modules/mkxl/s-math-atoms.mkxl b/tex/context/modules/mkxl/s-math-atoms.mkxl new file mode 100644 index 000000000..1b5ebed41 --- /dev/null +++ b/tex/context/modules/mkxl/s-math-atoms.mkxl @@ -0,0 +1,104 @@ +%D \module +%D [ file=s-math-atoms.mksl, +%D version=2022.02.13, +%D title=\CONTEXT\ Style File, +%D subtitle=Show Math Atom Spacing, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D This is just a quick and dirty overview. + +\startmodule[math-atoms] + +\setvalue{atom:\number\mathordinarycode }{ord}%inary} +\setvalue{atom:\number\mathoperatorcode }{ope}%rator} +\setvalue{atom:\number\mathbinarycode }{bin}%ary} +\setvalue{atom:\number\mathrelationcode }{rel}%ation} +\setvalue{atom:\number\mathopencode }{ope}%n} +\setvalue{atom:\number\mathclosecode }{clo}%se} +\setvalue{atom:\number\mathpunctuationcode }{pun}%ctuation} +%setvalue{atom:\number\mathinnercode }{inn}%er} +%setvalue{atom:\number\mathovercode }{ove}%r} +%setvalue{atom:\number\mathundercode }{und}%er} +\setvalue{atom:\number\mathfractioncode }{fra}%ction} +\setvalue{atom:\number\mathradicalcode }{rad}%ical} +\setvalue{atom:\number\mathmiddlecode }{mid}%dle} +%setvalue{atom:\number\mathaccentcode }{acc}%ent} +%setvalue{atom:\number\mathfencedcode }{fen}%ced} +%setvalue{atom:\number\mathvariablecode }{var}%iable} +%setvalue{atom:\number\mathactivecode }{act}%ive} +%setvalue{atom:\number\mathvcentercode }{vce}%nter} +%setvalue{atom:\number\mathreservedcode }{res}%erved} +%setvalue{atom:\number\mathimaginarycode }{ima}%ginary} +%setvalue{atom:\number\mathdifferentialcode}{dif}%ferential} +%setvalue{atom:\number\mathexponentialcode }{exp}%onential} +\setvalue{atom:\number\mathfunctioncode }{fun}%ction} +\setvalue{atom:\number\mathdigitcode }{dig}%it} + +\dostepwiserecurse \mathordinarycode \mathdigitcode \plusone { + \setmathatomrule \mathbegincode #1 \allmathstyles \mathbegincode #1 + \setmathatomrule #1 \mathendcode \allmathstyles #1 \mathendcode + \dostepwiserecurse \mathordinarycode \mathdigitcode \plusone { + \setmathatomrule#1 ##1 \allmathstyles #1 ##1 + } +} + +\protected\def\showmathatomspacing#1{ + \startTEXpage[offset=10pt] + \showmakeup[mathglue] + \bTABLE[align=middle,width=4em] + \dostepwiserecurse \mathordinarycode \mathdigitcode \plusone {% + \ifcsname atom:##1\endcsname + \bTR + \dostepwiserecurse \mathordinarycode \mathdigitcode \plusone {% + \ifcsname atom:####1\endcsname + \bTD + $ #1% + \mathatom class ##1 {\hpack to 1.5em{\infofont[\hss\getvalue{atom:##1}\hss]}} + \mathatom class ####1 {\hpack to 1.5em{\infofont[\hss\getvalue{atom:####1}\hss]}} + $ + \eTD + \fi + } + \eTR + \fi + } + \bTR[frame=off] + \bTD[nx=12,height=6ex,align={middle,lohi}] + \type{#1} + \eTD + \eTR + \bTR + \bTD[nx=12,align=middle] + \infofont\hfill + tiny : \the\tinymuskip\hfill + thin : \the\thinmuskip\hfill + med : \the\medmuskip\hfill + thick : \the\thickmuskip\hfill\strut + \eTD + \eTR + \eTABLE + \stopTEXpage +} + +\stopmodule + +\continueifinputfile{s-math-atoms.mkxl} + +\starttext + + \showmathatomspacing{\displaystyle} + \showmathatomspacing{\textstyle} + \showmathatomspacing{\scriptstyle} + \showmathatomspacing{\scriptscriptstyle} + \showmathatomspacing{\crampeddisplaystyle} + \showmathatomspacing{\crampedtextstyle} + \showmathatomspacing{\crampedscriptstyle} + \showmathatomspacing{\crampedscriptscriptstyle} + +\stoptext diff --git a/tex/context/modules/mkxl/s-math-definitions.mkxl b/tex/context/modules/mkxl/s-math-definitions.mkxl new file mode 100644 index 000000000..8b99ae602 --- /dev/null +++ b/tex/context/modules/mkxl/s-math-definitions.mkxl @@ -0,0 +1,56 @@ +%D \module +%D [ file=s-math-definitions.mkxl, +%D version=2022.01.27, +%D title=\CONTEXT\ Style File, +%D subtitle=Math Definition Checking, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D I use this file for checking the classes as set in \type {char-def.lua}. It +%D could work with \MKIV\ but because we have more clases in \LMTX\ we only use +%D (and need) it there. + +\startmodule[math-definitions] + +\registerctxluafile{s-math-definitions}{autosuffix} + +\permanent\tolerant\protected\def\showmathcharacterdefinitions[#1]% + {\ctxlua{moduledata.math.definitions.showlist()}} + +\permanent\tolerant\protected\def\showmathatomspacing[#1]% + {\ctxlua{moduledata.math.definitions.showatoms()}} + +\def\ShowMathAtomSpacingPage#1#2#3#4% + {\startTEXpage[offset=10pt] + \raggedcenter + \dontleavehmode\framed + [height=60pt,width=150pt] + {$\showglyphs\showmakeup[math]#3 #4$} + \blank + \strut\infofont\detokenize{#1 #2 : $#3 #4$} + \stopTEXpage} + +\permanent\tolerant\protected\def\showmathatomspacingpage[#1]% + {\ctxlua{moduledata.math.definitions.showatomspage()}} + +\stopmodule + +\continueifinputfile{s-math-definitions.mkxl} + +\setuplayout[tight] + +\setupbodyfont[cambria,10pt] + +\starttext + \showmathatomspacing +% \page +% \showmathatomspacingpage +% \page +% \showmathcharacterdefinitions +\stoptext + diff --git a/tex/context/modules/mkxl/s-math-tweaks.mkxl b/tex/context/modules/mkxl/s-math-tweaks.mkxl new file mode 100644 index 000000000..2579f1ec4 --- /dev/null +++ b/tex/context/modules/mkxl/s-math-tweaks.mkxl @@ -0,0 +1,185 @@ +%D \module +%D [ file=s-math-atoms.mksl, +%D version=2022.02.13, +%D title=\CONTEXT\ Style File, +%D subtitle=Show Math Atom Spacing, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \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. + +%D This is just a quick and dirty overview. + +\startmodule[math-tweaks] + +\unprotect + +\starttexdefinition protected showmathfonttweaks_text_accent #1 + \bTR + \bTD[width=7em,align=flushleft,style=mono] #1 \eTD + \bTD \m {\showglyphs \getvalue{#1}{i} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{I} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{x} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{X} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{xx} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{XX} } \eTD + \eTR +\stoptexdefinition + +\starttexdefinition protected showmathfonttweaks_wide_accent #1 + \bTR + \bTD[width=7em,align=flushleft,style=mono] #1 \eTD + \bTD \m {\showglyphs \getvalue{#1}{i} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{I} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{x} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{X} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{xx} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{XX} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{xxxxx} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{XXXXX} } \eTD + \eTR +\stoptexdefinition + +\starttexdefinition protected showmathfonttweaks_prime #1 + \bTR + \bTD \type{#1} \eTD + \bTD \m {\showglyphs #1} \eTD + \eTR +\stoptexdefinition + +\starttexdefinition protected showmathfonttweaks_bracer #1 + \bTR + \bTD \type{#1} \eTD + \bTD \m {\showglyphs \getvalue{#1}{x} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{xxxxx} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{X} } \eTD + \bTD \m {\showglyphs \getvalue{#1}{XXXXX} } \eTD + \eTR +\stoptexdefinition + +\starttexdefinition protected showmathfonttweaks + + \startsubject[title=text accents] + \startlinecorrection + \bTABLE[align=middle,offset=1ex] + \showmathfonttweaks_text_accent{grave} + \showmathfonttweaks_text_accent{bar} + \showmathfonttweaks_text_accent{acute} + \showmathfonttweaks_text_accent{hat} + \showmathfonttweaks_text_accent{check} + \showmathfonttweaks_text_accent{breve} + \showmathfonttweaks_text_accent{dot} + \showmathfonttweaks_text_accent{ring} + \showmathfonttweaks_text_accent{tilde} + \showmathfonttweaks_text_accent{ddot} + \showmathfonttweaks_text_accent{dddot} + \eTABLE + \stoplinecorrection + \stopsubject + + \startsubject[title=wide accents] + \startlinecorrection + \bTABLE[align=middle,offset=1ex] + \showmathfonttweaks_wide_accent{widegrave} + \showmathfonttweaks_wide_accent{widebar} + \showmathfonttweaks_wide_accent{wideacute} + \showmathfonttweaks_wide_accent{widehat} + \showmathfonttweaks_wide_accent{widecheck} + \showmathfonttweaks_wide_accent{widebreve} + \showmathfonttweaks_wide_accent{widedot} + \showmathfonttweaks_wide_accent{widering} + \showmathfonttweaks_wide_accent{widetilde} + \showmathfonttweaks_wide_accent{wideddot} + \showmathfonttweaks_wide_accent{widedddot} + \eTABLE + \stoplinecorrection + \stopsubject + + \startsubject[title=primes] + \startlinecorrection + \bTABLE[align=flushleft,offset=1ex] + \showmathfonttweaks_prime{x'} + \showmathfonttweaks_prime{x''} + \showmathfonttweaks_prime{x'''} + \showmathfonttweaks_prime{X'} + \showmathfonttweaks_prime{X''} + \showmathfonttweaks_prime{X'''} + \showmathfonttweaks_prime{x'} + \showmathfonttweaks_prime{x'^2} + \showmathfonttweaks_prime{x'_2} + \showmathfonttweaks_prime{x'^2_2} + \showmathfonttweaks_prime{x'} + \showmathfonttweaks_prime{x^2'} + \showmathfonttweaks_prime{x_2'} + \showmathfonttweaks_prime{x^2_2'} + \eTABLE + \stoplinecorrection + \stopsubject + + \startsubject[title=bracers] + \startlinecorrection + \bTABLE[align=flushleft,offset=1ex] + \showmathfonttweaks_bracer{overbrace} + \showmathfonttweaks_bracer{underbrace} + \showmathfonttweaks_bracer{overbracket} + \showmathfonttweaks_bracer{underbracket} + \showmathfonttweaks_bracer{overparent} + \showmathfonttweaks_bracer{underparent} + \showmathfonttweaks_bracer{overbar} + \showmathfonttweaks_bracer{underbar} + \showmathfonttweaks_bracer{overline} + \showmathfonttweaks_bracer{underline} + \eTABLE + \stoplinecorrection + \stopsubject + + \startsubject[title=whatever] + \startlinecorrection + \bTABLE[align=flushleft,offset=1ex] + \bTR + \bTD \m{\mfunction{máx}}\eTD + \eTR + \eTABLE + \stoplinecorrection + \stopsubject +\stoptexdefinition + +\protect + +\stopmodule + +\continueifinputfile{s-math-tweaks.mkxl} + +\setuplayout + [tight] + +\starttext + +\definefontfeature[mathextra][compose=yes] + +% \number"23DC + \doifelse {\getdocumentargument{bodyfont}} {} { + +% \setupbodyfont[cambria,10pt] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[modern] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[pagella] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[termes] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[bonum] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[schola] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[lucidaot,10pt] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle + \setupbodyfont[ebgaramond] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[stixtwo] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle + + } { + + \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]} + \showmathfonttweaks + + } + + +\stoptext + diff --git a/tex/context/patterns/mkii/lang-sr.hyp b/tex/context/patterns/mkii/lang-sr.hyp index 86dd41074..86909bb2a 100644 --- a/tex/context/patterns/mkii/lang-sr.hyp +++ b/tex/context/patterns/mkii/lang-sr.hyp @@ -2,7 +2,7 @@ % for comment and copyright, see lang-sr.rme -% used: а б в г д е з и к л м н о п р с т у ц ш ј њ ћ +% used: a b c d e g i j k l m n o p r s t u v z ć š а б в г д е з и к л м н о п р с т у ц ш ј ћ \hyphenation{ на-дно @@ -15,10 +15,10 @@ о-тка-ше по-дно по-дне -по-тку по-тки -по-тке +по-тку по-тка +по-тке у-дно и-где и-гдје @@ -29,41 +29,41 @@ по-не-где по-не-гдје и-зби -и-збе и-зба +и-збе и-зби-ци -и-зби-це и-зби-ца +и-зби-це и-звит и-зим -изо-ба-ру изо-ба-ри -изо-ба-ре +изо-ба-ру изо-ба-ра +изо-ба-ре и-скок и-ско-ку и-ско-ка и-скон -и-ско-ну и-ско-ни +и-ско-ну и-ско-на -и-скру -и-скре и-скри +и-скру и-скра +и-скре и-скрав и-спод и-спо-да -и-стру и-стри и-стро -и-стре +и-стру и-стра -на-ју +и-стре на-ји на-јо -на-је +на-ју на-ја +на-је на-јам на-јест о-браз @@ -72,66 +72,168 @@ о-дран о-дра-ти пре-двој -ра-зму ра-зми ра-змо -ра-зме +ра-зму ра-зма -ра-зну +ра-зме ра-зни ра-зно -ра-зне +ра-зну ра-зна +ра-зне ра-склоп -ра-спе-лу ра-спе-ло +ра-спе-лу ра-спе-ла -ра-спе-ћа ра-спе-ћу +ра-спе-ћа ра-спе-ће -ра-сту ра-сти -ра-сте +ра-сту ра-ста +ра-сте ра-стом ра-стер -ра-шћу ра-шћи ра-шћо -ра-шће +ра-шћу ра-шћа +ра-шће +у-зни у-зно у-зна -у-зни у-зник у-зрок -у-ску у-ски у-ско -у-ске +у-ску у-ска +у-ске ус-кос у-спио у-спео у-спор у-шћу -у-шће у-шћа +у-шће ин-те-рес тран-су тран-са тран-сом -те-ле-ви-зор -те-ле-ви-зо-ру -те-ле-ви-зо-ром -те-ле-ви-зо-ра -те-ле-ви-зо-ри -при-ти-сак -при-ти-с-ком -при-ти-с-ку -при-ти-с-ка -по-ја-ви-ће -на-пу-шта -про-гра-ми-ра-ње -сни-ма-ња -сни-ма-ње}
\ No newline at end of file +na-dno +na-tka +na-tka-ti +na-tka-še +o-dno +o-tka +o-tka-ti +o-tka-še +po-dno +po-dne +po-tki +po-tku +po-tka +po-tke +u-dno +i-gde +i-gdje +svu-gde +sve-gde +svu-gdje +sve-gdje +po-ne-gde +po-ne-gdje +i-zbi +i-zba +i-zbe +i-zbi-ci +i-zbi-ca +i-zbi-ce +i-zvit +i-zim +izo-ba-ri +izo-ba-ru +izo-ba-ra +izo-ba-re +i-skok +i-sko-ku +i-sko-ka +i-skon +i-sko-ni +i-sko-nu +i-sko-na +i-skri +i-skru +i-skra +i-skre +i-skrav +i-spod +i-spo-da +i-stri +i-stro +i-stru +i-stra +i-stre +na-ji +na-jo +na-ju +na-ja +na-je +na-jam +na-jest +o-braz +o-bret +o-dvi-ka +o-dran +o-dra-ti +pre-dvoj +ra-zmi +ra-zmo +ra-zmu +ra-zma +ra-zme +ra-zni +ra-zno +ra-znu +ra-zna +ra-zne +ra-sklop +ra-spe-lo +ra-spe-lu +ra-spe-la +ra-spe-ću +ra-spe-ća +ra-spe-će +ra-sti +ra-stu +ra-sta +ra-ste +ra-stom +ra-ster +ra-šći +ra-šćo +ra-šću +ra-šća +ra-šće +u-zni +u-zno +u-zna +u-znik +u-zrok +u-ski +u-sko +u-sku +u-ska +u-ske +us-kos +u-spio +u-speo +u-spor +u-šću +u-šća +u-šće +in-te-res +tran-su +tran-sa +tran-som}
\ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-sr.pat b/tex/context/patterns/mkii/lang-sr.pat index 8c6d8f27c..17b095f41 100644 --- a/tex/context/patterns/mkii/lang-sr.pat +++ b/tex/context/patterns/mkii/lang-sr.pat @@ -2,1006 +2,2266 @@ % for comment and copyright, see lang-sr.rme -% used: а б в г д е ж з и к л м н о п р с т у ф х ц ч ш ђ ј љ њ ћ џ +% used: a b c d e f g h i j k l m n o p r s t u v z ć č đ š ž а б в г д е ж з и к л м н о п р с т у ф х ц ч ш ђ ј љ њ ћ џ \patterns{ +т2ј +т2л +т2љ +т2р +т2в +д2ј +д2л +д2љ +д2р +д2в +г2ј +г2л +г2љ +г2р +г2в +х2ј +х2л +х2љ +х2р +х2в +к2ј +к2л +к2љ +к2р +к2в +2д1ж +2д1б +2д1ц +2д1д +2д1ф +2д1г +2д1х +2д1к +2д1м +2д1н +2д1п +2д1с +2д1т +2д1њ +2д1џ +2д1з +2д1ш +2д1ђ +2д1ћ +2д1ч +2г1ж +2г1б +2г1ц +2г1д +2г1ф +2г1г +2г1х +2г1к +2г1м +2г1н +2г1п +2г1с +2г1т +2г1њ +2г1џ +2г1з +2г1ш +2г1ђ +2г1ћ +2г1ч +2х1ж +2х1б +2х1ц +2х1д +2х1ф +2х1г +2х1х +2х1к +2х1м +2х1н +2х1п +2х1с +2х1т +2х1њ +2х1џ +2х1з +2х1ш +2х1ђ +2х1ћ +2х1ч +2к1ж +2к1б +2к1ц +2к1д +2к1ф +2к1г +2к1х +2к1к +2к1м +2к1н +2к1п +2к1с +2к1т +2к1њ +2к1џ +2к1з +2к1ш +2к1ђ +2к1ћ +2к1ч +2т1ж +2т1б +2т1ц +2т1д +2т1ф +2т1г +2т1х +2т1к +2т1м +2т1н +2т1п +2т1с +2т1т +2т1њ +2т1џ +2т1з +2т1ш +2т1ђ +2т1ћ +2т1ч +2дј. +2дл. +2дљ. +2др. +2дв. +2гј. +2гл. +2гљ. +2гр. +2гв. +2хј. +2хл. +2хљ. +2хр. +2хв. +2кј. +2кл. +2кљ. +2кр. +2кв. +2тј. +2тл. +2тљ. +2тр. +2тв. +п2ј +п2л +п2љ +п2р +в2ј +в2л +в2љ +в2р +б2ј +б2л +б2љ +б2р +ф2ј +ф2л +ф2љ +ф2р +м2ј +м2л +м2љ +м2р +2б1ж +2б1б +2б1ц +2б1д +2б1ф +2б1г +2б1х +2б1к +2б1м +2б1н +2б1п +2б1с +2б1т +2б1в +2б1њ +2б1џ +2б1з +2б1ш +2б1ђ +2б1ћ +2б1ч +2ф1ж +2ф1б +2ф1ц +2ф1д +2ф1ф +2ф1г +2ф1х +2ф1к +2ф1м +2ф1н +2ф1п +2ф1с +2ф1т +2ф1в +2ф1њ +2ф1џ +2ф1з +2ф1ш +2ф1ђ +2ф1ћ +2ф1ч +2м1ж +2м1б +2м1ц +2м1д +2м1ф +2м1г +2м1х +2м1к +2м1м +2м1н +2м1п +2м1с +2м1т +2м1в +2м1њ +2м1џ +2м1з +2м1ш +2м1ђ +2м1ћ +2м1ч +2п1ж +2п1б +2п1ц +2п1д +2п1ф +2п1г +2п1х +2п1к +2п1м +2п1н +2п1п +2п1с +2п1т +2п1в +2п1њ +2п1џ +2п1з +2п1ш +2п1ђ +2п1ћ +2п1ч +2в1ж +2в1б +2в1ц +2в1д +2в1ф +2в1г +2в1х +2в1к +2в1м +2в1н +2в1п +2в1с +2в1т +2в1в +2в1њ +2в1џ +2в1з +2в1ш +2в1ђ +2в1ћ +2в1ч +2бј. +2бл. +2бљ. +2бр. +2фј. +2фл. +2фљ. +2фр. +2мј. +2мл. +2мљ. +2мр. +2пј. +2пл. +2пљ. +2пр. +2вј. +2вл. +2вљ. +2вр. +с2ц +с2ј +с2к +с2л +с2м +с2н +с2п +с2љ +с2р +с2т +с2в +с2њ +2с1ж +2с1б +2с1д +2с1ф +2с1г +2с1х +2с1с +2с1џ +2с1з +2с1ш +2с1ђ +2с1ћ +2с1ч +2сј. +2ск. +2сл. +2см. +2сн. +2сп. +2сљ. +2ср. +2ст. +2св. +2сњ. +2сц. +з2б +з2д +з2г +з2ј +з2л +з2м +з2н +з2љ +з2р +з2в +з2њ +2з1ж +2з1ц +2з1ф +2з1х +2з1к +2з1п +2з1с +2з1т +2з1џ +2з1з +2з1ш +2з1ђ +2з1ћ +2з1ч +2зј. +2зл. +2зм. +2зн. +2зљ. +2зр. +2зв. +2зњ. +2зб. +2зд. +2зг. +ш2ц +ш2к +ш2л +ш2м +ш2н +ш2п +ш2љ +ш2т +ш2в +ш2њ +ш2ћ +ш2ч +2ш1ж +2ш1б +2ш1д +2ш1ф +2ш1г +2ш1х +2ш1с +2ш1џ +2ш1з +2ш1ш +2ш1ђ +2ш1ј +2ш1р +2шк. +2шл. +2шм. +2шн. +2шп. +2шљ. +2шт. +2шв. +2шњ. +2шћ. +2шч. +2шц. +ж2б +ж2д +ж2г +ж2л +ж2м +ж2н +ж2љ +ж2в +ж2њ +ж2ђ +2ж1ж +2ж1ц +2ж1ф +2ж1х +2ж1к +2ж1п +2ж1с +2ж1т +2ж1џ +2ж1з +2ж1ш +2ж1ћ +2ж1ч +2ж1ј +2ж1р +2жл. +2жм. +2жн. +2жљ. +2жв. +2жњ. +2жђ. +2жб. +2жд. +2жг. +ц2ј +ц2р +ц2в +2ц1ж +2ц1б +2ц1ц +2ц1д +2ц1ф +2ц1г +2ц1х +2ц1к +2ц1л +2ц1м +2ц1н +2ц1п +2ц1љ +2ц1с +2ц1т +2ц1њ +2ц1џ +2ц1з +2ц1ш +2ц1ђ +2ц1ћ +2ц1ч +2цј. +2цр. +2цв. +ч2в +2ч1ж +2ч1б +2ч1ц +2ч1д +2ч1ф +2ч1г +2ч1х +2ч1ј +2ч1к +2ч1л +2ч1м +2ч1н +2ч1п +2ч1љ +2ч1р +2ч1с +2ч1т +2ч1њ +2ч1џ +2ч1з +2ч1ш +2ч1ђ +2ч1ћ +2ч1ч +2чв. +2ј1ж +2ј1б +2ј1ц +2ј1д +2ј1ф +2ј1г +2ј1х +2ј1ј +2ј1к +2ј1л +2ј1м +2ј1н +2ј1п +2ј1љ +2ј1р +2ј1с +2ј1т +2ј1в +2ј1њ +2ј1џ +2ј1з +2ј1ш +2ј1ђ +2ј1ћ +2ј1ч +2л1ж +2л1б +2л1ц +2л1д +2л1ф +2л1г +2л1х +2л1ј +2л1к +2л1л +2л1м +2л1н +2л1п +2л1љ +2л1р +2л1с +2л1т +2л1в +2л1њ +2л1џ +2л1з +2л1ш +2л1ђ +2л1ћ +2л1ч +2н1ж +2н1б +2н1ц +2н1д +2н1ф +2н1г +2н1х +2н1ј +2н1к +2н1л +2н1м +2н1н +2н1п +2н1љ +2н1р +2н1с +2н1т +2н1в +2н1њ +2н1џ +2н1з +2н1ш +2н1ђ +2н1ћ +2н1ч +2љ1ж +2љ1б +2љ1ц +2љ1д +2љ1ф +2љ1г +2љ1х +2љ1ј +2љ1к +2љ1л +2љ1м +2љ1н +2љ1п +2љ1љ +2љ1р +2љ1с +2љ1т +2љ1в +2љ1њ +2љ1џ +2љ1з +2љ1ш +2љ1ђ +2љ1ћ +2љ1ч +2р1ж +2р1б +2р1ц +2р1д +2р1ф +2р1г +2р1х +2р1ј +2р1к +2р1л +2р1м +2р1н +2р1п +2р1љ +2р1р +2р1с +2р1т +2р1в +2р1њ +2р1џ +2р1з +2р1ш +2р1ђ +2р1ћ +2р1ч +2њ1ж +2њ1б +2њ1ц +2њ1д +2њ1ф +2њ1г +2њ1х +2њ1ј +2њ1к +2њ1л +2њ1м +2њ1н +2њ1п +2њ1љ +2њ1р +2њ1с +2њ1т +2њ1в +2њ1њ +2њ1џ +2њ1з +2њ1ш +2њ1ђ +2њ1ћ +2њ1ч +2џ1ж +2џ1б +2џ1ц +2џ1д +2џ1ф +2џ1г +2џ1х +2џ1ј +2џ1к +2џ1л +2џ1м +2џ1н +2џ1п +2џ1љ +2џ1р +2џ1с +2џ1т +2џ1в +2џ1њ +2џ1џ +2џ1з +2џ1ш +2џ1ђ +2џ1ћ +2џ1ч +2ђ1ж +2ђ1б +2ђ1ц +2ђ1д +2ђ1ф +2ђ1г +2ђ1х +2ђ1ј +2ђ1к +2ђ1л +2ђ1м +2ђ1н +2ђ1п +2ђ1љ +2ђ1р +2ђ1с +2ђ1т +2ђ1в +2ђ1њ +2ђ1џ +2ђ1з +2ђ1ш +2ђ1ђ +2ђ1ћ +2ђ1ч +2ћ1ж +2ћ1б +2ћ1ц +2ћ1д +2ћ1ф +2ћ1г +2ћ1х +2ћ1ј +2ћ1к +2ћ1л +2ћ1м +2ћ1н +2ћ1п +2ћ1љ +2ћ1р +2ћ1с +2ћ1т +2ћ1в +2ћ1њ +2ћ1џ +2ћ1з +2ћ1ш +2ћ1ђ +2ћ1ћ +2ћ1ч +.х2 +.ј2 +.к2 +.л2 +.м2 +.н2 +.п2 +.љ2 +.р2 +.с2 +.т2 +.в2 +.њ2 +.џ2 +.з2 +.ш2 .ђ2 .ћ2 .ч2 -.ш2 .ж2 -.а2б3алиј -.а2б3анац -.а2б3ерац -.а2б3ерир -.а2б3евак -.а2б3ирит -.а2б3ју -.а2б3ла -.а2б3лег -.а2б3леп -.а2б3лок -.а2б3лу -.а2б3ориг -.а2б3реак -.а2б3рог -.а2б3узус -.а2д3ерац -.а2д3ј -.а2д3лат -.а2д3рен -.а2д3рог -.а2д3верб -.а2н3а4е2ро -.а2н3афиј -.а2н3афрод -.а2н3аго -.а2н3акуз -.а2н3алд -.а2н3алфа -.а2н3алг -.а2н3амерт -.а2н3андр -.а2н3ант -.а2н3апто -.а2н3арх -.а2н3егер -.а2н3екл -.а2н3екум -.а2н3елек -.а2н3енер -.а2н3епи -.а2н3ерг -.а2н3ерит -.а2н3есте -.а2н3идр -.а2н3ирид -.а2н3изог -.а2н3изом -.а2н3изур -.а2н3јон -.а2н3офт -.а2н3окс -.а2н3опис -.а2н3орг -.а2н3орх -.а2н3овар -.а2набап -.а2набат -.а2набаз -.а2набио -.а2набол -.а2надем -.а2надипл -.а2надоз -.а2нафаз -.а2нафила -.а2нафон -.а2нафор -.а2наген -.а2нагно -.а2награ -.а2нахор -.а2нахро -.а2накал -.а2накам -.а2накат -.а2накеф -.а2накла -.а2накли -.а2накој -.а2накол -.а2накрон -.а2накру -.а2налеп -.а2налис -.а2налит -.а2нализ -.а2намне -.а2нанео -.а2напла -.а2напле -.а2напне -.а2напно -.а2напро -.а2напти -.а2нарт -.а2насар -.а2насеи -.а2наспаз -.а2наста -.а2настиг -.а2настом -.а2натим -.а2натоц -.а2натом -.а2натре -.а2натри -.а2натро -.а2неор -.а3г2нос -.а3г2ноз -.а4е2ро .б2 -.бе2ш3ћ -.бе2ш3ч -.бе2с3ц -.бе2с3к -.бе2с3п -.бе2с3т -.бе2з3алкохол -.бе2з3атомск -.бе2з3б -.бе2з3д -.бе2з3г -.бе2з3и +.ц2 +.д2 +.ф2 +.г2 +о3а +о3е +о3и +о3о +о3у +у3а +у3е +у3и +у3о +у3у +а3а +а3е +а3и +а3о +а3у +е3а +е3е +е3и +е3о +е3у +и3а +и3е +и3и +и3о +и3у +2а1 +2е1 +2и1 +2о1 +2у1 +2скб +2скц +2скд +2скф +2скг +2скх +2скк +2скм +2скн +2скп +2скс +2скт +2скњ +2скџ +2скз +2скш +2скђ +2скћ +2скч +2скж +2стб +2стц +2стд +2стф +2стг +2стх +2стк +2стм +2стн +2стп +2стс +2стт +2стњ +2стџ +2стз +2стш +2стђ +2стћ +2стч +2стж +2шкб +2шкц +2шкд +2шкф +2шкг +2шкх +2шкк +2шкм +2шкн +2шкп +2шкс +2шкт +2шкњ +2шкџ +2шкз +2шкш +2шкђ +2шкћ +2шкч +2шкж +2штб +2штц +2штд +2штф +2штг +2штх +2штк +2штм +2штн +2штп +2штс +2штт +2штњ +2штџ +2штз +2штш +2штђ +2штћ +2штч +2штж +2спб +2спц +2спд +2спф +2спг +2спх +2спк +2спм +2спн +2спп +2спс +2спт +2спв +2спњ +2спџ +2спз +2спш +2спђ +2спћ +2спч +2спж +2свб +2свц +2свд +2свф +2свг +2свх +2свк +2свм +2свн +2свп +2свс +2свт +2свв +2свњ +2свџ +2свз +2свш +2свђ +2свћ +2свч +2свж +2шпб +2шпц +2шпд +2шпф +2шпг +2шпх +2шпк +2шпм +2шпн +2шпп +2шпс +2шпт +2шпв +2шпњ +2шпџ +2шпз +2шпш +2шпђ +2шпћ +2шпч +2шпж +2швб +2швц +2швд +2швф +2швг +2швх +2швк +2швм +2швн +2швп +2швс +2швт +2швв +2швњ +2швџ +2швз +2швш +2швђ +2швћ +2швч +2швж +2ждб +2ждц +2ждд +2ждф +2ждг +2ждх +2ждк +2ждм +2ждн +2ждп +2ждс +2ждт +2ждњ +2ждџ +2ждз +2ждш +2ждђ +2ждћ +2ждч +2ждж +2жгб +2жгц +2жгд +2жгф +2жгг +2жгх +2жгк +2жгм +2жгн +2жгп +2жгс +2жгт +2жгњ +2жгџ +2жгз +2жгш +2жгђ +2жгћ +2жгч +2жгж +2здб +2здц +2здд +2здф +2здг +2здх +2здк +2здм +2здн +2здп +2здс +2здт +2здњ +2здџ +2здз +2здш +2здђ +2здћ +2здч +2здж +2згб +2згц +2згд +2згф +2згг +2згх +2згк +2згм +2згн +2згп +2згс +2згт +2згњ +2згџ +2згз +2згш +2згђ +2згћ +2згч +2згж +2жвб +2жвц +2жвд +2жвф +2жвг +2жвх +2жвк +2жвм +2жвн +2жвп +2жвс +2жвт +2жвв +2жвњ +2жвџ +2жвз +2жвш +2жвђ +2жвћ +2жвч +2жвж +2жбб +2жбц +2жбд +2жбф +2жбг +2жбх +2жбк +2жбм +2жбн +2жбп +2жбс +2жбт +2жбв +2жбњ +2жбџ +2жбз +2жбш +2жбђ +2жбћ +2жбч +2жбж +2звб +2звц +2звд +2звф +2звг +2звх +2звк +2звм +2звн +2звп +2звс +2звт +2звв +2звњ +2звџ +2звз +2звш +2звђ +2звћ +2звч +2звж +2збб +2збц +2збд +2збф +2збг +2збх +2збк +2збм +2збн +2збп +2збс +2збт +2збв +2збњ +2збџ +2збз +2збш +2збђ +2збћ +2збч +2збж +2жмб +2жмц +2жмд +2жмф +2жмг +2жмх +2жмк +2жмм +2жмн +2жмп +2жмс +2жмт +2жмв +2жмњ +2жмџ +2жмз +2жмш +2жмђ +2жмћ +2жмч +2жмж +2смб +2смц +2смд +2смф +2смг +2смх +2смк +2смм +2смн +2смп +2смс +2смт +2смв +2смњ +2смџ +2смз +2смш +2смђ +2смћ +2смч +2смж +2змб +2змц +2змд +2змф +2змг +2змх +2змк +2змм +2змн +2змп +2змс +2змт +2змв +2змњ +2змџ +2змз +2змш +2змђ +2змћ +2змч +2змж +2шмб +2шмц +2шмд +2шмф +2шмг +2шмх +2шмк +2шмм +2шмн +2шмп +2шмс +2шмт +2шмв +2шмњ +2шмџ +2шмз +2шмш +2шмђ +2шмћ +2шмч +2шмж +2сцб +2сцц +2сцд +2сцф +2сцг +2сцх +2сцк +2сцл +2сцм +2сцн +2сцп +2сцљ +2сцр +2сцс +2сцт +2сцњ +2сцџ +2сцз +2сцш +2сцђ +2сцћ +2сцч +2сцж +2шцб +2шцц +2шцд +2шцф +2шцг +2шцх +2шцк +2шцл +2шцм +2шцн +2шцп +2шцљ +2шцр +2шцс +2шцт +2шцњ +2шцџ +2шцз +2шцш +2шцђ +2шцћ +2шцч +2шцж +2шчб +2шчц +2шчд +2шчф +2шчг +2шчх +2шчј +2шчк +2шчл +2шчм +2шчн +2шчп +2шчљ +2шчр +2шчс +2шчт +2шчњ +2шчџ +2шчз +2шчш +2шчђ +2шчћ +2шчч +2шчж +2хвб +2хвц +2хвд +2хвф +2хвг +2хвх +2хвк +2хвм +2хвн +2хвп +2хвс +2хвт +2хвњ +2хвџ +2хвз +2хвш +2хвђ +2хвћ +2хвч +2хвж +2ж3вл +2ж3вљ +2ц3вл +2ц3вљ +2з3вл +2з3вљ +2ш3вл +2ш3вљ +2ч3вл +2ч3вљ +2ч3вј +2с3вљ +2д3вл +2д3вљ +2д3вр +2к3вј +2к3вл +2к3вљ +2т3вј +2т3вл +2т3вљ +2г3вј +2г3вл +2г3вљ +2г3вр +2х3вј +2х3вл +2х3вљ +2х3вр +2ж3мј +2ж3мл +2ж3мљ +2ж3мр +2з3мл +2з3мр +2ш3мј +2ш3мл +2ш3мљ +2ш3цј +2ш3цв +2ш3чв +2ш3тј +2ш3тл +2ш3тљ +2с3тл +2с3кј +2с3кљ +2ш3пј +2ш3пл +2ш3пљ +2ж3дј +2ж3дл +2ж3дљ +2ж3дв +2ж3гј +2ж3гл +2ж3гљ +2ж3гр +2ж3гв +2з3дл +2з3дљ +2з3дв +2з3гј +2з3гљ +2ж3бј +2ж3бл +2ж3бљ +2ж3бр +2з3бљ +.а4е2ро +.бе4о +.би4о +.ге4о +.за3г2н +.за3т2ка +.иза3г2н +.иза3т2к +.из3г2н +.изд2но +.изд2ну +.изд2на +.изр2к +.ист2к +.наг2н +.наг2њ +.на3д2нев +.на3д2нич +.на3д2ниц +.на3т2ках +.на3т2кам +.на3т2касм +.на3т2каст +.ода3г2н +.ода3д2н +.од3г2н +.од3м2н +.о3т2ках +.о3т2кам +.о3т2касм +.о3т2каст +.по3г2н +.по3д2нев +.по3м2н +.по3м2њ +.по3р2в +.по3р2ђ +.по3т2ках +.по3т2кам +.по3т2кат +.по3т2кав +.пред3м2н +.пред3м2њ +.пре3т2ках +.пре3т2кам +.пре3т2кат +.про3г2н +.про3т2ки +.про3т2ка +.раза3г2н +.раз3г2н +.раз3д2ни +.раза3т2ка +.у3г2ми +.у3г2н +.уза3т2ка +3х2тети +3х2тјети +3х2тел +3х2тев +3х2тењ +3х2тјел +3х2тјев +3х2тјењ +3г2дегод. +3г2дјегод. +3г2декак +3г2декад +3г2дјекак +3г2дјекад +ни3г2де. +не3г2де. +ни3г2дје. +не3г2дје. +3б2дет +3б2дењ +3б2дјет +3б2дјењ +3г2мил +3г2миљ +3г2миз +3г2нос +3г2ноз +3г2ној +3г2нај +3г2незд +3г2нијезд +3г2нежђ +3г2нијежђ +3г2нев +3г2њев +3г2њав +3г2њес +3г2њет +3г2њеч +3г2њил +3г2њио +3г2њиљ +3г2њит +3г2њур +3к2нез +3к2неж +3к2њиж +3к2њиг +3м2нож +3м2ног +3м2наж +3п2сик +3п2сич +3п2сов +3п2суј +3р2ђа +3с2фер +3т2маст +3т2мул +3т2муо +3т2муљ +3т2мур +3ц2миз +3ц2мак +3ц2мач +3ц2мок +3ч2лан +3ч2лањ +3р2је +4р3јем +4р3је. +.бе2з3ј .бе2з3л -.бе2з3љ .бе2з3м .бе2з3н +.бе2з3љ +.бе2з3р +.бе2з3в .бе2з3њ +.бе2з3б +.бе2з3д +.бе2з3г +.бе2з3и .бе2з3о -.бе2з3р .бе2з3у -.бе2з3в -.бе3с4крупул -.бе3с4покоја -.бе3с4покојн -.бе3с4пора -.бе3с4порн -.бе3с4тид -.бе3с4тија -.бе3с4тиљ -.бе3с4тилу -.бе3с4трана -.бе3с4трас -.бе3с4твар -.бе3з4беда +.бе2з3алкохол +.бе2з3атомск .бе3з4бедн -.бе3з4бели -.бе3з4бједа +.бе3з4беда .бе3з4бједн +.бе3з4бједа +.бе3з4бели .бе3з4бол +.бе3з4вучн +.бе3з4вуча .бе3з4истан .бе3з4истен -.бе3з4јач .бе3з4јак -.бе3з4лоба +.бе3з4јач .бе3з4лобн +.бе3з4лоба .бе3з4начај -.бе3з4рача .бе3з4рачн -.бе3з4уб +.бе3з4рача .бе3з4уп -.бе3з4вуча -.бе3з4вучн -.бе4о +.бе3з4уб +.бе2с3ц +.бе2с3к +.бе2с3п +.бе2с3т +.бе3с4крупул +.бе3с4покојн +.бе3с4покоја +.бе3с4порн +.бе3с4пора +.бе3с4твар +.бе3с4тид +.бе3с4тија +.бе3с4тилу +.бе3с4тиљ +.бе3с4трана +.бе3с4трас .бес4тселер -.би4о -.ц2 -.д2 -.џ2 -.ди2с3акор -.ди2с3јунк -.ди2с3конт -.ди2с3корд -.ди2с3кре -.ди2с3кри -.ди2с3кур -.ди2с3квал -.ди2с3ло -.ди2с3ориј -.ди2с3парит -.ди2с3пон -.ди2с3поз -.ди2с3проп -.ди2с3тон -.ди2с3трак -.ф2 -.г2 -.ге4о -.х2 -.и2ш3ћ -.и2ш3ч -.и2ж3ђ -.и2н3абруп -.и2н3адек -.и2н3афек -.и2н3акце -.и2н3акур -.и2н3амор -.и2н3аниц -.и2н3аплик -.и2н3апст -.и2н3арт -.и2н3аугур -.и2н3аура -.и2н3ед -.и2н3ефек -.и2н3ег -.и2н3екс -.и2н3екв -.и2н3елиг -.и2н3епц -.и2н3евид -.и2н3јек -.и2н3јур -.и2н3јуст -.и2н3обл -.и2н3офиц -.и2н3окуп -.и2н3опер -.и2н3опор -.и2н3опсе -.и2н3умбр -.и2н3унда -.и2н3унк -.и2н3утил -.и2ноген -.и2нокор -.и2с3ц -.и2с3к -.и2с3п -.и2с3т -.и2з3аба -.и2з3ака -.и2з3анал +.бе2ш3ћ +.бе2ш3ч +.ва2н3евр +.ва2н3устав .и2з3б -.и2з3бија -.и2з3бива .и2з3д -.и2з3дај .и2з3г -.и2з3и +.и2з3ј .и2з3л -.и2з3љ .и2з3м .и2з3н +.и2з3љ +.и2з3р +.и2з3в .и2з3њ +.и2з3и .и2з3о -.и2з3р .и2з3у -.и2з3в -.и2з3ведб -.и2з3веде +.и2з3бија +.и2з3бива .и2з3веди .и2з3ведн +.и2з3ведб +.и2з3веде +.и2з3дај +.и2з3аба +.и2з3ака +.и2з3анал +.и3з4бав +.и3з4бичкава +.и3з4блеушан +.и3з4бојак +.и3з4бојк +.и3з4вали +.и3з4валу +.и3з4вала +.и3з4вале +.и3з4ваљи +.и3з4вижд +.и3з4виискр +.и3з4вија +.и3з4вијен +.и3з4вин +.и3з4вир +.и3з4вињ +.и3з4витоп +.и3з4вјед +.и3з4војац +.и3з4војц +.и3з4вор +.и3з4гомет +.и3з4гред +.и3з4грн +.и3з4грт +.и3з4драв +.и3з4иђ +.и3з4ид +.и3з4ими +.и3з4јежљ +.и3з4лоз +.и3з4лож +.и3з4лог +.и3з4лопаћ +.и3з4ним +.и3з4ној +.из4оанем +.из4оаном +.из4обат +.из4оброн +.из4огам +.из4огео +.из4оглос +.из4огон +.из4ограф +.из4одим +.из4один +.из4одоз +.из4оклин +.из4околон +.и3з4олат +.и3з4олац +.и3з4олир +.и3з4олов +.из4олекс +.из4олукс +.из4омер +.из4ометр +.из4оморф +.из4онеф +.из4оном +.из4опат +.из4опер +.из4опле +.из4опол +.из4опсеф +.из4орах +.из4осеи +.из4осинт +.из4осист +.из4оскел +.из4оскоп +.из4остаз +.из4осте +.из4отах +.из4отал +.из4отер +.из4отон +.из4отоп +.из4отро +.из4офон +.из4офот +.из4охал +.из4охаз +.из4охел +.из4охиј +.из4охим +.из4охит +.из4охипс +.из4охор +.из4охро +.и3з4раел +.и3з4раиљ +.и3з4рачи +.и3з4ун +.и3з4упч +.и2с3ц +.и2с3к +.и2с3п +.и2с3т .и3с4как -.и3с4кариот .и3с4кат +.и3с4кањ +.и3с4кариот +.и3с4квас +.и3с4кврч .и3с4кин .и3с4кита -.и3с4коч .и3с4конск +.и3с4коч .и3с4крам +.и3с4крит +.и3с4криш +.и3с4крич +.и3с4криц .и3с4крат .и3с4крен .и3с4крењ -.и3с4крич -.и3с4криш -.и3с4криц -.и3с4крит .и3с4крој -.и3с4крса .и3с4крсн +.и3с4крса .и3с4купља -.и3с4квас -.и3с4кврч -.и3с4лаб .и3с4лам +.и3с4лаб .и3с4леђ .и3с4лед .и3с4лијеђ .и3с4лијед -.и3с4лик -.и3с4лин .и3с4љеђ .и3с4љед +.и3с4лик +.и3с4лин .и3с4лов .и3с4луш .и3с4луж .и3с4ме .и3с4мије .и3с4мје -.и3с4паљив .и3с4пав +.и3с4паљив .и3с4пира -.и3с4плић .и3с4плит +.и3с4плић .и3с4покој .и3с4полин .и3с4пон .и3с4порав -.и3с4права .и3с4прави .и3с4правк -.и3с4прављ .и3с4правн +.и3с4прављ +.и3с4права .и3с4пупч .и3с4пур .и3с4ред .и3с4рк -.и3с4таћ +.и3с4тави +.и3с4тављ .и3с4такн .и3с4там .и3с4тар .и3с4тас -.и3с4тави -.и3с4тављ -.и3с4тиц -.и3с4тифан +.и3с4таћ .и3с4тин .и3с4тир -.и3с4точа -.и3с4точн -.и3с4точњ +.и3с4тиц +.и3с4тифан .и3с4ток .и3с4тори +.и3с4точн +.и3с4точњ +.и3с4точа +.и3с4трав .и3с4трад .и3с4тран -.и3с4трав .и3с4трић .и3с4триж .и3с4триц .и3с4труг .и3с4туп -.и3с4уш .и3с4ук .и3с4ус .и3с4ут -.и3з4бав -.и3з4бичкава -.и3з4блеушан -.и3з4бојак -.и3з4бојк -.и3з4драв -.и3з4гомет -.и3з4гред -.и3з4грн -.и3з4грт -.и3з4иђ -.и3з4ид -.и3з4ими -.и3з4јежљ -.и3з4лож -.и3з4лог -.и3з4лопаћ -.и3з4лоз -.и3з4ним -.и3з4ној -.и3з4олац -.и3з4олат -.и3з4олир -.и3з4олов -.и3з4рачи -.и3з4раел -.и3з4раиљ -.и3з4ун -.и3з4упч -.и3з4вала -.и3з4вале -.и3з4вали -.и3з4ваљи -.и3з4валу -.и3з4вижд -.и3з4виискр -.и3з4вија -.и3з4вијен -.и3з4вин -.и3з4вињ -.и3з4вир -.и3з4витоп -.и3з4вјед -.и3з4војац -.и3з4војц -.и3з4вор -.инте2р3а -.инте2р3е -.инте2р3и -.инте2р3је -.инте2р3о -.инте2р3у -.инте3р4ежџ -.инте3р4егн -.инте3р4еса -.инте3р4есе -.инте3р4еси -.инте3р4есн -.инте3р4есо -.инте3р4есу -.инте3р4ије -.инте3р4огат -.ист2к +.и3с4уш +.и2ж3ђ +.и2ш3ћ +.и2ш3ч .из3бе2з3обр .из3бе2з3ум -.из3г2н .из3ва2н3евр -.из4оанем -.из4оаном -.из4обат -.из4оброн -.из4одим -.из4один -.из4одоз -.из4офон -.из4офот -.из4огам -.из4огео -.из4оглос -.из4огон -.из4ограф -.из4охал -.из4охаз -.из4охел -.из4охиј -.из4охим -.из4охипс -.из4охит -.из4охор -.из4охро -.из4оклин -.из4околон -.из4олекс -.из4олукс -.из4омер -.из4ометр -.из4оморф -.из4онеф -.из4оном -.из4опат -.из4опер -.из4опле -.из4опол -.из4опсеф -.из4орах -.из4осеи -.из4осинт -.из4осист -.из4оскел -.из4оскоп -.из4остаз -.из4осте -.из4отах -.из4отал -.из4отер -.из4отон -.из4отоп -.из4отро -.иза3г2н -.иза3т2к -.изд2на -.изд2но -.изд2ну -.изр2к -.јури2с3к -.јури2с3п -.к2 -.љ2 -.м2 -.н2 -.на2д3жањ -.на2д3ждр -.на2д3же -.на2д3жир -.на2д3жив -.на2д3жњ -.на2д3жуп +.на2д3л +.на2д3љ +.на2д3в +.на3д4вал +.на3д4веси +.на3д4вест +.на3д4виј +.на3д4вит +.на3д4вла +.на3д4воје +.на3д4вор .на2д3игр .на2д3инж .на2д3ина .на2д3иск -.на2д3јач .на2д3јах -.на2д3јеч +.на2д3јач .на2д3јек .на2д3јез +.на2д3јеч .на2д3јун -.на2д3л -.на2д3љ -.на2д3оч -.на2д3офи +.на3д4лан +.на3д4леш +.на3д4леж .на2д3ора +.на2д3осо .на2д3осе .на2д3осје -.на2д3осо -.на2д3рач -.на2д3рашћ +.на2д3офи +.на2д3оч .на2д3ран +.на2д3рач .на2д3раст +.на2д3рашћ .на2д3реал .на2д3реп +.на2д3рук .на2д3руч .на2д3руг -.на2д3рук -.на2д3уч .на2д3удар .на2д3ум -.на2д3в +.на2д3уч .на2ј3а .на2ј3е .на2ј3и .на2ј3о .на2ј3у -.на3д2нев -.на3д2нич -.на3д2ниц -.на3д4лан -.на3д4леш -.на3д4леж -.на3д4вал -.на3д4веси -.на3д4вест -.на3д4виј -.на3д4вит -.на3д4вла -.на3д4воје -.на3д4вор -.на3ј4аш -.на3ј4ажи +.на3ј4ави +.на3ј4ављ +.на3ј4ава +.на3ј4аве +.на3ј4ади .на3ј4ада .на3ј4аде -.на3ј4ади -.на3ј4ах -.на3ј4ака +.на3ј4ажи +.на3ј4ази .на3ј4ако +.на3ј4ака .на3ј4ало .на3ј4ами .на3ј4амл .на3ј4амн -.на3ј4арц .на3ј4ари .на3ј4арм +.на3ј4арц .на3ј4ати .на3ј4аук -.на3ј4ава -.на3ј4аве -.на3ј4ави -.на3ј4ављ -.на3ј4ази -.на3ј4еже -.на3ј4ежи -.на3ј4ежу -.на3ј4ец -.на3ј4еда +.на3ј4ах +.на3ј4аш .на3ј4еди .на3ј4едн .на3ј4едр +.на3ј4еда +.на3ј4ежи +.на3ј4ежу +.на3ј4еже +.на3ј4езн +.на3ј4езд .на3ј4ести .на3ј4етк -.на3ј4езд -.на3ј4езн -.на3ј4урен +.на3ј4ец .на3ј4ури -.на3т2ках -.на3т2кам -.на3т2касм -.на3т2каст -.наг2н -.наг2њ -.ну2с3пос -.ну2с3про -.ну2з3бел -.ну2з3биљ -.ну2з3љуб -.ну2з3ре -.ну2з3рје -.ну2з3уж +.на3ј4урен +.о2б3ј +.о2б3љ +.о2б3р +.обе2з3б +.обе2з3д +.обе2з3г +.обе2з3ј +.обе2з3л +.обе2з3м +.обе2з3н +.обе2з3о +.обе2з3љ +.обе2з3р +.обе2з3у +.обе2з3в +.обе3з4виј +.обе3з4нан +.обе3з4нањ +.обе3з4нач +.обе3з4уб +.обе2с3ц +.обе2с3к +.обе2с3п +.обе2с3т +.обе3с4тан +.обе3с4тиј +.обе3с4тран +.обе2ш3ћ +.обе2ш3ч .о2б3игр .о2б3истин .о2б3истињ -.о2б3ј +.о3б4јек +.о3б4јер +.о3б4јеси +.о3б4јет +.о3б4јеш .о2б3лај -.о2б3лакш .о2б3лам +.о2б3лакш .о2б3ласк +.о2б3леп +.о2б3лет .о2б3лећ .о2б3леж -.о2б3леден .о2б3лег -.о2б3леп -.о2б3лет -.о2б3лијеж -.о2б3лијег .о2б3лијеп .о2б3лијет -.о2б3лист +.о2б3лијеж +.о2б3лијег +.о2б3леден .о2б3лив .о2б3лизат .о2б3лизав .о2б3лизи -.о2б3љ +.о2б3лист .о2б3лока -.о2б3луч .о2б3лук -.о2б3ору -.о2б3р -.о2б3уж -.о2б3убож -.о2б3уд -.о2б3уме -.о2б3уми -.о2б3умр -.о2б3уз -.о2д3жал -.о2д3жаљ -.о2д3же -.о2д3жи -.о2д3жв -.о2д3арг -.о2д3и2з3д -.о2д3и2з3в -.о2д3игр -.о2д3иск -.о2д3исти -.о2д3ј -.о2д3л -.о2д3љ -.о2д3ок -.о2д3онд -.о2д3онл -.о2д3оно -.о2д3ону -.о2д3озд -.о2д3озг -.о2д3р -.о2д3уч -.о2д3ук -.о2д3ул -.о2д3ум -.о2д3уве -.о2д3уви -.о2д3узд -.о2д3узе -.о2д3узи -.о2д3узл -.о2д3в -.о3б4јеш -.о3б4јек -.о3б4јер -.о3б4јеси -.о3б4јет +.о2б3луч .о3б4љан .о3б4љут .о3б4љуз -.о3б4рђ -.о3б4рч -.о3б4рш -.о3б4раћ -.о3б4рашч -.о3б4рашн +.о2б3ору .о3б4раже -.о3б4рамб -.о3б4ран -.о3б4рањ -.о3б4рат -.о3б4раза -.о3б4разд .о3б4рази .о3б4разн .о3б4разо .о3б4разу +.о3б4раза +.о3б4разд +.о3б4рамб +.о3б4ран +.о3б4рањ +.о3б4рат +.о3б4раћ +.о3б4рашн +.о3б4рашч +.о3б4рв +.о3б4рђ +.о3б4рем +.о3б4рес .о3б4ређ .о3б4реч .о3б4реж .о3б4рец .о3б4ред -.о3б4рем -.о3б4рес .о3б4рети .о3б4ретн -.о3б4рич -.о3б4риц .о3б4риј .о3б4рис .о3б4рит .о3б4рив +.о3б4рич +.о3б4риц .о3б4рк .о3б4рл -.о3б4рљ .о3б4рн -.о3б4роћ -.о3б4роч +.о3б4рљ +.о3б4рс +.о3б4рт +.о3б4рш +.о3б4рч .о3б4рок .о3б4рон +.о3б4роњ +.о3б4роћ +.о3б4роч .о3б4рова .о3б4ровц -.о3б4рс -.о3б4руч -.о3б4руш .о3б4рук .о3б4рун .о3б4рус -.о3д4јећ +.о3б4руњ +.о3б4руш +.о3б4руч +.о2б3убож +.о2б3уз +.о2б3уж +.о2б3уд +.о2б3уми +.о2б3умј +.о2б3умр +.о2б3уме +.о2д3ј +.о2д3л +.о2д3љ +.о2д3р +.о2д3в +.о2д3арг +.о3д4вај +.о3д4важ +.о3д4весн +.о3д4вест +.о3д4веса +.о3д4викав +.о3д4викн +.о3д4вис +.о3д4вић +.о3д4вој +.о2д3игр +.о2д3и2з3в +.о2д3и2з3д +.о2д3иск +.о2д3исти +.о3д4јел .о3д4јен .о3д4јев +.о3д4јећ +.о3д4лаз .о3д4лаж .о3д4лаг .о3д4лака -.о3д4лаз -.о3д4луч .о3д4лук -.о3д4рж -.о3д4раћ -.о3д4рачи -.о3д4раж -.о3д4рана -.о3д4ране +.о3д4луч +.о2д3озд +.о2д3озг +.о2д3ок +.о2д3онл +.о2д3оно +.о2д3ону +.о2д3онд .о3д4рани .о3д4рано .о3д4рану -.о3д4рапа +.о3д4рана +.о3д4ране +.о3д4раз +.о3д4раћ +.о3д4раж .о3д4рапи .о3д4рапљ -.о3д4раз -.о3д4ређ -.о3д4ред +.о3д4рапа +.о3д4рачи +.о3д4рвен +.о3д4рвењ +.о3д4рвеч .о3д4рем .о3д4рен -.о3д4рич +.о3д4рет +.о3д4ређ +.о3д4ред +.о3д4рл +.о3д4рн +.о3д4рп +.о3д4рљ +.о3д4рт +.о3д4рж +.о3д4рин +.о3д4рињ .о3д4риш +.о3д4рич .о3д4риб .о3д4риц -.о3д4рин -.о3д4рињ -.о3д4рл -.о3д4рљ -.о3д4рн .о3д4рон .о3д4роњ -.о3д4рп -.о3д4рт .о3д4руж .о3д4руг -.о3д4рвеч -.о3д4рвен -.о3д4рвењ -.о3д4важ -.о3д4вај -.о3д4веса -.о3д4весн -.о3д4вест -.о3д4вић -.о3д4викав -.о3д4викн -.о3д4вис -.о3д4вој -.о3т2ках -.о3т2кам -.о3т2касм -.о3т2каст -.обе2ш3ћ -.обе2ш3ч -.обе2с3ц -.обе2с3к -.обе2с3п -.обе2с3т -.обе2з3б -.обе2з3д -.обе2з3г -.обе2з3ј -.обе2з3л -.обе2з3љ -.обе2з3м -.обе2з3н -.обе2з3о -.обе2з3р -.обе2з3у -.обе2з3в -.обе3с4тан -.обе3с4тиј -.обе3с4тран -.обе3з4нач -.обе3з4нан -.обе3з4нањ -.обе3з4уб -.обе3з4виј -.од3г2н -.од3м2н -.ода3д2н -.ода3г2н +.о2д3уви +.о2д3уве +.о2д3узи +.о2д3узл +.о2д3узд +.о2д3узе +.о2д3ук +.о2д3ул +.о2д3ум +.о2д3уч .по2д3адм +.по2д3вариј +.по2д3вез +.по2д3веч +.по2д3веж +.по2д3вик +.по2д3вил +.по2д3вир +.по2д3вињ +.по2д3влас +.по2д3влаш +.по2д3воз +.по2д3вођ +.по2д3вож +.по2д3вод +.по2д3врат +.по2д3враћ +.по2д3врћ +.по2д3врж +.по2д3врг +.по2д3врис +.по2д3врс +.по2д3вућ .по2д3игр .по2д3изв .по2д3ј +.по3д4јен +.по3д4јеч .по2д3лакат .по2д3лакт +.по2д3леп +.по2д3лет .по2д3лећ .по2д3леж .по2д3лег -.по2д3леп -.по2д3лет +.по2д3лиз +.по2д3лијеп +.по2д3лијет .по2д3лијећ .по2д3лијеж .по2д3лијег -.по2д3лијеп -.по2д3лијет .по2д3лист -.по2д3лиз -.по2д3љут .по2д3лок .по2д3лом +.по2д3луп .по2д3луч .по2д3луж -.по2д3луп -.по2д3оч +.по2д3љут +.по2д3окн .по2д3ош +.по2д3оч .по2д3оф -.по2д3окн -.по2д3ра2з3д -.по2д3рад -.по2д3рам -.по2д3ран -.по2д3рањ -.по2д3рас .по2д3равн .по2д3равњ +.по2д3рад +.по2д3ра2з3д .по2д3разр .по2д3разу +.по2д3рам +.по2д3ран +.по2д3рас +.по2д3рањ .по2д3реп .по2д3рес .по2д3рез .по2д3рик .по2д3рит -.по2д3рож .по2д3рон .по2д3ров -.по2д3руча +.по2д3рож +.по2д3рук +.по2д3руб .по2д3ручи .по2д3ручн -.по2д3руб -.по2д3рук +.по2д3руча .по2д3упла .по2д3усм .по2д3усн -.по2д3вариј -.по2д3веч -.по2д3веж -.по2д3вез -.по2д3вик -.по2д3вил -.по2д3вир -.по2д3влаш -.по2д3влас -.по2д3вођ -.по2д3вож -.по2д3вод -.по2д3воз -.по2д3врћ -.по2д3врж -.по2д3враћ -.по2д3врат -.по2д3врг -.по2д3врис -.по2д3врс -.по2д3вућ -.по2ст3егз -.по2ст3инду -.по2ст3лим -.по2ст3онк -.по2ст3опер -.по3д2нев -.по3д4јеч -.по3д4јен -.по3г2н -.по3м2н -.по3м2њ -.по3р2ђ -.по3т2ках -.по3т2кам -.по3т2кат -.по3т2кав -.пре2д3же -.пре2д3жи -.пре2д3ид +.пре2д3ј +.пре2д3в +.пре3д4вај +.пре3д4вар +.пре3д4вест +.пре3д4воји +.пре3д4воја +.пре3д4воје +.пре3д4вор +.пре3д4вос +.пре3д4јен .пре2д3игр +.пре2д3ид +.пре2д3изб .пре2д3испи .пре2д3исто .пре2д3истр -.пре2д3изб -.пре2д3ј .пре2д3обј .пре2д3одре .пре2д3окус +.пре2д3осв .пре2д3осе .пре2д3осје -.пре2д3осв +.пре2д3рат .пре2д3рач .пре2д3рад -.пре2д3рат .пре2д3руч .пре2д3убеђ .пре2д3убијеђ .пре2д3убјеђ -.пре2д3удар -.пре2д3угов -.пре2д3упис -.пре2д3усло .пре2д3увер .пре2д3увјер .пре2д3увјет -.пре2д3в -.пре3д4јен -.пре3д4вај -.пре3д4вар -.пре3д4вест -.пре3д4воја -.пре3д4воје -.пре3д4воји -.пре3д4вор -.пре3д4вос -.пре3т2ках -.пре3т2кам -.пре3т2кат -.пред3м2н -.пред3м2њ -.про3г2н -.про3т2ка -.про3т2ки +.пре2д3угов +.пре2д3удар +.пре2д3упис +.пре2д3усло .проти2в3акц -.проти2в3оф .проти2в3отр +.проти2в3оф .проти2в3р -.проти2в3уд .проти2в3ус -.р2 -.ра2ш3ћ -.ра2ш3ч +.проти2в3уд .ра2ж3ђ -.ра2с3ц -.ра2с3к -.ра2с3п -.ра2с3т -.ра2з3анал .ра2з3б .ра2з3д .ра2з3е .ра2з3г .ра2з3и +.ра2з3ј .ра2з3л -.ра2з3љ .ра2з3м .ра2з3н +.ра2з3љ +.ра2з3р +.ра2з3в .ра2з3њ -.ра2з3оба +.ра2з3анал +.ра3з4бан +.ра3з4бар +.ра3з4бау +.ра3з4бад +.ра3з4башур +.ра3з4бој +.ра3з4бор +.ра3з4вал +.ра3з4веде +.ра3з4вест +.ра3з4виго +.ра3з4вију +.ра3з4вија +.ра3з4вије +.ра3з4вит +.ра3з4вић +.ра3з4вој +.ра3з4вон +.ра3з4врат +.ра3з4враћ +.ра3з4врт +.ра3з4врћ +.ра3з4гађ +.ра3з4грт +.ра3з4ев +.ра3з4иј +.ра3з4ил +.ра3з4ин +.ра3з4ир +.ра3з4ит +.ра3з4из +.ра3з4иђ +.ра3з4ић +.ра3з4ид +.ра3з4лаз +.ра3з4лаг +.ра3з4лик +.ра3з4лич +.ра3з4лоз +.ра3з4лож +.ра3з4лог +.ра3з4мет +.ра3з4мећ +.ра3з4мрск +.ра3з4нат .ра2з3обл .ра2з3обр +.ра2з3оба .ра2з3од .ра2з3орат .ра2з3орав .ра2з3орт .ра2з3ору .ра2з3от -.ра2з3р +.ра3з4ред +.ра3з4рок +.ра3з4роч +.ра2з3уве +.ра2з3уди .ра2з3уда .ра2з3удб -.ра2з3уди -.ра2з3улар -.ра2з3умр -.ра2з3уве +.ра2з3узи .ра2з3узд .ра2з3узе -.ра2з3узи -.ра2з3в -.ра3ш4ћењ -.ра3ш4чић +.ра2з3улар +.ра2з3умр +.ра2с3ц +.ра2с3к +.ра2с3п +.ра2с3т .ра3с4как .ра3с4канд .ра3с4кин -.ра3с4клад -.ра3с4клањ .ра3с4клап +.ра3с4клањ +.ра3с4клад .ра3с4клон -.ра3с4клопа .ра3с4клопи .ра3с4клопљ +.ра3с4клопа .ра3с4кош .ра3с4кроп .ра3с4пај .ра3с4пав -.ра3с4пета -.ра3с4пете .ра3с4пети .ра3с4пето +.ра3с4пета +.ра3с4пете .ра3с4пику .ра3с4пињ .ра3с4плин @@ -1021,1412 +2281,3048 @@ .ра3с4тав .ра3с4тењ .ра3с4тил -.ра3с4тињ .ра3с4тир .ра3с4тис .ра3с4тит +.ра3с4тињ .ра3с4тој .ра3с4трел .ра3с4трет .ра3с4трој .ра3с4трт -.ра3с4тућ .ра3с4туп .ра3с4тур -.ра3з4башур -.ра3з4бад -.ра3з4бан -.ра3з4бар -.ра3з4бау -.ра3з4бој -.ра3з4бор -.ра3з4ев -.ра3з4гађ -.ра3з4грт -.ра3з4иђ -.ра3з4ић -.ра3з4ид -.ра3з4иј -.ра3з4ин -.ра3з4ир -.ра3з4из -.ра3з4лаг -.ра3з4лаз -.ра3з4лич -.ра3з4лик -.ра3з4лож -.ра3з4лог -.ра3з4лоз -.ра3з4мећ -.ра3з4мет -.ра3з4мрск -.ра3з4нат -.ра3з4ред -.ра3з4роч -.ра3з4рок -.ра3з4вал -.ра3з4веде -.ра3з4вест -.ра3з4вић -.ра3з4виго -.ра3з4вија -.ра3з4вије -.ра3з4вију -.ра3з4вит -.ра3з4вој -.ра3з4вон -.ра3з4врћ -.ра3з4враћ -.ра3з4врат -.ра3з4врт +.ра3с4тућ .ра4с5турч -.раз3д2ни -.раз3г2н -.раза3г2н -.раза3т2ка -.с2 -.су2б3а -.су2б3инв -.су2б3јунк -.су2б3л -.су2б3окс -.су2б3орд -.су2б3реп -.су2б3рог -.су3б4аш -.супе2р3а -.супе2р3е -.супе2р3и -.супе2р3о -.супе2р3у -.супе3р4иор -.тран2с3а -.тран2с3ц -.тран2с3е -.тран2с3к -.тран2с3л -.тран2с3м -.тран2с3н -.тран2с3о -.тран2с3п -.тран2с3т -.тран2с3у -.тран2с3в -.тран3с4еп -.тран3с4кри -.тран3с4уд -.тран3с4ум -.у2ш3ћ -.у2ш3ч -.у2с3ц -.у2с3к -.у2с3п -.у2с3талас -.у2с3тара -.у2с3тећ -.у2с3тег -.у2с3тер -.у2с3тов -.у2с3трћ -.у2с3трч -.у2с3трај -.у2с3трал -.у2с3треб -.у2с3треп -.у2с3трес -.у2с3трг -.у2с3трк -.у2с3трн -.у2с3трп -.у2с3тућ -.у2с3тум -.у2с3тур -.у2с3тврђ -.у2с3тврд +.ра2ш3ћ +.ра2ш3ч +.ра3ш4ћењ +.ра3ш4чић .у2з3б .у2з3д .у2з3г .у2з3и -.у2з3игр -.у2з3инат -.у2з3искр +.у2з3ј .у2з3л -.у2з3љ .у2з3м .у2з3н +.у2з3љ +.у2з3р +.у2з3в .у2з3њ +.у3з4бор +.у3з4ван +.у3з4ват +.у3з4виж +.у3з4вијо +.у3з4вију +.у3з4вија +.у3з4вије +.у3з4вој +.у3з4диц +.у2з3игр +.у2з3инат +.у2з3искр +.у3з4лан +.у3з4лат +.у3з4лим +.у3з4лит +.у3з4лић +.у3з4лиц +.у3з4лов +.у3з4лудоб +.у3з4нак +.у3з4нач +.у3з4неве +.у3з4невје +.у3з4нич +.у3з4ниц +.у3з4ној .у2з3обест .у2з3обијест -.у2з3охо .у2з3орат .у2з3орав -.у2з3р +.у2з3охо +.у3з4рет +.у3з4рев +.у3з4ријет +.у3з4ријев +.у3з4рн +.у3з4рњ +.у3з4роко +.у3з4року +.у3з4рока +.у3з4роч +.у3з4руј .у2з3угар -.у2з3в -.у3г2ми -.у3г2н +.у2с3ц +.у2с3к +.у2с3п .у3с4как .у3с4клађ .у3с4клад .у3с4ко +.у4с5ком +.у4с5ков +.у4с5кош +.у4с5коко +.у4с5колу +.у4с5коле +.у4с5копа +.у4с5кора +.у4с5коси +.у4с5котр .у3с4куп -.у3с4пало .у3с4пав -.у3с4пеш +.у3с4пало .у3с4пех .у3с4пел .у3с4пем -.у3с4пент .у3с4пет .у3с4пев -.у3с4пија -.у3с4пије -.у3с4пијуш -.у3с4пикуш -.у3с4пјеш +.у3с4пеш .у3с4пјех .у3с4пјел .у3с4пјем .у3с4пјет .у3с4пјев +.у3с4пјеш +.у3с4пент +.у3с4пија +.у3с4пије +.у3с4пијуш +.у3с4пикуш .у3с4пон +.у3с4пори .у3с4пора -.у3с4пореч .у3с4порен .у3с4порењ -.у3с4пори +.у3с4пореч .у3с4пособ -.у3с4према .у3с4преми +.у3с4према +.у3с4рк +.у3с4рн +.у3с4рп +.у3с4рљ +.у3с4рт .у3с4рђ .у3с4рж .у3с4ра .у3с4рд .у3с4ре .у3с4ријед -.у3с4рк -.у3с4рљ -.у3с4рн -.у3с4рп -.у3з4бор -.у3з4диц -.у3з4лан -.у3з4лат -.у3з4лић -.у3з4лиц -.у3з4лим -.у3з4лит -.у3з4лов -.у3з4лудоб -.у3з4нач -.у3з4нак -.у3з4неве -.у3з4невје -.у3з4нич -.у3з4ниц -.у3з4ној -.у3з4рет -.у3з4рев -.у3з4ријет -.у3з4ријев -.у3з4рн -.у3з4рњ -.у3з4роч -.у3з4рока -.у3з4роко -.у3з4року -.у3з4руј -.у3з4ван -.у3з4ват -.у3з4виж -.у3з4вија -.у3з4вије -.у3з4вијо -.у3з4вију -.у3з4вој -.у4с5кош -.у4с5коко -.у4с5коле -.у4с5колу -.у4с5ком -.у4с5копа -.у4с5кора -.у4с5коси -.у4с5котр -.у4с5ков -.уза3т2ка -.ва2н3евр -.ва2н3устав -.з2 -.за3г2н -.за3т2ка -2ђ1ђ -2ђ1ћ -2ђ1ч -2ђ1ш -2ђ1ж -2ђ1б -2ђ1ц -2ђ1д -2ђ1џ -2ђ1ф -2ђ1г -2ђ1х -2ђ1к -2ђ1љ -2ђ1м -2ђ1н -2ђ1р -2ђ1с -2ђ1з -2ћ1ђ -2ћ1ћ -2ћ1ч -2ћ1ш -2ћ1ж -2ћ1б -2ћ1ц -2ћ1д -2ћ1џ -2ћ1ф -2ћ1г -2ћ1х -2ћ1к -2ћ1љ -2ћ1м -2ћ1н -2ћ1р -2ћ1с -2ћ1з -2ч1ђ -2ч1ћ -2ч1ч -2ч1ш -2ч1ж -2ч1б -2ч1ц -2ч1д -2ч1џ -2ч1ф -2ч1г -2ч1х -2ч1ј -2ч1к -2ч1љ -2ч1м -2ч1н -2ч1р -2ч1с -2ч1т -2ч1з -2ч3вј -2ч3вл -2ч3вљ -2чв. -2ш1ђ -2ш1ш -2ш1ж -2ш1б -2ш1д -2ш1џ -2ш1ф -2ш1г -2ш1х -2ш1ј -2ш1р -2ш1с -2ш1з -2ш3чв -2ш3цј -2ш3цв -2ш3мј -2ш3мл -2ш3мљ -2ш3пј -2ш3пл -2ш3пљ -2ш3тј -2ш3тл -2ш3тљ -2ш3вл -2ш3вљ -2шћ. -2шч. -2шчћ -2шчч -2шчш -2шчж -2шчб -2шчц -2шчд -2шчџ -2шчф -2шчг -2шчх -2шчј -2шчк -2шчљ -2шчм -2шчн -2шчр -2шчс -2шчт -2шчз -2шц. -2шцћ -2шцч -2шцш -2шцж -2шцб -2шцц -2шцд -2шцџ -2шцф -2шцг -2шцх -2шцк -2шцљ -2шцм -2шцн -2шцр -2шцс -2шцт -2шцз -2шк. -2шкђ -2шкћ -2шкч -2шкш -2шкж -2шкб -2шкц -2шкд -2шкџ -2шкф -2шкг -2шкх -2шкк -2шкм -2шкн -2шкс -2шкт -2шкз -2шљ. -2шм. -2шмђ -2шмч -2шмш -2шмж -2шмб -2шмц -2шмд -2шмџ -2шмф -2шмг -2шмх -2шмк -2шмм -2шмн -2шмс -2шмт -2шмз -2шн. -2шп. -2шпђ -2шпч -2шпш -2шпж -2шпб -2шпц -2шпд -2шпџ -2шпф -2шпг -2шпх -2шпк -2шпм -2шпн -2шпс -2шпт -2шпз -2шт. -2штђ -2штч -2штш -2штж -2штб -2штц -2штд -2штџ -2штф -2штг -2штх -2штк -2штм -2штн -2штс -2штт -2штз -2шв. -2швђ -2швч -2швш -2швж -2швб -2швц -2швд -2швџ -2швф -2швг -2швх -2швк -2швм -2швн -2швс -2швт -2швз -2ж1ћ -2ж1ч -2ж1ш -2ж1ж -2ж1ц -2ж1џ -2ж1ф -2ж1х -2ж1ј -2ж1к -2ж1р -2ж1с -2ж1т -2ж1з -2ж3бј -2ж3бл -2ж3бљ -2ж3бр -2ж3дј -2ж3дл -2ж3дљ -2ж3дв -2ж3гј -2ж3гл -2ж3гљ -2ж3гр -2ж3гв -2ж3мј -2ж3мл -2ж3мљ -2ж3мр -2ж3вл -2ж3вљ -2жђ. -2жб. -2жбђ -2жбч -2жбш -2жбж -2жбб -2жбц -2жбд -2жбџ -2жбф -2жбг -2жбх -2жбк -2жбм -2жбн -2жбс -2жбт -2жбз -2жд. -2ждч -2ждш -2ждб -2ждц -2ждд -2ждџ -2ждф -2ждг -2ждх -2ждк -2ждм -2ждн -2ждс -2ждт -2ждз -2жг. -2жгч -2жгш -2жгж -2жгб -2жгц -2жгд -2жгџ -2жгф -2жгг -2жгх -2жгк -2жгм -2жгн -2жгс -2жгт -2жгз -2жл. -2жљ. -2жм. -2жмђ -2жмч -2жмш -2жмж -2жмб -2жмц -2жмд -2жмџ -2жмф -2жмг -2жмх -2жмк -2жмм -2жмн -2жмс -2жмт -2жмз -2жн. -2жњ. -2жвђ -2жвч -2жвш -2жвж -2жвб -2жвц -2жвд -2жвџ -2жвф -2жвг -2жвх -2жвк -2жвм -2жвн -2жвс -2жвт -2жвз -2а1 -2б1ђ -2б1ћ -2б1ч -2б1ш -2б1ж -2б1б -2б1ц -2б1д -2б1џ -2б1ф -2б1г -2б1х -2б1к -2б1м -2б1н -2б1с -2б1т -2б1з -2бј. -2бл. -2бљ. -2бр. -2ц1ђ -2ц1ћ -2ц1ч -2ц1ш -2ц1ж -2ц1б -2ц1ц -2ц1д -2ц1џ -2ц1ф -2ц1г -2ц1х -2ц1к -2ц1љ -2ц1м -2ц1н -2ц1с -2ц1т -2ц1з -2ц3вл -2ц3вљ -2цј. -2цр. -2цв. -2д1ђ -2д1ћ -2д1ч -2д1ш -2д1б -2д1ц -2д1д -2д1џ -2д1ф -2д1г -2д1х -2д1к -2д1м -2д1н -2д1с -2д1т -2д1з -2д3вл -2д3вљ -2д3вр -2џ1ђ -2џ1ћ -2џ1ч -2џ1ш -2џ1ж -2џ1б -2џ1ц -2џ1д -2џ1џ -2џ1ф -2џ1г -2џ1х -2џ1ј -2џ1к -2џ1љ -2џ1м -2џ1н -2џ1р -2џ1с -2џ1т -2џ1з -2џ. -2дј. -2дл. -2дљ. -2др. -2дв. -2е1 -2ф1ђ -2ф1ћ -2ф1ч -2ф1ш -2ф1ж -2ф1б -2ф1ц -2ф1д -2ф1џ -2ф1ф -2ф1г -2ф1х -2ф1к -2ф1м -2ф1н -2ф1с -2ф1т -2ф1з -2фј. -2фл. -2фљ. -2фр. -2г1ђ -2г1ћ -2г1ч -2г1ш -2г1ж -2г1б -2г1ц -2г1д -2г1џ -2г1ф -2г1г -2г1х -2г1к -2г1м -2г1н -2г1с -2г1т -2г1з -2г3вј -2г3вл -2г3вљ -2г3вр -2гј. -2гл. -2гљ. -2гр. -2гв. -2х1ђ -2х1ћ -2х1ч -2х1ш -2х1ж -2х1б -2х1ц -2х1д -2х1џ -2х1ф -2х1г -2х1х -2х1к -2х1м -2х1н -2х1с -2х1т -2х1з -2х3вј -2х3вл -2х3вљ -2х3вр -2хј. -2хл. -2хљ. -2хр. -2хв. -2хвђ -2хвч -2хвш -2хвж -2хвб -2хвц -2хвд -2хвџ -2хвф -2хвг -2хвх -2хвк -2хвм -2хвн -2хвс -2хвт -2хвз -2и1 -2ј1ђ -2ј1ћ -2ј1ч -2ј1ш -2ј1ж -2ј1б -2ј1ц -2ј1д -2ј1џ -2ј1ф -2ј1г -2ј1х -2ј1ј -2ј1к -2ј1љ -2ј1м -2ј1н -2ј1р -2ј1с -2ј1т -2ј1з -2к1ђ -2к1ћ -2к1ч -2к1ш -2к1ж -2к1б -2к1ц -2к1д -2к1џ -2к1ф -2к1г -2к1х -2к1к -2к1м -2к1н -2к1с -2к1т -2к1з -2к3вј -2к3вл -2к3вљ -2кј. -2кл. -2кљ. -2кр. -2кв. -2љ1ђ -2љ1ћ -2љ1ч -2љ1ш -2љ1ж -2љ1б -2љ1ц -2љ1д -2љ1џ -2љ1ф -2љ1г -2љ1х -2љ1ј -2љ1к -2љ1љ -2љ1м -2љ1н -2љ1р -2љ1с -2љ1т -2љ1з -2м1ђ -2м1ћ -2м1ч -2м1ш -2м1ж -2м1б -2м1ц -2м1д -2м1џ -2м1ф -2м1г -2м1х -2м1к -2м1м -2м1н -2м1с -2м1т -2м1з -2мј. -2мл. -2мљ. -2мр. -2н1ђ -2н1ћ -2н1ч -2н1ш -2н1ж -2н1б -2н1ц -2н1д -2н1џ -2н1ф -2н1г -2н1х -2н1к -2н1љ -2н1м -2н1н -2н1р -2н1с -2н1т -2н1з -2о1 -2пј. -2пл. -2пљ. -2пр. -2р1ђ -2р1ћ -2р1ч -2р1ш -2р1ж -2р1б -2р1ц -2р1д -2р1џ -2р1ф -2р1г -2р1х -2р1ј -2р1к -2р1љ -2р1м -2р1н -2р1р -2р1с -2р1т -2р1з -2с1ђ -2с1ћ -2с1ч -2с1ш -2с1ж -2с1б -2с1д -2с1џ -2с1ф -2с1г -2с1х -2с1с -2с1з -2с3кј -2с3кљ -2с3тл -2с3вљ -2сц. -2сцђ -2сцћ -2сцч -2сцш -2сцж -2сцб -2сцц -2сцд -2сцџ -2сцф -2сцг -2сцх -2сцк -2сцљ -2сцм -2сцн -2сцр -2сцс -2сцт -2сцз -2сј. -2ск. -2скђ -2скћ -2скч -2скш -2скж -2скб -2скц -2скд -2скџ -2скф -2скг -2скх -2скк -2скм -2скн -2скс -2скт -2скз -2сл. -2сљ. -2см. -2смђ -2смћ -2смч -2смш -2смж -2смб -2смц -2смд -2смџ -2смф -2смг -2смх -2смк -2смм -2смн -2смс -2смт -2смз -2сн. -2сњ. -2сп. -2спђ -2спћ -2спч -2спш -2спж -2спб -2спц -2спд -2спџ -2спф -2спг -2спх -2спк -2спм -2спн -2спп -2спс -2спт -2спв -2спз -2ср. -2ст. -2стђ -2стћ -2стч -2стш -2стж -2стб -2стц -2стд -2стџ -2стф -2стг -2стх -2стк -2стм -2стн -2стп -2стс -2стт -2стз -2св. -2свђ -2свћ -2свч -2свш -2свж -2свб -2свц -2свд -2свџ -2свф -2свг -2свх -2свк -2свм -2свн -2свп -2свс -2свт -2свв -2свз -2т1ђ -2т1ћ -2т1ч -2т1ш -2т1ж -2т1б -2т1ц -2т1д -2т1џ -2т1ф -2т1г -2т1х -2т1к -2т1м -2т1н -2т1п -2т1с -2т1т -2т1з -2т3вј -2т3вл -2т3вљ -2тј. -2тл. -2тљ. -2тр. -2тв. -2у1 -2в1ђ -2в1ћ -2в1ч -2в1ш -2в1ж -2в1б -2в1ц -2в1д -2в1џ -2в1ф -2в1г -2в1х -2в1к -2в1м -2в1н -2в1п -2в1с -2в1т -2в1в -2в1з -2вј. -2вл. -2вљ. -2вр. -2з1ђ -2з1ћ -2з1ч -2з1ш -2з1ж -2з1ц -2з1џ -2з1ф -2з1х -2з1к -2з1п -2з1с -2з1з -2з3бљ -2з3дл -2з3дљ -2з3дв -2з3гј -2з3гљ -2з3мл -2з3мр -2з3вл -2з3вљ -2зб. -2збђ -2збћ -2збч -2збш -2збж -2збб -2збц -2збд -2збџ -2збф -2збг -2збх -2збк -2збм -2збн -2збп -2збс -2збв -2збз -2зд. -2здђ -2здћ -2здч -2здш -2здб -2здц -2здд -2здџ -2здф -2здг -2здх -2здк -2здм -2здн -2здп -2здс -2здз -2зг. -2згђ -2згћ -2згч -2згж -2згб -2згц -2згд -2згџ -2згф -2згг -2згх -2згк -2згм -2згн -2згп -2згс -2згз -2зј. -2зл. -2зљ. -2зм. -2змђ -2змћ -2змч -2змш -2змж -2змб -2змц -2змд -2змџ -2змф -2змг -2змх -2змк -2змм -2змн -2змп -2змс -2змв -2змз -2зн. -2зњ. -2зр. -2зв. -2звђ -2звћ -2звч -2звш -2звж -2звб -2звц -2звд -2звџ -2звф -2звг -2звх -2звк -2звм -2звн -2звп -2звс -2звв -2звз -3ч2лан -3ч2лањ -3б2дењ -3б2дет -3б2дјењ -3б2дјет -3ц2мач -3ц2мак -3ц2миз -3ц2мок -3г2дегод. -3г2декад -3г2декак -3г2дјегод. -3г2дјекад -3г2дјекак -3г2мил -3г2миљ -3г2миз -3г2нај -3г2нежђ -3г2нев -3г2незд -3г2нијежђ -3г2нијезд -3г2њав -3г2њеч -3г2њес -3г2њет -3г2њев -3г2њил -3г2њиљ -3г2њио -3г2њит -3г2њур -3г2ној -3г2нос -3г2ноз -3х2тел -3х2тењ -3х2тети -3х2тев -3х2тјел -3х2тјењ -3х2тјети -3х2тјев -3к2неж -3к2нез -3к2њиж -3к2њиг -3м2наж -3м2нож -3м2ног -3п2сич -3п2сик -3п2сов -3п2суј -3р2ђа -3с2фер -3т2маст -3т2мул -3т2муљ -3т2муо -3т2мур -4р3је. -4р3јем -ч2в -ш2ч -ш2л -ш2љ -ш2м -ш2н -ш2п -ш2т -ш2в -ж2ђ -ж2б -ж2д -ж2г -ж2л -ж2љ -ж2м -ж2н -ж2в -а3а -а3е -а3и -а3о -а3у -б2ј -б2л -б2љ -б2р -ц2ј -ц2р -ц2в -д2ж -д2ј -д2л -д2љ -д2р -д2в -е3а -е3е -е3и -е3о -е3у -ф2ј -ф2л -ф2љ -ф2р -г2л -г2љ -г2р -г2в -х2л -х2љ -х2р -х2в -и3а -и3е -и3и -и3о -и3у -к2л -к2љ -к2р -к2в -л2ј -м2л -м2љ -м2р -не3г2де. -не3г2дје. -ни3г2де. -ни3г2дје. -о3а -о3е -о3и -о3о -о3у -п2ј -п2л -п2љ -п2р -с2ц -с2к -с2л -с2љ -с2м -с2н -с2п -с2р -с2в -т2ј -т2л -т2в -у3а -у3е -у3и -у3о -у3у -в2л -в2љ -в2р -з2б -з2д -з2г -з2ј -з2л -з2љ -з2м -з2н -з2р -з2в}
\ No newline at end of file +.у2с3талас +.у2с3тара +.у2с3тврђ +.у2с3тврд +.у2с3тер +.у2с3тећ +.у2с3тег +.у2с3тов +.у2с3трај +.у2с3трал +.у2с3трг +.у2с3треп +.у2с3трес +.у2с3треб +.у2с3трк +.у2с3трн +.у2с3трп +.у2с3трћ +.у2с3трч +.у2с3тум +.у2с3тур +.у2с3тућ +.у2ш3ћ +.у2ш3ч +.а2б3алиј +.а2б3анац +.а2б3евак +.а2б3ерац +.а2б3ерир +.а2б3ирит +.а2б3ју +.а2б3ла +.а2б3лег +.а2б3леп +.а2б3лок +.а2б3лу +.а2б3ориг +.а2б3реак +.а2б3рог +.а2б3узус +.а2д3ерац +.а2д3верб +.а2д3ј +.а2д3лат +.а2д3рен +.а2д3рог +.а3г2нос +.а3г2ноз +.а2набап +.а2набаз +.а2набат +.а2набио +.а2набол +.а2наген +.а2нагно +.а2н3аго +.а2награ +.а2надем +.а2надипл +.а2надоз +.а2н3а4е2ро +.а2накал +.а2накам +.а2накат +.а2накеф +.а2накла +.а2накли +.а2накој +.а2н3акуз +.а2н3алг +.а2н3алд +.а2налеп +.а2нализ +.а2налис +.а2налит +.а2н3амерт +.а2намне +.а2н3андр +.а2нанео +.а2н3ант +.а2напла +.а2напле +.а2напне +.а2напно +.а2напро +.а2напти +.а2н3апто +.а2нарт +.а2н3арх +.а2насар +.а2насеи +.а2наспаз +.а2наста +.а2настиг +.а2настом +.а2натим +.а2натом +.а2натоц +.а2натре +.а2натри +.а2натро +.а2нафаз +.а2н3афиј +.а2нафила +.а2нафон +.а2н3афрод +.а2накол +.а2накрон +.а2накру +.а2н3алфа +.а2нафор +.а2нахор +.а2нахро +.а2н3егер +.а2н3екл +.а2н3екум +.а2н3елек +.а2н3енер +.а2н3епи +.а2неор +.а2н3ерг +.а2н3ерит +.а2н3есте +.а2н3идр +.а2н3изог +.а2н3изом +.а2н3изур +.а2н3ирид +.а2н3овар +.а2н3окс +.а2н3опис +.а2н3орх +.а2н3офт +.а2н3орг +.ди2с3акор +.ди2с3јунк +.ди2с3квал +.ди2с3конт +.ди2с3корд +.ди2с3кре +.ди2с3кри +.ди2с3кур +.ди2с3ло +.ди2с3ориј +.ди2с3парит +.ди2с3поз +.ди2с3пон +.ди2с3проп +.ди2с3тон +.ди2с3трак +.и2н3абруп +.и2н3адек +.и2н3акур +.и2н3акце +.и2н3амор +.и2н3аниц +.и2н3аплик +.и2н3апст +.и2н3арт +.и2н3аугур +.и2н3аура +.и2н3афек +.и2н3евид +.и2н3ег +.и2н3ед +.и2н3екв +.и2н3екс +.и2н3елиг +.и2н3епц +.и2н3ефек +.и2н3обл +.и2ноген +.и2нокор +.и2н3окуп +.и2н3опер +.и2н3опор +.и2н3опсе +.и2н3офиц +.и2н3умбр +.и2н3унда +.и2н3унк +.и2н3утил +.инте2р3и +.инте2р3о +.инте2р3у +.инте2р3а +.инте2р3е +.инте3р4егн +.инте3р4еси +.инте3р4есн +.инте3р4есо +.инте3р4есу +.инте3р4еса +.инте3р4есе +.инте3р4ежџ +.инте3р4ије +.инте2р3је +.инте3р4огат +.јури2с3к +.јури2с3п +.ну2з3бел +.ну2з3биљ +.ну2з3љуб +.ну2з3ре +.ну2з3рје +.ну2з3уж +.ну2с3пос +.ну2с3про +.по2ст3егз +.по2ст3инду +.по2ст3лим +.по2ст3онк +.по2ст3опер +.су2б3а +.су2б3л +.су3б4аш +.су2б3инв +.су2б3јунк +.су2б3окс +.су2б3реп +.су2б3рог +.су2б3орд +.супе2р3и +.супе2р3о +.супе2р3у +.супе2р3а +.супе2р3е +.супе3р4иор +.тран2с3а +.тран2с3ц +.тран2с3е +.тран2с3к +.тран2с3л +.тран2с3м +.тран2с3н +.тран2с3о +.тран2с3п +.тран2с3т +.тран2с3у +.тран2с3в +.тран2с3њ +.тран3с4еп +.тран3с4кри +.тран3с4ум +.тран3с4уд +t2j +t2l +t2lj +t2r +t2v +d2j +d2l +d2lj +d2r +d2v +g2j +g2l +g2lj +g2r +g2v +h2j +h2l +h2lj +h2r +h2v +k2j +k2l +k2lj +k2r +k2v +2d1b +2d1c +2d1d +2d1f +2d1g +2d1h +2d1k +2d1m +2d1n +2d1p +2d1s +2d1t +2d1nj +2d1dž +2d1z +2d1š +2d1đ +2d1ć +2d1č +2g1ž +2g1b +2g1c +2g1d +2g1f +2g1g +2g1h +2g1k +2g1m +2g1n +2g1p +2g1s +2g1t +2g1nj +2g1dž +2g1z +2g1š +2g1đ +2g1ć +2g1č +2h1ž +2h1b +2h1c +2h1d +2h1f +2h1g +2h1h +2h1k +2h1m +2h1n +2h1p +2h1s +2h1t +2h1nj +2h1dž +2h1z +2h1š +2h1đ +2h1ć +2h1č +2k1ž +2k1b +2k1c +2k1d +2k1f +2k1g +2k1h +2k1k +2k1m +2k1n +2k1p +2k1s +2k1t +2k1nj +2k1dž +2k1z +2k1š +2k1đ +2k1ć +2k1č +2t1ž +2t1b +2t1c +2t1d +2t1f +2t1g +2t1h +2t1k +2t1m +2t1n +2t1p +2t1s +2t1t +2t1nj +2t1dž +2t1z +2t1š +2t1đ +2t1ć +2t1č +2dj. +2dl. +2dlj. +2dr. +2dv. +2gj. +2gl. +2glj. +2gr. +2gv. +2hj. +2hl. +2hlj. +2hr. +2hv. +2kj. +2kl. +2klj. +2kr. +2kv. +2tj. +2tl. +2tlj. +2tr. +2tv. +p2j +p2l +p2lj +p2r +v2j +v2l +v2lj +v2r +b2j +b2l +b2lj +b2r +f2j +f2l +f2lj +f2r +m2j +m2l +m2lj +m2r +2b1ž +2b1b +2b1c +2b1d +2b1f +2b1g +2b1h +2b1k +2b1m +2b1n +2b1p +2b1s +2b1t +2b1v +2b1nj +2b1dž +2b1z +2b1š +2b1đ +2b1ć +2b1č +2f1ž +2f1b +2f1c +2f1d +2f1f +2f1g +2f1h +2f1k +2f1m +2f1n +2f1p +2f1s +2f1t +2f1v +2f1nj +2f1dž +2f1z +2f1š +2f1đ +2f1ć +2f1č +2m1ž +2m1b +2m1c +2m1d +2m1f +2m1g +2m1h +2m1k +2m1m +2m1n +2m1p +2m1s +2m1t +2m1v +2m1nj +2m1dž +2m1z +2m1š +2m1đ +2m1ć +2m1č +2p1ž +2p1b +2p1c +2p1d +2p1f +2p1g +2p1h +2p1k +2p1m +2p1n +2p1p +2p1s +2p1t +2p1v +2p1nj +2p1dž +2p1z +2p1š +2p1đ +2p1ć +2p1č +2v1ž +2v1b +2v1c +2v1d +2v1f +2v1g +2v1h +2v1k +2v1m +2v1n +2v1p +2v1s +2v1t +2v1v +2v1nj +2v1dž +2v1z +2v1š +2v1đ +2v1ć +2v1č +2bj. +2bl. +2blj. +2br. +2fj. +2fl. +2flj. +2fr. +2mj. +2ml. +2mlj. +2mr. +2pj. +2pl. +2plj. +2pr. +2vj. +2vl. +2vlj. +2vr. +s2c +s2j +s2k +s2l +s2m +s2n +s2p +s2lj +s2r +s2t +s2v +s2nj +2s1ž +2s1b +2s1d +2s1f +2s1g +2s1h +2s1s +2s1dž +2s1z +2s1š +2s1đ +2s1ć +2s1č +2sj. +2sk. +2sl. +2sm. +2sn. +2sp. +2slj. +2sr. +2st. +2sv. +2snj. +2sc. +z2b +z2d +z2g +z2j +z2l +z2m +z2n +z2lj +z2r +z2v +z2nj +2z1ž +2z1c +2z1f +2z1h +2z1k +2z1p +2z1s +2z1t +2z1dž +2z1z +2z1š +2z1đ +2z1ć +2z1č +2zj. +2zl. +2zm. +2zn. +2zlj. +2zr. +2zv. +2znj. +2zb. +2zd. +2zg. +š2c +š2k +š2l +š2m +š2n +š2p +š2lj +š2t +š2v +š2nj +š2ć +š2č +2š1ž +2š1b +2š1d +2š1f +2š1g +2š1h +2š1s +2š1dž +2š1z +2š1š +2š1đ +2š1j +2š1r +2šk. +2šl. +2šm. +2šn. +2šp. +2šlj. +2št. +2šv. +2šnj. +2šć. +2šč. +2šc. +ž2b +ž2d +ž2g +ž2l +ž2m +ž2n +ž2lj +ž2v +ž2nj +ž2đ +2ž1ž +2ž1c +2ž1f +2ž1h +2ž1k +2ž1p +2ž1s +2ž1t +2ž1dž +2ž1z +2ž1š +2ž1ć +2ž1č +2ž1j +2ž1r +2žl. +2žm. +2žn. +2žlj. +2žv. +2žnj. +2žđ. +2žb. +2žd. +2žg. +c2j +c2r +c2v +2c1ž +2c1b +2c1c +2c1d +2c1f +2c1g +2c1h +2c1k +2c1l +2c1m +2c1n +2c1p +2c1lj +2c1s +2c1t +2c1nj +2c1dž +2c1z +2c1š +2c1đ +2c1ć +2c1č +2cj. +2cr. +2cv. +č2v +2č1ž +2č1b +2č1c +2č1d +2č1f +2č1g +2č1h +2č1j +2č1k +2č1l +2č1m +2č1n +2č1p +2č1lj +2č1r +2č1s +2č1t +2č1nj +2č1dž +2č1z +2č1š +2č1đ +2č1ć +2č1č +2čv. +2j1ž +2j1b +2j1c +2j1d +2j1f +2j1g +2j1h +2j1j +2j1k +2j1l +2j1m +2j1n +2j1p +2j1lj +2j1r +2j1s +2j1t +2j1v +2j1nj +2j1dž +2j1z +2j1š +2j1đ +2j1ć +2j1č +2l1ž +2l1b +2l1c +2l1d +2l1f +2l1g +2l1h +2l1k +2l1l +2l1m +2l1n +2l1p +2l1lj +2l1r +2l1s +2l1t +2l1v +2l1nj +2l1dž +2l1z +2l1š +2l1đ +2l1ć +2l1č +2n1ž +2n1b +2n1c +2n1d +2n1f +2n1g +2n1h +2n1k +2n1l +2n1m +2n1n +2n1p +2n1lj +2n1r +2n1s +2n1t +2n1v +2n1nj +2n1dž +2n1z +2n1š +2n1đ +2n1ć +2n1č +2lj1ž +2lj1b +2lj1c +2lj1d +2lj1f +2lj1g +2lj1h +2lj1j +2lj1k +2lj1l +2lj1m +2lj1n +2lj1p +2lj1lj +2lj1r +2lj1s +2lj1t +2lj1v +2lj1nj +2lj1dž +2lj1z +2lj1š +2lj1đ +2lj1ć +2lj1č +2r1ž +2r1b +2r1c +2r1d +2r1f +2r1g +2r1h +2r1j +2r1k +2r1l +2r1m +2r1n +2r1p +2r1lj +2r1r +2r1s +2r1t +2r1v +2r1nj +2r1dž +2r1z +2r1š +2r1đ +2r1ć +2r1č +2nj1ž +2nj1b +2nj1c +2nj1d +2nj1f +2nj1g +2nj1h +2nj1j +2nj1k +2nj1l +2nj1m +2nj1n +2nj1p +2nj1lj +2nj1r +2nj1s +2nj1t +2nj1v +2nj1nj +2nj1dž +2nj1z +2nj1š +2nj1đ +2nj1ć +2nj1č +2dž1ž +2dž1b +2dž1c +2dž1d +2dž1f +2dž1g +2dž1h +2dž1j +2dž1k +2dž1l +2dž1m +2dž1n +2dž1p +2dž1lj +2dž1r +2dž1s +2dž1t +2dž1v +2dž1nj +2dž1dž +2dž1z +2dž1š +2dž1đ +2dž1ć +2dž1č +2đ1ž +2đ1b +2đ1c +2đ1d +2đ1f +2đ1g +2đ1h +2đ1j +2đ1k +2đ1l +2đ1m +2đ1n +2đ1p +2đ1lj +2đ1r +2đ1s +2đ1t +2đ1v +2đ1nj +2đ1dž +2đ1z +2đ1š +2đ1đ +2đ1ć +2đ1č +2ć1ž +2ć1b +2ć1c +2ć1d +2ć1f +2ć1g +2ć1h +2ć1j +2ć1k +2ć1l +2ć1m +2ć1n +2ć1p +2ć1lj +2ć1r +2ć1s +2ć1t +2ć1v +2ć1nj +2ć1dž +2ć1z +2ć1š +2ć1đ +2ć1ć +2ć1č +.h2 +.j2 +.k2 +.l2 +.m2 +.n2 +.p2 +.lj2 +.r2 +.s2 +.t2 +.v2 +.nj2 +.dž2 +.z2 +.š2 +.đ2 +.ć2 +.č2 +.ž2 +.b2 +.c2 +.d2 +.f2 +.g2 +o3a +o3e +o3i +o3o +o3u +u3a +u3e +u3i +u3o +u3u +a3a +a3e +a3i +a3o +a3u +e3a +e3e +e3i +e3o +e3u +i3a +i3e +i3i +i3o +i3u +2a1 +2e1 +2i1 +2o1 +2u1 +2skb +2skc +2skd +2skf +2skg +2skh +2skk +2skm +2skn +2skp +2sks +2skt +2sknj +2skdž +2skz +2skš +2skđ +2skć +2skč +2skž +2stb +2stc +2std +2stf +2stg +2sth +2stk +2stm +2stn +2stp +2sts +2stt +2stnj +2stdž +2stz +2stš +2stđ +2stć +2stč +2stž +2škb +2škc +2škd +2škf +2škg +2škh +2škk +2škm +2škn +2škp +2šks +2škt +2šknj +2škdž +2škz +2škš +2škđ +2škć +2škč +2škž +2štb +2štc +2štd +2štf +2štg +2šth +2štk +2štm +2štn +2štp +2šts +2štt +2štnj +2štdž +2štz +2štš +2štđ +2štć +2štč +2štž +2spb +2spc +2spd +2spf +2spg +2sph +2spk +2spm +2spn +2spp +2sps +2spt +2spv +2spnj +2spdž +2spz +2spš +2spđ +2spć +2spč +2spž +2svb +2svc +2svd +2svf +2svg +2svh +2svk +2svm +2svn +2svp +2svs +2svt +2svv +2svnj +2svdž +2svz +2svš +2svđ +2svć +2svč +2svž +2špb +2špc +2špd +2špf +2špg +2šph +2špk +2špm +2špn +2špp +2šps +2špt +2špv +2špnj +2špdž +2špz +2špš +2špđ +2špć +2špč +2špž +2švb +2švc +2švd +2švf +2švg +2švh +2švk +2švm +2švn +2švp +2švs +2švt +2švv +2švnj +2švdž +2švz +2švš +2švđ +2švć +2švč +2švž +2ždb +2ždc +2ždd +2ždf +2ždg +2ždh +2ždk +2ždm +2ždn +2ždp +2žds +2ždt +2ždnj +2žddž +2ždz +2ždš +2ždđ +2ždć +2ždč +2žgb +2žgc +2žgd +2žgf +2žgg +2žgh +2žgk +2žgm +2žgn +2žgp +2žgs +2žgt +2žgnj +2žgdž +2žgz +2žgš +2žgđ +2žgć +2žgč +2žgž +2zdb +2zdc +2zdd +2zdf +2zdg +2zdh +2zdk +2zdm +2zdn +2zdp +2zds +2zdt +2zdnj +2zddž +2zdz +2zdš +2zdđ +2zdć +2zdč +2zgb +2zgc +2zgd +2zgf +2zgg +2zgh +2zgk +2zgm +2zgn +2zgp +2zgs +2zgt +2zgnj +2zgdž +2zgz +2zgš +2zgđ +2zgć +2zgč +2zgž +2žvb +2žvc +2žvd +2žvf +2žvg +2žvh +2žvk +2žvm +2žvn +2žvp +2žvs +2žvt +2žvv +2žvnj +2žvdž +2žvz +2žvš +2žvđ +2žvć +2žvč +2žvž +2žbb +2žbc +2žbd +2žbf +2žbg +2žbh +2žbk +2žbm +2žbn +2žbp +2žbs +2žbt +2žbv +2žbnj +2žbdž +2žbz +2žbš +2žbđ +2žbć +2žbč +2žbž +2zvb +2zvc +2zvd +2zvf +2zvg +2zvh +2zvk +2zvm +2zvn +2zvp +2zvs +2zvt +2zvv +2zvnj +2zvdž +2zvz +2zvš +2zvđ +2zvć +2zvč +2zvž +2zbb +2zbc +2zbd +2zbf +2zbg +2zbh +2zbk +2zbm +2zbn +2zbp +2zbs +2zbt +2zbv +2zbnj +2zbdž +2zbz +2zbš +2zbđ +2zbć +2zbč +2zbž +2žmb +2žmc +2žmd +2žmf +2žmg +2žmh +2žmk +2žmm +2žmn +2žmp +2žms +2žmt +2žmv +2žmnj +2žmdž +2žmz +2žmš +2žmđ +2žmć +2žmč +2žmž +2smb +2smc +2smd +2smf +2smg +2smh +2smk +2smm +2smn +2smp +2sms +2smt +2smv +2smnj +2smdž +2smz +2smš +2smđ +2smć +2smč +2smž +2zmb +2zmc +2zmd +2zmf +2zmg +2zmh +2zmk +2zmm +2zmn +2zmp +2zms +2zmt +2zmv +2zmnj +2zmdž +2zmz +2zmš +2zmđ +2zmć +2zmč +2zmž +2šmb +2šmc +2šmd +2šmf +2šmg +2šmh +2šmk +2šmm +2šmn +2šmp +2šms +2šmt +2šmv +2šmnj +2šmdž +2šmz +2šmš +2šmđ +2šmć +2šmč +2šmž +2scb +2scc +2scd +2scf +2scg +2sch +2sck +2scl +2scm +2scn +2scp +2sclj +2scr +2scs +2sct +2scnj +2scdž +2scz +2scš +2scđ +2scć +2scč +2scž +2šcb +2šcc +2šcd +2šcf +2šcg +2šch +2šck +2šcl +2šcm +2šcn +2šcp +2šclj +2šcr +2šcs +2šct +2šcnj +2šcdž +2šcz +2šcš +2šcđ +2šcć +2šcč +2šcž +2ščb +2ščc +2ščd +2ščf +2ščg +2ščh +2ščj +2ščk +2ščl +2ščm +2ščn +2ščp +2ščlj +2ščr +2ščs +2ščt +2ščnj +2ščdž +2ščz +2ščš +2ščđ +2ščć +2ščč +2ščž +2hvb +2hvc +2hvd +2hvf +2hvg +2hvh +2hvk +2hvm +2hvn +2hvp +2hvs +2hvt +2hvnj +2hvdž +2hvz +2hvš +2hvđ +2hvć +2hvč +2hvž +2ž3vl +2ž3vlj +2c3vl +2c3vlj +2z3vl +2z3vlj +2š3vl +2š3vlj +2č3vl +2č3vlj +2č3vj +2s3vlj +2d3vl +2d3vlj +2d3vr +2k3vj +2k3vl +2k3vlj +2t3vj +2t3vl +2t3vlj +2g3vj +2g3vl +2g3vlj +2g3vr +2h3vj +2h3vl +2h3vlj +2h3vr +2ž3mj +2ž3ml +2ž3mlj +2ž3mr +2z3ml +2z3mr +2š3mj +2š3ml +2š3mlj +2š3cj +2š3cv +2š3čv +2š3tj +2š3tl +2š3tlj +2s3tl +2s3kj +2s3klj +2š3pj +2š3pl +2š3plj +2ž3dj +2ž3dl +2ž3dlj +2ž3dv +2ž3gj +2ž3gl +2ž3glj +2ž3gr +2ž3gv +2z3dl +2z3dlj +2z3dv +2z3gj +2z3glj +2ž3bj +2ž3bl +2ž3blj +2ž3br +2z3blj +.a4e2ro +.be4o +.bi4o +.ge4o +.za3g2n +.za3t2ka +.iza3g2n +.iza3t2k +.iz3g2n +.izd2no +.izd2nu +.izd2na +.izr2k +.ist2k +.nag2n +.nag2nj +.na3d2nev +.na3d2nič +.na3d2nic +.na3t2kah +.na3t2kam +.na3t2kasm +.na3t2kast +.oda3g2n +.oda3d2n +.od3g2n +.od3m2n +.o3t2kah +.o3t2kam +.o3t2kasm +.o3t2kast +.po3g2n +.po3d2nev +.po3m2n +.po3m2nj +.po3r2v +.po3r2đ +.po3t2kah +.po3t2kam +.po3t2kat +.po3t2kav +.pred3m2n +.pred3m2nj +.pre3t2kah +.pre3t2kam +.pre3t2kat +.pro3g2n +.pro3t2ki +.pro3t2ka +.raza3g2n +.raz3g2n +.raz3d2ni +.raza3t2ka +.u3g2mi +.u3g2n +.uza3t2ka +3h2teti +3h2tjeti +3h2tel +3h2tev +3h2tenj +3h2tjel +3h2tjev +3h2tjenj +3g2degod. +3g2djegod. +3g2dekak +3g2dekad +3g2djekak +3g2djekad +ni3g2de. +ne3g2de. +ni3g2dje. +ne3g2dje. +3b2det +3b2denj +3b2djet +3b2djenj +3g2mil +3g2milj +3g2miz +3g2nos +3g2noz +3g2noj +3g2naj +3g2nezd +3g2nijezd +3g2nežđ +3g2niježđ +3g2nev +3g2njev +3g2njav +3g2njes +3g2njet +3g2nječ +3g2njil +3g2njio +3g2njilj +3g2njit +3g2njur +3k2nez +3k2než +3k2njiž +3k2njig +3m2nož +3m2nog +3m2naž +3p2sik +3p2sič +3p2sov +3p2suj +3r2đa +3s2fer +3t2mast +3t2mul +3t2muo +3t2mulj +3t2mur +3c2miz +3c2mak +3c2mač +3c2mok +3č2lan +3č2lanj +3r2je +4r3jem +4r3je. +.be2z3j +.be2z3l +.be2z3m +.be2z3n +.be2z3lj +.be2z3r +.be2z3v +.be2z3nj +.be2z3b +.be2z3d +.be2z3g +.be2z3i +.be2z3o +.be2z3u +.be2z3alkohol +.be2z3atomsk +.be3z4bedn +.be3z4beda +.be3z4bjedn +.be3z4bjeda +.be3z4beli +.be3z4bol +.be3z4vučn +.be3z4vuča +.be3z4istan +.be3z4isten +.be3z4jak +.be3z4jač +.be3z4lobn +.be3z4loba +.be3z4načaj +.be3z4račn +.be3z4rača +.be3z4up +.be3z4ub +.be2s3c +.be2s3k +.be2s3p +.be2s3t +.be3s4krupul +.be3s4pokojn +.be3s4pokoja +.be3s4porn +.be3s4pora +.be3s4tvar +.be3s4tid +.be3s4tija +.be3s4tilu +.be3s4tilj +.be3s4trana +.be3s4tras +.bes4tseler +.be2š3ć +.be2š3č +.va2n3evr +.va2n3ustav +.i2z3b +.i2z3d +.i2z3g +.i2z3j +.i2z3l +.i2z3m +.i2z3n +.i2z3lj +.i2z3r +.i2z3v +.i2z3nj +.i2z3i +.i2z3o +.i2z3u +.i2z3bija +.i2z3biva +.i2z3vedi +.i2z3vedn +.i2z3vedb +.i2z3vede +.i2z3daj +.i2z3aba +.i2z3aka +.i2z3anal +.i3z4bav +.i3z4bičkava +.i3z4bleušan +.i3z4bojak +.i3z4bojk +.i3z4vali +.i3z4valu +.i3z4vala +.i3z4vale +.i3z4valji +.i3z4vižd +.i3z4viiskr +.i3z4vija +.i3z4vijen +.i3z4vin +.i3z4vir +.i3z4vinj +.i3z4vitop +.i3z4vjed +.i3z4vojac +.i3z4vojc +.i3z4vor +.i3z4gomet +.i3z4gred +.i3z4grn +.i3z4grt +.i3z4drav +.i3z4iđ +.i3z4id +.i3z4imi +.i3z4ježlj +.i3z4loz +.i3z4lož +.i3z4log +.i3z4lopać +.i3z4nim +.i3z4noj +.iz4oanem +.iz4oanom +.iz4obat +.iz4obron +.iz4ogam +.iz4ogeo +.iz4oglos +.iz4ogon +.iz4ograf +.iz4odim +.iz4odin +.iz4odoz +.iz4oklin +.iz4okolon +.i3z4olat +.i3z4olac +.i3z4olir +.i3z4olov +.iz4oleks +.iz4oluks +.iz4omer +.iz4ometr +.iz4omorf +.iz4onef +.iz4onom +.iz4opat +.iz4oper +.iz4ople +.iz4opol +.iz4opsef +.iz4orah +.iz4osei +.iz4osint +.iz4osist +.iz4oskel +.iz4oskop +.iz4ostaz +.iz4oste +.iz4otah +.iz4otal +.iz4oter +.iz4oton +.iz4otop +.iz4otro +.iz4ofon +.iz4ofot +.iz4ohal +.iz4ohaz +.iz4ohel +.iz4ohij +.iz4ohim +.iz4ohit +.iz4ohips +.iz4ohor +.iz4ohro +.i3z4rael +.i3z4railj +.i3z4rači +.i3z4un +.i3z4upč +.i2s3c +.i2s3k +.i2s3p +.i2s3t +.i3s4kak +.i3s4kat +.i3s4kanj +.i3s4kariot +.i3s4kvas +.i3s4kvrč +.i3s4kin +.i3s4kita +.i3s4konsk +.i3s4koč +.i3s4kram +.i3s4krit +.i3s4kriš +.i3s4krič +.i3s4kric +.i3s4krat +.i3s4kren +.i3s4krenj +.i3s4kroj +.i3s4krsn +.i3s4krsa +.i3s4kuplja +.i3s4lam +.i3s4lab +.i3s4leđ +.i3s4led +.i3s4lijeđ +.i3s4lijed +.i3s4ljeđ +.i3s4ljed +.i3s4lik +.i3s4lin +.i3s4lov +.i3s4luš +.i3s4luž +.i3s4me +.i3s4mije +.i3s4mje +.i3s4pav +.i3s4paljiv +.i3s4pira +.i3s4plit +.i3s4plić +.i3s4pokoj +.i3s4polin +.i3s4pon +.i3s4porav +.i3s4pravi +.i3s4pravk +.i3s4pravn +.i3s4pravlj +.i3s4prava +.i3s4pupč +.i3s4pur +.i3s4red +.i3s4rk +.i3s4tavi +.i3s4tavlj +.i3s4takn +.i3s4tam +.i3s4tar +.i3s4tas +.i3s4tać +.i3s4tin +.i3s4tir +.i3s4tic +.i3s4tifan +.i3s4tok +.i3s4tori +.i3s4točn +.i3s4točnj +.i3s4toča +.i3s4trav +.i3s4trad +.i3s4tran +.i3s4trić +.i3s4triž +.i3s4tric +.i3s4trug +.i3s4tup +.i3s4uk +.i3s4us +.i3s4ut +.i3s4uš +.i2ž3đ +.i2š3ć +.i2š3č +.iz3be2z3obr +.iz3be2z3um +.iz3va2n3evr +.na2d3l +.na2d3lj +.na2d3v +.na3d4val +.na3d4vesi +.na3d4vest +.na3d4vij +.na3d4vit +.na3d4vla +.na3d4voje +.na3d4vor +.na2d3igr +.na2d3inž +.na2d3ina +.na2d3isk +.na2d3jah +.na2d3jač +.na2d3jek +.na2d3jez +.na2d3ječ +.na2d3jun +.na3d4lan +.na3d4leš +.na3d4lež +.na2d3ora +.na2d3oso +.na2d3ose +.na2d3osje +.na2d3ofi +.na2d3oč +.na2d3ran +.na2d3rač +.na2d3rast +.na2d3rašć +.na2d3real +.na2d3rep +.na2d3ruk +.na2d3ruč +.na2d3rug +.na2d3udar +.na2d3um +.na2d3uč +.na2j3a +.na2j3e +.na2j3i +.na2j3o +.na2j3u +.na3j4avi +.na3j4avlj +.na3j4ava +.na3j4ave +.na3j4adi +.na3j4ada +.na3j4ade +.na3j4aži +.na3j4azi +.na3j4ako +.na3j4aka +.na3j4alo +.na3j4ami +.na3j4aml +.na3j4amn +.na3j4ari +.na3j4arm +.na3j4arc +.na3j4ati +.na3j4auk +.na3j4ah +.na3j4aš +.na3j4edi +.na3j4edn +.na3j4edr +.na3j4eda +.na3j4eži +.na3j4ežu +.na3j4eže +.na3j4ezn +.na3j4ezd +.na3j4esti +.na3j4etk +.na3j4ec +.na3j4uri +.na3j4uren +.o2b3j +.o2b3lj +.o2b3r +.obe2z3b +.obe2z3d +.obe2z3g +.obe2z3j +.obe2z3l +.obe2z3m +.obe2z3n +.obe2z3o +.obe2z3lj +.obe2z3r +.obe2z3u +.obe2z3v +.obe3z4vij +.obe3z4nan +.obe3z4nanj +.obe3z4nač +.obe3z4ub +.obe2s3c +.obe2s3k +.obe2s3p +.obe2s3t +.obe3s4tan +.obe3s4tij +.obe3s4tran +.obe2š3ć +.obe2š3č +.o2b3igr +.o2b3istin +.o2b3istinj +.o3b4jek +.o3b4jer +.o3b4jesi +.o3b4jet +.o3b4ješ +.o2b3laj +.o2b3lam +.o2b3lakš +.o2b3lask +.o2b3lep +.o2b3let +.o2b3leć +.o2b3lež +.o2b3leg +.o2b3lijep +.o2b3lijet +.o2b3lijež +.o2b3lijeg +.o2b3leden +.o2b3liv +.o2b3lizat +.o2b3lizav +.o2b3lizi +.o2b3list +.o2b3loka +.o2b3luk +.o2b3luč +.o3b4ljan +.o3b4ljut +.o3b4ljuz +.o2b3oru +.o3b4raže +.o3b4razi +.o3b4razn +.o3b4razo +.o3b4razu +.o3b4raza +.o3b4razd +.o3b4ramb +.o3b4ran +.o3b4ranj +.o3b4rat +.o3b4rać +.o3b4rašn +.o3b4rašč +.o3b4rv +.o3b4rđ +.o3b4rem +.o3b4res +.o3b4ređ +.o3b4reč +.o3b4rež +.o3b4rec +.o3b4red +.o3b4reti +.o3b4retn +.o3b4rij +.o3b4ris +.o3b4rit +.o3b4riv +.o3b4rič +.o3b4ric +.o3b4rk +.o3b4rl +.o3b4rn +.o3b4rlj +.o3b4rs +.o3b4rt +.o3b4rš +.o3b4rč +.o3b4rok +.o3b4ron +.o3b4ronj +.o3b4roć +.o3b4roč +.o3b4rova +.o3b4rovc +.o3b4ruk +.o3b4run +.o3b4rus +.o3b4runj +.o3b4ruš +.o3b4ruč +.o2b3ubož +.o2b3uz +.o2b3už +.o2b3ud +.o2b3umi +.o2b3umj +.o2b3umr +.o2b3ume +.o2d3j +.o2d3l +.o2d3lj +.o2d3r +.o2d3v +.o2d3arg +.o3d4vaj +.o3d4važ +.o3d4vesn +.o3d4vest +.o3d4vesa +.o3d4vikav +.o3d4vikn +.o3d4vis +.o3d4vić +.o3d4voj +.o2d3igr +.o2d3i2z3v +.o2d3i2z3d +.o2d3isk +.o2d3isti +.o3d4jel +.o3d4jen +.o3d4jev +.o3d4jeć +.o3d4laz +.o3d4laž +.o3d4lag +.o3d4laka +.o3d4luk +.o3d4luč +.o2d3ozd +.o2d3ozg +.o2d3ok +.o2d3onl +.o2d3ono +.o2d3onu +.o2d3ond +.o3d4rani +.o3d4rano +.o3d4ranu +.o3d4rana +.o3d4rane +.o3d4raz +.o3d4rać +.o3d4raž +.o3d4rapi +.o3d4raplj +.o3d4rapa +.o3d4rači +.o3d4rven +.o3d4rvenj +.o3d4rveč +.o3d4rem +.o3d4ren +.o3d4ret +.o3d4ređ +.o3d4red +.o3d4rl +.o3d4rn +.o3d4rp +.o3d4rlj +.o3d4rt +.o3d4rž +.o3d4rin +.o3d4rinj +.o3d4riš +.o3d4rič +.o3d4rib +.o3d4ric +.o3d4ron +.o3d4ronj +.o3d4ruž +.o3d4rug +.o2d3uvi +.o2d3uve +.o2d3uzi +.o2d3uzl +.o2d3uzd +.o2d3uze +.o2d3uk +.o2d3ul +.o2d3um +.o2d3uč +.po2d3adm +.po2d3varij +.po2d3vez +.po2d3več +.po2d3vež +.po2d3vik +.po2d3vil +.po2d3vir +.po2d3vinj +.po2d3vlas +.po2d3vlaš +.po2d3voz +.po2d3vođ +.po2d3vož +.po2d3vod +.po2d3vrat +.po2d3vrać +.po2d3vrć +.po2d3vrž +.po2d3vrg +.po2d3vris +.po2d3vrs +.po2d3vuć +.po2d3igr +.po2d3izv +.po2d3j +.po3d4jen +.po3d4ječ +.po2d3lakat +.po2d3lakt +.po2d3lep +.po2d3let +.po2d3leć +.po2d3lež +.po2d3leg +.po2d3liz +.po2d3lijep +.po2d3lijet +.po2d3lijeć +.po2d3lijež +.po2d3lijeg +.po2d3list +.po2d3lok +.po2d3lom +.po2d3lup +.po2d3luč +.po2d3luž +.po2d3ljut +.po2d3okn +.po2d3oš +.po2d3oč +.po2d3of +.po2d3ravn +.po2d3ravnj +.po2d3rad +.po2d3ra2z3d +.po2d3razr +.po2d3razu +.po2d3ram +.po2d3ran +.po2d3ras +.po2d3ranj +.po2d3rep +.po2d3res +.po2d3rez +.po2d3rik +.po2d3rit +.po2d3ron +.po2d3rov +.po2d3rož +.po2d3ruk +.po2d3rub +.po2d3ruči +.po2d3ručn +.po2d3ruča +.po2d3upla +.po2d3usm +.po2d3usn +.pre2d3j +.pre2d3v +.pre3d4vaj +.pre3d4var +.pre3d4vest +.pre3d4voji +.pre3d4voja +.pre3d4voje +.pre3d4vor +.pre3d4vos +.pre3d4jen +.pre2d3igr +.pre2d3id +.pre2d3izb +.pre2d3ispi +.pre2d3isto +.pre2d3istr +.pre2d3obj +.pre2d3odre +.pre2d3okus +.pre2d3osv +.pre2d3ose +.pre2d3osje +.pre2d3rat +.pre2d3rač +.pre2d3rad +.pre2d3ruč +.pre2d3ubeđ +.pre2d3ubijeđ +.pre2d3ubjeđ +.pre2d3uver +.pre2d3uvjer +.pre2d3uvjet +.pre2d3ugov +.pre2d3udar +.pre2d3upis +.pre2d3uslo +.proti2v3akc +.proti2v3otr +.proti2v3of +.proti2v3r +.proti2v3us +.proti2v3ud +.ra2ž3đ +.ra2z3b +.ra2z3d +.ra2z3e +.ra2z3g +.ra2z3i +.ra2z3j +.ra2z3l +.ra2z3m +.ra2z3n +.ra2z3lj +.ra2z3r +.ra2z3v +.ra2z3nj +.ra2z3anal +.ra3z4ban +.ra3z4bar +.ra3z4bau +.ra3z4bad +.ra3z4bašur +.ra3z4boj +.ra3z4bor +.ra3z4val +.ra3z4vede +.ra3z4vest +.ra3z4vigo +.ra3z4viju +.ra3z4vija +.ra3z4vije +.ra3z4vit +.ra3z4vić +.ra3z4voj +.ra3z4von +.ra3z4vrat +.ra3z4vrać +.ra3z4vrt +.ra3z4vrć +.ra3z4gađ +.ra3z4grt +.ra3z4ev +.ra3z4ij +.ra3z4il +.ra3z4in +.ra3z4ir +.ra3z4it +.ra3z4iz +.ra3z4iđ +.ra3z4ić +.ra3z4id +.ra3z4laz +.ra3z4lag +.ra3z4lik +.ra3z4lič +.ra3z4loz +.ra3z4lož +.ra3z4log +.ra3z4met +.ra3z4meć +.ra3z4mrsk +.ra3z4nat +.ra2z3obl +.ra2z3obr +.ra2z3oba +.ra2z3od +.ra2z3orat +.ra2z3orav +.ra2z3ort +.ra2z3oru +.ra2z3ot +.ra3z4red +.ra3z4rok +.ra3z4roč +.ra2z3uve +.ra2z3udi +.ra2z3uda +.ra2z3udb +.ra2z3uzi +.ra2z3uzd +.ra2z3uze +.ra2z3ular +.ra2z3umr +.ra2s3c +.ra2s3k +.ra2s3p +.ra2s3t +.ra3s4kak +.ra3s4kand +.ra3s4kin +.ra3s4klap +.ra3s4klanj +.ra3s4klad +.ra3s4klon +.ra3s4klopi +.ra3s4kloplj +.ra3s4klopa +.ra3s4koš +.ra3s4krop +.ra3s4paj +.ra3s4pav +.ra3s4peti +.ra3s4peto +.ra3s4peta +.ra3s4pete +.ra3s4piku +.ra3s4pinj +.ra3s4plin +.ra3s4plinj +.ra3s4pn +.ra3s4polož +.ra3s4pon +.ra3s4por +.ra3s4prav +.ra3s4prem +.ra3s4rđ +.ra3s4rd +.ra3s4re +.ra3s4taj +.ra3s4tan +.ra3s4tat +.ra3s4tav +.ra3s4tenj +.ra3s4til +.ra3s4tir +.ra3s4tis +.ra3s4tit +.ra3s4tinj +.ra3s4toj +.ra3s4trel +.ra3s4tret +.ra3s4troj +.ra3s4trt +.ra3s4tup +.ra3s4tur +.ra3s4tuć +.ra4s5turč +.ra2š3ć +.ra2š3č +.ra3š4ćenj +.ra3š4čić +.u2z3b +.u2z3d +.u2z3g +.u2z3i +.u2z3j +.u2z3l +.u2z3m +.u2z3n +.u2z3lj +.u2z3r +.u2z3v +.u2z3nj +.u3z4bor +.u3z4van +.u3z4vat +.u3z4viž +.u3z4vijo +.u3z4viju +.u3z4vija +.u3z4vije +.u3z4voj +.u3z4dic +.u2z3igr +.u2z3inat +.u2z3iskr +.u3z4lan +.u3z4lat +.u3z4lim +.u3z4lit +.u3z4lić +.u3z4lic +.u3z4lov +.u3z4ludob +.u3z4nak +.u3z4nač +.u3z4neve +.u3z4nevje +.u3z4nič +.u3z4nic +.u3z4noj +.u2z3obest +.u2z3obijest +.u2z3orat +.u2z3orav +.u2z3oho +.u3z4ret +.u3z4rev +.u3z4rijet +.u3z4rijev +.u3z4rn +.u3z4rnj +.u3z4roko +.u3z4roku +.u3z4roka +.u3z4roč +.u3z4ruj +.u2z3ugar +.u2s3c +.u2s3k +.u2s3p +.u3s4kak +.u3s4klađ +.u3s4klad +.u3s4ko +.u4s5kom +.u4s5kov +.u4s5koš +.u4s5koko +.u4s5kolu +.u4s5kole +.u4s5kopa +.u4s5kora +.u4s5kosi +.u4s5kotr +.u3s4kup +.u3s4pav +.u3s4palo +.u3s4peh +.u3s4pel +.u3s4pem +.u3s4pet +.u3s4pev +.u3s4peš +.u3s4pjeh +.u3s4pjel +.u3s4pjem +.u3s4pjet +.u3s4pjev +.u3s4pješ +.u3s4pent +.u3s4pija +.u3s4pije +.u3s4pijuš +.u3s4pikuš +.u3s4pon +.u3s4pori +.u3s4pora +.u3s4poren +.u3s4porenj +.u3s4poreč +.u3s4posob +.u3s4premi +.u3s4prema +.u3s4rk +.u3s4rn +.u3s4rp +.u3s4rlj +.u3s4rt +.u3s4rđ +.u3s4rž +.u3s4ra +.u3s4rd +.u3s4re +.u3s4rijed +.u2s3talas +.u2s3tara +.u2s3tvrđ +.u2s3tvrd +.u2s3ter +.u2s3teć +.u2s3teg +.u2s3tov +.u2s3traj +.u2s3tral +.u2s3trg +.u2s3trep +.u2s3tres +.u2s3treb +.u2s3trk +.u2s3trn +.u2s3trp +.u2s3trć +.u2s3trč +.u2s3tum +.u2s3tur +.u2s3tuć +.u2š3ć +.u2š3č +.a2b3alij +.a2b3anac +.a2b3evak +.a2b3erac +.a2b3erir +.a2b3irit +.a2b3ju +.a2b3la +.a2b3leg +.a2b3lep +.a2b3lok +.a2b3lu +.a2b3orig +.a2b3reak +.a2b3rog +.a2b3uzus +.a2d3erac +.a2d3verb +.a2d3j +.a2d3lat +.a2d3ren +.a2d3rog +.a3g2nos +.a3g2noz +.a2nabap +.a2nabaz +.a2nabat +.a2nabio +.a2nabol +.a2nagen +.a2nagno +.a2n3ago +.a2nagra +.a2nadem +.a2nadipl +.a2nadoz +.a2n3a4e2ro +.a2nakal +.a2nakam +.a2nakat +.a2nakef +.a2nakla +.a2nakli +.a2nakoj +.a2n3akuz +.a2n3alg +.a2n3ald +.a2nalep +.a2naliz +.a2nalis +.a2nalit +.a2n3amert +.a2namne +.a2n3andr +.a2naneo +.a2n3ant +.a2napla +.a2naple +.a2napne +.a2napno +.a2napro +.a2napti +.a2n3apto +.a2nart +.a2n3arh +.a2nasar +.a2nasei +.a2naspaz +.a2nasta +.a2nastig +.a2nastom +.a2natim +.a2natom +.a2natoc +.a2natre +.a2natri +.a2natro +.a2nafaz +.a2n3afij +.a2nafila +.a2nafon +.a2n3afrod +.a2nakol +.a2nakron +.a2nakru +.a2n3alfa +.a2nafor +.a2nahor +.a2nahro +.a2n3eger +.a2n3ekl +.a2n3ekum +.a2n3elek +.a2n3ener +.a2n3epi +.a2neor +.a2n3erg +.a2n3erit +.a2n3este +.a2n3idr +.a2n3izog +.a2n3izom +.a2n3izur +.a2n3irid +.a2n3ovar +.a2n3oks +.a2n3opis +.a2n3orh +.a2n3oft +.a2n3org +.di2s3akor +.di2s3junk +.di2s3kval +.di2s3kont +.di2s3kord +.di2s3kre +.di2s3kri +.di2s3kur +.di2s3lo +.di2s3orij +.di2s3parit +.di2s3poz +.di2s3pon +.di2s3prop +.di2s3ton +.di2s3trak +.i2n3abrup +.i2n3adek +.i2n3akur +.i2n3akce +.i2n3amor +.i2n3anic +.i2n3aplik +.i2n3apst +.i2n3art +.i2n3augur +.i2n3aura +.i2n3afek +.i2n3evid +.i2n3eg +.i2n3ed +.i2n3ekv +.i2n3eks +.i2n3elig +.i2n3epc +.i2n3efek +.i2n3obl +.i2nogen +.i2nokor +.i2n3okup +.i2n3oper +.i2n3opor +.i2n3opse +.i2n3ofic +.i2n3umbr +.i2n3unda +.i2n3unk +.i2n3util +.inte2r3i +.inte2r3o +.inte2r3u +.inte2r3a +.inte2r3e +.inte3r4egn +.inte3r4esi +.inte3r4esn +.inte3r4eso +.inte3r4esu +.inte3r4esa +.inte3r4ese +.inte3r4eždž +.inte3r4ije +.inte2r3je +.inte3r4ogat +.juri2s3k +.juri2s3p +.nu2z3bel +.nu2z3bilj +.nu2z3ljub +.nu2z3re +.nu2z3rje +.nu2z3už +.nu2s3pos +.nu2s3pro +.po2st3egz +.po2st3indu +.po2st3lim +.po2st3onk +.po2st3oper +.su2b3a +.su2b3l +.su3b4aš +.su2b3inv +.su2b3junk +.su2b3oks +.su2b3rep +.su2b3rog +.su2b3ord +.supe2r3i +.supe2r3o +.supe2r3u +.supe2r3a +.supe2r3e +.supe3r4ior +.tran2s3a +.tran2s3c +.tran2s3e +.tran2s3k +.tran2s3l +.tran2s3m +.tran2s3n +.tran2s3o +.tran2s3p +.tran2s3t +.tran2s3u +.tran2s3v +.tran2s3nj +.tran3s4ep +.tran3s4kri +.tran3s4um +.tran3s4ud +.a2n3jon +.i2n3jek +.i2n3jur +.i2n3just +.o2d3žal +.o2d3žalj +.o2d3ži +.o2d3žv +.o2d3že +.pre2d3ži +.pre2d3že +.na2d3ždr +.na2d3žnj +.na2d3že +.na2d3žanj +.na2d3žir +.na2d3živ +.na2d3žup +l2j +n2j +d2ž +2dž.}
\ No newline at end of file diff --git a/tex/context/patterns/mkiv/lang-sr.lua b/tex/context/patterns/mkiv/lang-sr.lua index 78455bca2..eed9741bd 100644 --- a/tex/context/patterns/mkiv/lang-sr.lua +++ b/tex/context/patterns/mkiv/lang-sr.lua @@ -1,10 +1,10 @@ return { ["comment"]="% generated by mtxrun --script pattern --convert", ["exceptions"]={ - ["characters"]="абвгдезиклмнопрстуцшјњћ", - ["data"]="на-дно на-тка на-тка-ти на-тка-ше о-дно о-тка о-тка-ти о-тка-ше по-дно по-дне по-тку по-тки по-тке по-тка у-дно и-где и-гдје сву-где све-где сву-гдје све-гдје по-не-где по-не-гдје и-зби и-збе и-зба и-зби-ци и-зби-це и-зби-ца и-звит и-зим изо-ба-ру изо-ба-ри изо-ба-ре изо-ба-ра и-скок и-ско-ку и-ско-ка и-скон и-ско-ну и-ско-ни и-ско-на и-скру и-скре и-скри и-скра и-скрав и-спод и-спо-да и-стру и-стри и-стро и-стре и-стра на-ју на-ји на-јо на-је на-ја на-јам на-јест о-браз о-брет о-дви-ка о-дран о-дра-ти пре-двој ра-зму ра-зми ра-змо ра-зме ра-зма ра-зну ра-зни ра-зно ра-зне ра-зна ра-склоп ра-спе-лу ра-спе-ло ра-спе-ла ра-спе-ћа ра-спе-ћу ра-спе-ће ра-сту ра-сти ра-сте ра-ста ра-стом ра-стер ра-шћу ра-шћи ра-шћо ра-шће ра-шћа у-зно у-зна у-зни у-зник у-зрок у-ску у-ски у-ско у-ске у-ска ус-кос у-спио у-спео у-спор у-шћу у-шће у-шћа ин-те-рес тран-су тран-са тран-сом те-ле-ви-зор те-ле-ви-зо-ру те-ле-ви-зо-ром те-ле-ви-зо-ра те-ле-ви-зо-ри при-ти-сак при-ти-с-ком при-ти-с-ку при-ти-с-ка по-ја-ви-ће на-пу-шта про-гра-ми-ра-ње сни-ма-ња сни-ма-ње", - ["length"]=1800, - ["n"]=130, + ["characters"]="abcdegijklmnoprstuvzćšабвгдезиклмнопрстуцшјћ", + ["data"]="на-дно на-тка на-тка-ти на-тка-ше о-дно о-тка о-тка-ти о-тка-ше по-дно по-дне по-тки по-тку по-тка по-тке у-дно и-где и-гдје сву-где све-где сву-гдје све-гдје по-не-где по-не-гдје и-зби и-зба и-збе и-зби-ци и-зби-ца и-зби-це и-звит и-зим изо-ба-ри изо-ба-ру изо-ба-ра изо-ба-ре и-скок и-ско-ку и-ско-ка и-скон и-ско-ни и-ско-ну и-ско-на и-скри и-скру и-скра и-скре и-скрав и-спод и-спо-да и-стри и-стро и-стру и-стра и-стре на-ји на-јо на-ју на-ја на-је на-јам на-јест о-браз о-брет о-дви-ка о-дран о-дра-ти пре-двој ра-зми ра-змо ра-зму ра-зма ра-зме ра-зни ра-зно ра-зну ра-зна ра-зне ра-склоп ра-спе-ло ра-спе-лу ра-спе-ла ра-спе-ћу ра-спе-ћа ра-спе-ће ра-сти ра-сту ра-ста ра-сте ра-стом ра-стер ра-шћи ра-шћо ра-шћу ра-шћа ра-шће у-зни у-зно у-зна у-зник у-зрок у-ски у-ско у-ску у-ска у-ске ус-кос у-спио у-спео у-спор у-шћу у-шћа у-шће ин-те-рес тран-су тран-са тран-сом na-dno na-tka na-tka-ti na-tka-še o-dno o-tka o-tka-ti o-tka-še po-dno po-dne po-tki po-tku po-tka po-tke u-dno i-gde i-gdje svu-gde sve-gde svu-gdje sve-gdje po-ne-gde po-ne-gdje i-zbi i-zba i-zbe i-zbi-ci i-zbi-ca i-zbi-ce i-zvit i-zim izo-ba-ri izo-ba-ru izo-ba-ra izo-ba-re i-skok i-sko-ku i-sko-ka i-skon i-sko-ni i-sko-nu i-sko-na i-skri i-skru i-skra i-skre i-skrav i-spod i-spo-da i-stri i-stro i-stru i-stra i-stre na-ji na-jo na-ju na-ja na-je na-jam na-jest o-braz o-bret o-dvi-ka o-dran o-dra-ti pre-dvoj ra-zmi ra-zmo ra-zmu ra-zma ra-zme ra-zni ra-zno ra-znu ra-zna ra-zne ra-sklop ra-spe-lo ra-spe-lu ra-spe-la ra-spe-ću ra-spe-ća ra-spe-će ra-sti ra-stu ra-sta ra-ste ra-stom ra-ster ra-šći ra-šćo ra-šću ra-šća ra-šće u-zni u-zno u-zna u-znik u-zrok u-ski u-sko u-sku u-ska u-ske us-kos u-spio u-speo u-spor u-šću u-šća u-šće in-te-res tran-su tran-sa tran-som", + ["length"]=2394, + ["n"]=232, }, ["metadata"]={ ["mnemonic"]="sr", @@ -12,11 +12,11 @@ return { ["texcomment"]="% \n% \n% \n% \n% ", }, ["patterns"]={ - ["characters"]="абвгдежзиклмнопрстуфхцчшђјљњћџ", - ["data"]=".ђ2 .ћ2 .ч2 .ш2 .ж2 .а2б3алиј .а2б3анац .а2б3ерац .а2б3ерир .а2б3евак .а2б3ирит .а2б3ју .а2б3ла .а2б3лег .а2б3леп .а2б3лок .а2б3лу .а2б3ориг .а2б3реак .а2б3рог .а2б3узус .а2д3ерац .а2д3ј .а2д3лат .а2д3рен .а2д3рог .а2д3верб .а2н3а4е2ро .а2н3афиј .а2н3афрод .а2н3аго .а2н3акуз .а2н3алд .а2н3алфа .а2н3алг .а2н3амерт .а2н3андр .а2н3ант .а2н3апто .а2н3арх .а2н3егер .а2н3екл .а2н3екум .а2н3елек .а2н3енер .а2н3епи .а2н3ерг .а2н3ерит .а2н3есте .а2н3идр .а2н3ирид .а2н3изог .а2н3изом .а2н3изур .а2н3јон .а2н3офт .а2н3окс .а2н3опис .а2н3орг .а2н3орх .а2н3овар .а2набап .а2набат .а2набаз .а2набио .а2набол .а2надем .а2надипл .а2надоз .а2нафаз .а2нафила .а2нафон .а2нафор .а2наген .а2нагно .а2награ .а2нахор .а2нахро .а2накал .а2накам .а2накат .а2накеф .а2накла .а2накли .а2накој .а2накол .а2накрон .а2накру .а2налеп .а2налис .а2налит .а2нализ .а2намне .а2нанео .а2напла .а2напле .а2напне .а2напно .а2напро .а2напти .а2нарт .а2насар .а2насеи .а2наспаз .а2наста .а2настиг .а2настом .а2натим .а2натоц .а2натом .а2натре .а2натри .а2натро .а2неор .а3г2нос .а3г2ноз .а4е2ро .б2 .бе2ш3ћ .бе2ш3ч .бе2с3ц .бе2с3к .бе2с3п .бе2с3т .бе2з3алкохол .бе2з3атомск .бе2з3б .бе2з3д .бе2з3г .бе2з3и .бе2з3л .бе2з3љ .бе2з3м .бе2з3н .бе2з3њ .бе2з3о .бе2з3р .бе2з3у .бе2з3в .бе3с4крупул .бе3с4покоја .бе3с4покојн .бе3с4пора .бе3с4порн .бе3с4тид .бе3с4тија .бе3с4тиљ .бе3с4тилу .бе3с4трана .бе3с4трас .бе3с4твар .бе3з4беда .бе3з4бедн .бе3з4бели .бе3з4бједа .бе3з4бједн .бе3з4бол .бе3з4истан .бе3з4истен .бе3з4јач .бе3з4јак .бе3з4лоба .бе3з4лобн .бе3з4начај .бе3з4рача .бе3з4рачн .бе3з4уб .бе3з4уп .бе3з4вуча .бе3з4вучн .бе4о .бес4тселер .би4о .ц2 .д2 .џ2 .ди2с3акор .ди2с3јунк .ди2с3конт .ди2с3корд .ди2с3кре .ди2с3кри .ди2с3кур .ди2с3квал .ди2с3ло .ди2с3ориј .ди2с3парит .ди2с3пон .ди2с3поз .ди2с3проп .ди2с3тон .ди2с3трак .ф2 .г2 .ге4о .х2 .и2ш3ћ .и2ш3ч .и2ж3ђ .и2н3абруп .и2н3адек .и2н3афек .и2н3акце .и2н3акур .и2н3амор .и2н3аниц .и2н3аплик .и2н3апст .и2н3арт .и2н3аугур .и2н3аура .и2н3ед .и2н3ефек .и2н3ег .и2н3екс .и2н3екв .и2н3елиг .и2н3епц .и2н3евид .и2н3јек .и2н3јур .и2н3јуст .и2н3обл .и2н3офиц .и2н3окуп .и2н3опер .и2н3опор .и2н3опсе .и2н3умбр .и2н3унда .и2н3унк .и2н3утил .и2ноген .и2нокор .и2с3ц .и2с3к .и2с3п .и2с3т .и2з3аба .и2з3ака .и2з3анал .и2з3б .и2з3бија .и2з3бива .и2з3д .и2з3дај .и2з3г .и2з3и .и2з3л .и2з3љ .и2з3м .и2з3н .и2з3њ .и2з3о .и2з3р .и2з3у .и2з3в .и2з3ведб .и2з3веде .и2з3веди .и2з3ведн .и3с4как .и3с4кариот .и3с4кат .и3с4кин .и3с4кита .и3с4коч .и3с4конск .и3с4крам .и3с4крат .и3с4крен .и3с4крењ .и3с4крич .и3с4криш .и3с4криц .и3с4крит .и3с4крој .и3с4крса .и3с4крсн .и3с4купља .и3с4квас .и3с4кврч .и3с4лаб .и3с4лам .и3с4леђ .и3с4лед .и3с4лијеђ .и3с4лијед .и3с4лик .и3с4лин .и3с4љеђ .и3с4љед .и3с4лов .и3с4луш .и3с4луж .и3с4ме .и3с4мије .и3с4мје .и3с4паљив .и3с4пав .и3с4пира .и3с4плић .и3с4плит .и3с4покој .и3с4полин .и3с4пон .и3с4порав .и3с4права .и3с4прави .и3с4правк .и3с4прављ .и3с4правн .и3с4пупч .и3с4пур .и3с4ред .и3с4рк .и3с4таћ .и3с4такн .и3с4там .и3с4тар .и3с4тас .и3с4тави .и3с4тављ .и3с4тиц .и3с4тифан .и3с4тин .и3с4тир .и3с4точа .и3с4точн .и3с4точњ .и3с4ток .и3с4тори .и3с4трад .и3с4тран .и3с4трав .и3с4трић .и3с4триж .и3с4триц .и3с4труг .и3с4туп .и3с4уш .и3с4ук .и3с4ус .и3с4ут .и3з4бав .и3з4бичкава .и3з4блеушан .и3з4бојак .и3з4бојк .и3з4драв .и3з4гомет .и3з4гред .и3з4грн .и3з4грт .и3з4иђ .и3з4ид .и3з4ими .и3з4јежљ .и3з4лож .и3з4лог .и3з4лопаћ .и3з4лоз .и3з4ним .и3з4ној .и3з4олац .и3з4олат .и3з4олир .и3з4олов .и3з4рачи .и3з4раел .и3з4раиљ .и3з4ун .и3з4упч .и3з4вала .и3з4вале .и3з4вали .и3з4ваљи .и3з4валу .и3з4вижд .и3з4виискр .и3з4вија .и3з4вијен .и3з4вин .и3з4вињ .и3з4вир .и3з4витоп .и3з4вјед .и3з4војац .и3з4војц .и3з4вор .инте2р3а .инте2р3е .инте2р3и .инте2р3је .инте2р3о .инте2р3у .инте3р4ежџ .инте3р4егн .инте3р4еса .инте3р4есе .инте3р4еси .инте3р4есн .инте3р4есо .инте3р4есу .инте3р4ије .инте3р4огат .ист2к .из3бе2з3обр .из3бе2з3ум .из3г2н .из3ва2н3евр .из4оанем .из4оаном .из4обат .из4оброн .из4одим .из4один .из4одоз .из4офон .из4офот .из4огам .из4огео .из4оглос .из4огон .из4ограф .из4охал .из4охаз .из4охел .из4охиј .из4охим .из4охипс .из4охит .из4охор .из4охро .из4оклин .из4околон .из4олекс .из4олукс .из4омер .из4ометр .из4оморф .из4онеф .из4оном .из4опат .из4опер .из4опле .из4опол .из4опсеф .из4орах .из4осеи .из4осинт .из4осист .из4оскел .из4оскоп .из4остаз .из4осте .из4отах .из4отал .из4отер .из4отон .из4отоп .из4отро .иза3г2н .иза3т2к .изд2на .изд2но .изд2ну .изр2к .јури2с3к .јури2с3п .к2 .љ2 .м2 .н2 .на2д3жањ .на2д3ждр .на2д3же .на2д3жир .на2д3жив .на2д3жњ .на2д3жуп .на2д3игр .на2д3инж .на2д3ина .на2д3иск .на2д3јач .на2д3јах .на2д3јеч .на2д3јек .на2д3јез .на2д3јун .на2д3л .на2д3љ .на2д3оч .на2д3офи .на2д3ора .на2д3осе .на2д3осје .на2д3осо .на2д3рач .на2д3рашћ .на2д3ран .на2д3раст .на2д3реал .на2д3реп .на2д3руч .на2д3руг .на2д3рук .на2д3уч .на2д3удар .на2д3ум .на2д3в .на2ј3а .на2ј3е .на2ј3и .на2ј3о .на2ј3у .на3д2нев .на3д2нич .на3д2ниц .на3д4лан .на3д4леш .на3д4леж .на3д4вал .на3д4веси .на3д4вест .на3д4виј .на3д4вит .на3д4вла .на3д4воје .на3д4вор .на3ј4аш .на3ј4ажи .на3ј4ада .на3ј4аде .на3ј4ади .на3ј4ах .на3ј4ака .на3ј4ако .на3ј4ало .на3ј4ами .на3ј4амл .на3ј4амн .на3ј4арц .на3ј4ари .на3ј4арм .на3ј4ати .на3ј4аук .на3ј4ава .на3ј4аве .на3ј4ави .на3ј4ављ .на3ј4ази .на3ј4еже .на3ј4ежи .на3ј4ежу .на3ј4ец .на3ј4еда .на3ј4еди .на3ј4едн .на3ј4едр .на3ј4ести .на3ј4етк .на3ј4езд .на3ј4езн .на3ј4урен .на3ј4ури .на3т2ках .на3т2кам .на3т2касм .на3т2каст .наг2н .наг2њ .ну2с3пос .ну2с3про .ну2з3бел .ну2з3биљ .ну2з3љуб .ну2з3ре .ну2з3рје .ну2з3уж .о2б3игр .о2б3истин .о2б3истињ .о2б3ј .о2б3лај .о2б3лакш .о2б3лам .о2б3ласк .о2б3лећ .о2б3леж .о2б3леден .о2б3лег .о2б3леп .о2б3лет .о2б3лијеж .о2б3лијег .о2б3лијеп .о2б3лијет .о2б3лист .о2б3лив .о2б3лизат .о2б3лизав .о2б3лизи .о2б3љ .о2б3лока .о2б3луч .о2б3лук .о2б3ору .о2б3р .о2б3уж .о2б3убож .о2б3уд .о2б3уме .о2б3уми .о2б3умр .о2б3уз .о2д3жал .о2д3жаљ .о2д3же .о2д3жи .о2д3жв .о2д3арг .о2д3и2з3д .о2д3и2з3в .о2д3игр .о2д3иск .о2д3исти .о2д3ј .о2д3л .о2д3љ .о2д3ок .о2д3онд .о2д3онл .о2д3оно .о2д3ону .о2д3озд .о2д3озг .о2д3р .о2д3уч .о2д3ук .о2д3ул .о2д3ум .о2д3уве .о2д3уви .о2д3узд .о2д3узе .о2д3узи .о2д3узл .о2д3в .о3б4јеш .о3б4јек .о3б4јер .о3б4јеси .о3б4јет .о3б4љан .о3б4љут .о3б4љуз .о3б4рђ .о3б4рч .о3б4рш .о3б4раћ .о3б4рашч .о3б4рашн .о3б4раже .о3б4рамб .о3б4ран .о3б4рањ .о3б4рат .о3б4раза .о3б4разд .о3б4рази .о3б4разн .о3б4разо .о3б4разу .о3б4ређ .о3б4реч .о3б4реж .о3б4рец .о3б4ред .о3б4рем .о3б4рес .о3б4рети .о3б4ретн .о3б4рич .о3б4риц .о3б4риј .о3б4рис .о3б4рит .о3б4рив .о3б4рк .о3б4рл .о3б4рљ .о3б4рн .о3б4роћ .о3б4роч .о3б4рок .о3б4рон .о3б4рова .о3б4ровц .о3б4рс .о3б4руч .о3б4руш .о3б4рук .о3б4рун .о3б4рус .о3д4јећ .о3д4јен .о3д4јев .о3д4лаж .о3д4лаг .о3д4лака .о3д4лаз .о3д4луч .о3д4лук .о3д4рж .о3д4раћ .о3д4рачи .о3д4раж .о3д4рана .о3д4ране .о3д4рани .о3д4рано .о3д4рану .о3д4рапа .о3д4рапи .о3д4рапљ .о3д4раз .о3д4ређ .о3д4ред .о3д4рем .о3д4рен .о3д4рич .о3д4риш .о3д4риб .о3д4риц .о3д4рин .о3д4рињ .о3д4рл .о3д4рљ .о3д4рн .о3д4рон .о3д4роњ .о3д4рп .о3д4рт .о3д4руж .о3д4руг .о3д4рвеч .о3д4рвен .о3д4рвењ .о3д4важ .о3д4вај .о3д4веса .о3д4весн .о3д4вест .о3д4вић .о3д4викав .о3д4викн .о3д4вис .о3д4вој .о3т2ках .о3т2кам .о3т2касм .о3т2каст .обе2ш3ћ .обе2ш3ч .обе2с3ц .обе2с3к .обе2с3п .обе2с3т .обе2з3б .обе2з3д .обе2з3г .обе2з3ј .обе2з3л .обе2з3љ .обе2з3м .обе2з3н .обе2з3о .обе2з3р .обе2з3у .обе2з3в .обе3с4тан .обе3с4тиј .обе3с4тран .обе3з4нач .обе3з4нан .обе3з4нањ .обе3з4уб .обе3з4виј .од3г2н .од3м2н .ода3д2н .ода3г2н .по2д3адм .по2д3игр .по2д3изв .по2д3ј .по2д3лакат .по2д3лакт .по2д3лећ .по2д3леж .по2д3лег .по2д3леп .по2д3лет .по2д3лијећ .по2д3лијеж .по2д3лијег .по2д3лијеп .по2д3лијет .по2д3лист .по2д3лиз .по2д3љут .по2д3лок .по2д3лом .по2д3луч .по2д3луж .по2д3луп .по2д3оч .по2д3ош .по2д3оф .по2д3окн .по2д3ра2з3д .по2д3рад .по2д3рам .по2д3ран .по2д3рањ .по2д3рас .по2д3равн .по2д3равњ .по2д3разр .по2д3разу .по2д3реп .по2д3рес .по2д3рез .по2д3рик .по2д3рит .по2д3рож .по2д3рон .по2д3ров .по2д3руча .по2д3ручи .по2д3ручн .по2д3руб .по2д3рук .по2д3упла .по2д3усм .по2д3усн .по2д3вариј .по2д3веч .по2д3веж .по2д3вез .по2д3вик .по2д3вил .по2д3вир .по2д3влаш .по2д3влас .по2д3вођ .по2д3вож .по2д3вод .по2д3воз .по2д3врћ .по2д3врж .по2д3враћ .по2д3врат .по2д3врг .по2д3врис .по2д3врс .по2д3вућ .по2ст3егз .по2ст3инду .по2ст3лим .по2ст3онк .по2ст3опер .по3д2нев .по3д4јеч .по3д4јен .по3г2н .по3м2н .по3м2њ .по3р2ђ .по3т2ках .по3т2кам .по3т2кат .по3т2кав .пре2д3же .пре2д3жи .пре2д3ид .пре2д3игр .пре2д3испи .пре2д3исто .пре2д3истр .пре2д3изб .пре2д3ј .пре2д3обј .пре2д3одре .пре2д3окус .пре2д3осе .пре2д3осје .пре2д3осв .пре2д3рач .пре2д3рад .пре2д3рат .пре2д3руч .пре2д3убеђ .пре2д3убијеђ .пре2д3убјеђ .пре2д3удар .пре2д3угов .пре2д3упис .пре2д3усло .пре2д3увер .пре2д3увјер .пре2д3увјет .пре2д3в .пре3д4јен .пре3д4вај .пре3д4вар .пре3д4вест .пре3д4воја .пре3д4воје .пре3д4воји .пре3д4вор .пре3д4вос .пре3т2ках .пре3т2кам .пре3т2кат .пред3м2н .пред3м2њ .про3г2н .про3т2ка .про3т2ки .проти2в3акц .проти2в3оф .проти2в3отр .проти2в3р .проти2в3уд .проти2в3ус .р2 .ра2ш3ћ .ра2ш3ч .ра2ж3ђ .ра2с3ц .ра2с3к .ра2с3п .ра2с3т .ра2з3анал .ра2з3б .ра2з3д .ра2з3е .ра2з3г .ра2з3и .ра2з3л .ра2з3љ .ра2з3м .ра2з3н .ра2з3њ .ра2з3оба .ра2з3обл .ра2з3обр .ра2з3од .ра2з3орат .ра2з3орав .ра2з3орт .ра2з3ору .ра2з3от .ра2з3р .ра2з3уда .ра2з3удб .ра2з3уди .ра2з3улар .ра2з3умр .ра2з3уве .ра2з3узд .ра2з3узе .ра2з3узи .ра2з3в .ра3ш4ћењ .ра3ш4чић .ра3с4как .ра3с4канд .ра3с4кин .ра3с4клад .ра3с4клањ .ра3с4клап .ра3с4клон .ра3с4клопа .ра3с4клопи .ра3с4клопљ .ра3с4кош .ра3с4кроп .ра3с4пај .ра3с4пав .ра3с4пета .ра3с4пете .ра3с4пети .ра3с4пето .ра3с4пику .ра3с4пињ .ра3с4плин .ра3с4плињ .ра3с4пн .ра3с4полож .ра3с4пон .ра3с4пор .ра3с4прав .ра3с4прем .ра3с4рђ .ра3с4рд .ра3с4ре .ра3с4тај .ра3с4тан .ра3с4тат .ра3с4тав .ра3с4тењ .ра3с4тил .ра3с4тињ .ра3с4тир .ра3с4тис .ра3с4тит .ра3с4тој .ра3с4трел .ра3с4трет .ра3с4трој .ра3с4трт .ра3с4тућ .ра3с4туп .ра3с4тур .ра3з4башур .ра3з4бад .ра3з4бан .ра3з4бар .ра3з4бау .ра3з4бој .ра3з4бор .ра3з4ев .ра3з4гађ .ра3з4грт .ра3з4иђ .ра3з4ић .ра3з4ид .ра3з4иј .ра3з4ин .ра3з4ир .ра3з4из .ра3з4лаг .ра3з4лаз .ра3з4лич .ра3з4лик .ра3з4лож .ра3з4лог .ра3з4лоз .ра3з4мећ .ра3з4мет .ра3з4мрск .ра3з4нат .ра3з4ред .ра3з4роч .ра3з4рок .ра3з4вал .ра3з4веде .ра3з4вест .ра3з4вић .ра3з4виго .ра3з4вија .ра3з4вије .ра3з4вију .ра3з4вит .ра3з4вој .ра3з4вон .ра3з4врћ .ра3з4враћ .ра3з4врат .ра3з4врт .ра4с5турч .раз3д2ни .раз3г2н .раза3г2н .раза3т2ка .с2 .су2б3а .су2б3инв .су2б3јунк .су2б3л .су2б3окс .су2б3орд .су2б3реп .су2б3рог .су3б4аш .супе2р3а .супе2р3е .супе2р3и .супе2р3о .супе2р3у .супе3р4иор .тран2с3а .тран2с3ц .тран2с3е .тран2с3к .тран2с3л .тран2с3м .тран2с3н .тран2с3о .тран2с3п .тран2с3т .тран2с3у .тран2с3в .тран3с4еп .тран3с4кри .тран3с4уд .тран3с4ум .у2ш3ћ .у2ш3ч .у2с3ц .у2с3к .у2с3п .у2с3талас .у2с3тара .у2с3тећ .у2с3тег .у2с3тер .у2с3тов .у2с3трћ .у2с3трч .у2с3трај .у2с3трал .у2с3треб .у2с3треп .у2с3трес .у2с3трг .у2с3трк .у2с3трн .у2с3трп .у2с3тућ .у2с3тум .у2с3тур .у2с3тврђ .у2с3тврд .у2з3б .у2з3д .у2з3г .у2з3и .у2з3игр .у2з3инат .у2з3искр .у2з3л .у2з3љ .у2з3м .у2з3н .у2з3њ .у2з3обест .у2з3обијест .у2з3охо .у2з3орат .у2з3орав .у2з3р .у2з3угар .у2з3в .у3г2ми .у3г2н .у3с4как .у3с4клађ .у3с4клад .у3с4ко .у3с4куп .у3с4пало .у3с4пав .у3с4пеш .у3с4пех .у3с4пел .у3с4пем .у3с4пент .у3с4пет .у3с4пев .у3с4пија .у3с4пије .у3с4пијуш .у3с4пикуш .у3с4пјеш .у3с4пјех .у3с4пјел .у3с4пјем .у3с4пјет .у3с4пјев .у3с4пон .у3с4пора .у3с4пореч .у3с4порен .у3с4порењ .у3с4пори .у3с4пособ .у3с4према .у3с4преми .у3с4рђ .у3с4рж .у3с4ра .у3с4рд .у3с4ре .у3с4ријед .у3с4рк .у3с4рљ .у3с4рн .у3с4рп .у3з4бор .у3з4диц .у3з4лан .у3з4лат .у3з4лић .у3з4лиц .у3з4лим .у3з4лит .у3з4лов .у3з4лудоб .у3з4нач .у3з4нак .у3з4неве .у3з4невје .у3з4нич .у3з4ниц .у3з4ној .у3з4рет .у3з4рев .у3з4ријет .у3з4ријев .у3з4рн .у3з4рњ .у3з4роч .у3з4рока .у3з4роко .у3з4року .у3з4руј .у3з4ван .у3з4ват .у3з4виж .у3з4вија .у3з4вије .у3з4вијо .у3з4вију .у3з4вој .у4с5кош .у4с5коко .у4с5коле .у4с5колу .у4с5ком .у4с5копа .у4с5кора .у4с5коси .у4с5котр .у4с5ков .уза3т2ка .ва2н3евр .ва2н3устав .з2 .за3г2н .за3т2ка 2ђ1ђ 2ђ1ћ 2ђ1ч 2ђ1ш 2ђ1ж 2ђ1б 2ђ1ц 2ђ1д 2ђ1џ 2ђ1ф 2ђ1г 2ђ1х 2ђ1к 2ђ1љ 2ђ1м 2ђ1н 2ђ1р 2ђ1с 2ђ1з 2ћ1ђ 2ћ1ћ 2ћ1ч 2ћ1ш 2ћ1ж 2ћ1б 2ћ1ц 2ћ1д 2ћ1џ 2ћ1ф 2ћ1г 2ћ1х 2ћ1к 2ћ1љ 2ћ1м 2ћ1н 2ћ1р 2ћ1с 2ћ1з 2ч1ђ 2ч1ћ 2ч1ч 2ч1ш 2ч1ж 2ч1б 2ч1ц 2ч1д 2ч1џ 2ч1ф 2ч1г 2ч1х 2ч1ј 2ч1к 2ч1љ 2ч1м 2ч1н 2ч1р 2ч1с 2ч1т 2ч1з 2ч3вј 2ч3вл 2ч3вљ 2чв. 2ш1ђ 2ш1ш 2ш1ж 2ш1б 2ш1д 2ш1џ 2ш1ф 2ш1г 2ш1х 2ш1ј 2ш1р 2ш1с 2ш1з 2ш3чв 2ш3цј 2ш3цв 2ш3мј 2ш3мл 2ш3мљ 2ш3пј 2ш3пл 2ш3пљ 2ш3тј 2ш3тл 2ш3тљ 2ш3вл 2ш3вљ 2шћ. 2шч. 2шчћ 2шчч 2шчш 2шчж 2шчб 2шчц 2шчд 2шчџ 2шчф 2шчг 2шчх 2шчј 2шчк 2шчљ 2шчм 2шчн 2шчр 2шчс 2шчт 2шчз 2шц. 2шцћ 2шцч 2шцш 2шцж 2шцб 2шцц 2шцд 2шцџ 2шцф 2шцг 2шцх 2шцк 2шцљ 2шцм 2шцн 2шцр 2шцс 2шцт 2шцз 2шк. 2шкђ 2шкћ 2шкч 2шкш 2шкж 2шкб 2шкц 2шкд 2шкџ 2шкф 2шкг 2шкх 2шкк 2шкм 2шкн 2шкс 2шкт 2шкз 2шљ. 2шм. 2шмђ 2шмч 2шмш 2шмж 2шмб 2шмц 2шмд 2шмџ 2шмф 2шмг 2шмх 2шмк 2шмм 2шмн 2шмс 2шмт 2шмз 2шн. 2шп. 2шпђ 2шпч 2шпш 2шпж 2шпб 2шпц 2шпд 2шпџ 2шпф 2шпг 2шпх 2шпк 2шпм 2шпн 2шпс 2шпт 2шпз 2шт. 2штђ 2штч 2штш 2штж 2штб 2штц 2штд 2штџ 2штф 2штг 2штх 2штк 2штм 2штн 2штс 2штт 2штз 2шв. 2швђ 2швч 2швш 2швж 2швб 2швц 2швд 2швџ 2швф 2швг 2швх 2швк 2швм 2швн 2швс 2швт 2швз 2ж1ћ 2ж1ч 2ж1ш 2ж1ж 2ж1ц 2ж1џ 2ж1ф 2ж1х 2ж1ј 2ж1к 2ж1р 2ж1с 2ж1т 2ж1з 2ж3бј 2ж3бл 2ж3бљ 2ж3бр 2ж3дј 2ж3дл 2ж3дљ 2ж3дв 2ж3гј 2ж3гл 2ж3гљ 2ж3гр 2ж3гв 2ж3мј 2ж3мл 2ж3мљ 2ж3мр 2ж3вл 2ж3вљ 2жђ. 2жб. 2жбђ 2жбч 2жбш 2жбж 2жбб 2жбц 2жбд 2жбџ 2жбф 2жбг 2жбх 2жбк 2жбм 2жбн 2жбс 2жбт 2жбз 2жд. 2ждч 2ждш 2ждб 2ждц 2ждд 2ждџ 2ждф 2ждг 2ждх 2ждк 2ждм 2ждн 2ждс 2ждт 2ждз 2жг. 2жгч 2жгш 2жгж 2жгб 2жгц 2жгд 2жгџ 2жгф 2жгг 2жгх 2жгк 2жгм 2жгн 2жгс 2жгт 2жгз 2жл. 2жљ. 2жм. 2жмђ 2жмч 2жмш 2жмж 2жмб 2жмц 2жмд 2жмџ 2жмф 2жмг 2жмх 2жмк 2жмм 2жмн 2жмс 2жмт 2жмз 2жн. 2жњ. 2жвђ 2жвч 2жвш 2жвж 2жвб 2жвц 2жвд 2жвџ 2жвф 2жвг 2жвх 2жвк 2жвм 2жвн 2жвс 2жвт 2жвз 2а1 2б1ђ 2б1ћ 2б1ч 2б1ш 2б1ж 2б1б 2б1ц 2б1д 2б1џ 2б1ф 2б1г 2б1х 2б1к 2б1м 2б1н 2б1с 2б1т 2б1з 2бј. 2бл. 2бљ. 2бр. 2ц1ђ 2ц1ћ 2ц1ч 2ц1ш 2ц1ж 2ц1б 2ц1ц 2ц1д 2ц1џ 2ц1ф 2ц1г 2ц1х 2ц1к 2ц1љ 2ц1м 2ц1н 2ц1с 2ц1т 2ц1з 2ц3вл 2ц3вљ 2цј. 2цр. 2цв. 2д1ђ 2д1ћ 2д1ч 2д1ш 2д1б 2д1ц 2д1д 2д1џ 2д1ф 2д1г 2д1х 2д1к 2д1м 2д1н 2д1с 2д1т 2д1з 2д3вл 2д3вљ 2д3вр 2џ1ђ 2џ1ћ 2џ1ч 2џ1ш 2џ1ж 2џ1б 2џ1ц 2џ1д 2џ1џ 2џ1ф 2џ1г 2џ1х 2џ1ј 2џ1к 2џ1љ 2џ1м 2џ1н 2џ1р 2џ1с 2џ1т 2џ1з 2џ. 2дј. 2дл. 2дљ. 2др. 2дв. 2е1 2ф1ђ 2ф1ћ 2ф1ч 2ф1ш 2ф1ж 2ф1б 2ф1ц 2ф1д 2ф1џ 2ф1ф 2ф1г 2ф1х 2ф1к 2ф1м 2ф1н 2ф1с 2ф1т 2ф1з 2фј. 2фл. 2фљ. 2фр. 2г1ђ 2г1ћ 2г1ч 2г1ш 2г1ж 2г1б 2г1ц 2г1д 2г1џ 2г1ф 2г1г 2г1х 2г1к 2г1м 2г1н 2г1с 2г1т 2г1з 2г3вј 2г3вл 2г3вљ 2г3вр 2гј. 2гл. 2гљ. 2гр. 2гв. 2х1ђ 2х1ћ 2х1ч 2х1ш 2х1ж 2х1б 2х1ц 2х1д 2х1џ 2х1ф 2х1г 2х1х 2х1к 2х1м 2х1н 2х1с 2х1т 2х1з 2х3вј 2х3вл 2х3вљ 2х3вр 2хј. 2хл. 2хљ. 2хр. 2хв. 2хвђ 2хвч 2хвш 2хвж 2хвб 2хвц 2хвд 2хвџ 2хвф 2хвг 2хвх 2хвк 2хвм 2хвн 2хвс 2хвт 2хвз 2и1 2ј1ђ 2ј1ћ 2ј1ч 2ј1ш 2ј1ж 2ј1б 2ј1ц 2ј1д 2ј1џ 2ј1ф 2ј1г 2ј1х 2ј1ј 2ј1к 2ј1љ 2ј1м 2ј1н 2ј1р 2ј1с 2ј1т 2ј1з 2к1ђ 2к1ћ 2к1ч 2к1ш 2к1ж 2к1б 2к1ц 2к1д 2к1џ 2к1ф 2к1г 2к1х 2к1к 2к1м 2к1н 2к1с 2к1т 2к1з 2к3вј 2к3вл 2к3вљ 2кј. 2кл. 2кљ. 2кр. 2кв. 2љ1ђ 2љ1ћ 2љ1ч 2љ1ш 2љ1ж 2љ1б 2љ1ц 2љ1д 2љ1џ 2љ1ф 2љ1г 2љ1х 2љ1ј 2љ1к 2љ1љ 2љ1м 2љ1н 2љ1р 2љ1с 2љ1т 2љ1з 2м1ђ 2м1ћ 2м1ч 2м1ш 2м1ж 2м1б 2м1ц 2м1д 2м1џ 2м1ф 2м1г 2м1х 2м1к 2м1м 2м1н 2м1с 2м1т 2м1з 2мј. 2мл. 2мљ. 2мр. 2н1ђ 2н1ћ 2н1ч 2н1ш 2н1ж 2н1б 2н1ц 2н1д 2н1џ 2н1ф 2н1г 2н1х 2н1к 2н1љ 2н1м 2н1н 2н1р 2н1с 2н1т 2н1з 2о1 2пј. 2пл. 2пљ. 2пр. 2р1ђ 2р1ћ 2р1ч 2р1ш 2р1ж 2р1б 2р1ц 2р1д 2р1џ 2р1ф 2р1г 2р1х 2р1ј 2р1к 2р1љ 2р1м 2р1н 2р1р 2р1с 2р1т 2р1з 2с1ђ 2с1ћ 2с1ч 2с1ш 2с1ж 2с1б 2с1д 2с1џ 2с1ф 2с1г 2с1х 2с1с 2с1з 2с3кј 2с3кљ 2с3тл 2с3вљ 2сц. 2сцђ 2сцћ 2сцч 2сцш 2сцж 2сцб 2сцц 2сцд 2сцџ 2сцф 2сцг 2сцх 2сцк 2сцљ 2сцм 2сцн 2сцр 2сцс 2сцт 2сцз 2сј. 2ск. 2скђ 2скћ 2скч 2скш 2скж 2скб 2скц 2скд 2скџ 2скф 2скг 2скх 2скк 2скм 2скн 2скс 2скт 2скз 2сл. 2сљ. 2см. 2смђ 2смћ 2смч 2смш 2смж 2смб 2смц 2смд 2смџ 2смф 2смг 2смх 2смк 2смм 2смн 2смс 2смт 2смз 2сн. 2сњ. 2сп. 2спђ 2спћ 2спч 2спш 2спж 2спб 2спц 2спд 2спџ 2спф 2спг 2спх 2спк 2спм 2спн 2спп 2спс 2спт 2спв 2спз 2ср. 2ст. 2стђ 2стћ 2стч 2стш 2стж 2стб 2стц 2стд 2стџ 2стф 2стг 2стх 2стк 2стм 2стн 2стп 2стс 2стт 2стз 2св. 2свђ 2свћ 2свч 2свш 2свж 2свб 2свц 2свд 2свџ 2свф 2свг 2свх 2свк 2свм 2свн 2свп 2свс 2свт 2свв 2свз 2т1ђ 2т1ћ 2т1ч 2т1ш 2т1ж 2т1б 2т1ц 2т1д 2т1џ 2т1ф 2т1г 2т1х 2т1к 2т1м 2т1н 2т1п 2т1с 2т1т 2т1з 2т3вј 2т3вл 2т3вљ 2тј. 2тл. 2тљ. 2тр. 2тв. 2у1 2в1ђ 2в1ћ 2в1ч 2в1ш 2в1ж 2в1б 2в1ц 2в1д 2в1џ 2в1ф 2в1г 2в1х 2в1к 2в1м 2в1н 2в1п 2в1с 2в1т 2в1в 2в1з 2вј. 2вл. 2вљ. 2вр. 2з1ђ 2з1ћ 2з1ч 2з1ш 2з1ж 2з1ц 2з1џ 2з1ф 2з1х 2з1к 2з1п 2з1с 2з1з 2з3бљ 2з3дл 2з3дљ 2з3дв 2з3гј 2з3гљ 2з3мл 2з3мр 2з3вл 2з3вљ 2зб. 2збђ 2збћ 2збч 2збш 2збж 2збб 2збц 2збд 2збџ 2збф 2збг 2збх 2збк 2збм 2збн 2збп 2збс 2збв 2збз 2зд. 2здђ 2здћ 2здч 2здш 2здб 2здц 2здд 2здџ 2здф 2здг 2здх 2здк 2здм 2здн 2здп 2здс 2здз 2зг. 2згђ 2згћ 2згч 2згж 2згб 2згц 2згд 2згџ 2згф 2згг 2згх 2згк 2згм 2згн 2згп 2згс 2згз 2зј. 2зл. 2зљ. 2зм. 2змђ 2змћ 2змч 2змш 2змж 2змб 2змц 2змд 2змџ 2змф 2змг 2змх 2змк 2змм 2змн 2змп 2змс 2змв 2змз 2зн. 2зњ. 2зр. 2зв. 2звђ 2звћ 2звч 2звш 2звж 2звб 2звц 2звд 2звџ 2звф 2звг 2звх 2звк 2звм 2звн 2звп 2звс 2звв 2звз 3ч2лан 3ч2лањ 3б2дењ 3б2дет 3б2дјењ 3б2дјет 3ц2мач 3ц2мак 3ц2миз 3ц2мок 3г2дегод. 3г2декад 3г2декак 3г2дјегод. 3г2дјекад 3г2дјекак 3г2мил 3г2миљ 3г2миз 3г2нај 3г2нежђ 3г2нев 3г2незд 3г2нијежђ 3г2нијезд 3г2њав 3г2њеч 3г2њес 3г2њет 3г2њев 3г2њил 3г2њиљ 3г2њио 3г2њит 3г2њур 3г2ној 3г2нос 3г2ноз 3х2тел 3х2тењ 3х2тети 3х2тев 3х2тјел 3х2тјењ 3х2тјети 3х2тјев 3к2неж 3к2нез 3к2њиж 3к2њиг 3м2наж 3м2нож 3м2ног 3п2сич 3п2сик 3п2сов 3п2суј 3р2ђа 3с2фер 3т2маст 3т2мул 3т2муљ 3т2муо 3т2мур 4р3је. 4р3јем ч2в ш2ч ш2л ш2љ ш2м ш2н ш2п ш2т ш2в ж2ђ ж2б ж2д ж2г ж2л ж2љ ж2м ж2н ж2в а3а а3е а3и а3о а3у б2ј б2л б2љ б2р ц2ј ц2р ц2в д2ж д2ј д2л д2љ д2р д2в е3а е3е е3и е3о е3у ф2ј ф2л ф2љ ф2р г2л г2љ г2р г2в х2л х2љ х2р х2в и3а и3е и3и и3о и3у к2л к2љ к2р к2в л2ј м2л м2љ м2р не3г2де. не3г2дје. ни3г2де. ни3г2дје. о3а о3е о3и о3о о3у п2ј п2л п2љ п2р с2ц с2к с2л с2љ с2м с2н с2п с2р с2в т2ј т2л т2в у3а у3е у3и у3о у3у в2л в2љ в2р з2б з2д з2г з2ј з2л з2љ з2м з2н з2р з2в", + ["characters"]="abcdefghijklmnoprstuvzćčđšžабвгдежзиклмнопрстуфхцчшђјљњћџ", + ["data"]="т2ј т2л т2љ т2р т2в д2ј д2л д2љ д2р д2в г2ј г2л г2љ г2р г2в х2ј х2л х2љ х2р х2в к2ј к2л к2љ к2р к2в 2д1ж 2д1б 2д1ц 2д1д 2д1ф 2д1г 2д1х 2д1к 2д1м 2д1н 2д1п 2д1с 2д1т 2д1њ 2д1џ 2д1з 2д1ш 2д1ђ 2д1ћ 2д1ч 2г1ж 2г1б 2г1ц 2г1д 2г1ф 2г1г 2г1х 2г1к 2г1м 2г1н 2г1п 2г1с 2г1т 2г1њ 2г1џ 2г1з 2г1ш 2г1ђ 2г1ћ 2г1ч 2х1ж 2х1б 2х1ц 2х1д 2х1ф 2х1г 2х1х 2х1к 2х1м 2х1н 2х1п 2х1с 2х1т 2х1њ 2х1џ 2х1з 2х1ш 2х1ђ 2х1ћ 2х1ч 2к1ж 2к1б 2к1ц 2к1д 2к1ф 2к1г 2к1х 2к1к 2к1м 2к1н 2к1п 2к1с 2к1т 2к1њ 2к1џ 2к1з 2к1ш 2к1ђ 2к1ћ 2к1ч 2т1ж 2т1б 2т1ц 2т1д 2т1ф 2т1г 2т1х 2т1к 2т1м 2т1н 2т1п 2т1с 2т1т 2т1њ 2т1џ 2т1з 2т1ш 2т1ђ 2т1ћ 2т1ч 2дј. 2дл. 2дљ. 2др. 2дв. 2гј. 2гл. 2гљ. 2гр. 2гв. 2хј. 2хл. 2хљ. 2хр. 2хв. 2кј. 2кл. 2кљ. 2кр. 2кв. 2тј. 2тл. 2тљ. 2тр. 2тв. п2ј п2л п2љ п2р в2ј в2л в2љ в2р б2ј б2л б2љ б2р ф2ј ф2л ф2љ ф2р м2ј м2л м2љ м2р 2б1ж 2б1б 2б1ц 2б1д 2б1ф 2б1г 2б1х 2б1к 2б1м 2б1н 2б1п 2б1с 2б1т 2б1в 2б1њ 2б1џ 2б1з 2б1ш 2б1ђ 2б1ћ 2б1ч 2ф1ж 2ф1б 2ф1ц 2ф1д 2ф1ф 2ф1г 2ф1х 2ф1к 2ф1м 2ф1н 2ф1п 2ф1с 2ф1т 2ф1в 2ф1њ 2ф1џ 2ф1з 2ф1ш 2ф1ђ 2ф1ћ 2ф1ч 2м1ж 2м1б 2м1ц 2м1д 2м1ф 2м1г 2м1х 2м1к 2м1м 2м1н 2м1п 2м1с 2м1т 2м1в 2м1њ 2м1џ 2м1з 2м1ш 2м1ђ 2м1ћ 2м1ч 2п1ж 2п1б 2п1ц 2п1д 2п1ф 2п1г 2п1х 2п1к 2п1м 2п1н 2п1п 2п1с 2п1т 2п1в 2п1њ 2п1џ 2п1з 2п1ш 2п1ђ 2п1ћ 2п1ч 2в1ж 2в1б 2в1ц 2в1д 2в1ф 2в1г 2в1х 2в1к 2в1м 2в1н 2в1п 2в1с 2в1т 2в1в 2в1њ 2в1џ 2в1з 2в1ш 2в1ђ 2в1ћ 2в1ч 2бј. 2бл. 2бљ. 2бр. 2фј. 2фл. 2фљ. 2фр. 2мј. 2мл. 2мљ. 2мр. 2пј. 2пл. 2пљ. 2пр. 2вј. 2вл. 2вљ. 2вр. с2ц с2ј с2к с2л с2м с2н с2п с2љ с2р с2т с2в с2њ 2с1ж 2с1б 2с1д 2с1ф 2с1г 2с1х 2с1с 2с1џ 2с1з 2с1ш 2с1ђ 2с1ћ 2с1ч 2сј. 2ск. 2сл. 2см. 2сн. 2сп. 2сљ. 2ср. 2ст. 2св. 2сњ. 2сц. з2б з2д з2г з2ј з2л з2м з2н з2љ з2р з2в з2њ 2з1ж 2з1ц 2з1ф 2з1х 2з1к 2з1п 2з1с 2з1т 2з1џ 2з1з 2з1ш 2з1ђ 2з1ћ 2з1ч 2зј. 2зл. 2зм. 2зн. 2зљ. 2зр. 2зв. 2зњ. 2зб. 2зд. 2зг. ш2ц ш2к ш2л ш2м ш2н ш2п ш2љ ш2т ш2в ш2њ ш2ћ ш2ч 2ш1ж 2ш1б 2ш1д 2ш1ф 2ш1г 2ш1х 2ш1с 2ш1џ 2ш1з 2ш1ш 2ш1ђ 2ш1ј 2ш1р 2шк. 2шл. 2шм. 2шн. 2шп. 2шљ. 2шт. 2шв. 2шњ. 2шћ. 2шч. 2шц. ж2б ж2д ж2г ж2л ж2м ж2н ж2љ ж2в ж2њ ж2ђ 2ж1ж 2ж1ц 2ж1ф 2ж1х 2ж1к 2ж1п 2ж1с 2ж1т 2ж1џ 2ж1з 2ж1ш 2ж1ћ 2ж1ч 2ж1ј 2ж1р 2жл. 2жм. 2жн. 2жљ. 2жв. 2жњ. 2жђ. 2жб. 2жд. 2жг. ц2ј ц2р ц2в 2ц1ж 2ц1б 2ц1ц 2ц1д 2ц1ф 2ц1г 2ц1х 2ц1к 2ц1л 2ц1м 2ц1н 2ц1п 2ц1љ 2ц1с 2ц1т 2ц1њ 2ц1џ 2ц1з 2ц1ш 2ц1ђ 2ц1ћ 2ц1ч 2цј. 2цр. 2цв. ч2в 2ч1ж 2ч1б 2ч1ц 2ч1д 2ч1ф 2ч1г 2ч1х 2ч1ј 2ч1к 2ч1л 2ч1м 2ч1н 2ч1п 2ч1љ 2ч1р 2ч1с 2ч1т 2ч1њ 2ч1џ 2ч1з 2ч1ш 2ч1ђ 2ч1ћ 2ч1ч 2чв. 2ј1ж 2ј1б 2ј1ц 2ј1д 2ј1ф 2ј1г 2ј1х 2ј1ј 2ј1к 2ј1л 2ј1м 2ј1н 2ј1п 2ј1љ 2ј1р 2ј1с 2ј1т 2ј1в 2ј1њ 2ј1џ 2ј1з 2ј1ш 2ј1ђ 2ј1ћ 2ј1ч 2л1ж 2л1б 2л1ц 2л1д 2л1ф 2л1г 2л1х 2л1ј 2л1к 2л1л 2л1м 2л1н 2л1п 2л1љ 2л1р 2л1с 2л1т 2л1в 2л1њ 2л1џ 2л1з 2л1ш 2л1ђ 2л1ћ 2л1ч 2н1ж 2н1б 2н1ц 2н1д 2н1ф 2н1г 2н1х 2н1ј 2н1к 2н1л 2н1м 2н1н 2н1п 2н1љ 2н1р 2н1с 2н1т 2н1в 2н1њ 2н1џ 2н1з 2н1ш 2н1ђ 2н1ћ 2н1ч 2љ1ж 2љ1б 2љ1ц 2љ1д 2љ1ф 2љ1г 2љ1х 2љ1ј 2љ1к 2љ1л 2љ1м 2љ1н 2љ1п 2љ1љ 2љ1р 2љ1с 2љ1т 2љ1в 2љ1њ 2љ1џ 2љ1з 2љ1ш 2љ1ђ 2љ1ћ 2љ1ч 2р1ж 2р1б 2р1ц 2р1д 2р1ф 2р1г 2р1х 2р1ј 2р1к 2р1л 2р1м 2р1н 2р1п 2р1љ 2р1р 2р1с 2р1т 2р1в 2р1њ 2р1џ 2р1з 2р1ш 2р1ђ 2р1ћ 2р1ч 2њ1ж 2њ1б 2њ1ц 2њ1д 2њ1ф 2њ1г 2њ1х 2њ1ј 2њ1к 2њ1л 2њ1м 2њ1н 2њ1п 2њ1љ 2њ1р 2њ1с 2њ1т 2њ1в 2њ1њ 2њ1џ 2њ1з 2њ1ш 2њ1ђ 2њ1ћ 2њ1ч 2џ1ж 2џ1б 2џ1ц 2џ1д 2џ1ф 2џ1г 2џ1х 2џ1ј 2џ1к 2џ1л 2џ1м 2џ1н 2џ1п 2џ1љ 2џ1р 2џ1с 2џ1т 2џ1в 2џ1њ 2џ1џ 2џ1з 2џ1ш 2џ1ђ 2џ1ћ 2џ1ч 2ђ1ж 2ђ1б 2ђ1ц 2ђ1д 2ђ1ф 2ђ1г 2ђ1х 2ђ1ј 2ђ1к 2ђ1л 2ђ1м 2ђ1н 2ђ1п 2ђ1љ 2ђ1р 2ђ1с 2ђ1т 2ђ1в 2ђ1њ 2ђ1џ 2ђ1з 2ђ1ш 2ђ1ђ 2ђ1ћ 2ђ1ч 2ћ1ж 2ћ1б 2ћ1ц 2ћ1д 2ћ1ф 2ћ1г 2ћ1х 2ћ1ј 2ћ1к 2ћ1л 2ћ1м 2ћ1н 2ћ1п 2ћ1љ 2ћ1р 2ћ1с 2ћ1т 2ћ1в 2ћ1њ 2ћ1џ 2ћ1з 2ћ1ш 2ћ1ђ 2ћ1ћ 2ћ1ч .х2 .ј2 .к2 .л2 .м2 .н2 .п2 .љ2 .р2 .с2 .т2 .в2 .њ2 .џ2 .з2 .ш2 .ђ2 .ћ2 .ч2 .ж2 .б2 .ц2 .д2 .ф2 .г2 о3а о3е о3и о3о о3у у3а у3е у3и у3о у3у а3а а3е а3и а3о а3у е3а е3е е3и е3о е3у и3а и3е и3и и3о и3у 2а1 2е1 2и1 2о1 2у1 2скб 2скц 2скд 2скф 2скг 2скх 2скк 2скм 2скн 2скп 2скс 2скт 2скњ 2скџ 2скз 2скш 2скђ 2скћ 2скч 2скж 2стб 2стц 2стд 2стф 2стг 2стх 2стк 2стм 2стн 2стп 2стс 2стт 2стњ 2стџ 2стз 2стш 2стђ 2стћ 2стч 2стж 2шкб 2шкц 2шкд 2шкф 2шкг 2шкх 2шкк 2шкм 2шкн 2шкп 2шкс 2шкт 2шкњ 2шкџ 2шкз 2шкш 2шкђ 2шкћ 2шкч 2шкж 2штб 2штц 2штд 2штф 2штг 2штх 2штк 2штм 2штн 2штп 2штс 2штт 2штњ 2штџ 2штз 2штш 2штђ 2штћ 2штч 2штж 2спб 2спц 2спд 2спф 2спг 2спх 2спк 2спм 2спн 2спп 2спс 2спт 2спв 2спњ 2спџ 2спз 2спш 2спђ 2спћ 2спч 2спж 2свб 2свц 2свд 2свф 2свг 2свх 2свк 2свм 2свн 2свп 2свс 2свт 2свв 2свњ 2свџ 2свз 2свш 2свђ 2свћ 2свч 2свж 2шпб 2шпц 2шпд 2шпф 2шпг 2шпх 2шпк 2шпм 2шпн 2шпп 2шпс 2шпт 2шпв 2шпњ 2шпџ 2шпз 2шпш 2шпђ 2шпћ 2шпч 2шпж 2швб 2швц 2швд 2швф 2швг 2швх 2швк 2швм 2швн 2швп 2швс 2швт 2швв 2швњ 2швџ 2швз 2швш 2швђ 2швћ 2швч 2швж 2ждб 2ждц 2ждд 2ждф 2ждг 2ждх 2ждк 2ждм 2ждн 2ждп 2ждс 2ждт 2ждњ 2ждџ 2ждз 2ждш 2ждђ 2ждћ 2ждч 2ждж 2жгб 2жгц 2жгд 2жгф 2жгг 2жгх 2жгк 2жгм 2жгн 2жгп 2жгс 2жгт 2жгњ 2жгџ 2жгз 2жгш 2жгђ 2жгћ 2жгч 2жгж 2здб 2здц 2здд 2здф 2здг 2здх 2здк 2здм 2здн 2здп 2здс 2здт 2здњ 2здџ 2здз 2здш 2здђ 2здћ 2здч 2здж 2згб 2згц 2згд 2згф 2згг 2згх 2згк 2згм 2згн 2згп 2згс 2згт 2згњ 2згџ 2згз 2згш 2згђ 2згћ 2згч 2згж 2жвб 2жвц 2жвд 2жвф 2жвг 2жвх 2жвк 2жвм 2жвн 2жвп 2жвс 2жвт 2жвв 2жвњ 2жвџ 2жвз 2жвш 2жвђ 2жвћ 2жвч 2жвж 2жбб 2жбц 2жбд 2жбф 2жбг 2жбх 2жбк 2жбм 2жбн 2жбп 2жбс 2жбт 2жбв 2жбњ 2жбџ 2жбз 2жбш 2жбђ 2жбћ 2жбч 2жбж 2звб 2звц 2звд 2звф 2звг 2звх 2звк 2звм 2звн 2звп 2звс 2звт 2звв 2звњ 2звџ 2звз 2звш 2звђ 2звћ 2звч 2звж 2збб 2збц 2збд 2збф 2збг 2збх 2збк 2збм 2збн 2збп 2збс 2збт 2збв 2збњ 2збџ 2збз 2збш 2збђ 2збћ 2збч 2збж 2жмб 2жмц 2жмд 2жмф 2жмг 2жмх 2жмк 2жмм 2жмн 2жмп 2жмс 2жмт 2жмв 2жмњ 2жмџ 2жмз 2жмш 2жмђ 2жмћ 2жмч 2жмж 2смб 2смц 2смд 2смф 2смг 2смх 2смк 2смм 2смн 2смп 2смс 2смт 2смв 2смњ 2смџ 2смз 2смш 2смђ 2смћ 2смч 2смж 2змб 2змц 2змд 2змф 2змг 2змх 2змк 2змм 2змн 2змп 2змс 2змт 2змв 2змњ 2змџ 2змз 2змш 2змђ 2змћ 2змч 2змж 2шмб 2шмц 2шмд 2шмф 2шмг 2шмх 2шмк 2шмм 2шмн 2шмп 2шмс 2шмт 2шмв 2шмњ 2шмџ 2шмз 2шмш 2шмђ 2шмћ 2шмч 2шмж 2сцб 2сцц 2сцд 2сцф 2сцг 2сцх 2сцк 2сцл 2сцм 2сцн 2сцп 2сцљ 2сцр 2сцс 2сцт 2сцњ 2сцџ 2сцз 2сцш 2сцђ 2сцћ 2сцч 2сцж 2шцб 2шцц 2шцд 2шцф 2шцг 2шцх 2шцк 2шцл 2шцм 2шцн 2шцп 2шцљ 2шцр 2шцс 2шцт 2шцњ 2шцџ 2шцз 2шцш 2шцђ 2шцћ 2шцч 2шцж 2шчб 2шчц 2шчд 2шчф 2шчг 2шчх 2шчј 2шчк 2шчл 2шчм 2шчн 2шчп 2шчљ 2шчр 2шчс 2шчт 2шчњ 2шчџ 2шчз 2шчш 2шчђ 2шчћ 2шчч 2шчж 2хвб 2хвц 2хвд 2хвф 2хвг 2хвх 2хвк 2хвм 2хвн 2хвп 2хвс 2хвт 2хвњ 2хвџ 2хвз 2хвш 2хвђ 2хвћ 2хвч 2хвж 2ж3вл 2ж3вљ 2ц3вл 2ц3вљ 2з3вл 2з3вљ 2ш3вл 2ш3вљ 2ч3вл 2ч3вљ 2ч3вј 2с3вљ 2д3вл 2д3вљ 2д3вр 2к3вј 2к3вл 2к3вљ 2т3вј 2т3вл 2т3вљ 2г3вј 2г3вл 2г3вљ 2г3вр 2х3вј 2х3вл 2х3вљ 2х3вр 2ж3мј 2ж3мл 2ж3мљ 2ж3мр 2з3мл 2з3мр 2ш3мј 2ш3мл 2ш3мљ 2ш3цј 2ш3цв 2ш3чв 2ш3тј 2ш3тл 2ш3тљ 2с3тл 2с3кј 2с3кљ 2ш3пј 2ш3пл 2ш3пљ 2ж3дј 2ж3дл 2ж3дљ 2ж3дв 2ж3гј 2ж3гл 2ж3гљ 2ж3гр 2ж3гв 2з3дл 2з3дљ 2з3дв 2з3гј 2з3гљ 2ж3бј 2ж3бл 2ж3бљ 2ж3бр 2з3бљ .а4е2ро .бе4о .би4о .ге4о .за3г2н .за3т2ка .иза3г2н .иза3т2к .из3г2н .изд2но .изд2ну .изд2на .изр2к .ист2к .наг2н .наг2њ .на3д2нев .на3д2нич .на3д2ниц .на3т2ках .на3т2кам .на3т2касм .на3т2каст .ода3г2н .ода3д2н .од3г2н .од3м2н .о3т2ках .о3т2кам .о3т2касм .о3т2каст .по3г2н .по3д2нев .по3м2н .по3м2њ .по3р2в .по3р2ђ .по3т2ках .по3т2кам .по3т2кат .по3т2кав .пред3м2н .пред3м2њ .пре3т2ках .пре3т2кам .пре3т2кат .про3г2н .про3т2ки .про3т2ка .раза3г2н .раз3г2н .раз3д2ни .раза3т2ка .у3г2ми .у3г2н .уза3т2ка 3х2тети 3х2тјети 3х2тел 3х2тев 3х2тењ 3х2тјел 3х2тјев 3х2тјењ 3г2дегод. 3г2дјегод. 3г2декак 3г2декад 3г2дјекак 3г2дјекад ни3г2де. не3г2де. ни3г2дје. не3г2дје. 3б2дет 3б2дењ 3б2дјет 3б2дјењ 3г2мил 3г2миљ 3г2миз 3г2нос 3г2ноз 3г2ној 3г2нај 3г2незд 3г2нијезд 3г2нежђ 3г2нијежђ 3г2нев 3г2њев 3г2њав 3г2њес 3г2њет 3г2њеч 3г2њил 3г2њио 3г2њиљ 3г2њит 3г2њур 3к2нез 3к2неж 3к2њиж 3к2њиг 3м2нож 3м2ног 3м2наж 3п2сик 3п2сич 3п2сов 3п2суј 3р2ђа 3с2фер 3т2маст 3т2мул 3т2муо 3т2муљ 3т2мур 3ц2миз 3ц2мак 3ц2мач 3ц2мок 3ч2лан 3ч2лањ 3р2је 4р3јем 4р3је. .бе2з3ј .бе2з3л .бе2з3м .бе2з3н .бе2з3љ .бе2з3р .бе2з3в .бе2з3њ .бе2з3б .бе2з3д .бе2з3г .бе2з3и .бе2з3о .бе2з3у .бе2з3алкохол .бе2з3атомск .бе3з4бедн .бе3з4беда .бе3з4бједн .бе3з4бједа .бе3з4бели .бе3з4бол .бе3з4вучн .бе3з4вуча .бе3з4истан .бе3з4истен .бе3з4јак .бе3з4јач .бе3з4лобн .бе3з4лоба .бе3з4начај .бе3з4рачн .бе3з4рача .бе3з4уп .бе3з4уб .бе2с3ц .бе2с3к .бе2с3п .бе2с3т .бе3с4крупул .бе3с4покојн .бе3с4покоја .бе3с4порн .бе3с4пора .бе3с4твар .бе3с4тид .бе3с4тија .бе3с4тилу .бе3с4тиљ .бе3с4трана .бе3с4трас .бес4тселер .бе2ш3ћ .бе2ш3ч .ва2н3евр .ва2н3устав .и2з3б .и2з3д .и2з3г .и2з3ј .и2з3л .и2з3м .и2з3н .и2з3љ .и2з3р .и2з3в .и2з3њ .и2з3и .и2з3о .и2з3у .и2з3бија .и2з3бива .и2з3веди .и2з3ведн .и2з3ведб .и2з3веде .и2з3дај .и2з3аба .и2з3ака .и2з3анал .и3з4бав .и3з4бичкава .и3з4блеушан .и3з4бојак .и3з4бојк .и3з4вали .и3з4валу .и3з4вала .и3з4вале .и3з4ваљи .и3з4вижд .и3з4виискр .и3з4вија .и3з4вијен .и3з4вин .и3з4вир .и3з4вињ .и3з4витоп .и3з4вјед .и3з4војац .и3з4војц .и3з4вор .и3з4гомет .и3з4гред .и3з4грн .и3з4грт .и3з4драв .и3з4иђ .и3з4ид .и3з4ими .и3з4јежљ .и3з4лоз .и3з4лож .и3з4лог .и3з4лопаћ .и3з4ним .и3з4ној .из4оанем .из4оаном .из4обат .из4оброн .из4огам .из4огео .из4оглос .из4огон .из4ограф .из4одим .из4один .из4одоз .из4оклин .из4околон .и3з4олат .и3з4олац .и3з4олир .и3з4олов .из4олекс .из4олукс .из4омер .из4ометр .из4оморф .из4онеф .из4оном .из4опат .из4опер .из4опле .из4опол .из4опсеф .из4орах .из4осеи .из4осинт .из4осист .из4оскел .из4оскоп .из4остаз .из4осте .из4отах .из4отал .из4отер .из4отон .из4отоп .из4отро .из4офон .из4офот .из4охал .из4охаз .из4охел .из4охиј .из4охим .из4охит .из4охипс .из4охор .из4охро .и3з4раел .и3з4раиљ .и3з4рачи .и3з4ун .и3з4упч .и2с3ц .и2с3к .и2с3п .и2с3т .и3с4как .и3с4кат .и3с4кањ .и3с4кариот .и3с4квас .и3с4кврч .и3с4кин .и3с4кита .и3с4конск .и3с4коч .и3с4крам .и3с4крит .и3с4криш .и3с4крич .и3с4криц .и3с4крат .и3с4крен .и3с4крењ .и3с4крој .и3с4крсн .и3с4крса .и3с4купља .и3с4лам .и3с4лаб .и3с4леђ .и3с4лед .и3с4лијеђ .и3с4лијед .и3с4љеђ .и3с4љед .и3с4лик .и3с4лин .и3с4лов .и3с4луш .и3с4луж .и3с4ме .и3с4мије .и3с4мје .и3с4пав .и3с4паљив .и3с4пира .и3с4плит .и3с4плић .и3с4покој .и3с4полин .и3с4пон .и3с4порав .и3с4прави .и3с4правк .и3с4правн .и3с4прављ .и3с4права .и3с4пупч .и3с4пур .и3с4ред .и3с4рк .и3с4тави .и3с4тављ .и3с4такн .и3с4там .и3с4тар .и3с4тас .и3с4таћ .и3с4тин .и3с4тир .и3с4тиц .и3с4тифан .и3с4ток .и3с4тори .и3с4точн .и3с4точњ .и3с4точа .и3с4трав .и3с4трад .и3с4тран .и3с4трић .и3с4триж .и3с4триц .и3с4труг .и3с4туп .и3с4ук .и3с4ус .и3с4ут .и3с4уш .и2ж3ђ .и2ш3ћ .и2ш3ч .из3бе2з3обр .из3бе2з3ум .из3ва2н3евр .на2д3л .на2д3љ .на2д3в .на3д4вал .на3д4веси .на3д4вест .на3д4виј .на3д4вит .на3д4вла .на3д4воје .на3д4вор .на2д3игр .на2д3инж .на2д3ина .на2д3иск .на2д3јах .на2д3јач .на2д3јек .на2д3јез .на2д3јеч .на2д3јун .на3д4лан .на3д4леш .на3д4леж .на2д3ора .на2д3осо .на2д3осе .на2д3осје .на2д3офи .на2д3оч .на2д3ран .на2д3рач .на2д3раст .на2д3рашћ .на2д3реал .на2д3реп .на2д3рук .на2д3руч .на2д3руг .на2д3удар .на2д3ум .на2д3уч .на2ј3а .на2ј3е .на2ј3и .на2ј3о .на2ј3у .на3ј4ави .на3ј4ављ .на3ј4ава .на3ј4аве .на3ј4ади .на3ј4ада .на3ј4аде .на3ј4ажи .на3ј4ази .на3ј4ако .на3ј4ака .на3ј4ало .на3ј4ами .на3ј4амл .на3ј4амн .на3ј4ари .на3ј4арм .на3ј4арц .на3ј4ати .на3ј4аук .на3ј4ах .на3ј4аш .на3ј4еди .на3ј4едн .на3ј4едр .на3ј4еда .на3ј4ежи .на3ј4ежу .на3ј4еже .на3ј4езн .на3ј4езд .на3ј4ести .на3ј4етк .на3ј4ец .на3ј4ури .на3ј4урен .о2б3ј .о2б3љ .о2б3р .обе2з3б .обе2з3д .обе2з3г .обе2з3ј .обе2з3л .обе2з3м .обе2з3н .обе2з3о .обе2з3љ .обе2з3р .обе2з3у .обе2з3в .обе3з4виј .обе3з4нан .обе3з4нањ .обе3з4нач .обе3з4уб .обе2с3ц .обе2с3к .обе2с3п .обе2с3т .обе3с4тан .обе3с4тиј .обе3с4тран .обе2ш3ћ .обе2ш3ч .о2б3игр .о2б3истин .о2б3истињ .о3б4јек .о3б4јер .о3б4јеси .о3б4јет .о3б4јеш .о2б3лај .о2б3лам .о2б3лакш .о2б3ласк .о2б3леп .о2б3лет .о2б3лећ .о2б3леж .о2б3лег .о2б3лијеп .о2б3лијет .о2б3лијеж .о2б3лијег .о2б3леден .о2б3лив .о2б3лизат .о2б3лизав .о2б3лизи .о2б3лист .о2б3лока .о2б3лук .о2б3луч .о3б4љан .о3б4љут .о3б4љуз .о2б3ору .о3б4раже .о3б4рази .о3б4разн .о3б4разо .о3б4разу .о3б4раза .о3б4разд .о3б4рамб .о3б4ран .о3б4рањ .о3б4рат .о3б4раћ .о3б4рашн .о3б4рашч .о3б4рв .о3б4рђ .о3б4рем .о3б4рес .о3б4ређ .о3б4реч .о3б4реж .о3б4рец .о3б4ред .о3б4рети .о3б4ретн .о3б4риј .о3б4рис .о3б4рит .о3б4рив .о3б4рич .о3б4риц .о3б4рк .о3б4рл .о3б4рн .о3б4рљ .о3б4рс .о3б4рт .о3б4рш .о3б4рч .о3б4рок .о3б4рон .о3б4роњ .о3б4роћ .о3б4роч .о3б4рова .о3б4ровц .о3б4рук .о3б4рун .о3б4рус .о3б4руњ .о3б4руш .о3б4руч .о2б3убож .о2б3уз .о2б3уж .о2б3уд .о2б3уми .о2б3умј .о2б3умр .о2б3уме .о2д3ј .о2д3л .о2д3љ .о2д3р .о2д3в .о2д3арг .о3д4вај .о3д4важ .о3д4весн .о3д4вест .о3д4веса .о3д4викав .о3д4викн .о3д4вис .о3д4вић .о3д4вој .о2д3игр .о2д3и2з3в .о2д3и2з3д .о2д3иск .о2д3исти .о3д4јел .о3д4јен .о3д4јев .о3д4јећ .о3д4лаз .о3д4лаж .о3д4лаг .о3д4лака .о3д4лук .о3д4луч .о2д3озд .о2д3озг .о2д3ок .о2д3онл .о2д3оно .о2д3ону .о2д3онд .о3д4рани .о3д4рано .о3д4рану .о3д4рана .о3д4ране .о3д4раз .о3д4раћ .о3д4раж .о3д4рапи .о3д4рапљ .о3д4рапа .о3д4рачи .о3д4рвен .о3д4рвењ .о3д4рвеч .о3д4рем .о3д4рен .о3д4рет .о3д4ређ .о3д4ред .о3д4рл .о3д4рн .о3д4рп .о3д4рљ .о3д4рт .о3д4рж .о3д4рин .о3д4рињ .о3д4риш .о3д4рич .о3д4риб .о3д4риц .о3д4рон .о3д4роњ .о3д4руж .о3д4руг .о2д3уви .о2д3уве .о2д3узи .о2д3узл .о2д3узд .о2д3узе .о2д3ук .о2д3ул .о2д3ум .о2д3уч .по2д3адм .по2д3вариј .по2д3вез .по2д3веч .по2д3веж .по2д3вик .по2д3вил .по2д3вир .по2д3вињ .по2д3влас .по2д3влаш .по2д3воз .по2д3вођ .по2д3вож .по2д3вод .по2д3врат .по2д3враћ .по2д3врћ .по2д3врж .по2д3врг .по2д3врис .по2д3врс .по2д3вућ .по2д3игр .по2д3изв .по2д3ј .по3д4јен .по3д4јеч .по2д3лакат .по2д3лакт .по2д3леп .по2д3лет .по2д3лећ .по2д3леж .по2д3лег .по2д3лиз .по2д3лијеп .по2д3лијет .по2д3лијећ .по2д3лијеж .по2д3лијег .по2д3лист .по2д3лок .по2д3лом .по2д3луп .по2д3луч .по2д3луж .по2д3љут .по2д3окн .по2д3ош .по2д3оч .по2д3оф .по2д3равн .по2д3равњ .по2д3рад .по2д3ра2з3д .по2д3разр .по2д3разу .по2д3рам .по2д3ран .по2д3рас .по2д3рањ .по2д3реп .по2д3рес .по2д3рез .по2д3рик .по2д3рит .по2д3рон .по2д3ров .по2д3рож .по2д3рук .по2д3руб .по2д3ручи .по2д3ручн .по2д3руча .по2д3упла .по2д3усм .по2д3усн .пре2д3ј .пре2д3в .пре3д4вај .пре3д4вар .пре3д4вест .пре3д4воји .пре3д4воја .пре3д4воје .пре3д4вор .пре3д4вос .пре3д4јен .пре2д3игр .пре2д3ид .пре2д3изб .пре2д3испи .пре2д3исто .пре2д3истр .пре2д3обј .пре2д3одре .пре2д3окус .пре2д3осв .пре2д3осе .пре2д3осје .пре2д3рат .пре2д3рач .пре2д3рад .пре2д3руч .пре2д3убеђ .пре2д3убијеђ .пре2д3убјеђ .пре2д3увер .пре2д3увјер .пре2д3увјет .пре2д3угов .пре2д3удар .пре2д3упис .пре2д3усло .проти2в3акц .проти2в3отр .проти2в3оф .проти2в3р .проти2в3ус .проти2в3уд .ра2ж3ђ .ра2з3б .ра2з3д .ра2з3е .ра2з3г .ра2з3и .ра2з3ј .ра2з3л .ра2з3м .ра2з3н .ра2з3љ .ра2з3р .ра2з3в .ра2з3њ .ра2з3анал .ра3з4бан .ра3з4бар .ра3з4бау .ра3з4бад .ра3з4башур .ра3з4бој .ра3з4бор .ра3з4вал .ра3з4веде .ра3з4вест .ра3з4виго .ра3з4вију .ра3з4вија .ра3з4вије .ра3з4вит .ра3з4вић .ра3з4вој .ра3з4вон .ра3з4врат .ра3з4враћ .ра3з4врт .ра3з4врћ .ра3з4гађ .ра3з4грт .ра3з4ев .ра3з4иј .ра3з4ил .ра3з4ин .ра3з4ир .ра3з4ит .ра3з4из .ра3з4иђ .ра3з4ић .ра3з4ид .ра3з4лаз .ра3з4лаг .ра3з4лик .ра3з4лич .ра3з4лоз .ра3з4лож .ра3з4лог .ра3з4мет .ра3з4мећ .ра3з4мрск .ра3з4нат .ра2з3обл .ра2з3обр .ра2з3оба .ра2з3од .ра2з3орат .ра2з3орав .ра2з3орт .ра2з3ору .ра2з3от .ра3з4ред .ра3з4рок .ра3з4роч .ра2з3уве .ра2з3уди .ра2з3уда .ра2з3удб .ра2з3узи .ра2з3узд .ра2з3узе .ра2з3улар .ра2з3умр .ра2с3ц .ра2с3к .ра2с3п .ра2с3т .ра3с4как .ра3с4канд .ра3с4кин .ра3с4клап .ра3с4клањ .ра3с4клад .ра3с4клон .ра3с4клопи .ра3с4клопљ .ра3с4клопа .ра3с4кош .ра3с4кроп .ра3с4пај .ра3с4пав .ра3с4пети .ра3с4пето .ра3с4пета .ра3с4пете .ра3с4пику .ра3с4пињ .ра3с4плин .ра3с4плињ .ра3с4пн .ра3с4полож .ра3с4пон .ра3с4пор .ра3с4прав .ра3с4прем .ра3с4рђ .ра3с4рд .ра3с4ре .ра3с4тај .ра3с4тан .ра3с4тат .ра3с4тав .ра3с4тењ .ра3с4тил .ра3с4тир .ра3с4тис .ра3с4тит .ра3с4тињ .ра3с4тој .ра3с4трел .ра3с4трет .ра3с4трој .ра3с4трт .ра3с4туп .ра3с4тур .ра3с4тућ .ра4с5турч .ра2ш3ћ .ра2ш3ч .ра3ш4ћењ .ра3ш4чић .у2з3б .у2з3д .у2з3г .у2з3и .у2з3ј .у2з3л .у2з3м .у2з3н .у2з3љ .у2з3р .у2з3в .у2з3њ .у3з4бор .у3з4ван .у3з4ват .у3з4виж .у3з4вијо .у3з4вију .у3з4вија .у3з4вије .у3з4вој .у3з4диц .у2з3игр .у2з3инат .у2з3искр .у3з4лан .у3з4лат .у3з4лим .у3з4лит .у3з4лић .у3з4лиц .у3з4лов .у3з4лудоб .у3з4нак .у3з4нач .у3з4неве .у3з4невје .у3з4нич .у3з4ниц .у3з4ној .у2з3обест .у2з3обијест .у2з3орат .у2з3орав .у2з3охо .у3з4рет .у3з4рев .у3з4ријет .у3з4ријев .у3з4рн .у3з4рњ .у3з4роко .у3з4року .у3з4рока .у3з4роч .у3з4руј .у2з3угар .у2с3ц .у2с3к .у2с3п .у3с4как .у3с4клађ .у3с4клад .у3с4ко .у4с5ком .у4с5ков .у4с5кош .у4с5коко .у4с5колу .у4с5коле .у4с5копа .у4с5кора .у4с5коси .у4с5котр .у3с4куп .у3с4пав .у3с4пало .у3с4пех .у3с4пел .у3с4пем .у3с4пет .у3с4пев .у3с4пеш .у3с4пјех .у3с4пјел .у3с4пјем .у3с4пјет .у3с4пјев .у3с4пјеш .у3с4пент .у3с4пија .у3с4пије .у3с4пијуш .у3с4пикуш .у3с4пон .у3с4пори .у3с4пора .у3с4порен .у3с4порењ .у3с4пореч .у3с4пособ .у3с4преми .у3с4према .у3с4рк .у3с4рн .у3с4рп .у3с4рљ .у3с4рт .у3с4рђ .у3с4рж .у3с4ра .у3с4рд .у3с4ре .у3с4ријед .у2с3талас .у2с3тара .у2с3тврђ .у2с3тврд .у2с3тер .у2с3тећ .у2с3тег .у2с3тов .у2с3трај .у2с3трал .у2с3трг .у2с3треп .у2с3трес .у2с3треб .у2с3трк .у2с3трн .у2с3трп .у2с3трћ .у2с3трч .у2с3тум .у2с3тур .у2с3тућ .у2ш3ћ .у2ш3ч .а2б3алиј .а2б3анац .а2б3евак .а2б3ерац .а2б3ерир .а2б3ирит .а2б3ју .а2б3ла .а2б3лег .а2б3леп .а2б3лок .а2б3лу .а2б3ориг .а2б3реак .а2б3рог .а2б3узус .а2д3ерац .а2д3верб .а2д3ј .а2д3лат .а2д3рен .а2д3рог .а3г2нос .а3г2ноз .а2набап .а2набаз .а2набат .а2набио .а2набол .а2наген .а2нагно .а2н3аго .а2награ .а2надем .а2надипл .а2надоз .а2н3а4е2ро .а2накал .а2накам .а2накат .а2накеф .а2накла .а2накли .а2накој .а2н3акуз .а2н3алг .а2н3алд .а2налеп .а2нализ .а2налис .а2налит .а2н3амерт .а2намне .а2н3андр .а2нанео .а2н3ант .а2напла .а2напле .а2напне .а2напно .а2напро .а2напти .а2н3апто .а2нарт .а2н3арх .а2насар .а2насеи .а2наспаз .а2наста .а2настиг .а2настом .а2натим .а2натом .а2натоц .а2натре .а2натри .а2натро .а2нафаз .а2н3афиј .а2нафила .а2нафон .а2н3афрод .а2накол .а2накрон .а2накру .а2н3алфа .а2нафор .а2нахор .а2нахро .а2н3егер .а2н3екл .а2н3екум .а2н3елек .а2н3енер .а2н3епи .а2неор .а2н3ерг .а2н3ерит .а2н3есте .а2н3идр .а2н3изог .а2н3изом .а2н3изур .а2н3ирид .а2н3овар .а2н3окс .а2н3опис .а2н3орх .а2н3офт .а2н3орг .ди2с3акор .ди2с3јунк .ди2с3квал .ди2с3конт .ди2с3корд .ди2с3кре .ди2с3кри .ди2с3кур .ди2с3ло .ди2с3ориј .ди2с3парит .ди2с3поз .ди2с3пон .ди2с3проп .ди2с3тон .ди2с3трак .и2н3абруп .и2н3адек .и2н3акур .и2н3акце .и2н3амор .и2н3аниц .и2н3аплик .и2н3апст .и2н3арт .и2н3аугур .и2н3аура .и2н3афек .и2н3евид .и2н3ег .и2н3ед .и2н3екв .и2н3екс .и2н3елиг .и2н3епц .и2н3ефек .и2н3обл .и2ноген .и2нокор .и2н3окуп .и2н3опер .и2н3опор .и2н3опсе .и2н3офиц .и2н3умбр .и2н3унда .и2н3унк .и2н3утил .инте2р3и .инте2р3о .инте2р3у .инте2р3а .инте2р3е .инте3р4егн .инте3р4еси .инте3р4есн .инте3р4есо .инте3р4есу .инте3р4еса .инте3р4есе .инте3р4ежџ .инте3р4ије .инте2р3је .инте3р4огат .јури2с3к .јури2с3п .ну2з3бел .ну2з3биљ .ну2з3љуб .ну2з3ре .ну2з3рје .ну2з3уж .ну2с3пос .ну2с3про .по2ст3егз .по2ст3инду .по2ст3лим .по2ст3онк .по2ст3опер .су2б3а .су2б3л .су3б4аш .су2б3инв .су2б3јунк .су2б3окс .су2б3реп .су2б3рог .су2б3орд .супе2р3и .супе2р3о .супе2р3у .супе2р3а .супе2р3е .супе3р4иор .тран2с3а .тран2с3ц .тран2с3е .тран2с3к .тран2с3л .тран2с3м .тран2с3н .тран2с3о .тран2с3п .тран2с3т .тран2с3у .тран2с3в .тран2с3њ .тран3с4еп .тран3с4кри .тран3с4ум .тран3с4уд t2j t2l t2lj t2r t2v d2j d2l d2lj d2r d2v g2j g2l g2lj g2r g2v h2j h2l h2lj h2r h2v k2j k2l k2lj k2r k2v 2d1b 2d1c 2d1d 2d1f 2d1g 2d1h 2d1k 2d1m 2d1n 2d1p 2d1s 2d1t 2d1nj 2d1dž 2d1z 2d1š 2d1đ 2d1ć 2d1č 2g1ž 2g1b 2g1c 2g1d 2g1f 2g1g 2g1h 2g1k 2g1m 2g1n 2g1p 2g1s 2g1t 2g1nj 2g1dž 2g1z 2g1š 2g1đ 2g1ć 2g1č 2h1ž 2h1b 2h1c 2h1d 2h1f 2h1g 2h1h 2h1k 2h1m 2h1n 2h1p 2h1s 2h1t 2h1nj 2h1dž 2h1z 2h1š 2h1đ 2h1ć 2h1č 2k1ž 2k1b 2k1c 2k1d 2k1f 2k1g 2k1h 2k1k 2k1m 2k1n 2k1p 2k1s 2k1t 2k1nj 2k1dž 2k1z 2k1š 2k1đ 2k1ć 2k1č 2t1ž 2t1b 2t1c 2t1d 2t1f 2t1g 2t1h 2t1k 2t1m 2t1n 2t1p 2t1s 2t1t 2t1nj 2t1dž 2t1z 2t1š 2t1đ 2t1ć 2t1č 2dj. 2dl. 2dlj. 2dr. 2dv. 2gj. 2gl. 2glj. 2gr. 2gv. 2hj. 2hl. 2hlj. 2hr. 2hv. 2kj. 2kl. 2klj. 2kr. 2kv. 2tj. 2tl. 2tlj. 2tr. 2tv. p2j p2l p2lj p2r v2j v2l v2lj v2r b2j b2l b2lj b2r f2j f2l f2lj f2r m2j m2l m2lj m2r 2b1ž 2b1b 2b1c 2b1d 2b1f 2b1g 2b1h 2b1k 2b1m 2b1n 2b1p 2b1s 2b1t 2b1v 2b1nj 2b1dž 2b1z 2b1š 2b1đ 2b1ć 2b1č 2f1ž 2f1b 2f1c 2f1d 2f1f 2f1g 2f1h 2f1k 2f1m 2f1n 2f1p 2f1s 2f1t 2f1v 2f1nj 2f1dž 2f1z 2f1š 2f1đ 2f1ć 2f1č 2m1ž 2m1b 2m1c 2m1d 2m1f 2m1g 2m1h 2m1k 2m1m 2m1n 2m1p 2m1s 2m1t 2m1v 2m1nj 2m1dž 2m1z 2m1š 2m1đ 2m1ć 2m1č 2p1ž 2p1b 2p1c 2p1d 2p1f 2p1g 2p1h 2p1k 2p1m 2p1n 2p1p 2p1s 2p1t 2p1v 2p1nj 2p1dž 2p1z 2p1š 2p1đ 2p1ć 2p1č 2v1ž 2v1b 2v1c 2v1d 2v1f 2v1g 2v1h 2v1k 2v1m 2v1n 2v1p 2v1s 2v1t 2v1v 2v1nj 2v1dž 2v1z 2v1š 2v1đ 2v1ć 2v1č 2bj. 2bl. 2blj. 2br. 2fj. 2fl. 2flj. 2fr. 2mj. 2ml. 2mlj. 2mr. 2pj. 2pl. 2plj. 2pr. 2vj. 2vl. 2vlj. 2vr. s2c s2j s2k s2l s2m s2n s2p s2lj s2r s2t s2v s2nj 2s1ž 2s1b 2s1d 2s1f 2s1g 2s1h 2s1s 2s1dž 2s1z 2s1š 2s1đ 2s1ć 2s1č 2sj. 2sk. 2sl. 2sm. 2sn. 2sp. 2slj. 2sr. 2st. 2sv. 2snj. 2sc. z2b z2d z2g z2j z2l z2m z2n z2lj z2r z2v z2nj 2z1ž 2z1c 2z1f 2z1h 2z1k 2z1p 2z1s 2z1t 2z1dž 2z1z 2z1š 2z1đ 2z1ć 2z1č 2zj. 2zl. 2zm. 2zn. 2zlj. 2zr. 2zv. 2znj. 2zb. 2zd. 2zg. š2c š2k š2l š2m š2n š2p š2lj š2t š2v š2nj š2ć š2č 2š1ž 2š1b 2š1d 2š1f 2š1g 2š1h 2š1s 2š1dž 2š1z 2š1š 2š1đ 2š1j 2š1r 2šk. 2šl. 2šm. 2šn. 2šp. 2šlj. 2št. 2šv. 2šnj. 2šć. 2šč. 2šc. ž2b ž2d ž2g ž2l ž2m ž2n ž2lj ž2v ž2nj ž2đ 2ž1ž 2ž1c 2ž1f 2ž1h 2ž1k 2ž1p 2ž1s 2ž1t 2ž1dž 2ž1z 2ž1š 2ž1ć 2ž1č 2ž1j 2ž1r 2žl. 2žm. 2žn. 2žlj. 2žv. 2žnj. 2žđ. 2žb. 2žd. 2žg. c2j c2r c2v 2c1ž 2c1b 2c1c 2c1d 2c1f 2c1g 2c1h 2c1k 2c1l 2c1m 2c1n 2c1p 2c1lj 2c1s 2c1t 2c1nj 2c1dž 2c1z 2c1š 2c1đ 2c1ć 2c1č 2cj. 2cr. 2cv. č2v 2č1ž 2č1b 2č1c 2č1d 2č1f 2č1g 2č1h 2č1j 2č1k 2č1l 2č1m 2č1n 2č1p 2č1lj 2č1r 2č1s 2č1t 2č1nj 2č1dž 2č1z 2č1š 2č1đ 2č1ć 2č1č 2čv. 2j1ž 2j1b 2j1c 2j1d 2j1f 2j1g 2j1h 2j1j 2j1k 2j1l 2j1m 2j1n 2j1p 2j1lj 2j1r 2j1s 2j1t 2j1v 2j1nj 2j1dž 2j1z 2j1š 2j1đ 2j1ć 2j1č 2l1ž 2l1b 2l1c 2l1d 2l1f 2l1g 2l1h 2l1k 2l1l 2l1m 2l1n 2l1p 2l1lj 2l1r 2l1s 2l1t 2l1v 2l1nj 2l1dž 2l1z 2l1š 2l1đ 2l1ć 2l1č 2n1ž 2n1b 2n1c 2n1d 2n1f 2n1g 2n1h 2n1k 2n1l 2n1m 2n1n 2n1p 2n1lj 2n1r 2n1s 2n1t 2n1v 2n1nj 2n1dž 2n1z 2n1š 2n1đ 2n1ć 2n1č 2lj1ž 2lj1b 2lj1c 2lj1d 2lj1f 2lj1g 2lj1h 2lj1j 2lj1k 2lj1l 2lj1m 2lj1n 2lj1p 2lj1lj 2lj1r 2lj1s 2lj1t 2lj1v 2lj1nj 2lj1dž 2lj1z 2lj1š 2lj1đ 2lj1ć 2lj1č 2r1ž 2r1b 2r1c 2r1d 2r1f 2r1g 2r1h 2r1j 2r1k 2r1l 2r1m 2r1n 2r1p 2r1lj 2r1r 2r1s 2r1t 2r1v 2r1nj 2r1dž 2r1z 2r1š 2r1đ 2r1ć 2r1č 2nj1ž 2nj1b 2nj1c 2nj1d 2nj1f 2nj1g 2nj1h 2nj1j 2nj1k 2nj1l 2nj1m 2nj1n 2nj1p 2nj1lj 2nj1r 2nj1s 2nj1t 2nj1v 2nj1nj 2nj1dž 2nj1z 2nj1š 2nj1đ 2nj1ć 2nj1č 2dž1ž 2dž1b 2dž1c 2dž1d 2dž1f 2dž1g 2dž1h 2dž1j 2dž1k 2dž1l 2dž1m 2dž1n 2dž1p 2dž1lj 2dž1r 2dž1s 2dž1t 2dž1v 2dž1nj 2dž1dž 2dž1z 2dž1š 2dž1đ 2dž1ć 2dž1č 2đ1ž 2đ1b 2đ1c 2đ1d 2đ1f 2đ1g 2đ1h 2đ1j 2đ1k 2đ1l 2đ1m 2đ1n 2đ1p 2đ1lj 2đ1r 2đ1s 2đ1t 2đ1v 2đ1nj 2đ1dž 2đ1z 2đ1š 2đ1đ 2đ1ć 2đ1č 2ć1ž 2ć1b 2ć1c 2ć1d 2ć1f 2ć1g 2ć1h 2ć1j 2ć1k 2ć1l 2ć1m 2ć1n 2ć1p 2ć1lj 2ć1r 2ć1s 2ć1t 2ć1v 2ć1nj 2ć1dž 2ć1z 2ć1š 2ć1đ 2ć1ć 2ć1č .h2 .j2 .k2 .l2 .m2 .n2 .p2 .lj2 .r2 .s2 .t2 .v2 .nj2 .dž2 .z2 .š2 .đ2 .ć2 .č2 .ž2 .b2 .c2 .d2 .f2 .g2 o3a o3e o3i o3o o3u u3a u3e u3i u3o u3u a3a a3e a3i a3o a3u e3a e3e e3i e3o e3u i3a i3e i3i i3o i3u 2a1 2e1 2i1 2o1 2u1 2skb 2skc 2skd 2skf 2skg 2skh 2skk 2skm 2skn 2skp 2sks 2skt 2sknj 2skdž 2skz 2skš 2skđ 2skć 2skč 2skž 2stb 2stc 2std 2stf 2stg 2sth 2stk 2stm 2stn 2stp 2sts 2stt 2stnj 2stdž 2stz 2stš 2stđ 2stć 2stč 2stž 2škb 2škc 2škd 2škf 2škg 2škh 2škk 2škm 2škn 2škp 2šks 2škt 2šknj 2škdž 2škz 2škš 2škđ 2škć 2škč 2škž 2štb 2štc 2štd 2štf 2štg 2šth 2štk 2štm 2štn 2štp 2šts 2štt 2štnj 2štdž 2štz 2štš 2štđ 2štć 2štč 2štž 2spb 2spc 2spd 2spf 2spg 2sph 2spk 2spm 2spn 2spp 2sps 2spt 2spv 2spnj 2spdž 2spz 2spš 2spđ 2spć 2spč 2spž 2svb 2svc 2svd 2svf 2svg 2svh 2svk 2svm 2svn 2svp 2svs 2svt 2svv 2svnj 2svdž 2svz 2svš 2svđ 2svć 2svč 2svž 2špb 2špc 2špd 2špf 2špg 2šph 2špk 2špm 2špn 2špp 2šps 2špt 2špv 2špnj 2špdž 2špz 2špš 2špđ 2špć 2špč 2špž 2švb 2švc 2švd 2švf 2švg 2švh 2švk 2švm 2švn 2švp 2švs 2švt 2švv 2švnj 2švdž 2švz 2švš 2švđ 2švć 2švč 2švž 2ždb 2ždc 2ždd 2ždf 2ždg 2ždh 2ždk 2ždm 2ždn 2ždp 2žds 2ždt 2ždnj 2žddž 2ždz 2ždš 2ždđ 2ždć 2ždč 2žgb 2žgc 2žgd 2žgf 2žgg 2žgh 2žgk 2žgm 2žgn 2žgp 2žgs 2žgt 2žgnj 2žgdž 2žgz 2žgš 2žgđ 2žgć 2žgč 2žgž 2zdb 2zdc 2zdd 2zdf 2zdg 2zdh 2zdk 2zdm 2zdn 2zdp 2zds 2zdt 2zdnj 2zddž 2zdz 2zdš 2zdđ 2zdć 2zdč 2zgb 2zgc 2zgd 2zgf 2zgg 2zgh 2zgk 2zgm 2zgn 2zgp 2zgs 2zgt 2zgnj 2zgdž 2zgz 2zgš 2zgđ 2zgć 2zgč 2zgž 2žvb 2žvc 2žvd 2žvf 2žvg 2žvh 2žvk 2žvm 2žvn 2žvp 2žvs 2žvt 2žvv 2žvnj 2žvdž 2žvz 2žvš 2žvđ 2žvć 2žvč 2žvž 2žbb 2žbc 2žbd 2žbf 2žbg 2žbh 2žbk 2žbm 2žbn 2žbp 2žbs 2žbt 2žbv 2žbnj 2žbdž 2žbz 2žbš 2žbđ 2žbć 2žbč 2žbž 2zvb 2zvc 2zvd 2zvf 2zvg 2zvh 2zvk 2zvm 2zvn 2zvp 2zvs 2zvt 2zvv 2zvnj 2zvdž 2zvz 2zvš 2zvđ 2zvć 2zvč 2zvž 2zbb 2zbc 2zbd 2zbf 2zbg 2zbh 2zbk 2zbm 2zbn 2zbp 2zbs 2zbt 2zbv 2zbnj 2zbdž 2zbz 2zbš 2zbđ 2zbć 2zbč 2zbž 2žmb 2žmc 2žmd 2žmf 2žmg 2žmh 2žmk 2žmm 2žmn 2žmp 2žms 2žmt 2žmv 2žmnj 2žmdž 2žmz 2žmš 2žmđ 2žmć 2žmč 2žmž 2smb 2smc 2smd 2smf 2smg 2smh 2smk 2smm 2smn 2smp 2sms 2smt 2smv 2smnj 2smdž 2smz 2smš 2smđ 2smć 2smč 2smž 2zmb 2zmc 2zmd 2zmf 2zmg 2zmh 2zmk 2zmm 2zmn 2zmp 2zms 2zmt 2zmv 2zmnj 2zmdž 2zmz 2zmš 2zmđ 2zmć 2zmč 2zmž 2šmb 2šmc 2šmd 2šmf 2šmg 2šmh 2šmk 2šmm 2šmn 2šmp 2šms 2šmt 2šmv 2šmnj 2šmdž 2šmz 2šmš 2šmđ 2šmć 2šmč 2šmž 2scb 2scc 2scd 2scf 2scg 2sch 2sck 2scl 2scm 2scn 2scp 2sclj 2scr 2scs 2sct 2scnj 2scdž 2scz 2scš 2scđ 2scć 2scč 2scž 2šcb 2šcc 2šcd 2šcf 2šcg 2šch 2šck 2šcl 2šcm 2šcn 2šcp 2šclj 2šcr 2šcs 2šct 2šcnj 2šcdž 2šcz 2šcš 2šcđ 2šcć 2šcč 2šcž 2ščb 2ščc 2ščd 2ščf 2ščg 2ščh 2ščj 2ščk 2ščl 2ščm 2ščn 2ščp 2ščlj 2ščr 2ščs 2ščt 2ščnj 2ščdž 2ščz 2ščš 2ščđ 2ščć 2ščč 2ščž 2hvb 2hvc 2hvd 2hvf 2hvg 2hvh 2hvk 2hvm 2hvn 2hvp 2hvs 2hvt 2hvnj 2hvdž 2hvz 2hvš 2hvđ 2hvć 2hvč 2hvž 2ž3vl 2ž3vlj 2c3vl 2c3vlj 2z3vl 2z3vlj 2š3vl 2š3vlj 2č3vl 2č3vlj 2č3vj 2s3vlj 2d3vl 2d3vlj 2d3vr 2k3vj 2k3vl 2k3vlj 2t3vj 2t3vl 2t3vlj 2g3vj 2g3vl 2g3vlj 2g3vr 2h3vj 2h3vl 2h3vlj 2h3vr 2ž3mj 2ž3ml 2ž3mlj 2ž3mr 2z3ml 2z3mr 2š3mj 2š3ml 2š3mlj 2š3cj 2š3cv 2š3čv 2š3tj 2š3tl 2š3tlj 2s3tl 2s3kj 2s3klj 2š3pj 2š3pl 2š3plj 2ž3dj 2ž3dl 2ž3dlj 2ž3dv 2ž3gj 2ž3gl 2ž3glj 2ž3gr 2ž3gv 2z3dl 2z3dlj 2z3dv 2z3gj 2z3glj 2ž3bj 2ž3bl 2ž3blj 2ž3br 2z3blj .a4e2ro .be4o .bi4o .ge4o .za3g2n .za3t2ka .iza3g2n .iza3t2k .iz3g2n .izd2no .izd2nu .izd2na .izr2k .ist2k .nag2n .nag2nj .na3d2nev .na3d2nič .na3d2nic .na3t2kah .na3t2kam .na3t2kasm .na3t2kast .oda3g2n .oda3d2n .od3g2n .od3m2n .o3t2kah .o3t2kam .o3t2kasm .o3t2kast .po3g2n .po3d2nev .po3m2n .po3m2nj .po3r2v .po3r2đ .po3t2kah .po3t2kam .po3t2kat .po3t2kav .pred3m2n .pred3m2nj .pre3t2kah .pre3t2kam .pre3t2kat .pro3g2n .pro3t2ki .pro3t2ka .raza3g2n .raz3g2n .raz3d2ni .raza3t2ka .u3g2mi .u3g2n .uza3t2ka 3h2teti 3h2tjeti 3h2tel 3h2tev 3h2tenj 3h2tjel 3h2tjev 3h2tjenj 3g2degod. 3g2djegod. 3g2dekak 3g2dekad 3g2djekak 3g2djekad ni3g2de. ne3g2de. ni3g2dje. ne3g2dje. 3b2det 3b2denj 3b2djet 3b2djenj 3g2mil 3g2milj 3g2miz 3g2nos 3g2noz 3g2noj 3g2naj 3g2nezd 3g2nijezd 3g2nežđ 3g2niježđ 3g2nev 3g2njev 3g2njav 3g2njes 3g2njet 3g2nječ 3g2njil 3g2njio 3g2njilj 3g2njit 3g2njur 3k2nez 3k2než 3k2njiž 3k2njig 3m2nož 3m2nog 3m2naž 3p2sik 3p2sič 3p2sov 3p2suj 3r2đa 3s2fer 3t2mast 3t2mul 3t2muo 3t2mulj 3t2mur 3c2miz 3c2mak 3c2mač 3c2mok 3č2lan 3č2lanj 3r2je 4r3jem 4r3je. .be2z3j .be2z3l .be2z3m .be2z3n .be2z3lj .be2z3r .be2z3v .be2z3nj .be2z3b .be2z3d .be2z3g .be2z3i .be2z3o .be2z3u .be2z3alkohol .be2z3atomsk .be3z4bedn .be3z4beda .be3z4bjedn .be3z4bjeda .be3z4beli .be3z4bol .be3z4vučn .be3z4vuča .be3z4istan .be3z4isten .be3z4jak .be3z4jač .be3z4lobn .be3z4loba .be3z4načaj .be3z4račn .be3z4rača .be3z4up .be3z4ub .be2s3c .be2s3k .be2s3p .be2s3t .be3s4krupul .be3s4pokojn .be3s4pokoja .be3s4porn .be3s4pora .be3s4tvar .be3s4tid .be3s4tija .be3s4tilu .be3s4tilj .be3s4trana .be3s4tras .bes4tseler .be2š3ć .be2š3č .va2n3evr .va2n3ustav .i2z3b .i2z3d .i2z3g .i2z3j .i2z3l .i2z3m .i2z3n .i2z3lj .i2z3r .i2z3v .i2z3nj .i2z3i .i2z3o .i2z3u .i2z3bija .i2z3biva .i2z3vedi .i2z3vedn .i2z3vedb .i2z3vede .i2z3daj .i2z3aba .i2z3aka .i2z3anal .i3z4bav .i3z4bičkava .i3z4bleušan .i3z4bojak .i3z4bojk .i3z4vali .i3z4valu .i3z4vala .i3z4vale .i3z4valji .i3z4vižd .i3z4viiskr .i3z4vija .i3z4vijen .i3z4vin .i3z4vir .i3z4vinj .i3z4vitop .i3z4vjed .i3z4vojac .i3z4vojc .i3z4vor .i3z4gomet .i3z4gred .i3z4grn .i3z4grt .i3z4drav .i3z4iđ .i3z4id .i3z4imi .i3z4ježlj .i3z4loz .i3z4lož .i3z4log .i3z4lopać .i3z4nim .i3z4noj .iz4oanem .iz4oanom .iz4obat .iz4obron .iz4ogam .iz4ogeo .iz4oglos .iz4ogon .iz4ograf .iz4odim .iz4odin .iz4odoz .iz4oklin .iz4okolon .i3z4olat .i3z4olac .i3z4olir .i3z4olov .iz4oleks .iz4oluks .iz4omer .iz4ometr .iz4omorf .iz4onef .iz4onom .iz4opat .iz4oper .iz4ople .iz4opol .iz4opsef .iz4orah .iz4osei .iz4osint .iz4osist .iz4oskel .iz4oskop .iz4ostaz .iz4oste .iz4otah .iz4otal .iz4oter .iz4oton .iz4otop .iz4otro .iz4ofon .iz4ofot .iz4ohal .iz4ohaz .iz4ohel .iz4ohij .iz4ohim .iz4ohit .iz4ohips .iz4ohor .iz4ohro .i3z4rael .i3z4railj .i3z4rači .i3z4un .i3z4upč .i2s3c .i2s3k .i2s3p .i2s3t .i3s4kak .i3s4kat .i3s4kanj .i3s4kariot .i3s4kvas .i3s4kvrč .i3s4kin .i3s4kita .i3s4konsk .i3s4koč .i3s4kram .i3s4krit .i3s4kriš .i3s4krič .i3s4kric .i3s4krat .i3s4kren .i3s4krenj .i3s4kroj .i3s4krsn .i3s4krsa .i3s4kuplja .i3s4lam .i3s4lab .i3s4leđ .i3s4led .i3s4lijeđ .i3s4lijed .i3s4ljeđ .i3s4ljed .i3s4lik .i3s4lin .i3s4lov .i3s4luš .i3s4luž .i3s4me .i3s4mije .i3s4mje .i3s4pav .i3s4paljiv .i3s4pira .i3s4plit .i3s4plić .i3s4pokoj .i3s4polin .i3s4pon .i3s4porav .i3s4pravi .i3s4pravk .i3s4pravn .i3s4pravlj .i3s4prava .i3s4pupč .i3s4pur .i3s4red .i3s4rk .i3s4tavi .i3s4tavlj .i3s4takn .i3s4tam .i3s4tar .i3s4tas .i3s4tać .i3s4tin .i3s4tir .i3s4tic .i3s4tifan .i3s4tok .i3s4tori .i3s4točn .i3s4točnj .i3s4toča .i3s4trav .i3s4trad .i3s4tran .i3s4trić .i3s4triž .i3s4tric .i3s4trug .i3s4tup .i3s4uk .i3s4us .i3s4ut .i3s4uš .i2ž3đ .i2š3ć .i2š3č .iz3be2z3obr .iz3be2z3um .iz3va2n3evr .na2d3l .na2d3lj .na2d3v .na3d4val .na3d4vesi .na3d4vest .na3d4vij .na3d4vit .na3d4vla .na3d4voje .na3d4vor .na2d3igr .na2d3inž .na2d3ina .na2d3isk .na2d3jah .na2d3jač .na2d3jek .na2d3jez .na2d3ječ .na2d3jun .na3d4lan .na3d4leš .na3d4lež .na2d3ora .na2d3oso .na2d3ose .na2d3osje .na2d3ofi .na2d3oč .na2d3ran .na2d3rač .na2d3rast .na2d3rašć .na2d3real .na2d3rep .na2d3ruk .na2d3ruč .na2d3rug .na2d3udar .na2d3um .na2d3uč .na2j3a .na2j3e .na2j3i .na2j3o .na2j3u .na3j4avi .na3j4avlj .na3j4ava .na3j4ave .na3j4adi .na3j4ada .na3j4ade .na3j4aži .na3j4azi .na3j4ako .na3j4aka .na3j4alo .na3j4ami .na3j4aml .na3j4amn .na3j4ari .na3j4arm .na3j4arc .na3j4ati .na3j4auk .na3j4ah .na3j4aš .na3j4edi .na3j4edn .na3j4edr .na3j4eda .na3j4eži .na3j4ežu .na3j4eže .na3j4ezn .na3j4ezd .na3j4esti .na3j4etk .na3j4ec .na3j4uri .na3j4uren .o2b3j .o2b3lj .o2b3r .obe2z3b .obe2z3d .obe2z3g .obe2z3j .obe2z3l .obe2z3m .obe2z3n .obe2z3o .obe2z3lj .obe2z3r .obe2z3u .obe2z3v .obe3z4vij .obe3z4nan .obe3z4nanj .obe3z4nač .obe3z4ub .obe2s3c .obe2s3k .obe2s3p .obe2s3t .obe3s4tan .obe3s4tij .obe3s4tran .obe2š3ć .obe2š3č .o2b3igr .o2b3istin .o2b3istinj .o3b4jek .o3b4jer .o3b4jesi .o3b4jet .o3b4ješ .o2b3laj .o2b3lam .o2b3lakš .o2b3lask .o2b3lep .o2b3let .o2b3leć .o2b3lež .o2b3leg .o2b3lijep .o2b3lijet .o2b3lijež .o2b3lijeg .o2b3leden .o2b3liv .o2b3lizat .o2b3lizav .o2b3lizi .o2b3list .o2b3loka .o2b3luk .o2b3luč .o3b4ljan .o3b4ljut .o3b4ljuz .o2b3oru .o3b4raže .o3b4razi .o3b4razn .o3b4razo .o3b4razu .o3b4raza .o3b4razd .o3b4ramb .o3b4ran .o3b4ranj .o3b4rat .o3b4rać .o3b4rašn .o3b4rašč .o3b4rv .o3b4rđ .o3b4rem .o3b4res .o3b4ređ .o3b4reč .o3b4rež .o3b4rec .o3b4red .o3b4reti .o3b4retn .o3b4rij .o3b4ris .o3b4rit .o3b4riv .o3b4rič .o3b4ric .o3b4rk .o3b4rl .o3b4rn .o3b4rlj .o3b4rs .o3b4rt .o3b4rš .o3b4rč .o3b4rok .o3b4ron .o3b4ronj .o3b4roć .o3b4roč .o3b4rova .o3b4rovc .o3b4ruk .o3b4run .o3b4rus .o3b4runj .o3b4ruš .o3b4ruč .o2b3ubož .o2b3uz .o2b3už .o2b3ud .o2b3umi .o2b3umj .o2b3umr .o2b3ume .o2d3j .o2d3l .o2d3lj .o2d3r .o2d3v .o2d3arg .o3d4vaj .o3d4važ .o3d4vesn .o3d4vest .o3d4vesa .o3d4vikav .o3d4vikn .o3d4vis .o3d4vić .o3d4voj .o2d3igr .o2d3i2z3v .o2d3i2z3d .o2d3isk .o2d3isti .o3d4jel .o3d4jen .o3d4jev .o3d4jeć .o3d4laz .o3d4laž .o3d4lag .o3d4laka .o3d4luk .o3d4luč .o2d3ozd .o2d3ozg .o2d3ok .o2d3onl .o2d3ono .o2d3onu .o2d3ond .o3d4rani .o3d4rano .o3d4ranu .o3d4rana .o3d4rane .o3d4raz .o3d4rać .o3d4raž .o3d4rapi .o3d4raplj .o3d4rapa .o3d4rači .o3d4rven .o3d4rvenj .o3d4rveč .o3d4rem .o3d4ren .o3d4ret .o3d4ređ .o3d4red .o3d4rl .o3d4rn .o3d4rp .o3d4rlj .o3d4rt .o3d4rž .o3d4rin .o3d4rinj .o3d4riš .o3d4rič .o3d4rib .o3d4ric .o3d4ron .o3d4ronj .o3d4ruž .o3d4rug .o2d3uvi .o2d3uve .o2d3uzi .o2d3uzl .o2d3uzd .o2d3uze .o2d3uk .o2d3ul .o2d3um .o2d3uč .po2d3adm .po2d3varij .po2d3vez .po2d3več .po2d3vež .po2d3vik .po2d3vil .po2d3vir .po2d3vinj .po2d3vlas .po2d3vlaš .po2d3voz .po2d3vođ .po2d3vož .po2d3vod .po2d3vrat .po2d3vrać .po2d3vrć .po2d3vrž .po2d3vrg .po2d3vris .po2d3vrs .po2d3vuć .po2d3igr .po2d3izv .po2d3j .po3d4jen .po3d4ječ .po2d3lakat .po2d3lakt .po2d3lep .po2d3let .po2d3leć .po2d3lež .po2d3leg .po2d3liz .po2d3lijep .po2d3lijet .po2d3lijeć .po2d3lijež .po2d3lijeg .po2d3list .po2d3lok .po2d3lom .po2d3lup .po2d3luč .po2d3luž .po2d3ljut .po2d3okn .po2d3oš .po2d3oč .po2d3of .po2d3ravn .po2d3ravnj .po2d3rad .po2d3ra2z3d .po2d3razr .po2d3razu .po2d3ram .po2d3ran .po2d3ras .po2d3ranj .po2d3rep .po2d3res .po2d3rez .po2d3rik .po2d3rit .po2d3ron .po2d3rov .po2d3rož .po2d3ruk .po2d3rub .po2d3ruči .po2d3ručn .po2d3ruča .po2d3upla .po2d3usm .po2d3usn .pre2d3j .pre2d3v .pre3d4vaj .pre3d4var .pre3d4vest .pre3d4voji .pre3d4voja .pre3d4voje .pre3d4vor .pre3d4vos .pre3d4jen .pre2d3igr .pre2d3id .pre2d3izb .pre2d3ispi .pre2d3isto .pre2d3istr .pre2d3obj .pre2d3odre .pre2d3okus .pre2d3osv .pre2d3ose .pre2d3osje .pre2d3rat .pre2d3rač .pre2d3rad .pre2d3ruč .pre2d3ubeđ .pre2d3ubijeđ .pre2d3ubjeđ .pre2d3uver .pre2d3uvjer .pre2d3uvjet .pre2d3ugov .pre2d3udar .pre2d3upis .pre2d3uslo .proti2v3akc .proti2v3otr .proti2v3of .proti2v3r .proti2v3us .proti2v3ud .ra2ž3đ .ra2z3b .ra2z3d .ra2z3e .ra2z3g .ra2z3i .ra2z3j .ra2z3l .ra2z3m .ra2z3n .ra2z3lj .ra2z3r .ra2z3v .ra2z3nj .ra2z3anal .ra3z4ban .ra3z4bar .ra3z4bau .ra3z4bad .ra3z4bašur .ra3z4boj .ra3z4bor .ra3z4val .ra3z4vede .ra3z4vest .ra3z4vigo .ra3z4viju .ra3z4vija .ra3z4vije .ra3z4vit .ra3z4vić .ra3z4voj .ra3z4von .ra3z4vrat .ra3z4vrać .ra3z4vrt .ra3z4vrć .ra3z4gađ .ra3z4grt .ra3z4ev .ra3z4ij .ra3z4il .ra3z4in .ra3z4ir .ra3z4it .ra3z4iz .ra3z4iđ .ra3z4ić .ra3z4id .ra3z4laz .ra3z4lag .ra3z4lik .ra3z4lič .ra3z4loz .ra3z4lož .ra3z4log .ra3z4met .ra3z4meć .ra3z4mrsk .ra3z4nat .ra2z3obl .ra2z3obr .ra2z3oba .ra2z3od .ra2z3orat .ra2z3orav .ra2z3ort .ra2z3oru .ra2z3ot .ra3z4red .ra3z4rok .ra3z4roč .ra2z3uve .ra2z3udi .ra2z3uda .ra2z3udb .ra2z3uzi .ra2z3uzd .ra2z3uze .ra2z3ular .ra2z3umr .ra2s3c .ra2s3k .ra2s3p .ra2s3t .ra3s4kak .ra3s4kand .ra3s4kin .ra3s4klap .ra3s4klanj .ra3s4klad .ra3s4klon .ra3s4klopi .ra3s4kloplj .ra3s4klopa .ra3s4koš .ra3s4krop .ra3s4paj .ra3s4pav .ra3s4peti .ra3s4peto .ra3s4peta .ra3s4pete .ra3s4piku .ra3s4pinj .ra3s4plin .ra3s4plinj .ra3s4pn .ra3s4polož .ra3s4pon .ra3s4por .ra3s4prav .ra3s4prem .ra3s4rđ .ra3s4rd .ra3s4re .ra3s4taj .ra3s4tan .ra3s4tat .ra3s4tav .ra3s4tenj .ra3s4til .ra3s4tir .ra3s4tis .ra3s4tit .ra3s4tinj .ra3s4toj .ra3s4trel .ra3s4tret .ra3s4troj .ra3s4trt .ra3s4tup .ra3s4tur .ra3s4tuć .ra4s5turč .ra2š3ć .ra2š3č .ra3š4ćenj .ra3š4čić .u2z3b .u2z3d .u2z3g .u2z3i .u2z3j .u2z3l .u2z3m .u2z3n .u2z3lj .u2z3r .u2z3v .u2z3nj .u3z4bor .u3z4van .u3z4vat .u3z4viž .u3z4vijo .u3z4viju .u3z4vija .u3z4vije .u3z4voj .u3z4dic .u2z3igr .u2z3inat .u2z3iskr .u3z4lan .u3z4lat .u3z4lim .u3z4lit .u3z4lić .u3z4lic .u3z4lov .u3z4ludob .u3z4nak .u3z4nač .u3z4neve .u3z4nevje .u3z4nič .u3z4nic .u3z4noj .u2z3obest .u2z3obijest .u2z3orat .u2z3orav .u2z3oho .u3z4ret .u3z4rev .u3z4rijet .u3z4rijev .u3z4rn .u3z4rnj .u3z4roko .u3z4roku .u3z4roka .u3z4roč .u3z4ruj .u2z3ugar .u2s3c .u2s3k .u2s3p .u3s4kak .u3s4klađ .u3s4klad .u3s4ko .u4s5kom .u4s5kov .u4s5koš .u4s5koko .u4s5kolu .u4s5kole .u4s5kopa .u4s5kora .u4s5kosi .u4s5kotr .u3s4kup .u3s4pav .u3s4palo .u3s4peh .u3s4pel .u3s4pem .u3s4pet .u3s4pev .u3s4peš .u3s4pjeh .u3s4pjel .u3s4pjem .u3s4pjet .u3s4pjev .u3s4pješ .u3s4pent .u3s4pija .u3s4pije .u3s4pijuš .u3s4pikuš .u3s4pon .u3s4pori .u3s4pora .u3s4poren .u3s4porenj .u3s4poreč .u3s4posob .u3s4premi .u3s4prema .u3s4rk .u3s4rn .u3s4rp .u3s4rlj .u3s4rt .u3s4rđ .u3s4rž .u3s4ra .u3s4rd .u3s4re .u3s4rijed .u2s3talas .u2s3tara .u2s3tvrđ .u2s3tvrd .u2s3ter .u2s3teć .u2s3teg .u2s3tov .u2s3traj .u2s3tral .u2s3trg .u2s3trep .u2s3tres .u2s3treb .u2s3trk .u2s3trn .u2s3trp .u2s3trć .u2s3trč .u2s3tum .u2s3tur .u2s3tuć .u2š3ć .u2š3č .a2b3alij .a2b3anac .a2b3evak .a2b3erac .a2b3erir .a2b3irit .a2b3ju .a2b3la .a2b3leg .a2b3lep .a2b3lok .a2b3lu .a2b3orig .a2b3reak .a2b3rog .a2b3uzus .a2d3erac .a2d3verb .a2d3j .a2d3lat .a2d3ren .a2d3rog .a3g2nos .a3g2noz .a2nabap .a2nabaz .a2nabat .a2nabio .a2nabol .a2nagen .a2nagno .a2n3ago .a2nagra .a2nadem .a2nadipl .a2nadoz .a2n3a4e2ro .a2nakal .a2nakam .a2nakat .a2nakef .a2nakla .a2nakli .a2nakoj .a2n3akuz .a2n3alg .a2n3ald .a2nalep .a2naliz .a2nalis .a2nalit .a2n3amert .a2namne .a2n3andr .a2naneo .a2n3ant .a2napla .a2naple .a2napne .a2napno .a2napro .a2napti .a2n3apto .a2nart .a2n3arh .a2nasar .a2nasei .a2naspaz .a2nasta .a2nastig .a2nastom .a2natim .a2natom .a2natoc .a2natre .a2natri .a2natro .a2nafaz .a2n3afij .a2nafila .a2nafon .a2n3afrod .a2nakol .a2nakron .a2nakru .a2n3alfa .a2nafor .a2nahor .a2nahro .a2n3eger .a2n3ekl .a2n3ekum .a2n3elek .a2n3ener .a2n3epi .a2neor .a2n3erg .a2n3erit .a2n3este .a2n3idr .a2n3izog .a2n3izom .a2n3izur .a2n3irid .a2n3ovar .a2n3oks .a2n3opis .a2n3orh .a2n3oft .a2n3org .di2s3akor .di2s3junk .di2s3kval .di2s3kont .di2s3kord .di2s3kre .di2s3kri .di2s3kur .di2s3lo .di2s3orij .di2s3parit .di2s3poz .di2s3pon .di2s3prop .di2s3ton .di2s3trak .i2n3abrup .i2n3adek .i2n3akur .i2n3akce .i2n3amor .i2n3anic .i2n3aplik .i2n3apst .i2n3art .i2n3augur .i2n3aura .i2n3afek .i2n3evid .i2n3eg .i2n3ed .i2n3ekv .i2n3eks .i2n3elig .i2n3epc .i2n3efek .i2n3obl .i2nogen .i2nokor .i2n3okup .i2n3oper .i2n3opor .i2n3opse .i2n3ofic .i2n3umbr .i2n3unda .i2n3unk .i2n3util .inte2r3i .inte2r3o .inte2r3u .inte2r3a .inte2r3e .inte3r4egn .inte3r4esi .inte3r4esn .inte3r4eso .inte3r4esu .inte3r4esa .inte3r4ese .inte3r4eždž .inte3r4ije .inte2r3je .inte3r4ogat .juri2s3k .juri2s3p .nu2z3bel .nu2z3bilj .nu2z3ljub .nu2z3re .nu2z3rje .nu2z3už .nu2s3pos .nu2s3pro .po2st3egz .po2st3indu .po2st3lim .po2st3onk .po2st3oper .su2b3a .su2b3l .su3b4aš .su2b3inv .su2b3junk .su2b3oks .su2b3rep .su2b3rog .su2b3ord .supe2r3i .supe2r3o .supe2r3u .supe2r3a .supe2r3e .supe3r4ior .tran2s3a .tran2s3c .tran2s3e .tran2s3k .tran2s3l .tran2s3m .tran2s3n .tran2s3o .tran2s3p .tran2s3t .tran2s3u .tran2s3v .tran2s3nj .tran3s4ep .tran3s4kri .tran3s4um .tran3s4ud .a2n3jon .i2n3jek .i2n3jur .i2n3just .o2d3žal .o2d3žalj .o2d3ži .o2d3žv .o2d3že .pre2d3ži .pre2d3že .na2d3ždr .na2d3žnj .na2d3že .na2d3žanj .na2d3žir .na2d3živ .na2d3žup l2j n2j d2ž 2dž.", ["lefthyphenmin"]=1, - ["length"]=28148, - ["n"]=2425, + ["length"]=50368, + ["n"]=5321, ["righthyphenmax"]=1, }, ["version"]="1.001", diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 2118c8001..c9dbfe3d6 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-01-21 20:10 +-- merge date : 2022-03-12 11:24 do -- begin closure to overcome local limits and interference @@ -30884,7 +30884,7 @@ local function validspecification(specification,name) return specification,name end end -local function addfeature(data,feature,specifications) +local function addfeature(data,feature,specifications,prepareonly) if not specifications then report_otf("missing specification") return @@ -31183,8 +31183,6 @@ local function addfeature(data,feature,specifications) local rules=list.rules local coverage={} if rules then - local rulehash={} - local rulesize=0 local lookuptype=types[featuretype] for nofrules=1,#rules do local rule=rules[nofrules] @@ -31215,6 +31213,14 @@ local function addfeature(data,feature,specifications) local lookups=rule.lookups or false local subtype=nil if lookups and sublookups then +if #lookups>0 then + local ns=stop-start+1 + for i=1,ns do + if lookups[i]==nil then + lookups[i]=0 + end + end +end local l={} for k,v in sortedhash(lookups) do local t=type(v) @@ -31262,8 +31268,7 @@ local function addfeature(data,feature,specifications) hashed[i]=t end sequence=hashed - rulesize=rulesize+1 - rulehash[rulesize]={ + local ruleset={ nofrules, lookuptype, sequence, @@ -31275,8 +31280,15 @@ local function addfeature(data,feature,specifications) } for unic in sortedhash(sequence[start]) do local cu=coverage[unic] - if not cu then - coverage[unic]=rulehash + if cu then + local n=cu.n+1 + cu[n]=ruleset + cu.n=n + else + coverage[unic]={ + ruleset, + n=1, + } end end sequence.n=nofsequences @@ -31284,7 +31296,6 @@ local function addfeature(data,feature,specifications) end end end - rulehash.n=rulesize end return coverage end @@ -31507,6 +31518,9 @@ local function addfeature(data,feature,specifications) nofsteps=nofsteps, type=types[featuretype], } + if prepareonly then + return sequence + end end end if sequence then @@ -31588,6 +31602,14 @@ if not modules then modules={} end modules ['font-osd']={ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team", 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) local insert,remove,imerge,copy,tohash=table.insert,table.remove,table.imerge,table.copy,table.tohash local next,type,rawget=next,type,rawget local formatters=string.formatters @@ -33100,7 +33122,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] @@ -33277,7 +33299,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) @@ -33340,7 +33362,7 @@ local function reorder_two(head,start,stop,font,attr,nbspaces) logprocess("reorder two, handle matra") end end - if not moved[current] and dependent_vowel[char] then + if dependent_vowel[char] then if pre_mark[char] then moved[current]=true local prev,next=getboth(current) @@ -33519,8 +33541,8 @@ local function analyze_next_chars_one(c,font,variant) if not n then return c end + local v=ischar(n,font) if variant==1 then - local v=ischar(n,font) if v and nukta[v] then n=getnext(n) if n then @@ -33553,7 +33575,6 @@ local function analyze_next_chars_one(c,font,variant) end end elseif variant==2 then - local v=ischar(n,font) if v and nukta[v] then c=n end @@ -33577,11 +33598,11 @@ local function analyze_next_chars_one(c,font,variant) end end end - local n=getnext(c) + n=getnext(c) if not n then return c end - local v=ischar(n,font) + v=ischar(n,font) if not v then return c end @@ -33686,12 +33707,11 @@ local function analyze_next_chars_one(c,font,variant) end end local function analyze_next_chars_two(c,font) - local n,v - n=getnext(c) + local n=getnext(c) if not n then return c end - v=ischar(n,font) + local v=ischar(n,font) if v and nukta[v] then c=n end |