diff options
Diffstat (limited to 'tex/context/base/math-ini.lua')
-rw-r--r-- | tex/context/base/math-ini.lua | 215 |
1 files changed, 140 insertions, 75 deletions
diff --git a/tex/context/base/math-ini.lua b/tex/context/base/math-ini.lua index 60a91071f..1d11745a6 100644 --- a/tex/context/base/math-ini.lua +++ b/tex/context/base/math-ini.lua @@ -107,14 +107,20 @@ function mathematics.setmathsymbol(name,class,family,slot,largefamily,largeslot, if largefamily and largeslot then largefamily = mathematics.families[largefamily] or largefamily if class == classes.radical then - tex.sprint(("\\xdef\\%s{%s\\relax}"):format(name,mathematics.radical(class,family,slot,largefamily,largeslot))) + tex.sprint(("\\unexpanded\\xdef\\%s{%s }"):format(name,mathematics.radical(class,family,slot,largefamily,largeslot))) elseif class == classes.open or class == classes.close then - tex.sprint(("\\xdef\\%s{%s\\relax}"):format(name,mathematics.delimiter(class,family,slot,largefamily,largeslot))) + tex.sprint(("\\unexpanded\\xdef\\%s{%s}"):format(name,mathematics.delimiter(class,family,slot,largefamily,largeslot))) end elseif class == classes.accent then - tex.sprint(("\\xdef\\%s{%s\\relax}"):format(name,mathematics.mathaccent(class,family,slot))) + tex.sprint(("\\unexpanded\\xdef\\%s{%s }"):format(name,mathematics.mathaccent(class,family,slot))) elseif unicode then - tex.sprint(("\\xdef\\%s{%s}"):format(name,utf.char(unicode))) + -- beware, open/close and other specials should not end up here + local ch = utf.char(unicode) + if characters.filters.utf.private.escapes[ch] then + tex.sprint(("\\xdef\\%s{\\char%s }"):format(name,unicode)) + else + tex.sprint(("\\xdef\\%s{%s}"):format(name,ch)) + end else tex.sprint(mathematics.mathchardef(name,class,family,slot)) end @@ -135,9 +141,7 @@ end -- definitions (todo: expand commands to utf instead of codes) -mathematics.trace = false - - +mathematics.trace = false -- function mathematics.define() local slots = mathematics.slots.current @@ -218,56 +222,56 @@ end mathematics.slots.traditional = { - [0x03B1] = { "lcgreek", 0x0B }, - [0x03B2] = { "lcgreek", 0x0C }, - [0x03B3] = { "lcgreek", 0x0D }, - [0x03B4] = { "lcgreek", 0x0E }, + [0x03B1] = { "lcgreek", 0x0B }, -- alpha + [0x03B2] = { "lcgreek", 0x0C }, -- beta + [0x03B3] = { "lcgreek", 0x0D }, -- gamma + [0x03B4] = { "lcgreek", 0x0E }, -- delta [0x03B5] = { "lcgreek", 0x0F }, -- epsilon - [0x03B6] = { "lcgreek", 0x10 }, - [0x03B7] = { "lcgreek", 0x11 }, - [0x03B8] = { "lcgreek", 0x12 }, - [0x03B9] = { "lcgreek", 0x13 }, - [0x03BA] = { "lcgreek", 0x14 }, - [0x03BB] = { "lcgreek", 0x15 }, - [0x03BC] = { "lcgreek", 0x16 }, - [0x03BD] = { "lcgreek", 0x17 }, - [0x03BE] = { "lcgreek", 0x18 }, - [0x03BF] = { "lcgreek", 0x6F }, - [0x03C0] = { "lcgreek", 0x19 }, - [0x03C1] = { "lcgreek", 0x1A }, + [0x03B6] = { "lcgreek", 0x10 }, -- zeta + [0x03B7] = { "lcgreek", 0x11 }, -- eta + [0x03B8] = { "lcgreek", 0x12 }, -- theta + [0x03B9] = { "lcgreek", 0x13 }, -- iota + [0x03BA] = { "lcgreek", 0x14 }, -- kappa + [0x03BB] = { "lcgreek", 0x15 }, -- lambda + [0x03BC] = { "lcgreek", 0x16 }, -- mu + [0x03BD] = { "lcgreek", 0x17 }, -- nu + [0x03BE] = { "lcgreek", 0x18 }, -- xi + [0x03BF] = { "lcgreek", 0x6F }, -- omicron + [0x03C0] = { "lcgreek", 0x19 }, -- po + [0x03C1] = { "lcgreek", 0x1A }, -- rho -- [0x03C2] = { "lcgreek", 0x00 }, -- varsigma - [0x03C3] = { "lcgreek", 0x1B }, - [0x03C4] = { "lcgreek", 0x1C }, - [0x03C5] = { "lcgreek", 0x1D }, + [0x03C3] = { "lcgreek", 0x1B }, -- sigma + [0x03C4] = { "lcgreek", 0x1C }, -- tau + [0x03C5] = { "lcgreek", 0x1D }, -- upsilon -- [0x03C6] = { "lcgreek", 0x1E }, -- varphi - [0x03C7] = { "lcgreek", 0x1F }, - [0x03C8] = { "lcgreek", 0x20 }, - [0x03C9] = { "lcgreek", 0x21 }, - - [0x0391] = { "ucgreek", 0x41 }, - [0x0392] = { "ucgreek", 0x42 }, - [0x0393] = { "ucgreek", 0x00 }, - [0x0394] = { "ucgreek", 0x01 }, - [0x0395] = { "ucgreek", 0x45 }, - [0x0396] = { "ucgreek", 0x5A }, - [0x0397] = { "ucgreek", 0x48 }, - [0x0398] = { "ucgreek", 0x02 }, - [0x0399] = { "ucgreek", 0x49 }, - [0x039A] = { "ucgreek", 0x4B }, - [0x039B] = { "ucgreek", 0x03 }, - [0x039C] = { "ucgreek", 0x4D }, - [0x039D] = { "ucgreek", 0x4E }, - [0x039E] = { "ucgreek", 0x04 }, - [0x039F] = { "ucgreek", 0x4F }, - [0x03A0] = { "ucgreek", 0x05 }, - [0x03A1] = { "ucgreek", 0x52 }, - [0x03A3] = { "ucgreek", 0x06 }, - [0x03A4] = { "ucgreek", 0x54 }, - [0x03A5] = { "ucgreek", 0x07 }, - [0x03A6] = { "ucgreek", 0x08 }, - [0x03A7] = { "ucgreek", 0x58 }, - [0x03A8] = { "ucgreek", 0x09 }, - [0x03A9] = { "ucgreek", 0x0A }, + [0x03C7] = { "lcgreek", 0x1F }, -- chi + [0x03C8] = { "lcgreek", 0x20 }, -- psi + [0x03C9] = { "lcgreek", 0x21 }, -- omega + + [0x0391] = { "ucgreek", 0x41 }, -- Alpha + [0x0392] = { "ucgreek", 0x42 }, -- Beta + [0x0393] = { "ucgreek", 0x00 }, -- Gamma + [0x0394] = { "ucgreek", 0x01 }, -- Delta + [0x0395] = { "ucgreek", 0x45 }, -- Epsilon + [0x0396] = { "ucgreek", 0x5A }, -- Zeta + [0x0397] = { "ucgreek", 0x48 }, -- Eta + [0x0398] = { "ucgreek", 0x02 }, -- Theta + [0x0399] = { "ucgreek", 0x49 }, -- Iota + [0x039A] = { "ucgreek", 0x4B }, -- Kappa + [0x039B] = { "ucgreek", 0x03 }, -- Lambda + [0x039C] = { "ucgreek", 0x4D }, -- Mu + [0x039D] = { "ucgreek", 0x4E }, -- Nu + [0x039E] = { "ucgreek", 0x04 }, -- Xi + [0x039F] = { "ucgreek", 0x4F }, -- Omicron + [0x03A0] = { "ucgreek", 0x05 }, -- Pi + [0x03A1] = { "ucgreek", 0x52 }, -- Rho + [0x03A3] = { "ucgreek", 0x06 }, -- Sigma + [0x03A4] = { "ucgreek", 0x54 }, -- Tau + [0x03A5] = { "ucgreek", 0x07 }, -- Upsilon + [0x03A6] = { "ucgreek", 0x08 }, -- Phi + [0x03A7] = { "ucgreek", 0x58 }, -- Chi + [0x03A8] = { "ucgreek", 0x09 }, -- Psi + [0x03A9] = { "ucgreek", 0x0A }, -- Omega [0x03F5] = { "vargreek", 0x22 }, -- varepsilon [0x03D1] = { "vargreek", 0x23 }, -- vartheta @@ -306,15 +310,92 @@ mathematics.slots.traditional = { [0x00B7] = { "sy", 0x01 }, -- cdot [0x00D7] = { "sy", 0x02 }, -- times [0x2022] = { "sy", 0x0F }, -- bullet + [0x2111] = { "sy", 0x3D }, -- Im + [0x2118] = { "mi", 0x7D }, -- wp + [0x211C] = { "sy", 0x3C }, -- Re [0x2190] = { "sy", 0x20 }, -- leftarrow + [0x2191] = { "sy", 0x22, "ex", 0x78 }, -- uparrow [0x2192] = { "sy", 0x21 }, -- rightarrow + [0x2193] = { "sy", 0x23, "ex", 0x79 }, -- downarrow [0x2194] = { "sy", 0x24 }, -- leftrightarrow + [0x2195] = { "sy", 0x6C, "ex", 0x3F }, -- updownarrow + [0x2196] = { "sy", 0x2D }, -- nwarrow + [0x2197] = { "sy", 0x25 }, -- nearrow + [0x2198] = { "sy", 0x2E }, -- swarrow + [0x2199] = { "sy", 0x26 }, -- searrow [0x21D0] = { "sy", 0x28 }, -- Leftarrow + [0x21D1] = { "sy", 0x6C, "ex", 0x7E }, -- Uparrow [0x21D2] = { "sy", 0x29 }, -- Rightarrow + [0x21D3] = { "sy", 0x2B, "ex", 0x7F }, -- Downarrow [0x21D4] = { "sy", 0x2C }, -- Leftrightarrow + [0x21D5] = { "sy", 0x6D, "ex", 0x77 }, -- Updownarrow [0x2135] = { "sy", 0x40 }, -- aleph [0x2113] = { "mi", 0x60 }, -- ell +-- ... + [0x2200] = { "sy", 0x38 }, -- forall +-- [0x2201] = { "sy", 0x00 }, -- complement + [0x2202] = { "mi", 0x40 }, -- partial + [0x2203] = { "sy", 0x39 }, -- exists +-- [0x2204] = { "sy", 0x00 }, -- not exists + [0x2205] = { "sy", 0x3B }, -- empty set +-- [0x2206] = { "sy", 0x00 }, -- increment + [0x2207] = { "sy", 0x72 }, -- nabla + [0x2208] = { "sy", 0x32 }, -- in + [0x2209] = { "sy", 0x33 }, -- ni + [0x220F] = { "ex", 0x51 }, -- prod + [0x2210] = { "ex", 0x60 }, -- coprod + [0x2211] = { "ex", 0x50 }, -- sum +-- [0x2212] = { "sy", 0x00 }, -- - + [0x2213] = { "sy", 0x07 }, -- mp + [0x2215] = { "sy", 0x3D }, -- / AM: Not sure + [0x2216] = { "sy", 0x6E }, -- setminus + [0x2217] = { "sy", 0x03 }, -- * + [0x2218] = { "sy", 0x0E }, -- circ + [0x2219] = { "sy", 0x0F }, -- bullet +-- [0x221A] = { "sy", 0x70, "ex", 0x70 }, -- sqrt. AM: Check surd?? +-- ... + [0x221D] = { "sy", 0x2F }, -- propto + [0x221E] = { "sy", 0x31 }, -- infty + [0x2225] = { "sy", 0x6B }, -- parallel + [0x2227] = { "sy", 0x5E }, -- wedge + [0x2228] = { "sy", 0x5F }, -- vee + [0x2229] = { "sy", 0x5C }, -- cap + [0x222A] = { "sy", 0x5B }, -- cup + [0x222B] = { "ex", 0x52 }, -- intop +-- ... other integrals + [0x2236] = { "mr", 0x3A }, -- colon + [0x223C] = { "sy", 0x18 }, -- sim + [0x2243] = { "sy", 0x27 }, -- simeq + [0x2248] = { "sy", 0x19 }, -- approx + [0x2261] = { "sy", 0x11 }, -- equiv + [0x2264] = { "sy", 0x14 }, -- leq + [0x2265] = { "sy", 0x15 }, -- geq + [0x226A] = { "sy", 0x1C }, -- ll + [0x226B] = { "sy", 0x1D }, -- gg + [0x227A] = { "sy", 0x1E }, -- prec + [0x227B] = { "sy", 0x1F }, -- succ +-- [0x227C] = { "sy", 0x16 }, -- preceq, AM:No see 2AAF +-- [0x227D] = { "sy", 0x17 }, -- succeq, AM:No see 2AB0 + [0x2282] = { "sy", 0x1A }, -- subset + [0x2283] = { "sy", 0x1B }, -- supset + [0x2286] = { "sy", 0x12 }, -- subseteq + [0x2287] = { "sy", 0x13 }, -- supseteq + [0x2293] = { "sy", 0x75 }, -- sqcap + [0x2294] = { "sy", 0x74 }, -- sqcup + [0x2295] = { "sy", 0x08 }, -- oplus + [0x2296] = { "sy", 0x09 }, -- ominus + [0x2297] = { "sy", 0x0A }, -- otimes + [0x2298] = { "sy", 0x0B }, -- oslash + [0x2299] = { "sy", 0x0C }, -- odot + [0x22A4] = { "sy", 0x3E }, -- top + [0x22A5] = { "sy", 0x3F }, -- bop + [0x22C0] = { "ex", 0x56 }, -- bigwedge + [0x22C1] = { "ex", 0x57 }, -- bigvee + [0x22C2] = { "ex", 0x54 }, -- bigcap + [0x22C3] = { "ex", 0x53 }, -- bigcup + [0x22C4] = { "sy", 0x05 }, -- diamond [0x22C5] = { "sy", 0x01 }, -- cdot + [0x22C6] = { "sy", 0x3F }, -- star [0x25B3] = { "sy", 0x34 }, -- triangle up [0x1D6A4] = { "mi", 0x7B }, -- imath @@ -329,35 +410,19 @@ mathematics.slots.traditional = { [0x005D] = { "mr", 0x5D, "ex", 0x03 }, -- ] [0x007C] = { "sy", 0x6A, "ex", 0x0C }, -- | [0x005C] = { "sy", 0x6E, "ex", 0x0F }, -- \ + [0x007B] = { "sy", 0x66, "ex", 0x08 }, -- { + [0x007D] = { "sy", 0x67, "ex", 0x09 }, -- } - [0x220F] = { "ex", 0x51 }, -- prod - [0x2211] = { "ex", 0x50 }, -- sum - [0x222B] = { "ex", 0x52 }, -- intop [0x005E] = { "mr", 0x5E, "ex", 0x62 }, -- widehat [0x007E] = { "mr", 0x7E, "ex", 0x65 }, -- widetilde + [0x2AAF] = { "sy", 0x16 }, -- preceq + [0x2AB0] = { "sy", 0x17 }, -- succeq + } mathematics.slots.current = mathematics.slots.traditional ---~ already obsolete ---~ ---~ do ---~ local template = "\\catcode%s=13\\gdef %s{\\%s}\\global\\mathcode%s=\"8000\\relax" ---~ function mathematics.traditional() ---~ tex.sprint(tex.ctxcatcodes,"\\begingroup") ---~ for k, v in pairs(mathematics.data) do ---~ if not v.ignore then ---~ local c = v.contextname ---~ if c then ---~ tex.sprint(template:format(k,utf.char(k),c,k)) ---~ end ---~ end ---~ end ---~ tex.sprint(tex.ctxcatcodes,"\\endgroup") ---~ end ---~ end - function mathematics.utfmathclass(chr, default) local cd = characters.data[utf.byte(chr)] return (cd and cd.mathclass) or default or "unknown" |