diff --git a/luamml-amsmath.lua b/luamml-amsmath.lua index 892b656..4a49f93 100644 --- a/luamml-amsmath.lua +++ b/luamml-amsmath.lua @@ -4,8 +4,8 @@ local save_result = require'luamml-tex'.save_result local properties = node.get_properties_table() -local funcid = luatexbase.new_luafunction'luamml_amsmath_add_box_to_row:' -token.set_lua('luamml_amsmath_add_box_to_row:', funcid, 'protected') +local funcid = luatexbase.new_luafunction'__luamml_amsmath_add_box_to_row:' +token.set_lua('__luamml_amsmath_add_box_to_row:', funcid, 'protected') lua.get_functions_table()[funcid] = function() -- TODO: Error handling etc -- local box = token.scan_int() @@ -36,8 +36,8 @@ lua.get_functions_table()[funcid] = function() table.insert(mml_row, mml) end -local funcid = luatexbase.new_luafunction'luamml_amsmath_finalize_row:' -token.set_lua('luamml_amsmath_finalize_row:', funcid, 'protected') +funcid = luatexbase.new_luafunction'__luamml_amsmath_finalize_row:' +token.set_lua('__luamml_amsmath_finalize_row:', funcid, 'protected') lua.get_functions_table()[funcid] = function() -- TODO: Error handling etc local row_temp = tex.nest[tex.nest.ptr-1] @@ -59,8 +59,8 @@ lua.get_functions_table()[funcid] = function() table.insert(mml_table, mml_row) end -local funcid = luatexbase.new_luafunction'luamml_amsmath_finalize_table:' -token.set_lua('luamml_amsmath_finalize_table:', funcid) +funcid = luatexbase.new_luafunction'__luamml_amsmath_finalize_table:' +token.set_lua('__luamml_amsmath_finalize_table:', funcid) lua.get_functions_table()[funcid] = function() -- TODO: Error handling etc local props = properties[tex.lists.align_head] @@ -78,15 +78,43 @@ lua.get_functions_table()[funcid] = function() save_result(mml_table, 0) end -funcid = luatexbase.new_luafunction'luamml_last_math_alignmark:' -token.set_lua('luamml_last_math_alignmark:', funcid, 'protected') +local last_tag + +funcid = luatexbase.new_luafunction'__luamml_amsmath_save_tag:' +token.set_lua('__luamml_amsmath_save_tag:', funcid, 'protected') lua.get_functions_table()[funcid] = function() - local n = tex.nest.top.tail - n = n.nucleus or n - local props = properties[n] - if not props then - props = {} - properties[n] = props + local nest = tex.nest.top + local chars = {} + for n, id, sub in node.traverse(nest.head.next) do + if id == node.id'glyph' then + if sub >= 0x100 then + texio.write_nl'WARNING: Already shaped glyph detected in tag. This might lead to wrong output.' + end + chars[#chars+1] = n.char + elseif id == node.id'glue' then + chars[#chars+1] = 0x20 + elseif id == node.id'kern' then + else + print(n) + texio.write_nl'WARNING: Unsupported node in tag dropped' + end end - props.mathml_table = {[0] = 'malignmark'} + last_tag = utf8.char(table.unpack(chars)) +end + +funcid = luatexbase.new_luafunction'__luamml_amsmath_set_tag:' +token.set_lua('__luamml_amsmath_set_tag:', funcid, 'protected') +lua.get_functions_table()[funcid] = function() + if not last_tag then + texio.write_nl'WARNING: Tag extraction failed' + return + end + local row_temp = tex.nest[tex.nest.ptr-1] + local props = properties[row_temp] + if not props then return end + if not props.mathml_row then return end + mml_row = props.mathml_row + mml_row[0] = 'mlabeledtr' + table.insert(mml_row, 1, {[0] = 'mtd', {[0] = 'mtext', last_tag}}) + last_tag = nil end diff --git a/luamml-patches-amsmath.sty b/luamml-patches-amsmath.sty index ae74dc9..81d6f12 100644 --- a/luamml-patches-amsmath.sty +++ b/luamml-patches-amsmath.sty @@ -17,14 +17,14 @@ \ifmeasuring@ \luamml_flag_ignore: \else - \luamml_flag_save: + \luamml_flag_save: \fi $ } \ifmeasuring@ \savefieldlength@ \else - \luamml_amsmath_add_box_to_row: + \__luamml_amsmath_add_box_to_row: \fi \set@field \tabskip\z@skip @@ -48,7 +48,7 @@ \ifmeasuring@ \savefieldlength@ \else - \luamml_amsmath_add_box_to_row: + \__luamml_amsmath_add_box_to_row: \fi \set@field \hfil @@ -66,7 +66,6 @@ \add@amps \maxfields@ \omit \kern -\alignsep@ - \luamml_amsmath_finalize_row: \iftag@ \setboxz@h { \@lign @@ -74,7 +73,9 @@ { \make@display@tag } } \place@tag + \__luamml_amsmath_set_tag: \fi + \__luamml_amsmath_finalize_row: \ifst@rred \else \global \@eqnswtrue @@ -83,10 +84,19 @@ \cr } +\cs_set:Npn \maketag@@@ #1 { + \hbox { + \m@th + \normalfont + #1 + \__luamml_amsmath_save_tag: + } +} + \cs_set:Npn \endalign { \math@cr \black@ \totwidth@ - \luamml_amsmath_finalize_table: + \__luamml_amsmath_finalize_table: \egroup \ifingather@ \restorealignstate@