summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex/luamml/luamml.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/luamml/luamml.sty')
-rw-r--r--Master/texmf-dist/tex/lualatex/luamml/luamml.sty392
1 files changed, 392 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/luamml/luamml.sty b/Master/texmf-dist/tex/lualatex/luamml/luamml.sty
new file mode 100644
index 00000000000..b687ef2dbe3
--- /dev/null
+++ b/Master/texmf-dist/tex/lualatex/luamml/luamml.sty
@@ -0,0 +1,392 @@
+%%
+%% This is file `luamml.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% luamml.dtx (with options: `package,luatex')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from luamml.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file luamml.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%% Copyright (C) 2020-2025 by Marcel Krueger
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+\ProvidesExplPackage {luamml} {2025-02-17} {0.3.0}
+ {Automatically generate presentational MathML from LuaTeX math expressions}
+\int_new:N \l__luamml_flag_int
+\int_new:N \l__luamml_pretty_int
+\tl_new:N \l__luamml_filename_tl
+\tl_new:N \l__luamml_root_tl
+\tl_set:Nn \l__luamml_root_tl { mrow }
+\tl_new:N \l__luamml_label_tl
+\int_new:N \tracingmathml
+
+\int_set:Nn \l__luamml_pretty_int { 1 }
+\lua_now:n { require'luamml-tex' }
+\hook_new_with_args:nn { luamml / converted } { 1 }
+
+\cs_new_protected:Npn \__luamml_output_hook:n {
+ \hook_use:nnw { luamml / converted } { 1 }
+}
+\__luamml_register_output_hook:N \__luamml_output_hook:n
+
+\cs_new_protected:Npn \luamml_process: {
+ \tl_set:Nn \l__luamml_label_tl {}
+ \int_set:Nn \l__luamml_flag_int { 3 }
+}
+\cs_set_eq:NN \luamml_flag_process: \luamml_process:
+\cs_new:Npn \__luamml_maybe_structelem: {
+ (
+ 8 * \int_mod:nn {
+ \int_div_truncate:nn { \l__luamml_flag_int } {8}
+ } {2}
+ ) +
+}
+\cs_new:Npn \__luamml_style_to_num:N #1 {
+ 32 * #1
+}
+\cs_new_protected:Npn \luamml_save:n #1 {
+ \tl_set:Nn \l__luamml_label_tl {#1}
+ \int_set:Nn \l__luamml_flag_int { \__luamml_maybe_structelem: 1 }
+}
+\cs_new_protected:Npn \luamml_save:nN #1#2 {
+ \tl_set:Nn \l__luamml_label_tl {#1}
+ \int_set:Nn \l__luamml_flag_int { \__luamml_maybe_structelem: 17 + \__luamml_style_to_num:N #2 }
+}
+\cs_new_protected:Npn \luamml_save:nn #1 {
+ \tl_set:Nn \l__luamml_label_tl {#1}
+ \int_set:Nn \l__luamml_flag_int { \__luamml_maybe_structelem: 5 }
+ \tl_set:Nn \l__luamml_root_tl
+}
+\cs_new_protected:Npn \luamml_save:nNn #1#2 {
+ \tl_set:Nn \l__luamml_label_tl {#1}
+ \int_set:Nn \l__luamml_flag_int { \__luamml_maybe_structelem: 21 + \__luamml_style_to_num:N #2 }
+ \tl_set:Nn \l__luamml_root_tl
+}
+\cs_set_eq:NN \luamml_flag_save:n \luamml_save:n
+\cs_set_eq:NN \luamml_flag_save:nN \luamml_save:nN
+\cs_set_eq:NN \luamml_flag_save:nn \luamml_save:nn
+\cs_set_eq:NN \luamml_flag_save:nNn \luamml_save:nNn
+\cs_new_protected:Npn \luamml_ignore: {
+ \int_set:Nn \l__luamml_flag_int { 0 }
+}
+\cs_set_eq:NN \luamml_flag_ignore: \luamml_ignore:
+\cs_new_protected:Npn \luamml_structelem: {
+ \tl_set:Nn \l__luamml_label_tl {}
+ \int_set:Nn \l__luamml_flag_int { 11 }
+}
+\cs_set_eq:NN \luamml_flag_structelem: \luamml_structelem:
+\cs_new_protected:Npn \luamml_set_filename:n {
+ \tl_set:Nn \l__luamml_filename_tl
+}
+\luamml_process:
+\cs_new_protected:Npn \luamml_annotate:nen #1#2#3 {
+ \__luamml_annotate_begin:
+ #3
+ \__luamml_annotate_end:we \tex_numexpr:D #1 \scan_stop: {#2}
+}
+
+\cs_new_protected:Npn \luamml_annotate:en #1#2 {
+ \__luamml_annotate_begin:
+ #2
+ \__luamml_annotate_end:e {#1}
+}
+
+\cs_new_eq:NN \luamml_pdf_write: \scan_stop:
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/save/nn_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/save/nn}{1}
+ \AssignSocketPlug{tagsupport/math/luamml/save/nn}{noop}
+ \NewSocket{tagsupport/math/luamml/save/nNn}{1}
+ \AssignSocketPlug{tagsupport/math/luamml/save/nNn}{noop}
+ }
+\NewSocketPlug{tagsupport/math/luamml/save/nNn}{luamml}
+ {
+ \luamml_save:nNn #1
+ }
+\AssignSocketPlug{tagsupport/math/luamml/save/nNn}{luamml}
+\NewSocketPlug{tagsupport/math/luamml/save/nn}{luamml}
+ {
+ \luamml_save:nn #1
+ }
+\AssignSocketPlug{tagsupport/math/luamml/save/nn}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/annotate/false_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/annotate/false}{2}
+ \NewSocketPlug{tagsupport/math/luamml/annotate/false}{default}{#2}
+ \AssignSocketPlug{tagsupport/math/luamml/annotate/false}{default}
+ }
+\NewSocketPlug{tagsupport/math/luamml/annotate/false}{luamml}
+ {
+ \luamml_annotate:en { core = false }
+ {
+ #2
+ }
+ }
+\AssignSocketPlug{tagsupport/math/luamml/annotate/false}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/array/finalize_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/array/save}{0}
+ \NewSocket{tagsupport/math/luamml/array/finalize}{0}
+ \NewSocket{tagsupport/math/luamml/array/initcol}{0}
+ \NewSocket{tagsupport/math/luamml/array/finalizecol}{1}
+ \AssignSocketPlug{tagsupport/math/luamml/array/finalizecol}{noop}
+ }
+\AddToHook{package/array/after}{\lua_now:n { require'luamml-array' }}
+\NewSocketPlug{tagsupport/math/luamml/array/save}{luamml}
+ {
+ \__luamml_array_save_array:
+ }
+\NewSocketPlug{tagsupport/math/luamml/array/finalize}{luamml}
+ {
+ \mode_if_math:T { \__luamml_array_finalize_array: }
+ }
+\NewSocketPlug{tagsupport/math/luamml/array/initcol}{luamml}
+ {
+ \__luamml_array_init_col:
+ }
+\NewSocketPlug{tagsupport/math/luamml/array/finalizecol}{luamml}
+ {
+ \__luamml_array_finalize_col:w #1~
+ }
+\AssignSocketPlug{tagsupport/math/luamml/array/save}{luamml}
+\AssignSocketPlug{tagsupport/math/luamml/array/finalize}{luamml}
+\AssignSocketPlug{tagsupport/math/luamml/array/initcol}{luamml}
+\AssignSocketPlug{tagsupport/math/luamml/array/finalizecol}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/finalizecol_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/mtable/finalizecol}{1}
+ }
+\NewSocketPlug{tagsupport/math/luamml/mtable/finalizecol}{luamml}
+ {
+ \use:c{__luamml_amsmath_add_#1_to_row:}
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/finalizecol}{luamml}
+
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/innertable/save_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/mtable/innertable/save}{0}
+ \NewSocket{tagsupport/math/luamml/mtable/smallmatrix/save}{0}
+ \NewSocket{tagsupport/math/luamml/mtable/innertable/finalize}{0}
+ }
+\NewSocketPlug{tagsupport/math/luamml/mtable/innertable/save}{luamml}
+ {
+ \__luamml_amsmath_save_inner_table:n \@currenvir
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/innertable/save}{luamml}
+\NewSocketPlug{tagsupport/math/luamml/mtable/smallmatrix/save}{luamml}
+ {
+ \__luamml_amsmath_save_smallmatrix:
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/smallmatrix/save}{luamml}
+\NewSocketPlug{tagsupport/math/luamml/mtable/innertable/finalize}{luamml}
+ {
+ \__luamml_amsmath_finalize_inner_table:
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/innertable/finalize}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/finalize_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/mtable/finalize}{1}
+ \AssignSocketPlug{tagsupport/math/luamml/mtable/finalize}{noop}
+ }
+\NewSocketPlug{tagsupport/math/luamml/mtable/finalize}{luamml}
+ {
+ \__luamml_amsmath_finalize_table:n {#1}
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/finalize}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/aligncol_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/mtable/aligncol}{1}
+ \AssignSocketPlug{tagsupport/math/luamml/mtable/aligncol}{noop}
+ }
+\NewSocketPlug{tagsupport/math/luamml/mtable/aligncol}{luamml}
+ {
+ \__luamml_amsmath_set_row_columnalign:n {#1}
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/aligncol}{luamml}
+
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/mtable/tag/save_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/mtable/tag/save}{0}
+ \NewSocket{tagsupport/math/luamml/mtable/tag/set}{0}
+ }
+\NewSocketPlug{tagsupport/math/luamml/mtable/tag/save}{luamml}
+ {
+ \__luamml_amsmath_save_tag:
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/tag/save}{luamml}
+\NewSocketPlug{tagsupport/math/luamml/mtable/tag/set}{luamml}
+ {
+ \__luamml_amsmath_set_tag:
+ }
+\AssignSocketPlug{tagsupport/math/luamml/mtable/tag/set}{luamml}
+
+\str_if_exist:cF { l__socket_tagsupport/math/display/tag/begin_plug_str }
+ {
+ \NewSocket{tagsupport/math/display/tag/begin}{0}
+ \NewSocket{tagsupport/math/display/tag/end}{0}
+ }
+\clist_map_inline:nn
+ {
+ align,
+ align*,
+ alignat,
+ alignat*,
+ xalignat,
+ xalignat*,
+ %xxalignat,
+ flalign,
+ flalign*,
+ gather,
+ gather*,
+ %multline, % NO
+ %multline*, % NO
+ %equation, % NO
+ %equation*, % NO
+ %split, % NO
+ }
+ {\tl_const:cn { c__luamml_label_#1_tl}{}}
+\NewSocketPlug{tagsupport/math/display/tag/begin}{luamml}
+ {
+ \tag_mc_end:
+ \bool_lazy_and:nnTF
+ { \tl_if_exist_p:c { c__luamml_label_ \@currenvir _tl } }
+ { \int_if_odd_p:n { \int_div_truncate:nn { \l__luamml_flag_int } { 8 } } }
+ {
+ %\typeout{Stash~and~move~\@currenvir\c_space_tl Lbl}
+ \tag_struct_begin:n {tag=Lbl,stash}
+ \directlua{table.insert(ltx.__tag.struct.luamml.labels,\tag_get:n{struct_num})}
+ }
+ {
+ \tag_struct_begin:n {tag=Lbl}
+ }
+ \tag_mc_begin:n {}
+ }
+\AssignSocketPlug{tagsupport/math/display/tag/begin}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/hbox_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/hbox}{2}
+ \NewSocketPlug{tagsupport/math/luamml/hbox}{default}{#2}
+ \AssignSocketPlug{tagsupport/math/luamml/hbox}{default}
+ }
+\NewSocketPlug{tagsupport/math/luamml/hbox}{luamml}
+ {
+ \bool_lazy_and:nnTF
+ { \mode_if_math_p: }
+ { \int_if_odd_p:n { \int_div_truncate:nn { \l__luamml_flag_int } { 8 } } }
+ {
+ \tag_struct_begin:n
+ {
+ tag=mtext,
+ stash,
+ }
+ \tag_mc_begin:n {}
+ \luamml_annotate:en
+ {
+ nucleus = true,
+ structnum=\tag_get:n{struct_num}
+ }
+ { #2 }
+ \tag_mc_end:
+ \tag_struct_end:
+ }
+ { #2 }
+ }
+\AssignSocketPlug{tagsupport/math/luamml/hbox}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/artifact_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/artifact}{0}
+ }
+\NewSocketPlug{tagsupport/math/luamml/artifact}{luamml}
+ {
+ \int_if_odd:nT { \int_div_truncate:nn { \l__luamml_flag_int } { 8 } }
+ {
+ \tag_mc_begin:n{artifact}
+ }
+ }
+\AssignSocketPlug{tagsupport/math/luamml/artifact}{luamml}
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/finph@nt_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/finph@nt}{2}
+ \NewSocketPlug{tagsupport/math/luamml/finph@nt}{default}{#2}
+ \AssignSocketPlug{tagsupport/math/luamml/finph@nt}{default}
+ }
+\NewSocketPlug{tagsupport/math/luamml/finph@nt}{luamml}
+ {
+ \luamml_annotate:nen {1}
+ {
+ nucleus = true,
+ core =
+ {
+ [0] = 'mpadded',
+ \ifh@\else
+ width = 0,
+ \fi
+ \ifv@\else
+ height = 0, depth = 0,
+ \fi
+ consume_label'mathphant',
+ }
+ }
+ { #2 }
+ }
+\AssignSocketPlug{tagsupport/math/luamml/finph@nt}{luamml}
+
+\str_if_exist:cF { l__socket_tagsupport/math/luamml/finsm@sh_plug_str }
+ {
+ \NewSocket{tagsupport/math/luamml/finsm@sh}{2}
+ \NewSocketPlug{tagsupport/math/luamml/finsm@sh}{default}{#2}
+ \AssignSocketPlug{tagsupport/math/luamml/finsm@sh}{default}
+ }
+\NewSocketPlug{tagsupport/math/luamml/finsm@sh}{luamml}
+ {
+ \luamml_annotate:nen {2}
+ {
+ nucleus = true,
+ core =
+ consume_label('mathsmash',
+ function(padded)
+ padded.height, padded.depth = 0, 0~
+ end),
+ }
+ { #2 }
+ }
+\AssignSocketPlug{tagsupport/math/luamml/finsm@sh}{luamml}
+\cs_new_protected:Npn \__luamml_patch_package:nn #1 #2 {
+ \@ifpackageloaded {#1} {#2} {
+ \hook_gput_code:nnn {package/#1/after} {luamml} {#2}
+ }
+}
+\cs_new_protected:Npn \__luamml_patch_package:n #1 {
+ \__luamml_patch_package:nn {#1} {
+ \RequirePackage { luamml-patches-#1 }
+ }
+}
+\RequirePackage { luamml-patches-kernel }
+\__luamml_patch_package:n {amstext}
+\__luamml_patch_package:n {amsmath}
+\__luamml_patch_package:n {mathtools}
+
+\endinput
+%%
+%% End of file `luamml.sty'.