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