local luaxml_sty = require "luaxml-sty"
-- try 
local xmltransform = luaxml_sty.transformations.html
if not xmltransform then
  xmltransform = luaxml_sty.declare_transformer("html")
end


xmltransform:add_action("head", [[
\tableofcontents
]])

xmltransform:add_action("img", [[\noindent\includegraphics[max width=\textwidth]{@{src}}]])

xmltransform:add_action("h1", [[\addcontentsline{toc}{section}{%s}\section*{%s}
]])
xmltransform:add_action("h2", [[\addcontentsline{toc}{subsection}{%s}\subsection*{%s}
]])
-- don't add lower sectioning level than subsection
xmltransform:add_action("h3", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s}
]])
xmltransform:add_action("h4", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s}
]])
xmltransform:add_action("h5", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s}
]])
xmltransform:add_action("h6", [[\addcontentsline{toc}{subsubsection}{%s}\subsubsection*{%s}
]])

xmltransform:add_action("i", [[\textit{%s}]])
xmltransform:add_action("em", [[\emph{%s}]])
xmltransform:add_action("b", [[\textbf{%s}]])
xmltransform:add_action("strong", [[\textbf{%s}]])
xmltransform:add_action("tt", [[\texttt{%s}]])
xmltransform:add_action("samp", [[\texttt{%s}]])
xmltransform:add_action("kbd", [[\texttt{%s}]])
xmltransform:add_action("var", [[\textit{%s}]])
xmltransform:add_action("dfn", [[\texttt{%s}]])
xmltransform:add_action("code", [[\texttt{%s}]])
xmltransform:add_action("a[href]", [[\textit{%s}\protect\footnote{\texttt{@{href}}}]])


local itemize = [[
\begin{itemize}
%s
\end{itemize}
]]
xmltransform:add_action("ul", itemize)
xmltransform:add_action("menu", itemize)
xmltransform:add_action("ol", [[
\begin{enumerate}
%s
\end{enumerate}
]])

xmltransform:add_action("dl", [[
\begin{description}
%s
\end{description}
]])


xmltransform:add_action("li", "\\item %s\n")
xmltransform:add_action("dt", "\\item[%s] ")

local quote = [[
\begin{quotation}
%s
\end{quotation}
]]

xmltransform:add_action("blockquote", quote)
xmltransform:add_action("q", "\\enquote{%s}")
xmltransform:add_action("abbr", "%s\\protect\\footnote{@{title}}")
xmltransform:add_action("sup", "\\textsuperscript{%s}")
xmltransform:add_action("sub", "\\textsubscript{%s}")

xmltransform:add_action("table", [[
\begin{calstable}
%s
\end{calstable}
]])

xmltransform:add_action("tr", "\\brow %s \\erow")
xmltransform:add_action("td", "\\cell{%s}")
xmltransform:add_action("th", "\\cell{%s}")


-- this is the original code for verbatim, but I changed LuaXML to not escape characters in verbatim,
-- so we can use the verbatim environment
xmltransform:add_action("pre", [[{\parindent=0pt\obeylines\ttfamily\catcode`\ =\active\def {\ }\catcode`\#=11%%
%s}

]], {verbatim=true})
xmltransform:add_action("pre *", [[%s]])

-- 
xmltransform:add_action("pre", [[
\begin{verbatim}%s\end{verbatim}
]], {verbatim=true})

xmltransform:add_action("details", [[%s
]])

xmltransform:add_action("details summary", [[
\medskip
\noindent %s

\smallskip
\noindent
]])

xmltransform:add_action("figure", [[
\begin{figure}[hbt!]
\centering

%s

\end{figure}
]])

xmltransform:add_action("figcaption", [[\caption{%s}]])


xmltransform:add_action("p", [[

%s

]])

xmltransform:add_action("br", [[\\]])

-- some fixes for weird web pages
xmltransform:add_action("a p", [[%s]])
xmltransform:add_action("h1 a[href], h2 a[href], h3 a[href], h4 a[href], h5 a[href], h6 a[href]", "%s")


-- mathjax is special element added by rmodepdf around LaTeX math
xmltransform:add_action("mathjax",[[%s]], {verbatim=true,collapse_newlines=false})

xmltransform:add_action("hyperlink", "\\hyperlink{@{href}}{%s}")
xmltransform:add_action("hypertarget", "\\hypertarget{@{id}}{%s}")

return xmltransform