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 b00d6cde2..2b6860d75 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
|