Preserve core for user provided nodes
This commit is contained in:
parent
a30b875e7a
commit
db60580191
@ -104,8 +104,8 @@ local digit_map = {["0"] = true, ["1"] = true,
|
||||
["5"] = true, ["6"] = true, ["7"] = true,
|
||||
["8"] = true, ["9"] = true,}
|
||||
|
||||
-- Two marker tables. They are used instead of an embellished operator to mark space-like or user provided constructs
|
||||
local user_provided, space_like = {}, {}
|
||||
-- Marker tables replacing the core operator for space like elements
|
||||
local space_like = {}
|
||||
|
||||
local nodes_to_table
|
||||
|
||||
@ -114,7 +114,7 @@ local function sup_style(s) return s//4*2+4+s%2 end
|
||||
|
||||
-- The _to_table functions generally return a second argument which is
|
||||
-- could be (if it were a <mo>) a core operator of the embellishe operator
|
||||
-- or space_like/user_provided
|
||||
-- or space_like
|
||||
-- acc_to_table is special since it's return value should
|
||||
-- always be considered a core operator
|
||||
|
||||
@ -122,8 +122,9 @@ local function sup_style(s) return s//4*2+4+s%2 end
|
||||
local function delim_to_table(delim)
|
||||
if not delim then return end
|
||||
local props = properties[delim]
|
||||
local mathml_table = props and props.mathml_table
|
||||
if mathml_table then return mathml_table end
|
||||
local mathml_core = props and props.mathml_core
|
||||
local mathml_table = props and (props.mathml_table or mathml_core)
|
||||
if mathml_table then return mathml_table, mathml_core end
|
||||
local mathml_filter = props and props.mathml_filter -- Kind of pointless since the arguments are literals, but present for consistency
|
||||
local char = delim.small_char
|
||||
if char == 0 then
|
||||
@ -150,8 +151,9 @@ end
|
||||
local function acc_to_table(acc, cur_style, stretch)
|
||||
if not acc then return end
|
||||
local props = properties[acc]
|
||||
local mathml_table = props and props.mathml_table
|
||||
if mathml_table then return mathml_table end
|
||||
local mathml_core = props and props.mathml_core
|
||||
local mathml_table = props and (props.mathml_table or mathml_core)
|
||||
if mathml_table then return mathml_table, mathml_core end
|
||||
if acc.id ~= math_char_t then
|
||||
error'confusion'
|
||||
end
|
||||
@ -173,8 +175,9 @@ end
|
||||
local function kernel_to_table(kernel, cur_style)
|
||||
if not kernel then return end
|
||||
local props = properties[kernel]
|
||||
local mathml_table = props and props.mathml_table
|
||||
if mathml_table then return mathml_table, user_provided end
|
||||
local mathml_core = props and props.mathml_core
|
||||
local mathml_table = props and (props.mathml_table or mathml_core)
|
||||
if mathml_table then return mathml_table, mathml_core end
|
||||
local mathml_filter = props and props.mathml_filter -- Kind of pointless since the arguments are literals, but present for consistency
|
||||
local id = kernel.id
|
||||
if id == math_char_t then
|
||||
@ -500,9 +503,10 @@ function nodes_to_table(head, cur_style)
|
||||
for n, id, sub in node.traverse(head) do
|
||||
local new_core, new_mn, new_node, new_noad
|
||||
local props = properties[n]
|
||||
local mathml_table = props and props.mathml_table
|
||||
local mathml_core = props and props.mathml_core
|
||||
local mathml_table = props and (props.mathml_table or mathml_core)
|
||||
if mathml_table then
|
||||
new_node, new_core = mathml_table, user_provided
|
||||
new_node, new_core = mathml_table, mathml_core
|
||||
elseif id == noad_t then
|
||||
local new_n
|
||||
new_n, new_core, new_mn = noad_to_table(n, sub, cur_style, mn)
|
||||
|
@ -19,7 +19,9 @@ lua.get_functions_table()[funcid] = function()
|
||||
properties[nucl] = props
|
||||
end
|
||||
assert(not props.mathml_table)
|
||||
local saved = assert(assert(properties[startmath]).saved_mathml_table)
|
||||
local saved_props = assert(properties[startmath])
|
||||
local saved_core = saved_props.saved_mathml_core
|
||||
local saved = assert(saved_props.saved_mathml_table or saved_core)
|
||||
if saved[0] == 'mstyle'
|
||||
and (not saved.displaystyle or saved.displaystyle == (size == 0))
|
||||
and (not saved.scriptlevel or saved.scriptlevel == (size == 0 and 0 or size-1))
|
||||
@ -38,5 +40,5 @@ lua.get_functions_table()[funcid] = function()
|
||||
if if_horizontal.index ~= iftrue_index then
|
||||
saved = {[0] = 'mpadded', width = 0, saved}
|
||||
end
|
||||
props.mathml_table = saved
|
||||
props.mathml_table, props.mathml_core = saved, saved_core
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ local function to_unicode(head, tail)
|
||||
end
|
||||
elseif node.id'math' == id then
|
||||
if props then
|
||||
local mml = props.saved_mathml_table
|
||||
local mml = props.saved_mathml_table or props.saved_mathml_core
|
||||
if mml then
|
||||
if i ~= 0 then
|
||||
result[#result+1] = {[0] = 'mtext', table.concat(subresult)}
|
||||
|
@ -9,6 +9,7 @@
|
||||
\m@th
|
||||
#1
|
||||
{#2}
|
||||
\luamml_flag_save:
|
||||
$
|
||||
}
|
||||
\finph@nt
|
||||
|
@ -35,7 +35,7 @@ end
|
||||
local function store_column(startmath, display)
|
||||
local props = properties[startmath]
|
||||
if not props then return end
|
||||
local mml = props.saved_mathml_table
|
||||
local mml = props.saved_mathml_table or props.saved_mathml_core
|
||||
if mml then return store_column_xml(mml, display) end
|
||||
end
|
||||
|
||||
|
@ -86,7 +86,7 @@ luatexbase.add_to_callback('pre_mlist_to_hlist_filter', function(mlist, style)
|
||||
else
|
||||
new_mlist = mlist
|
||||
end
|
||||
local xml = process_mlist(new_mlist, style == 'display' and 0 or 2)
|
||||
local xml, core = process_mlist(new_mlist, style == 'display' and 0 or 2)
|
||||
if flag & 2 == 0 then
|
||||
save_result(xml, style == 'display' or flag & 1 == 1)
|
||||
end
|
||||
@ -100,7 +100,7 @@ luatexbase.add_to_callback('pre_mlist_to_hlist_filter', function(mlist, style)
|
||||
props = {}
|
||||
properties[startmath] = props
|
||||
end
|
||||
props.saved_mathml_table = xml
|
||||
props.saved_mathml_table, props.saved_mathml_core = xml, core
|
||||
end
|
||||
if buffer_tail then
|
||||
mlist.prev, buffer_tail.next = nil, nil
|
||||
|
Loading…
Reference in New Issue
Block a user