\RequirePackage{rustex} \rustex_add_Namespace:nn{ftml}{http://kwarc.info/ns/FTML} \rustex_add_Namespace:nn{mmt}{http://uniformal.github.io/MMT} \protected\def\stex_par:{\par} \cs_new:Nn \rustex_keyvals_do:nn { #1="#2"~ } \cs_new_protected:Nn \_stex_annotate_force_break:n { \c_stex_html_emptyarg_tl #1 } \tl_const:Nn \c_stex_html_emptyarg_tl { \exp_args:No\stex_html_literal:n{\detokenize{}} } \cs_new_protected:Nn \_stex_html_checkempty:n { \mode_if_vertical:TF { \tl_if_empty:nTF {#1} { \c_stex_html_emptyarg_tl }{ #1 }\stex_par: }{ \tl_if_empty:nTF {#1} { \c_stex_html_emptyarg_tl }{ #1 } } } \cs_new_protected:Nn \stex_annotate:nn { \tl_if_empty:nF{#1}{ \mode_if_vertical:T{\hbox_unpack:N\c_empty_box} } \exp_args:Ne \rustex_annotate_HTML:nn { \keyval_parse:NNn\TODO\rustex_keyvals_do:nn{#1} }{ \_stex_html_checkempty:n { #2 } } } \cs_new_protected:Nn \stex_html_node:nnn { \tl_if_empty:nF{#2}{ \mode_if_vertical:T{\hbox_unpack:N\c_empty_box} } \exp_args:Nne \rustex_HTML_node:nnn {#1}{ \keyval_parse:NNn\TODO\rustex_keyvals_do:nn{#2} }{ \_stex_html_checkempty:n { #3 } } } \cs_set_eq:NN \stex_css_link:n \rustex_css_link:n \cs_set_eq:NN \stex_css_literal:n \rustex_css_literal:n \cs_new_protected:Nn \stex_annotate_invisible:n { \tl_if_eq:nnT{#1}{\stex_annotate_invisible:n}{ \errmessage{^^J Illegal~argument~for~HTML~annotation^^J^^J This~is~likely~due~to~a~missing~argument~ to~a~semantic~macro~somewhere } } \rustex_annotate_HTML:nn { data-ftml-invisible="true" ~ style:display="none" } { %\mode_if_math:F\hbox{ \_stex_html_checkempty:n { #1 } %} } } \cs_new_protected:Nn \stex_annotate_invisible:nn { \exp_args:Ne \rustex_annotate_HTML:nn { data-ftml-invisible="true" ~ style:display="none" ~ \keyval_parse:NNn\TODO\rustex_keyvals_do:nn{#1} } { %\mode_if_math:F\hbox{ \_stex_html_checkempty:n { #2 } %} } } \NewDocumentEnvironment{stex_annotate_env} { m } { \stex_par: \exp_args:Ne \rustex_annotate_HTML_begin:n { \keyval_parse:NNn\TODO\rustex_keyvals_do:nn{#1} } }{ \stex_par: \rustex_annotate_HTML_end: } \NewDocumentEnvironment{stex_env_node} { mm } { \stex_par: \exp_args:Nne \rustex_HTML_node_begin:nn{#1} { \keyval_parse:NNn\TODO\rustex_keyvals_do:nn{#2} } }{ \stex_par: \rustex_annotate_HTML_end: } \prg_new_conditional:Nnn \stex_if_html_backend: {p, T, F, TF} { \prg_return_true: } \cs_set_eq:NN \stex_html_literal:n\rustex_HTML_literal:n