\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 { <mi></mi>  }
  }{
    \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:
}