\RequirePackage{rustex} \rustex_add_Namespace:nn{shtml}{http://kwarc.info/ns/SHTML} \rustex_add_Namespace:nn{mmt}{http://uniformal.github.io/MMT} \protected\def\stex_par:{\par} \cs_new:Nn \rustex_keyvals_do:nn { #1="#2"~ } \tl_const:Nn \c_stex_html_emptyarg_tl { \mode_if_math:TF{ \rustex_direct_HTML:n { } }{ \rustex_direct_HTML:n { \c_ampersand_str \c_hash_str 8205; } } } \cs_new_protected:Nn \_stex_html_checkempty:n { \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_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 { shtml:visible="false" ~ 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 { shtml:visible="false" ~ 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: } \prg_new_conditional:Nnn \stex_if_html_backend: {p, T, F, TF} { \prg_return_true: }