%D \module
%D   [       file=x-set-11,
%D        version=2004.10.31,
%D         remark=setupx.tex: 1998.07.20 and later,
%D          title=\CONTEXT\ Setup Definitions,
%D       subtitle=Macro Definitions,
%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.

% module x-set-02 loads the mapping, after that we can say:
%
% texmfstart texexec --int=nl --pdf --global --result=setup-nl x-set-12

\startmessages  dutch  library: setup
        title:  setup
      formula:  formule
       number:  getal
         list:  lijst
    dimension:  maat
         mark:  markering
    reference:  verwijzing
      command:  commando
         file:  file
         name:  naam
   identifier:  naam
         text:  tekst
      section:  sectie
     singular:  naam enkelvoud
       plural:  naam meervoud
       matrix:  n*m
          see:  zie
     inherits:  erft van
            1:  de karakters < en > zijn globaal actief!
            2:  -- wordt verwerkt
            3:  -- is niet gedefinieerd
            4:  -- wordt nogmaals verwerkt
     optional:  optioneel
  displaymath:  formule
        index:  ingang
         math:  formule
      nothing:  leeg
         file:  file
     position:  positie
    reference:  verwijzing
       csname:  naam
  destination:  bestemming
      triplet:  triplet
         word:  woord
      content:  tekst
\stopmessages

\startmessages  english  library: setup
        title:  setup
      formula:  formula
       number:  number
         list:  list
    dimension:  dimension
         mark:  mark
    reference:  reference
      command:  command
         file:  file
         name:  name
   identifier:  identifier
         text:  text
      section:  section
     singular:  singular name
       plural:  plural name
       matrix:  n*m
          see:  see
     inherits:  inherits from
            1:  the characters < and > are globally active!
            2:  -- is processed
            3:  -- is undefined
            4:  -- is processed again
     optional:  optional
  displaymath:  formula
        index:  entry
         math:  formula
      nothing:  empty
         file:  file
     position:  position
    reference:  reference
       csname:  name
  destination:  destination
      triplet:  triplet
         word:  word
      content:  text
\stopmessages

\startmessages  german library: setup
        title:  Setup
      formula:  Formel
       number:  Nummer
         list:  Liste
    dimension:  Dimension
         mark:  Beschriftung
    reference:  Referenz
      command:  Befehl
         file:  Datei
         name:  Name
   identifier:  Name
         text:  Text
      section:  Abschnitt
     singular:  singular
       plural:  plural
       matrix:  n*m
          see:  siehe
     inherits:  inherits from
            1:  Die Zeichen < und > gelten global!
            2:  -- wird verarbeitet
            3:  -- ist undefiniert
            4:  -- ist mehrmals verarbeitet
     optional:  optioneel
  displaymath:  formula
        index:  entry
         math:  formula
      nothing:  empty
         file:  file
     position:  position
    reference:  reference
       csname:  name
  destination:  destination
      triplet:  triplet
         word:  word
      content:  text
\stopmessages

\startmessages  czech  library: setup
        title:  setup
      formula:  rovnice
       number:  cislo
         list:  seznam
    dimension:  dimenze
         mark:  znacka
    reference:  reference
      command:  prikaz
         file:  soubor
         name:  jmeno
   identifier:  jmeno
         text:  text
      section:  sekce
     singular:  jmeno v singularu
       plural:  jmeno v pluralu
       matrix:  n*m
          see:  viz
     inherits:  inherits from
            1:  znaky < a > jsou globalne aktivni!
            2:  -- je zpracovano
            3:  -- je nedefinovano
            4:  -- je zpracovano znovu
     optional:  optioneel
  displaymath:  formula
        index:  entry
         math:  formula
      nothing:  empty
         file:  file
     position:  position
    reference:  reference
       csname:  name
  destination:  destination
      triplet:  triplet
         word:  word
      content:  text
\stopmessages

\startmessages  italian library: setup
        title:  setup
      formula:  formula
       number:  number
         list:  list
    dimension:  dimension
         mark:  mark
    reference:  reference
      command:  command
         file:  file
         name:  name
   identifier:  name
         text:  text
      section:  section
     singular:  singular name
       plural:  plural name
       matrix:  n*m
          see:  see
     inherits:  inherits from
            1:  the characters < and > are globally active!
            2:  -- is processed
            3:  -- is undefined
            4:  -- is processed again
     optional:  optioneel
  displaymath:  formula
        index:  entry
         math:  formula
      nothing:  empty
         file:  file
     position:  position
    reference:  reference
       csname:  name
  destination:  destination
      triplet:  triplet
         word:  word
      content:  text
\stopmessages

\startmessages  romanian library: setup
        title:  setari
      formula:  formula
       number:  numar
         list:  lista
    dimension:  dimensiune
         mark:  marcaj
    reference:  referinta
      command:  comanda
         file:  fisier
         name:  nume
   identifier:  nume
         text:  text
      section:  sectiune
     singular:  nume singular
       plural:  nume pluram
       matrix:  n*m
          see:  vezi
     inherits:  inherits from
            1:  caracterele < si > sunt active global!
            2:  este procesat --
            3:  -- este nedefinit
            4:  -- este procesat din nou
     optional:  optioneel
  displaymath:  formula
        index:  entry
         math:  formula
      nothing:  empty
         file:  file
     position:  position
    reference:  reference
       csname:  name
  destination:  destination
      triplet:  triplet
         word:  word
      content:  text
\stopmessages

\startmessages  french  library: setup
        title:  réglage
      formula:  formule
       number:  numéro
         list:  liste
    dimension:  dimension
         mark:  marquage
    reference:  reference
      command:  commande
         file:  fichier
         name:  nom
   identifier:  identificateur
         text:  texte
      section:  section
     singular:  nom singulier
       plural:  nom pluriel
       matrix:  n*m
          see:  vois
     inherits:  herite de
            1:  les caractères < et > sont globalement actifs !
            2:  -- est traité
            3:  -- n'est pas défini
            4:  -- est traité de nouveau
     optional:  optionel
  displaymath:  formule
        index:  entrée
         math:  formule
      nothing:  vide
         file:  fichier
     position:  position
    reference:  réference
       csname:  nom
  destination:  destination
      triplet:  triplet
         word:  mot
      content:  texte
\stopmessages

\unprotect

% general

\def\setupnumfont  {}
\def\setuptxtfont  {}
\def\setupintfont#1{\uppercase{#1}}
\def\setupvarfont  {\sl}
\def\setupoptfont  {\sl}
\def\setupalwcolor {}
\def\setupoptcolor {darkgray}

\defineXMLenvironmentsave [cd:content] [list=,state=]
  {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\def\c!setup!internal!#1%
  {{\setmessagetext{setup}{#1}%
    \expanded{\setupintfont{\currentmessagetext}}}}

\def\c!setup!text!#1%
  {{\setmessagetext{setup}{#1}%
    \setupvarfont{\currentmessagetext}}}

\def\c!setup!command!#1%
  {{\setupvarfont{\texescape...#1}}}

\def\??stp{@@stp}

\defineregister
  [texmacro]
  [texmacros]

\definesorting
  [texcommand]
  [texcommands]

\setupsorting
  [texcommand]
  [\c!command=\@@stpcommand,
   \c!criterium=\@@stpcriterium]

\definesorting
  [eachtexcommand]
  [alltexcommands]

\setupsorting
  [eachtexcommand]
  [\c!command=\@@stpcommand,
   \c!criterium=\v!all]

\pushmacro\setuptext

\defineframedtext
  [setuptext]
  [\c!width=\hsize,
   \c!height=\v!fit,
   \c!align=\v!right,
   \c!offset=0.75em]

\popmacro\setuptext

\newif\ifshortsetup

\def\doshowsetup
  {\dosingleempty\dodoshowsetup}

\def\dodoshowsetup[#1]%
  {\iffirstargument
     \doshowsetup{#1}%
   \else
     \expandafter\doshowsetup
   \fi}

\bgroup \catcode`\<=\active

\gdef\doshowsetup#1%
  {\bgroup
   \def<<##1>>{##1}%
   \edef\ascii{#1}%
   \enableXML
   \doifelseXMLelement{stp:\ascii}
     {\expanded{\flushXMLelement{stp:\ascii}}}
     {\doifelseXMLelement{stp:\ascii:1}
        {\expanded{\flushXMLelement{stp:\ascii:1}}}
        {\defconvertedargument\ascii{#1}%
         \em unknown setup \quote{\ascii}}}
   \egroup}

\egroup

\def\setup     {\shortsetupfalse\doshowsetup}
\def\showsetup {\shortsetupfalse\doshowsetup}
\def\shortsetup{\shortsetuptrue \doshowsetup}
\def\setupsetup{\dodoubleargument\getparameters[\??stp]}

\setupsetup
  [\c!before=,
   \c!after=,
   \c!command=\setup,
   \c!criterium=\v!used]

% verwijzing: 0 geen verwijzingen plaatsen / wel genereren
%             1 alleen bij zie plaatsen / wel genereren
%             2 alle verwijzingen plaatsen / niet genereren
%             3 bij zie commando klikken / wel genereren

\setupsetup
  [\c!reference=0]

\def\placesetup
  {\bgroup
   \getvalue{\e!place\e!listof texcommands}%
   \egroup}

\def\placeallsetups
  {\bgroup
   \setupsetup[\c!reference=2]%
   \setupreferencing[\c!state=\v!stop]%
   \getvalue{\e!place\e!listof alltexcommands}%
   \egroup}

\let\placeeverysetup\placeallsetups

\let\plaatssetup    \placesetup
\let\plaatselkesetup\placeallsetups

% we use :1 as fallback
%
% \setup{setupinterlinespace}
% \setup{setupinterlinespace:1}
% \setup{setupinterlinespace:2}

% todo: make this proper mkiv xml

\defineXMLenvironmentsave [cd:define] [name=]
  {}
  {\setxvalue{cd:def:\XMLop{name}}{\XMLflush{cd:define}}}

\defineXMLsingular [cd:resolve] [name=]
  {\ignorespaces\getvalue{cd:def:\XMLop{name}}\ignorespaces}

\defineXMLenvironment [cd:command] [name=,type=,generated=,interactive=,variant=]
  {}
  {\showSETUPrecord}

\def\showSETUPrecord
  {\getvalue{\e!start setuptext}
     \tttf
     \nohyphens
     \veryraggedright
     \startXMLmapping [one]
       \doglobal\newcounter\currentSETUPargument
       \global\let\maximumSETUPargument\currentSETUPargument
       \bgroup
         \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
         \doifelseXMLop{type}{environment}
           {\tex{\e!start}}{\tex{}}\ignorespaces
         \XMLflush{cd:sequence}\ignorespaces
       \egroup
       \doifelseXMLempty{cd:arguments}
         {}
         {\bgroup
            \setbox0=\hbox{\XMLflush{cd:arguments}}%
            \global\let\maximumSETUPargument\currentSETUPargument
            \doglobal\newcounter\currentSETUPargument
            \ignorespaces\XMLflush{cd:arguments}%
            \doif{\XMLpar{cd:command}{type}{}}{environment}
              {\hskip.5em\unknown\hskip.5em
               \doif{\XMLpar{cd:command}{generated}{}}{yes}{\ttsl}%
               \tex{\e!stop}\ignorespaces\XMLflush{cd:sequence}}%
            \endgraf
          \egroup
         %\bgroup
         %  \tx
         %  \doif{\XMLpar{cd:command}{interactive}{}}{yes}      {\quad INTERACTIVE}%
         %  \doif{\XMLpar{cd:command}{interactive}{}}{exclusive}{\quad INTERACTIVE ONLY}%
         %\egroup
        \startXMLmapping [two]
          \bgroup
            \doglobal\newcounter\currentSETUPargument
            \blank[\v!line]
            \switchtobodyfont[small] % kan sneller
            \ignorespaces\XMLflush{cd:arguments}\endgraf
          \egroup
        \stopXMLmapping}
     \stopXMLmapping
   \getvalue{\e!stop setuptext}}

\defineXMLenvironmentsave [cd:sequence]  \ignorespaces \ignorespaces
\defineXMLenvironmentsave [cd:arguments] \ignorespaces \ignorespaces

%D This is the first pass; here we generate the top line.

\newcounter\currentSETUPargument
\def\currentSETUPwidth{0pt}

% environmentsave ?

\startXMLmapping [one]

\defineXMLenvironmentsave [cd:string] [value=]
  {\XMLop{value}\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:variable] [value=]
  {{\expanded{\setupintfont{\XMLop{value}}}}\ignorespaces}
  {\ignorespaces}

% moet een standaard type worden

\defineXMLenvironmentsave [cd:assignments] [list=,state=]
  {\showSETUPassignment\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:keywords] [list=,state=]
  {\showSETUPkeyword\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:content] [list=,state=]
  {\showSETUPcontent\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
  {\showSETUPdisplaymath\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:index] [list=,state=]
  {\showSETUPindex\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:math] [list=,state=]
  {\showSETUPmath\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:nothing] [list=,state=]
  {\showSETUPnothing\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:file] [list=,state=]
  {\showSETUPfile\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:position] [list=,state=]
  {\showSETUPposition\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:reference] [list=,state=]
  {\showSETUPreference\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:csname] [list=,state=]
  {\showSETUPcsname\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:destination] [list=,state=]
  {\showSETUPdestination\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:triplet] [list=,state=]
  {\showSETUPtriplet\ignorespaces} {\ignorespaces}

\defineXMLenvironmentsave [cd:word] [list=,state=]
  {\showSETUPword\ignorespaces} {\ignorespaces}

\stopXMLmapping

%D This is the second pass; here we generate the table.

\startXMLmapping [two]

\def\startfirstSETUPcolumn#1%
  {\bgroup
   \advance\leftskip 2em
   \noindent\llap{\hbox to 2em{#1\hss}}}

\def\stopfirstSETUPcolumn
  {\endgraf
   \egroup}

\def\startsecondSETUPcolumn#1#2%
  {\bgroup
   \advance\hangindent \currentSETUPwidth
   \advance\hangindent 2.5em
   \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}%
   \ignorespaces}

\def\stopsecondSETUPcolumn
  {\endgraf
   \egroup}

\def\secondSETUPcolumn#1#2%
  {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}

\def\previousSETUPargument{\currentSETUPargument}

\defineXMLenvironmentsave [cd:assignments]
  {}
  {\xdef\currentSETUPwidth{0pt}%
   \bgroup
   \defineXMLenvironment [cd:parameter] [name=]
     {\setbox0=\hbox{\potentialXMLentity{\XMLop{name}}}%
      \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi}%
     {}%
   \setbox0=\vbox{\XMLflush{cd:assignments}}%
   \egroup
   \startfirstSETUPcolumn{\showSETUPnumber}%
     \doifelseXMLempty{cd:assignments}
       {\secondSETUPcolumn{\c!setup!text!{see} \previousSETUPargument}{}}
       {\ignorespaces
        \XMLflush{cd:assignments}%
        \let\previousSETUPargument\currentSETUPargument}%
   \stopfirstSETUPcolumn
   \blank[\v!halfline]
   \ignorespaces}

\defineXMLenvironmentsave [cd:keywords] [optional=no]
  {}
  {\startfirstSETUPcolumn{\showSETUPnumber}%
     \doifelseXMLempty{cd:keywords}
       {\secondSETUPcolumn{see \previousSETUPargument}{}}
       {\ignorespaces
        \XMLflush{cd:keywords}%
        \let\previousSETUPargument\currentSETUPargument}%
   \stopfirstSETUPcolumn
   \blank[\v!halfline]
   \ignorespaces}

\defineXMLenvironment [cd:parameter] [name=]
  {\startsecondSETUPcolumn{\potentialXMLentity{\XMLop{name}}}{=}%
   \ignorespaces}
  {\stopsecondSETUPcolumn
   \ignorespaces}

\defineXMLenvironmentsave [cd:constant] [type=,default=]
  {\doifXMLop{default}{yes}{\underbar}%
     {\potentialXMLentity{\XMLop{type}}}\space\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:variable] [value=]
  {\potentialXMLentity{\XMLop{value}}\space\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:inherit] [name=]
  {\secondSETUPcolumn{\c!setup!text!{inherits} \tex{}\XMLop{name}}{}\ignorespaces}
  {\ignorespaces}

\def\simpleSETUPargument#1%
  {\startfirstSETUPcolumn{\showSETUPnumber}%
      \c!setup!internal!{#1}%
   \stopfirstSETUPcolumn}

\defineXMLenvironmentsave [cd:content] [list=,state=]
  {\simpleSETUPargument{content}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:displaymath] [list=,state=]
  {\simpleSETUPargument{display math}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:index] [list=,state=]
  {\simpleSETUPargument{index}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:math] [list=,state=]
  {\simpleSETUPargument{math}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:nothing] [list=,state=]
  {\simpleSETUPargument{nothing}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:file] [list=,state=]
  {\simpleSETUPargument{file name}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:position] [list=,state=]
  {\simpleSETUPargument{position}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:reference] [list=,state=]
  {\simpleSETUPargument{reference}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:csname] [list=,state=]
  {\simpleSETUPargument{csname}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:destination] [list=,state=]
  {\simpleSETUPargument{destination}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:triplet] [list=,state=]
  {\simpleSETUPargument{triplet}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\defineXMLenvironmentsave [cd:word] [list=,state=]
  {\simpleSETUPargument{word}\blank[\v!halfline]\ignorespaces}
  {\ignorespaces}

\stopXMLmapping

\defineXMLentity [cd:command]        {\c!setup!internal!{command}}
\defineXMLentity [cd:dimension]      {\c!setup!internal!{dimension}}
\defineXMLentity [cd:file]           {\c!setup!internal!{file}}
\defineXMLentity [cd:name]           {\c!setup!internal!{identifier}}
\defineXMLentity [cd:character]      {\c!setup!internal!{character}}
\defineXMLentity [cd:mark]           {\c!setup!internal!{mark}}
\defineXMLentity [cd:number]         {\c!setup!internal!{number}}
\defineXMLentity [cd:reference]      {\c!setup!internal!{reference}}
\defineXMLentity [cd:plural]         {\c!setup!internal!{plural}}
\defineXMLentity [cd:singular]       {\c!setup!internal!{singular}}
\defineXMLentity [cd:text]           {\c!setup!internal!{text}}
\defineXMLentity [cd:formula]        {\c!setup!internal!{formula}}
\defineXMLentity [cd:file]           {\c!setup!internal!{file}}
\defineXMLentity [cd:matrix]         {\c!setup!internal!{matrix}}
\defineXMLentity [cd:list]           {\c!setup!internal!{list}}
\defineXMLentity [cd:section]        {\c!setup!internal!{section}}

\defineXMLentity [cd:noargument]     {\c!setup!command!{}}
\defineXMLentity [cd:oneargument]    {\c!setup!command!{\#1}}
\defineXMLentity [cd:twoarguments]   {\c!setup!command!{\#1\#2}}
\defineXMLentity [cd:threearguments] {\c!setup!command!{\#1\#2\#3}}

%D Todo:

\defineXMLprocess [cd:choice]

%D Auxiliary.

\unexpanded\def\showSETUP#1#2%
  {\bgroup
   \doglobal\increment\currentSETUPargument
   \setbox0=\hbox
     {\doifelseXMLop{list}{yes}{#2}{#1}}%
   \setbox2=\hbox to \wd0
     {\hss
      \raise1ex\hbox
        {\tx\ifcase\maximumSETUPargument\relax
           \or*\else\currentSETUPargument
         \fi}%
      \hss}%
   \setbox4=\hbox to \wd0
     {\hss
      \lower2ex\hbox
        \bgroup
          \txx\doifXMLop{optional}{yes}{\c!setup!internal!{optional}}%
        \egroup
      \hss}%
   \ht2\ht\strutbox
   \dp4\dp\strutbox
   \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2%
   \egroup}

\def\showSETUPnumber
  {\doglobal\increment\currentSETUPargument
   \hbox to 2em
     {\ifcase\maximumSETUPargument\relax
        \or*\else\currentSETUPargument
      \fi
      \hss}}

\def\showSETUPassignment {\showSETUP
  {[.\lower.5ex\hbox{=}.]}
  {[..,.\lower.5ex\hbox{=}.,..]}}

\def\showSETUPkeyword {\showSETUP
  {[...]}
  {[...,...]}}

\def\showSETUPargument {\showSETUP
  {\leftargument..\rightargument}
  {\leftargument..,...,..\rightargument}}

\def\showSETUPdisplaymath {\showSETUP
  {\$\$...\$\$}
  {\$\$...\$\$}}

\def\showSETUPindex {\showSETUP
  {\leftargument...\rightargument}
  {\leftargument..+...+..\rightargument}}

\def\showSETUPmath {\showSETUP
  {\$...\$}
  {\$...\$}}

\def\showSETUPnothing {\showSETUP
  {...}
  {}}

\def\showSETUPfile {\showSETUP
  {~...~}
  {}}

\def\showSETUPposition {\showSETUP
  {(...)}
  {(...,...)}}

\def\showSETUPreference {\showSETUP
  {[...]}
  {[...,...]}}

\def\showSETUPcsname {\showSETUP
  {{\c!setup!command!{}}}
  {}}

\def\showSETUPdestination {\showSETUP
  {[\leftargument..[ref]\rightargument]}
  {[..,\leftargument..[ref,..]\rightargument,..]}}

\def\showSETUPtriplet {\showSETUP
  {[x:y:z=]}
  {[x:y:z=,..]}}

\def\showSETUPword {\showSETUP
  {\leftargument...\rightargument}
  {\leftargument.. ... ..\rightargument}}

\def\showSETUPcontent {\showSETUP
  {\leftargument...\rightargument}
  {\leftargument.. ... ..\rightargument}}

%\def\c!par!{\c!setup!internal!{endofpar}}
%\def\c!repeat!{\c!opt!{{\setupvarfont n}*}}
%\showSETUP\def\c!par!{\texescape par}
%\showSETUP\def\c!sep!{\texescape\texescape}
%\def\c!par!{\addtypespec{delimiter}{par}}       % \par
%\def\c!sep!{\addtypespec{separator}{backslash}} % \\
%\def\c!repeat!{}
%\def\c!tex!#1{\addtypespec{command}{#1}\doanother{tex}}

\startXMLmapping[zero]

\defineXMLenvironmentsave [cd:command] [name=,type=,generated=,interactive=,variant=]
  {}
  {\doifelseXMLop{type}{environment}
     {\edef\currentSETUPname{start\XMLop{name}}}
     {\edef\currentSETUPname{\XMLop{name}}}%
   \doifsomething{\XMLop{variant}}
     {\edef\currentSETUPname{\currentSETUPname:\XMLop{variant}}}% like setupinterlinespace:1
   \doifXMLop{generated}{yes}
     {\edef\currentSETUPname{\currentSETUPname*}}%
   \doglobal\saveXMLdatainelement{stp:\currentSETUPname}{cd:command}{cd:command}%
   \expanded{\eachtexcommand[stp:x:\currentSETUPname]{\currentSETUPname}}%
   \expanded{\texcommand    [stp:y:\currentSETUPname]{\currentSETUPname}}}

\stopXMLmapping

\def\loadsetups{\complexorsimple\loadsetups}

\def\simpleloadsetups
  {\doifnotmode{no-setup-main}
     {\complexloadsetups[cont-en.xml]}}

\def\complexloadsetups[#1]%
  {\doifsomething{#1}
     {\doifnotmode{no-setup-all}
        {\startXMLmapping[zero]
         \expanded{\processXMLfilegrouped{#1}}%
         \stopXMLmapping}}}

\defineXMLsingular [cd:include] [file=]
  {\complexloadsetups[\XMLop{file}]}

\protect \endinput