Don't require unicode-math

This commit is contained in:
Marcel Fabian Krüger 2021-04-22 23:38:28 +02:00
parent b83f2c1d8c
commit 8be2760919
3 changed files with 57 additions and 12 deletions

View File

@ -14,6 +14,16 @@ local noad_sub = node.subtypes'noad'
local radical_sub = node.subtypes'radical' local radical_sub = node.subtypes'radical'
local fence_sub = node.subtypes'fence' local fence_sub = node.subtypes'fence'
local remap_lookup = setmetatable({}, {__index = function(t, k)
local ch = utf8.char(k & 0x1FFFFF)
t[k] = ch
return ch
end})
local digit_map = {["0"] = true, ["1"] = true,
["2"] = true, ["3"] = true, ["4"] = true,
["5"] = true, ["6"] = true, ["7"] = true,
["8"] = true, ["9"] = true,}
local nodes_to_table local nodes_to_table
local function sub_style(s) return s//4*2+5 end local function sub_style(s) return s//4*2+5 end
@ -25,7 +35,8 @@ local function delim_to_table(delim)
local props = properties[delim] props = props and props.mathml_table local props = properties[delim] props = props and props.mathml_table
if props then return props end if props then return props end
local fam = delim.small_fam local fam = delim.small_fam
return {[0] = 'mo', utf8.char(delim.small_char), ['tex:family'] = fam ~= 0 and fam or nil, stretchy = not stretchy[delim.small_char] or nil } local char = remap_lookup[fam << 21 | delim.small_char]
return {[0] = 'mo', char, ['tex:family'] = fam ~= 0 and fam or nil, stretchy = not stretchy[char] or nil }
end end
-- Like kernel_to_table but always a math_char_t. Also creating a mo and potentially remapping to handle combining chars -- Like kernel_to_table but always a math_char_t. Also creating a mo and potentially remapping to handle combining chars
@ -36,9 +47,9 @@ local function acc_to_table(acc, cur_style, stretch)
if acc.id ~= math_char_t then if acc.id ~= math_char_t then
error'confusion' error'confusion'
end end
local char = utf8.char(acc.char)
char = remap_comb[char] or char
local fam = acc.fam local fam = acc.fam
local char = remap_lookup[fam << 21 | acc.char]
char = remap_comb[char] or char
if stretch ~= not stretchy[char] then -- Handle nil gracefully in stretchy if stretch ~= not stretchy[char] then -- Handle nil gracefully in stretchy
stretch = nil stretch = nil
end end
@ -51,10 +62,14 @@ local function kernel_to_table(kernel, cur_style)
if props then return props end if props then return props end
local id = kernel.id local id = kernel.id
if id == math_char_t then if id == math_char_t then
local char = kernel.char
local elem = char >= 0x30 and char < 0x39 and 'mn' or 'mi'
local fam = kernel.fam local fam = kernel.fam
return {[0] = elem, utf8.char(char), ['tex:family'] = fam ~= 0 and fam or nil, mathvariant = char < 0x10000 and 'normal' or nil } local char = remap_lookup[fam << 21 | kernel.char]
local elem = digit_map[char] and 'mn' or 'mi'
return {[0] = elem,
char,
['tex:family'] = fam ~= 0 and fam or nil,
mathvariant = #char == 1 and utf8.codepoint(char) < 0x10000 and 'normal' or nil
}
elseif id == sub_box_t then elseif id == sub_box_t then
return {[0] = 'mi', {[0] = 'mglyph', ['tex:box'] = kernel.list}} return {[0] = 'mi', {[0] = 'mglyph', ['tex:box'] = kernel.list}}
elseif id == sub_mlist_t then elseif id == sub_mlist_t then
@ -269,7 +284,14 @@ function nodes_to_table(head, cur_style)
return result return result
end end
return function(head, style) local function register_remap(family, mapping)
family = family << 21
for from, to in next, mapping do
remap_lookup[family | from] = utf8.char(to)
end
end
local function to_mml(head, style)
local result = nodes_to_table(head, style or 0) local result = nodes_to_table(head, style or 0)
result[0] = 'math' result[0] = 'math'
result.xmlns = 'http://www.w3.org/1998/Math/MathML' result.xmlns = 'http://www.w3.org/1998/Math/MathML'
@ -279,3 +301,8 @@ return function(head, style)
end end
return result return result
end end
return {
register_family = register_remap,
process = to_mml,
}

View File

@ -1,14 +1,30 @@
local inspect = require'inspect' local inspect = require'inspect'
local function show(t) return print(inspect(t)) end local function show(t) return print(inspect(t)) end
local mlist_to_table = require'mlist_to_mml' local mlist_to_mml = require'mlist_to_mml'
local process_mlist = mlist_to_mml.process
local register_family = mlist_to_mml.register_family
local mappings = require'remap'
local write_xml = require'write_xml' local write_xml = require'write_xml'
local funcid = luatexbase.new_luafunction'RegisterFamilyMapping'
token.set_lua('RegisterFamilyMapping', funcid, 'protected')
lua.get_functions_table()[funcid] = function()
local fam = token.scan_int()
local mapping = token.scan_string()
if mappings[mapping] then
register_family(fam, mappings[mapping])
else
tex.error(string.format('Unknown font mapping %q', mapping))
end
end
luatexbase.add_to_callback('pre_mlist_to_hlist_filter', function(mlist, style) luatexbase.add_to_callback('pre_mlist_to_hlist_filter', function(mlist, style)
print'\n\n' print''
local xml = mlist_to_table(mlist, style == 'display' and 2 or 0) local xml = process_mlist(mlist, style == 'display' and 2 or 0)
print(write_xml(xml)) print(write_xml(xml))
-- print(write_xml(xml, '\n')) -- print(write_xml(xml, '\n'))
print'\n' print''
return true return true
end, 'dump_list') end, 'dump_list')

View File

@ -1,6 +1,8 @@
\documentclass{article} \documentclass{article}
\usepackage{unicode-math} % \usepackage{unicode-math}
\directlua{require'test_tex'} \directlua{require'test_tex'}
\RegisterFamilyMapping\symsymbols{oms}
\RegisterFamilyMapping\symletters{oml}
\begin{document} \begin{document}
\[ \[
ax^2+b+c=0 ax^2+b+c=0