diff options
Diffstat (limited to 'tex/context/base/mkxl/good-mth.lmt')
-rw-r--r-- | tex/context/base/mkxl/good-mth.lmt | 284 |
1 files changed, 2 insertions, 282 deletions
diff --git a/tex/context/base/mkxl/good-mth.lmt b/tex/context/base/mkxl/good-mth.lmt index 0c8311efe..6b0c320b2 100644 --- a/tex/context/base/mkxl/good-mth.lmt +++ b/tex/context/base/mkxl/good-mth.lmt @@ -21,7 +21,8 @@ local fontgoodies = fonts.goodies or { } local fontcharacters = fonts.hashes.characters -local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) +local trace_defining = false trackers.register ("math.defining", function(v) trace_defining = v end) +local use_math_goodies = true directives.register("math.nogoodies", function(v) use_math_goodies = not v end) local report_math = logs.reporter("mathematics","initializing") @@ -185,284 +186,3 @@ registerotffeature { node = initialize, } } - --- local helpers = fonts.helpers --- local upcommand = helpers.commands.up --- local rightcommand = helpers.commands.right --- local charcommand = helpers.commands.char --- local prependcommands = helpers.prependcommands --- --- -- experiment, we have to load the definitions immediately as they precede --- -- the definition so they need to be initialized in the typescript --- --- local function withscriptcode(tfmdata,unicode,data,action) --- if type(unicode) == "string" then --- local p, u = match(unicode,"^(.-):(.-)$") --- if u then --- u = tonumber(u) --- if u then --- local slots = helpers.mathscriptslots(tfmdata,u) --- if slots then --- if p == "*" then --- action(u,data) --- if type(slots) == "number" then --- action(slots,data) --- else --- for i=1,#slots do --- action(slots[i],data) --- end --- end --- else --- p = tonumber(p) --- if p then --- if type(slots) == "number" then --- action(slots,data) --- else --- action(slots[p],data) --- end --- end --- end --- end --- end --- end --- else --- action(unicode,data) --- end --- end --- --- local function finalize(tfmdata,feature,value,...) --- -- if tfmdata.mathparameters then -- funny, cambria text has this --- local goodies = tfmdata.goodies --- if goodies then --- local virtualized = mathematics.virtualized --- for i=1,#goodies do --- local goodie = goodies[i] --- local mathematics = goodie.mathematics --- local dimensions = mathematics and mathematics.dimensions --- if dimensions then --- if trace_defining then --- report_math("overloading dimensions in %a @ %p",tfmdata.properties.fullname,tfmdata.parameters.size) --- end --- local characters = tfmdata.characters --- local descriptions = tfmdata.descriptions --- local parameters = tfmdata.parameters --- local factor = parameters.factor --- local hfactor = parameters.hfactor --- local vfactor = parameters.vfactor --- -- --- tfmdata.type = "virtual" --- tfmdata.properties.virtualized = true --- -- --- local function overloadone(unicode,data) --- local character = characters[unicode] --- if not character then --- local c = virtualized[unicode] --- if c then --- character = characters[c] --- end --- end --- if character then --- local width = data.width --- local height = data.height --- local depth = data.depth --- if trace_defining and (width or height or depth) then --- report_math("overloading dimensions of %C, width %p, height %p, depth %p", --- unicode,width or 0,height or 0,depth or 0) --- end --- if width then character.width = width * hfactor end --- if height then character.height = height * vfactor end --- if depth then character.depth = depth * vfactor end --- -- --- local xoffset = data.xoffset --- local yoffset = data.yoffset --- if xoffset == "llx" then --- local d = descriptions[unicode] --- if d then --- xoffset = - d.boundingbox[1] --- character.width = character.width + xoffset * hfactor --- xoffset = rightcommand[xoffset] --- else --- xoffset = nil --- end --- elseif xoffset and xoffset ~= 0 then --- xoffset = rightcommand[xoffset * hfactor] --- else --- xoffset = nil --- end --- if yoffset and yoffset ~= 0 then --- yoffset = upcommand[yoffset * vfactor] --- else --- yoffset = nil --- end --- if xoffset or yoffset then --- local commands = character.commands --- if commands then --- prependcommands(commands,yoffset,xoffset) --- else --- -- character.commands = { { "offset", xoffset or 0, yoffset or 0, unicode } } --- local slot = charcommand[unicode] --- if xoffset and yoffset then --- character.commands = { xoffset, yoffset, slot } --- elseif xoffset then --- character.commands = { xoffset, slot } --- else --- character.commands = { yoffset, slot } --- end --- end --- end --- elseif trace_defining then --- report_math("no overloading dimensions of %C, not in font",unicode) --- end --- end --- local function overload(dimensions) --- for unicode, data in next, dimensions do --- withscriptcode(tfmdata,unicode,data,overloadone) --- end --- end --- if value == nil then --- value = { "default" } --- end --- if value == "all" or value == true then --- for name, value in next, dimensions do --- overload(value) --- end --- else --- if type(value) == "string" then --- value = utilities.parsers.settings_to_array(value) --- end --- if type(value) == "table" then --- for i=1,#value do --- local d = dimensions[value[i]] --- if d then --- overload(d) --- end --- end --- end --- end --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathdimensions", --- description = "manipulate math dimensions", --- -- default = true, --- manipulators = { --- base = finalize, --- node = finalize, --- } --- } - --- local enabled = false directives.register("fontgoodies.mathkerning",function(v) enabled = v end) --- --- local function initialize(tfmdata) --- if tfmdata.mathparameters then -- funny, cambria text has this --- local goodies = tfmdata.goodies --- if goodies then --- local characters = tfmdata.characters --- if characters[0x1D44E] then -- 119886 --- -- we have at least an italic a --- for i=1,#goodies do --- local mathgoodies = goodies[i].mathematics --- if mathgoodies then --- local kerns = mathgoodies.kerns --- if kerns then --- local function kernone(unicode,data) --- local chardata = characters[unicode] --- if chardata and (not chardata.mathkerns or data.force) then --- chardata.mathkerns = data --- end --- end --- for unicode, data in next, kerns do --- withscriptcode(tfmdata,unicode,data,kernone) --- end --- return --- end --- end --- end --- else --- return -- no proper math font anyway --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathkerns", --- description = "math kerns", --- -- default = true, --- initializers = { --- base = initialize, --- node = initialize, --- } --- } - --- -- math italics (not really needed) --- --- local function initialize(tfmdata) --- local goodies = tfmdata.goodies --- if goodies then --- local shared = tfmdata.shared --- for i=1,#goodies do --- local mathgoodies = goodies[i].mathematics --- if mathgoodies then --- local mathitalics = mathgoodies.italics --- if mathitalics then --- local properties = tfmdata.properties --- if properties.setitalics then --- mathitalics = mathitalics[file.nameonly(properties.name)] or mathitalics --- if mathitalics then --- if trace_goodies then --- report_goodies("loading mathitalics for font %a",properties.name) --- end --- local corrections = mathitalics.corrections --- local defaultfactor = mathitalics.defaultfactor --- -- properties.mathitalic_defaultfactor = defaultfactor -- we inherit outer one anyway (name will change) --- if corrections then --- fontgoodies.registerpostprocessor(tfmdata, function(tfmdata) -- this is another tfmdata (a copy) --- -- better make a helper so that we have less code being defined --- local properties = tfmdata.properties --- local parameters = tfmdata.parameters --- local characters = tfmdata.characters --- properties.mathitalic_defaultfactor = defaultfactor --- properties.mathitalic_defaultvalue = defaultfactor * parameters.quad --- if trace_goodies then --- report_goodies("assigning mathitalics for font %a",properties.name) --- end --- local quad = parameters.quad --- local hfactor = parameters.hfactor --- for k, v in next, corrections do --- local c = characters[k] --- if c then --- if v > -1 and v < 1 then --- c.italic = v * quad --- else --- c.italic = v * hfactor --- end --- else --- report_goodies("invalid mathitalics entry %U for font %a",k,properties.name) --- end --- end --- end) --- end --- return -- maybe not as these can accumulate --- end --- end --- end --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathitalics", --- description = "additional math italic corrections", --- -- default = true, --- initializers = { --- base = initialize, --- node = initialize, --- } --- } --- --- -- fontgoodies.register("mathitalics", initialize) |