diff options
Diffstat (limited to 'tex/context/base/math-ext.lua')
-rw-r--r-- | tex/context/base/math-ext.lua | 394 |
1 files changed, 197 insertions, 197 deletions
diff --git a/tex/context/base/math-ext.lua b/tex/context/base/math-ext.lua index 2b6860d75..b00d6cde2 100644 --- a/tex/context/base/math-ext.lua +++ b/tex/context/base/math-ext.lua @@ -1,197 +1,197 @@ -if not modules then modules = { } end modules ['math-ext'] = {
- 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"
-}
-
-local trace_virtual = false trackers.register("math.virtual", function(v) trace_virtual = v end)
-
-local basename = file.basename
-
-local mathematics = mathematics
-local characters = characters
-
-local report_math = logs.reporter("mathematics")
-
-mathematics.extras = mathematics.extras or { }
-local extras = mathematics.extras
-
-characters.math = characters.math or { }
-local mathdata = characters.math
-local chardata = characters.data
-
-function extras.add(unicode,t) -- todo: if already stored ...
- local min, max = mathematics.extrabase, mathematics.privatebase - 1
- -- if mathdata[unicode] or chardata[unicode] then
- -- report_math("extra %U overloads existing character",unicode)
- -- end
- if unicode >= min and unicode <= max then
- mathdata[unicode], chardata[unicode] = t, t
- else
- report_math("extra %U should be in range %U - %U",unicode,min,max)
- end
-end
-
-function extras.copy(target,original)
- local characters = target.characters
- local properties = target.properties
- local parameters = target.parameters
- for unicode, extradesc in next, mathdata do
- -- always, because in an intermediate step we can have a non math font
- local extrachar = characters[unicode]
- local nextinsize = extradesc.nextinsize
- if nextinsize then
- local first = 1
- local charused = unicode
- if not extrachar then
- for i=1,#nextinsize do
- local slot = nextinsize[i]
- extrachar = characters[slot]
- if extrachar then
- characters[unicode] = extrachar
- first = i + 1
- charused = slot
- break
- end
- end
- end
- if not extrachar then
- if trace_virtual then
- report_math("extra %U in %a at %p with class %a and name %a is not mapped",
- unicode,basename(properties.fullname),parameters.size,
- extradesc.mathclass,extradesc.mathname)
- end
- elseif not extrachar.next then
- local nextused = false
- for i=first,#nextinsize do
- local nextslot = nextinsize[i]
- local nextbase = characters[nextslot]
- if nextbase then
- local nextnext = nextbase and nextbase.next
- if nextnext then
- local nextchar = characters[nextnext]
- if nextchar then
- extrachar.next = nextchar
- nextused = nextslot
- break
- end
- end
- end
- end
- if trace_virtual then
- if nextused then
- report_math("extra %U in %a at %p with class %a and name %a maps onto %U with next %U",
- unicode,basename(properties.fullname),parameters.size,charused,
- extradesc.mathclass,extradesc.mathname,nextused)
- else
- report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next",
- unicode,basename(properties.fullname),parameters.size,charused,
- extradesc.mathclass,extradesc.mathname)
- end
- end
- else
- if trace_virtual then
- report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next", -- own next
- unicode,basename(properties.fullname),parameters.size,charused,
- extradesc.mathclass,extradesc.mathname)
- end
- end
- end
- end
-end
-
-utilities.sequencers.appendaction(mathactions,"system","mathematics.extras.copy")
-
--- 0xFE302 -- 0xFE320 for accents (gone with new lm/gyre)
---
--- extras.add(0xFE302, {
--- category="mn",
--- description="WIDE MATHEMATICAL HAT",
--- direction="nsm",
--- linebreak="cm",
--- mathclass="topaccent",
--- mathname="widehat",
--- mathstretch="h",
--- unicodeslot=0xFE302,
--- nextinsize={ 0x00302, 0x0005E },
--- } )
---
--- extras.add(0xFE303, {
--- category="mn",
--- cjkwd="a",
--- description="WIDE MATHEMATICAL TILDE",
--- direction="nsm",
--- linebreak="cm",
--- mathclass="topaccent",
--- mathname="widetilde",
--- mathstretch="h",
--- unicodeslot=0xFE303,
--- nextinsize={ 0x00303, 0x0007E },
--- } )
-
--- 0xFE321 -- 0xFE340 for missing characters
-
-extras.add(0xFE321, {
- category="sm",
- description="MATHEMATICAL SHORT BAR",
- -- direction="on",
- -- linebreak="nu",
- mathclass="relation",
- mathname="mapstochar",
- unicodeslot=0xFE321,
-} )
-
-extras.add(0xFE322, {
- category="sm",
- description="MATHEMATICAL LEFT HOOK",
- mathclass="relation",
- mathname="lhook",
- unicodeslot=0xFE322,
-} )
-
-extras.add(0xFE323, {
- category="sm",
- description="MATHEMATICAL RIGHT HOOK",
- mathclass="relation",
- mathname="rhook",
- unicodeslot=0xFE323,
-} )
-
-extras.add(0xFE324, {
- category="sm",
- description="MATHEMATICAL SHORT BAR MIRRORED",
--- direction="on",
--- linebreak="nu",
- mathclass="relation",
- mathname="mapsfromchar",
- unicodeslot=0xFE324,
-} )
-
---~ extras.add(0xFE304, {
---~ category="sm",
---~ description="TOP AND BOTTOM PARENTHESES",
---~ direction="on",
---~ linebreak="al",
---~ mathclass="doubleaccent",
---~ mathname="doubleparent",
---~ unicodeslot=0xFE304,
---~ accents={ 0x023DC, 0x023DD },
---~ } )
-
---~ extras.add(0xFE305, {
---~ category="sm",
---~ description="TOP AND BOTTOM BRACES",
---~ direction="on",
---~ linebreak="al",
---~ mathclass="doubleaccent",
---~ mathname="doublebrace",
---~ unicodeslot=0xFE305,
---~ accents={ 0x023DE, 0x023DF },
---~ } )
-
---~ \Umathchardef\braceld="0 "1 "FF07A
---~ \Umathchardef\bracerd="0 "1 "FF07B
---~ \Umathchardef\bracelu="0 "1 "FF07C
---~ \Umathchardef\braceru="0 "1 "FF07D
+if not modules then modules = { } end modules ['math-ext'] = { + 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" +} + +local trace_virtual = false trackers.register("math.virtual", function(v) trace_virtual = v end) + +local basename = file.basename + +local mathematics = mathematics +local characters = characters + +local report_math = logs.reporter("mathematics") + +mathematics.extras = mathematics.extras or { } +local extras = mathematics.extras + +characters.math = characters.math or { } +local mathdata = characters.math +local chardata = characters.data + +function extras.add(unicode,t) -- todo: if already stored ... + local min, max = mathematics.extrabase, mathematics.privatebase - 1 + -- if mathdata[unicode] or chardata[unicode] then + -- report_math("extra %U overloads existing character",unicode) + -- end + if unicode >= min and unicode <= max then + mathdata[unicode], chardata[unicode] = t, t + else + report_math("extra %U should be in range %U - %U",unicode,min,max) + end +end + +function extras.copy(target,original) + local characters = target.characters + local properties = target.properties + local parameters = target.parameters + for unicode, extradesc in next, mathdata do + -- always, because in an intermediate step we can have a non math font + local extrachar = characters[unicode] + local nextinsize = extradesc.nextinsize + if nextinsize then + local first = 1 + local charused = unicode + if not extrachar then + for i=1,#nextinsize do + local slot = nextinsize[i] + extrachar = characters[slot] + if extrachar then + characters[unicode] = extrachar + first = i + 1 + charused = slot + break + end + end + end + if not extrachar then + if trace_virtual then + report_math("extra %U in %a at %p with class %a and name %a is not mapped", + unicode,basename(properties.fullname),parameters.size, + extradesc.mathclass,extradesc.mathname) + end + elseif not extrachar.next then + local nextused = false + for i=first,#nextinsize do + local nextslot = nextinsize[i] + local nextbase = characters[nextslot] + if nextbase then + local nextnext = nextbase and nextbase.next + if nextnext then + local nextchar = characters[nextnext] + if nextchar then + extrachar.next = nextchar + nextused = nextslot + break + end + end + end + end + if trace_virtual then + if nextused then + report_math("extra %U in %a at %p with class %a and name %a maps onto %U with next %U", + unicode,basename(properties.fullname),parameters.size,charused, + extradesc.mathclass,extradesc.mathname,nextused) + else + report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next", + unicode,basename(properties.fullname),parameters.size,charused, + extradesc.mathclass,extradesc.mathname) + end + end + else + if trace_virtual then + report_math("extra %U in %a at %p with class %a and name %a maps onto %U with no next", -- own next + unicode,basename(properties.fullname),parameters.size,charused, + extradesc.mathclass,extradesc.mathname) + end + end + end + end +end + +utilities.sequencers.appendaction(mathactions,"system","mathematics.extras.copy") + +-- 0xFE302 -- 0xFE320 for accents (gone with new lm/gyre) +-- +-- extras.add(0xFE302, { +-- category="mn", +-- description="WIDE MATHEMATICAL HAT", +-- direction="nsm", +-- linebreak="cm", +-- mathclass="topaccent", +-- mathname="widehat", +-- mathstretch="h", +-- unicodeslot=0xFE302, +-- nextinsize={ 0x00302, 0x0005E }, +-- } ) +-- +-- extras.add(0xFE303, { +-- category="mn", +-- cjkwd="a", +-- description="WIDE MATHEMATICAL TILDE", +-- direction="nsm", +-- linebreak="cm", +-- mathclass="topaccent", +-- mathname="widetilde", +-- mathstretch="h", +-- unicodeslot=0xFE303, +-- nextinsize={ 0x00303, 0x0007E }, +-- } ) + +-- 0xFE321 -- 0xFE340 for missing characters + +extras.add(0xFE321, { + category="sm", + description="MATHEMATICAL SHORT BAR", + -- direction="on", + -- linebreak="nu", + mathclass="relation", + mathname="mapstochar", + unicodeslot=0xFE321, +} ) + +extras.add(0xFE322, { + category="sm", + description="MATHEMATICAL LEFT HOOK", + mathclass="relation", + mathname="lhook", + unicodeslot=0xFE322, +} ) + +extras.add(0xFE323, { + category="sm", + description="MATHEMATICAL RIGHT HOOK", + mathclass="relation", + mathname="rhook", + unicodeslot=0xFE323, +} ) + +extras.add(0xFE324, { + category="sm", + description="MATHEMATICAL SHORT BAR MIRRORED", +-- direction="on", +-- linebreak="nu", + mathclass="relation", + mathname="mapsfromchar", + unicodeslot=0xFE324, +} ) + +--~ extras.add(0xFE304, { +--~ category="sm", +--~ description="TOP AND BOTTOM PARENTHESES", +--~ direction="on", +--~ linebreak="al", +--~ mathclass="doubleaccent", +--~ mathname="doubleparent", +--~ unicodeslot=0xFE304, +--~ accents={ 0x023DC, 0x023DD }, +--~ } ) + +--~ extras.add(0xFE305, { +--~ category="sm", +--~ description="TOP AND BOTTOM BRACES", +--~ direction="on", +--~ linebreak="al", +--~ mathclass="doubleaccent", +--~ mathname="doublebrace", +--~ unicodeslot=0xFE305, +--~ accents={ 0x023DE, 0x023DF }, +--~ } ) + +--~ \Umathchardef\braceld="0 "1 "FF07A +--~ \Umathchardef\bracerd="0 "1 "FF07B +--~ \Umathchardef\bracelu="0 "1 "FF07C +--~ \Umathchardef\braceru="0 "1 "FF07D |