%D \module
%D   [       file=x-ldx,
%D        version=2008.06.03,
%D          title=\CONTEXT\ Modules,
%D       subtitle=Lua Source Pretty Printing,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

% this will become an extra

\setupxml[default=hidden]

\usemodule[x][mathml]
\usemodule[abr-02]

\xmlregistersetup{xml:mml:define}
\xmlregistersetup{xml:ldx:define}

\xmlregisterns{ldx}{ldx}

\startxmlsetups xml:ldx:define
    \xmlsetsetup {#1} {ldx:*} {ldx:*}
\stopxmlsetups

% % %

\startxmlsetups ldx:p
    \xmlflush{#1}\par
\stopxmlsetups

\startxmlsetups ldx:source
    \source{\xmlflush{#1}}
\stopxmlsetups

\startxmlsetups ldx:key
    \dontleavehmode{\bf\xmlflush{#1}}
\stopxmlsetups

\startxmlsetups ldx:variable
    \xmlflush{#1}
%     \expanded{\variable{\xmlflush{#1}}}
\stopxmlsetups

\startxmlsetups ldx:function
    \dontleavehmode{\bf function}\space\xmlflush{#1}
%     \expanded{\function{\xmlflush{#1}}}
\stopxmlsetups

\startxmlsetups ldx:com
    \dontleavehmode{\tt--\xmlflush{#1}}
\stopxmlsetups

\startxmlsetups ldx:document
    \page
    \xmlflush{#1}
    \determineregistercharacteristics[function]
    \startmode[*register]
        \testpage[4]
        \extra{Functions}
        \placeregister[function]
    \stopmode
    \determineregistercharacteristics[variable]
    \startmode[*register]
        \testpage[4]
        \extra{Variables}
        \placeregister[variable]
    \stopmode
\stopxmlsetups

\newcounter\CommentCounter

\startxmlsetups ldx:comment
    \blank
    \doglobal\increment\CommentCounter
    \margintitle{\bf\CommentCounter}
    \xmlflush{#1}
    \blank
\stopxmlsetups

\startxmlsetups ldx:dqs
    \dontleavehmode\bgroup\tt"\xmlflush{#1}"\egroup
\stopxmlsetups

\startxmlsetups ldx:sqs
    \dontleavehmode\bgroup\tt'\xmlflush{#1}'\egroup
\stopxmlsetups

\startxmlsetups ldx:code
    \startpacked
    \xmlflush{#1}\relax
    \stoppacked
\stopxmlsetups

\startluacode
    function xml.finalizers.tex.cdatatobuffer(c,name)
        buffers.assign(name,xml.cdata(c[1]))
    end
\stopluacode

\startxmlsetups ldx:luacode
    \blank
    \begingroup
    \switchtobodyfont[dejavu-condensed]
    \xmlfilter{#1}{./cdatatobuffer('name')}
    \scitebuffer[lua][name]
    \endgroup
    \blank
\stopxmlsetups

\startxmlsetups ldx:lines
    \startpacked
    \xmlflush{#1}
    \stoppacked
\stopxmlsetups

\startxmlsetups ldx:line
    \doifelsenothing {\xmlflush{#1}} {
        \xmlflush{#1}\crlf
    } {
        \dontleavehmode \hbox to \hsize \bgroup
            \strut
            \hskip.25\dimexpr\xmlattdef{#1}{n}{0}em\relax\relax % extra relax needed !
            \doif {\xmlatt{#1}{comment}} {yes} {\tt}
            \xmlflush{#1}
            \hss
       \egroup
       \endgraf
    }
\stopxmlsetups

\startxmlsetups ldx:logo
    \uppercasestring\xmlatt{#1}{label}\xmlatt{#1}{name}\to\ascii
    \ifx\ascii\empty\else\getvalue{\ascii}\fi
\stopxmlsetups

\startxmlsetups ldx:l
    \uppercasestring\xmlatt{#1}{l}\xmlatt{#1}{n}\to\ascii
    \ifx\ascii\empty\else\getvalue{\ascii}\fi
\stopxmlsetups

\startxmlsetups ldx:typing
    \blank
    \startpacked \tt
    \xmlverbatim{#1}
    \stoppacked
    \blank
\stopxmlsetups

\startxmlsetups ldx:type
    \dontleavehmode{\tt\xmlflush{#1}}
\stopxmlsetups

\startxmlsetups ldx:t
    \dontleavehmode{\tt\xmlflush{#1}}
\stopxmlsetups

% key     -> kw
% dqs     -> dq
% sqs     -> sq
% line    -> ln
% code    -> cd
% comment -> tx (text)

\usemodule[scite]

\switchtobodyfont
  [dejavu-condensed,10pt] % preload

\setupbodyfont
  [dejavu,10pt] % main font

\mainlanguage
  [en]

\setupwhitespace
  [big]

\defineregister[function]
\defineregister[variable]

\definehead[source][subject]
\definehead[extra] [subsubject]
\definehead[topic] [subsubsubject]

\setuphead
  [source]
  [style=\bfb]

\setuphead
  [extra]
  [style=\bfa]

\setuphead
  [topic]
  [style=\bf]

\setuplayout
  [width=middle,
   height=middle,
   footer=0pt,
   header=1.5cm,
   backspace=1.5cm,
   topspace=1.5cm]

\doifmode {nocolor} {

  \setupcolors
    [conversion=always]

}
\endinput
