mathml/luamml-pdf.sty

120 lines
3.1 KiB
Plaintext
Raw Normal View History

\ProvidesExplPackage {luamml-pdf} {2021-05-31} {0.0.1-alpha}
{MathML generation for L̶u̶a̶pdfLaTeX}
2021-06-06 06:23:13 +02:00
\cs_if_exist:NTF \showstream {
\iow_new:N \l__luamml_pdf_stream
\iow_open:Nn \l__luamml_pdf_stream { \jobname .tml }
\cs_new_protected:Npn \__luamml_pdf_showlists: {
\group_begin:
\int_set:Nn \tex_showboxdepth:D { \c_max_int }
\int_set:Nn \tex_showboxbreadth:D { \c_max_int }
\showstream = \l__luamml_pdf_stream
\tex_showlists:D
\group_end:
}
} {
\cs_set_eq:NN \l__luamml_pdf_stream \c_log_iow
\cs_set_eq:NN \__luamml_pdf_set_showstream: \scan_stop:
\cs_new_protected:Npn \__luamml_pdf_showlists: {
\group_begin:
\int_set:Nn \l_tmpa_int { \tex_interactionmode:D }
\int_set:Nn \tex_interactionmode:D { 0 }
\int_set:Nn \tex_showboxdepth:D { \c_max_int }
\int_set:Nn \tex_showboxbreadth:D { \c_max_int }
\tex_showlists:D
\int_set:Nn \tex_interactionmode:D { \l_tmpa_int }
\group_end:
}
}
\int_new:N \g__luamml_formula_id_int
\cs_new_protected:Npn \luamml_pdf_write: {
\int_gincr:N \g__luamml_formula_id_int
2021-06-06 06:23:13 +02:00
\iow_now:Nx \l__luamml_pdf_stream {
LUAMML_FORMULA_BEGIN:
\int_use:N \g__luamml_formula_id_int
}
\__luamml_pdf_showlists:
2021-06-06 06:23:13 +02:00
\iow_now:Nx \l__luamml_pdf_stream {
LUAMML_FORMULA_END
}
}
\cs_new:Npn \luamml_pdf_last_formula: {
\int_use:N \g__luamml_formula_id_int
}
\cs_generate_variant:Nn \tl_to_str:n { e }
% annotate parameters
% #1 number of top level nodes to be annotated
% #2 annotation
% #3 nodes to be annotated
\int_new:N \g__luamml_annotation_id_int
\cs_new_protected:Npn \luamml_pdf_annotate:nnn #1#2#3 {
\int_gincr:N \g__luamml_annotation_id_int
2021-06-06 06:23:13 +02:00
\iow_shipout_x:Nx \l__luamml_pdf_stream {
\tl_to_str:e {
LUAMML_MARK:
\int_use:N \g__luamml_annotation_id_int
:
count = \int_eval:n {#1},
#2
}
\exp_not:N \iow_newline:
LUAMML_MARK_END
}
#3
}
% annotate parameters
% #1 annotation
% #2 nodes to be annotated
% THIS VERSION IS SIGNIFICANTLY SLOWER
\cs_new_protected:Npn \luamml_pdf_annotate:nn #1#2 {
\int_gincr:N \g__luamml_annotation_id_int
2021-06-06 06:23:13 +02:00
\iow_shipout_x:Nx \l__luamml_pdf_stream {
2021-06-03 17:28:22 +02:00
\tl_to_str:e {
LUAMML_MARK:
\int_use:N \g__luamml_annotation_id_int
:
count = data.count[\int_use:N \g__luamml_annotation_id_int],
#1
}
\exp_not:N \iow_newline:
LUAMML_MARK_END
}
2021-06-06 06:23:13 +02:00
\iow_now:Nx \l__luamml_pdf_stream {
2021-06-03 17:28:22 +02:00
LUAMML_COUNT:
\int_use:N \g__luamml_annotation_id_int
}
2021-06-03 17:28:22 +02:00
\__luamml_pdf_showlists:
#2
2021-06-06 06:23:13 +02:00
\iow_now:Nx \l__luamml_pdf_stream {
2021-06-03 17:28:22 +02:00
LUAMML_COUNT_END
}
\__luamml_pdf_showlists:
}
\NewDocumentCommand \RegisterFamilyMapping {m m} {
2021-06-06 06:23:13 +02:00
\iow_now:Nx \l__luamml_pdf_stream {
LUAMML_INSTRUCTION:REGISTER_MAPPING: \int_use:N #1 : #2
}
}
\endinput
\cs_new:Npn \__luamml_patch_package:nn #1 #2 {
\@ifpackageloaded {#1} {#2} {
\hook_gput_code:nnn {package/after/#1} {luamml} {#2}
}
}
\cs_new:Npn \__luamml_patch_package:n #1 {
\__luamml_patch_package:nn {#1} {
\RequirePackage { luamml-patches-#1 }
}
}
\RequirePackage { luamml-patches-kernel }
\__luamml_patch_package:n {amsmath}
\__luamml_patch_package:n {array}