Don't require unicode-math
This commit is contained in:
parent
b83f2c1d8c
commit
8be2760919
@ -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,
|
||||||
|
}
|
||||||
|
24
test_tex.lua
24
test_tex.lua
@ -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')
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user