summaryrefslogtreecommitdiff
path: root/tex/context/modules/mkiv/x-setups-basics.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/modules/mkiv/x-setups-basics.mkiv')
-rw-r--r--tex/context/modules/mkiv/x-setups-basics.mkiv1563
1 files changed, 1563 insertions, 0 deletions
diff --git a/tex/context/modules/mkiv/x-setups-basics.mkiv b/tex/context/modules/mkiv/x-setups-basics.mkiv
new file mode 100644
index 000000000..c3adb6881
--- /dev/null
+++ b/tex/context/modules/mkiv/x-setups-basics.mkiv
@@ -0,0 +1,1563 @@
+%D \module
+%D [ file=setups-basics, % x-set-11,
+%D version=2016.04.05, % 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 & Wolfgang Schuster},
+%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.
+
+% we can make this module a bit cleaner using more recent features
+% like sorting the xml directly .. will happen stepwise
+
+% \startluacode
+% collectgarbage("stop")
+% function collectgarbage() return 0 end
+% \stopluacode
+
+% todo: for fun: pure lua interface, but as this style evolved over 15 years
+% it's a waste of time
+%
+% todo:
+%
+% \setup{setupinterlinespace}
+% \setup{setupinterlinespace:1}
+% \setup{setupinterlinespace:2}
+%
+% cd:include -> filename
+% cd:choice
+%
+% register, interaction
+
+\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: opt
+ displaymath: formule
+ index: ingang
+ math: formule
+ nothing: leeg
+ file: file
+ position: positie
+ reference: verwijzing
+ csname: naam
+ destination: bestemming
+ triplet: triplet
+ word: woord
+ content: inhoud
+ %
+ language: taal
+ processor: verwerker
+ style: letter
+ font: font
+ character: karakter
+ userdata: gebruikersdata
+ key: parameter
+ value: waarde
+ color: kleur
+ template: sjabloon
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: markering
+ sectionblock: sectieblok
+ row: rij
+ column: kolom
+ url: url
+ first: eerste
+ last: laatste
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: csname
+ destination: destination
+ triplet: triplet
+ word: word
+ content: content
+ %
+ language: language
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: csname
+ destination: destination
+ triplet: triplet
+ word: word
+ content: content
+ %
+ language: sprache
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: csname
+ destination: destination
+ triplet: triplet
+ word: word
+ content: content
+ %
+ language: language
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: csname
+ destination: destination
+ triplet: triplet
+ word: word
+ content: content
+ %
+ language: language
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formula
+ index: entry
+ math: formula
+ nothing: empty
+ file: file
+ position: position
+ reference: reference
+ csname: csname
+ destination: destination
+ triplet: triplet
+ word: word
+ content: content
+ %
+ language: language
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\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: opt
+ displaymath: formule
+ index: entrée
+ math: formule
+ nothing: vide
+ file: fichier
+ position: position
+ reference: réference
+ csname: csnom
+ destination: destination
+ triplet: triplet
+ word: mot
+ content: content
+ %
+ language: language
+ processor: processor
+ style: style
+ font: font
+ character: character
+ userdata: userdata
+ key: key
+ value: value
+ color: color
+ template: template
+ node: node
+ lpath: lpath
+ xmlsetup: xmlsetup
+ luafunction: luafunction
+ marking: marking
+ sectionblock: sectionblock
+ row: row
+ column: column
+ url: url
+ first: first
+ last: last
+ setup: setup
+ buffer: buffer
+ true: true
+ false: false
+ category: category
+\stopmessages
+
+\unprotect
+
+% general
+
+\unexpanded\def\setupnumfont {}
+\unexpanded\def\setuptxtfont {}
+\unexpanded\def\setupintfont {\WORD}
+\unexpanded\def\setupvarfont {\sl}
+\unexpanded\def\setupoptfont {\sl}
+\unexpanded\def\setupalwcolor{}
+\unexpanded\def\setupoptcolor{darkgray}
+
+\installcorenamespace{interfacesetup}
+\installcorenamespace{interfacesetupreserved}
+
+\installsetuponlycommandhandler \??interfacesetup {setup} % \??interfacesetup
+
+\unexpanded\def\cmd_define_reserved#1#2%
+ {\setvalue{\??interfacesetupreserved#1}{#2}}
+
+\unexpanded\def\cmd_reserved_value#1%
+ {\executeifdefined{\??interfacesetupreserved#1}{#1}}
+
+\unexpanded\def\cmd_internal_value#1%
+ {\dontleavehmode
+ \begingroup
+ \setupintfont{#1}%
+ \endgroup}
+
+\unexpanded\def\cmd_text_value#1%
+ {\dontleavehmode
+ \begingroup
+ \setupvarfont{#1}%
+ \endgroup}
+
+\unexpanded\def\cmd_command_value#1%
+ {{\setupvarfont{\texescape...#1}}}
+
+\defineregister
+ [texmacro]
+% [texmacros]
+
+\definesorting
+ [texcommand]
+% [texcommands]
+
+\setupsorting
+ [texcommand]
+ [\c!command=\showsetupinlist,
+ \c!criterium=\setupparameter\c!criterium]
+
+\pushmacro\setuptext
+
+\defineframedtext
+ [setuptext]
+ [\c!width=\hsize,
+ \c!height=\v!fit,
+ \c!align=\v!right,
+ \c!offset=0.75\emwidth]
+
+\popmacro\setuptext
+
+%D Loading:
+
+\let\currentSETUPfullname\s!unknown
+
+\startxmlsetups xml:setups:assemblename
+ \doifelse {\xmlatt{#1}{type}} {environment} {
+ \doifsomethingelse {\xmlatt{#1}{begin}} {
+ \edef\currentSETUPprefix{\xmllastatt}%
+ } {
+ \let\currentSETUPprefix\e!start
+ }
+ } {
+ \let\currentSETUPprefix\empty
+ }
+ \edef\currentSETUPname{\xmlatt{#1}{name}}
+% \doifelse {\xmlatt{#1}{generated}} {yes} {
+% \def\currentSETUPgenerated{*}
+% } {
+ \let\currentSETUPgenerated\empty
+% }
+ \doifelsenothing {\xmlatt{#1}{variant}} {
+ \let\currentSETUPvariant\empty
+ } {
+ %\def\currentSETUPvariant{:\xmlatt{#1}{variant}}
+ \def\currentSETUPvariant{:\xmllastatt}
+ }
+ \edef\currentSETUPfullname {
+ \currentSETUPprefix
+ \currentSETUPname
+ \currentSETUPvariant
+ \currentSETUPgenerated
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:register
+ \xmlsetup{#1}{xml:setups:assemblename}
+ % not really needed if we just use setups
+ \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}}
+\stopxmlsetups
+
+\startluacode
+
+ -- normally a lookup is fast enough but here we can have many setups
+ -- spread over many files so we do a little speedup here
+
+ local setups = moduledata.setups or { }
+ moduledata.setups = setups
+ local definitions = { }
+ setups.definitions = definitions
+
+ function xml.functions.setups_define(id)
+ local x = lxml.getid(id)
+ for c in xml.collected(x,"cd:interface/cd:define") do
+ definitions[c.at.name] = c
+ end
+
+ for c in xml.collected(x,"cd:interface/cd:interface") do
+ c.at.file = c.__f__
+ c.at["xmlns:cd"] = nil
+ -- c.dt[#c.dt+1] = " "
+ end
+
+ local interface = interfaces.currentinterface or "en"
+
+ if interface ~= "en" then
+
+ local constants = interfaces.complete.constants
+ local variables = interfaces.complete.variables
+ local commands = interfaces.complete.commands
+ local elements = interfaces.complete.elements
+
+ local function replace(pattern,attribute,one,two)
+ for e in xml.collected(x,pattern) do
+ local t = e.at[attribute]
+ if t then
+ local c = one[t] or (two and two[t])
+ if c then
+ local v = c[interface]
+ if v then
+ e.at[attribute] = v
+ end
+ end
+ end
+ end
+ end
+
+ replace('cd:string', 'value', commands, elements)
+ replace('cd:variable' , 'value', variables)
+
+ replace('cd:parameter', 'name', constants)
+ replace('cd:constant', 'type', variables)
+ replace('cd:constant', 'default', variables)
+ replace('cd:variable', 'type', variables)
+ replace('cd:inherit', 'name', commands, elements)
+
+
+ end
+
+ if tex.modes["setups:save"] and environment.currentrun == 1 then
+ local s = tostring(x)
+ s = string.gsub(s,"\n*%s*(</cd:interface>)%s+(<cd:interface)", "\n\n %1\n\n %2")
+ s = string.gsub(s,"\n*%s*(</cd:interface>)%s+(</cd:interface>)","\n\n %1\n\n %2")
+ io.savedata("context-"..interface..".xml",s)
+ end
+
+ end
+
+ function moduledata.setups.resolved(name)
+ lxml.flush(definitions[name])
+ end
+
+ function xml.finalizers.s_count(collected)
+ local n = 0
+ for i=1,#collected do
+ local c = collected[i]
+ local tg = c.tg
+ if tg == "resolve" then
+ local d = definitions[c.at.name]
+ n = n + xml.count(d,"/*")
+ elseif tg == "delimiter" then
+ -- skip
+ else
+ n = n + 1
+ end
+ end
+ context(n)
+ end
+
+\stopluacode
+
+% <?xml version="1.0" encoding="UTF-8"?>
+%
+% <cd:interface xmlns:cd="http://www.pragma-ade.com/commands">
+%
+% <cd:interfacefile filename="i-document.xml"/>
+% <cd:interfacefile filename="i-file.xml"/>
+%
+% </cd:interface>
+
+\startxmlsetups xml:setups:interfacefile
+ \loadsetups[\xmlatt{#1}{filename}]
+\stopxmlsetups
+
+% todo: option to expand
+
+\startxmlsetups xml:setups:basics
+% \xmlcommand {#1}{interface/interfacefile}{xml:setups:interfacefile}
+% \xmlinclude {#1}{include}{filename}
+ \xmlincludeoptions {#1}{interfacefile|include}{filename}{recurse,basename}
+ \xmlsetsetup{#1}{*}{xml:setups:*}
+ \xmlfunction{#1}{setups_define}
+\stopxmlsetups
+
+\xmlregisterdocumentsetup{setups}{xml:setups:basics}
+
+\unexpanded\def\loadsetups{\complexorsimple\loadsetups}
+
+\let\loadedsetups\empty % we load more setups, setups:<name>
+
+\def\simpleloadsetups
+ {\doifnotmode{no-setup-main}{\complexloadsetups[cont-en.xml]}}
+
+\def\complexloadsetups[#1]%
+ {\doifsomething{#1}
+ {\doonlyonce{setups:#1}
+ {\doglobal\prependtocommalist{setups:#1}\loadedsetups % last overloads first
+ \doiffileexistselse{#1}
+ {\xmlloadonly{setups:#1}{#1}{setups}}%
+ {\xmlloadonly{setups:#1}{#1.xml}{setups}}%
+ % qualified path saves > 50% runtime
+ \xmlfilter{setups:#1}{/interface//command/command(xml:setups:register)}%
+ }}}
+
+\newconstant\kindofsetup
+
+\unexpanded\def\basicsetup{\kindofsetup\zerocount\cmd_show_setup}
+\unexpanded\def\shortsetup{\kindofsetup\plusone \cmd_show_setup}
+\unexpanded\def\setup {\kindofsetup\plustwo \cmd_show_setup}
+\unexpanded\def\showsetup {\kindofsetup\plustwo \cmd_show_setup}
+
+\unexpanded\def\showsetupinlist#1#2#3%
+ {\kindofsetup\plustwo\xmlsetup{#3}{xml:setups:typeset}\par}
+
+% todo: only references in lists
+
+\newconditional\c_cmd_showsetup
+
+\installtextracker
+ {cmd.showsetup}
+ {\settrue\c_cmd_showsetup}
+ {\setfalse\c_cmd_showsetup}
+
+\unexpanded\def\cmd_show_setup
+ {\doifelsenextoptionalcs\cmd_show_setup_yes\cmd_show_setup_nop}
+
+\def\cmd_show_setup_yes[#1]%
+ {\iffirstargument
+ \cmd_show_setup_nop{#1}%
+ \else
+ \expandafter\cmd_show_setup_nop
+ \fi}
+
+\def\cmd_show_setup_nop#1% this will trigger 'used'
+ {\registersort[texcommand][stp:x:#1]%
+ \ifconditional\c_cmd_showsetup
+ \writestatus{setup}{#1 / \rawsynonymname{texcommand}{stp:x:#1}}%
+ \fi
+ \startelement[setup][name=#1]%
+ \startelement[noexport][comment={setup definition #1}]%
+ \xmlsetup{\rawsynonymname{texcommand}{stp:x:#1}}{xml:setups:typeset}
+ % \xmlfilterlist{\loadedsetups}{/interface/command['#1' == (@type=='environment' and '\e!start' or '') .. @name]/command(xml:setups:typeset)}%
+ \stopelement
+ \stopelement}
+
+\unexpanded\def\placesetup {\placelistofsorts[texcommand][\c!criterium=\v!used]}
+\unexpanded\def\placeallsetups{\placelistofsorts[texcommand][\c!criterium=\v!all ]}
+
+\let\placeeverysetup\placeallsetups
+
+%D Typesetting:
+
+% \setupxml
+% [\c!default=\v!hidden, % ignore elements that are not defined
+% \c!compress=\v!yes]
+
+\newcounter\currentSETUPargument
+\newcounter\maximumSETUPargument
+
+\def\currentSETUPwidth{0pt}
+
+\startxmlsetups xml:setups:typeset
+ \doifelsenothing {#1} {
+ \xmlsetup{#1}{xml:setups:typeset:nop}
+ } {
+ \xmlsetup{#1}{xml:setups:typeset:yes}
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:nop
+ \blank
+ \type {MISSING SETUP}
+ \blank
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:line
+ \ttbf
+ \nohyphens
+ \edef\currentSETUPhash{\xmlatt{#1}{hash}}
+ \bgroup
+ \enablemode[setups-pass-one]%
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttbs
+ }
+ \letterbackslash
+ \doif {\xmlatt{#1}{type}} {environment} {
+ \doifsomethingelse {\xmlatt{#1}{begin}} {
+ \xmllastatt
+ } {
+ \e!start
+ }
+ }
+ \xmldoifelseempty{#1}{/sequence} {
+ \xmlatt{#1}{name}
+ } {
+ \xmlfilter{#1}{/sequence/first()}
+ }
+ \ignorespaces
+ \egroup
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \enablemode[setups-pass-one]
+ \doglobal\newcounter\currentSETUPargument
+ \ignorespaces
+ \xmlfilter{#1}{/arguments/text()}
+ \egroup
+ }
+ \doif {\xmlatt{#1}{type}} {environment} {
+ \bgroup
+ \enablemode[setups-pass-one]%
+ \hskip.5em\unknown\hskip.5em
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttbs
+ }
+ \letterbackslash
+ \doifsomethingelse {\xmlatt{#1}{end}} {
+ \xmllastatt
+ } {
+ \e!stop
+ }
+ \xmldoifelseempty{#1}{/sequence} {
+ \xmlatt{#1}{name}
+ } {
+ \xmlfilter{#1}{/sequence/first()}
+ }
+ \ignorespaces
+ \egroup
+ }
+\stopxmlsetups
+
+\let\currentSETUPfilename\empty
+
+\startxmlsetups xml:setups:typeset:raw
+ \tttf
+ \nohyphens
+ \veryraggedright
+ \doglobal\newcounter\currentSETUPargument
+ \xdef\maximumSETUPargument{\xmlfilter{#1}{/arguments/*/s_count()}}
+ \edef\currentSETUPhash{\xmlatt{#1}{hash}}
+ \xdef\currentSETUPfilename{\xmlatt{#1}{file}}%
+ \bgroup
+ \enablemode[setups-pass-one]%
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttsl
+ }
+ \letterbackslash
+ \doif {\xmlatt{#1}{type}} {environment} {
+ \doifsomethingelse {\xmlatt{#1}{begin}} {
+ \xmllastatt
+ } {
+ \e!start
+ }
+ }
+ \xmldoifelseempty{#1}{/sequence} {
+ \xmlatt{#1}{name}
+ } {
+ \xmlfilter{#1}{/sequence/first()}
+ }
+ \ignorespaces
+ \egroup
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \enablemode[setups-pass-one]
+ \doglobal\newcounter\currentSETUPargument
+ \ignorespaces
+ \xmlfilter{#1}{/arguments/text()}
+ \egroup
+ }
+ \doif {\xmlatt{#1}{type}} {environment} {
+ \bgroup
+ \enablemode[setups-pass-one]%
+ \hskip.5em\unknown\hskip.5em
+ \doif {\xmlatt{#1}{generated}} {yes} {
+ \ttsl
+ }
+ \letterbackslash
+ \doifsomethingelse {\xmlatt{#1}{end}} {
+ \xmllastatt
+ } {
+ \e!stop
+ }
+ \xmldoifelseempty{#1}{/sequence} {
+ \xmlatt{#1}{name}
+ } {
+ \xmlfilter{#1}{/sequence/first()}
+ }
+ \ignorespaces
+ \egroup
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:detail
+ \xmldoif{#1}{/arguments} {
+ \bgroup
+ \enablemode[setups-pass-two]
+ \doglobal\newcounter\currentSETUPargument
+ %\blank[\v!line] % packed mode (we could do \startunpacked ...)
+ \godown[.75\lineheight]
+ \switchtobodyfont[\v!small]
+ \ignorespaces\xmlfilter{#1}{/arguments/text()}\endgraf
+ \egroup
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:typeset:yes
+ \glet\currentSETUPfilename\empty
+ \ifcase\kindofsetup
+ \xmlsetup{#1}{xml:setups:typeset:line}
+ \or
+ \getvalue{\e!start setuptext}
+ \xmlsetup{#1}{xml:setups:typeset:raw}
+ \getvalue{\e!stop setuptext}
+ \or
+ \getvalue{\e!start setuptext}
+ \xmlsetup{#1}{xml:setups:typeset:raw}
+ \endgraf
+ \xmlsetup{#1}{xml:setups:typeset:detail}
+ \getvalue{\e!stop setuptext}
+ \fi
+ \glet\currentSETUPfilename\empty
+\stopxmlsetups
+
+\defineoverlay
+ [setupfilename]
+ [\vbox to \overlayheight
+ {\infofont
+ \vfill
+ \scratchdimen.5\exheight
+ \hbox to \overlaywidth
+ {\strut
+ \hss
+ \currentSETUPfilename
+ \hskip\dimexpr\scratchdimen+\strutdp\relax}%
+ \vskip\scratchdimen}]
+
+\setupsetup
+ [\c!before=,
+ \c!after=,
+ \c!command=\setup,
+ \c!criterium=\v!used]
+
+\startxmlsetups xml:setups:resolve
+ \ignorespaces
+ \ctxlua{moduledata.setups.resolved('\xmlatt{#1}{name}')}
+ % \xmlfilterlist{\loadedsetups}{/interface/define[@name='\xmlatt{#1}{name}']/first()}
+\stopxmlsetups
+
+%D This is the first pass; here we generate the top line.
+
+\startxmlsetups xml:setups:define
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:sequence
+ \ignorespaces\xmlflush{#1}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:string
+ \xmlatt{#1}{value}\ignorespaces
+\stopxmlsetups
+
+\startxmlsetups xml:setups:content \showSETUPcomponent{#1}{content} {content} \stopxmlsetups
+\startxmlsetups xml:setups:displaymath \showSETUPcomponent{#1}{displaymath}{display math}\stopxmlsetups
+\startxmlsetups xml:setups:index \showSETUPcomponent{#1}{index} {index} \stopxmlsetups
+\startxmlsetups xml:setups:math \showSETUPcomponent{#1}{math} {math} \stopxmlsetups
+\startxmlsetups xml:setups:nothing \showSETUPcomponent{#1}{nothing} {nothing} \stopxmlsetups
+\startxmlsetups xml:setups:file \showSETUPcomponent{#1}{file} {file name} \stopxmlsetups
+\startxmlsetups xml:setups:position \showSETUPcomponent{#1}{position} {position} \stopxmlsetups
+\startxmlsetups xml:setups:reference \showSETUPcomponent{#1}{reference} {reference} \stopxmlsetups
+\startxmlsetups xml:setups:csname \showSETUPcomponent{#1}{csname} {csname} \stopxmlsetups
+\startxmlsetups xml:setups:destination \showSETUPcomponent{#1}{destination}{destination} \stopxmlsetups
+\startxmlsetups xml:setups:triplet \showSETUPcomponent{#1}{triplet} {triplet} \stopxmlsetups
+\startxmlsetups xml:setups:word \showSETUPcomponent{#1}{word} {word} \stopxmlsetups
+\startxmlsetups xml:setups:template \showSETUPcomponent{#1}{template} {template} \stopxmlsetups
+\startxmlsetups xml:setups:angles \showSETUPcomponent{#1}{angles} {angles} \stopxmlsetups
+\startxmlsetups xml:setups:apply \showSETUPcomponent{#1}{apply} {apply} \stopxmlsetups
+\startxmlsetups xml:setups:twowords \showSETUPcomponent{#1}{twowords} {twowords} \stopxmlsetups
+\startxmlsetups xml:setups:threewords \showSETUPcomponent{#1}{threewords} {threewords} \stopxmlsetups
+\startxmlsetups xml:setups:text \showSETUPcomponent{#1}{text} {text} \stopxmlsetups
+% \startxmlsetups xml:setups:to \showSETUPcomponent{#1}{to} {to} \stopxmlsetups
+
+\startxmlsetups xml:setups:delimiter
+ \doifmode{setups-pass-one} {
+ \showSETUPline{\letterbackslash\xmlatt{#1}{name}}
+ }
+ \ignorespaces
+\stopxmlsetups
+
+\unexpanded\def\showSETUPcomponent#1#2#3%
+ {\doifelsemode{setups-pass-one}
+ {\getvalue{showSETUP#2}{#1}}
+ {\simpleSETUPargument{#3}}}
+
+%D This is the second pass; here we generate the table.
+
+\unexpanded\def\startfirstSETUPcolumn#1%
+ {\bgroup
+ \scratchdimen2\emwidth
+ \advance\leftskip \scratchdimen
+ \noindent\llap{\hbox to \scratchdimen{#1\hss}}}
+
+\unexpanded\def\stopfirstSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\unexpanded\def\startsecondSETUPcolumn#1#2%
+ {\bgroup
+ \scratchdimen2.5\emwidth
+ \advance\hangindent\dimexpr\currentSETUPwidth+\scratchdimen\relax
+ \noindent \hbox to \hangindent{#1\hss\hbox to \scratchdimen{\hss#2\hss}}}
+
+\unexpanded\def\stopsecondSETUPcolumn
+ {\endgraf
+ \egroup}
+
+\unexpanded\def\secondSETUPcolumn#1#2%
+ {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn}
+
+\def\previousSETUPargument{\currentSETUPargument}
+
+\startxmlsetups xml:setups:assignments
+ \doifelsemode{setups-pass-one} {
+ \showSETUPassignment{#1}
+ } {
+ \xdef\currentSETUPwidth{0pt}%
+ \setbox\scratchbox\vbox\bgroup
+ \setmode{setups-measure}
+ \xmlall{#1}{/(parameter|resolve)}
+ \egroup
+ \xdef\currentSETUPwidth{\themaxboxwidth\scratchbox}%
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmldoifelse {#1} {/(parameter|inherit)} {
+ \xmlflush{#1}
+ } {
+ ...
+ }
+ \let\previousSETUPargument\currentSETUPargument
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:keywords
+ \doifelsemode{setups-pass-one} {
+ \showSETUPkeyword{#1}
+ } {
+ \startfirstSETUPcolumn{\showSETUPnumber}%
+ \ignorespaces
+ \xmlflush{#1}
+ \let\previousSETUPargument\currentSETUPargument
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:parameter
+ \doifmodeelse {setups-measure} {
+ \cmd_reserved_value{\xmlatt{#1}{name}}\par
+ } {
+ \startsecondSETUPcolumn{\cmd_reserved_value{\xmlatt{#1}{name}}}{=}
+ \ignorespaces
+ \xmlflush{#1}
+ \doifmode{interface:setup:defaults} {
+ \ifx\currentSETUPhash\empty \else
+ \begingroup
+ % todo, make a one level expansion of parameter
+ \let\emwidth \relax
+ \let\exheight\relax
+ \edef\currentSETUPvalue{\csname named\currentSETUPhash parameter\endcsname\empty{\xmlatt{#1}{name}}}
+ \ifx\currentSETUPvalue\empty \else
+ =\space
+ \detokenize\expandafter{\currentSETUPvalue}
+ \fi
+ \endgroup
+ \fi
+ }
+ \stopsecondSETUPcolumn
+ }
+ \ignorespaces
+\stopxmlsetups
+
+%xmlmapvalue{setups:method}{class} {:}
+\xmlmapvalue{setups:method}{range} {:}
+\xmlmapvalue{setups:method}{apply} {->}
+\xmlmapvalue{setups:method}{factor}{*}
+\xmlmapvalue{setups:method}{none} {}
+
+\startxmlsetups xml:setups:constant:value
+ \cmd_reserved_value{\xmlatt{#1}{type}}
+\stopxmlsetups
+
+\startxmlsetups xml:setups:constant
+ \doifelsemode {setups-pass-one} {
+ } {
+ \doifsomethingelse{\xmlatt{#1}{prefix}} {
+ \cmd_reserved_value{\xmllastatt}
+ \xmlmappedvalue{setups:method}{\xmlatt{#1}{method}}{none}
+ } {
+ \doif {\xmlatt{#1}{default}} {yes} {
+ \underbar % next needs to be {braced}
+ }
+ }
+ {\cmd_reserved_value{\xmlatt{#1}{type}}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:variable
+ \doifelsemode {setups-pass-one} {
+ \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces
+ } {
+ \cmd_reserved_value{\xmlatt{#1}{value}}
+ \space
+ \ignorespaces
+ }
+\stopxmlsetups
+
+\startxmlsetups xml:setups:inherit
+ \secondSETUPcolumn {
+ \cmd_text_value{\getmessage{setup}{inherits}}
+ \enspace
+ \letterbackslash
+ \xmlatt{#1}{name}
+ } {}
+ \ignorespaces
+\stopxmlsetups
+
+\unexpanded\def\simpleSETUPargument#1%
+ {\startfirstSETUPcolumn{\showSETUPnumber}%
+ \cmd_internal_value{#1}%
+ \stopfirstSETUPcolumn
+ \blank[\v!halfline]
+ \ignorespaces}
+
+\cmd_define_reserved {cd:command} {\cmd_internal_value{\getmessage{setup}{command}}}
+\cmd_define_reserved {cd:dimension} {\cmd_internal_value{\getmessage{setup}{dimension}}}
+\cmd_define_reserved {cd:file} {\cmd_internal_value{\getmessage{setup}{file}}}
+\cmd_define_reserved {cd:buffer} {\cmd_internal_value{\getmessage{setup}{buffer}}}
+\cmd_define_reserved {cd:name} {\cmd_internal_value{\getmessage{setup}{identifier}}}
+\cmd_define_reserved {cd:character} {\cmd_internal_value{\getmessage{setup}{character}}}
+\cmd_define_reserved {cd:mark} {\cmd_internal_value{\getmessage{setup}{mark}}}
+\cmd_define_reserved {cd:number} {\cmd_internal_value{\getmessage{setup}{number}}}
+\cmd_define_reserved {cd:first} {\cmd_internal_value{\getmessage{setup}{first}}}
+\cmd_define_reserved {cd:last} {\cmd_internal_value{\getmessage{setup}{last}}}
+\cmd_define_reserved {cd:reference} {\cmd_internal_value{\getmessage{setup}{reference}}}
+\cmd_define_reserved {cd:plural} {\cmd_internal_value{\getmessage{setup}{plural}}}
+\cmd_define_reserved {cd:singular} {\cmd_internal_value{\getmessage{setup}{singular}}}
+\cmd_define_reserved {cd:text} {\cmd_internal_value{\getmessage{setup}{text}}}
+\cmd_define_reserved {cd:formula} {\cmd_internal_value{\getmessage{setup}{formula}}}
+\cmd_define_reserved {cd:file} {\cmd_internal_value{\getmessage{setup}{file}}}
+\cmd_define_reserved {cd:matrix} {\cmd_internal_value{\getmessage{setup}{matrix}}}
+\cmd_define_reserved {cd:list} {\cmd_internal_value{\getmessage{setup}{list}}}
+\cmd_define_reserved {cd:section} {\cmd_internal_value{\getmessage{setup}{section}}}
+\cmd_define_reserved {cd:language} {\cmd_internal_value{\getmessage{setup}{language}}}
+\cmd_define_reserved {cd:section} {\cmd_internal_value{\getmessage{setup}{section}}}
+\cmd_define_reserved {cd:language} {\cmd_internal_value{\getmessage{setup}{language}}}
+\cmd_define_reserved {cd:processor} {\cmd_internal_value{\getmessage{setup}{processor}}}
+\cmd_define_reserved {cd:style} {\cmd_internal_value{\getmessage{setup}{style}}}
+\cmd_define_reserved {cd:font} {\cmd_internal_value{\getmessage{setup}{font}}}
+\cmd_define_reserved {cd:character} {\cmd_internal_value{\getmessage{setup}{character}}}
+\cmd_define_reserved {cd:userdata} {\cmd_internal_value{\getmessage{setup}{userdata}}}
+\cmd_define_reserved {cd:key} {\cmd_internal_value{\getmessage{setup}{key}}}
+\cmd_define_reserved {cd:value} {\cmd_internal_value{\getmessage{setup}{value}}}
+\cmd_define_reserved {cd:color} {\cmd_internal_value{\getmessage{setup}{color}}}
+\cmd_define_reserved {cd:template} {\cmd_internal_value{\getmessage{setup}{template}}}
+\cmd_define_reserved {cd:node} {\cmd_internal_value{\getmessage{setup}{node}}}
+\cmd_define_reserved {cd:lpath} {\cmd_internal_value{\getmessage{setup}{lpath}}}
+\cmd_define_reserved {cd:setup} {\cmd_internal_value{\getmessage{setup}{setup}}}
+\cmd_define_reserved {cd:xmlsetup} {\cmd_internal_value{\getmessage{setup}{xmlsetup}}}
+\cmd_define_reserved {cd:luafunction} {\cmd_internal_value{\getmessage{setup}{luafunction}}}
+\cmd_define_reserved {cd:marking} {\cmd_internal_value{\getmessage{setup}{marking}}}
+\cmd_define_reserved {cd:sectionblock} {\cmd_internal_value{\getmessage{setup}{sectionblock}}}
+\cmd_define_reserved {cd:row} {\cmd_internal_value{\getmessage{setup}{row}}}
+\cmd_define_reserved {cd:column} {\cmd_internal_value{\getmessage{setup}{column}}}
+\cmd_define_reserved {cd:url} {\cmd_internal_value{\getmessage{setup}{url}}}
+\cmd_define_reserved {cd:true} {\cmd_internal_value{\getmessage{setup}{true}}}
+\cmd_define_reserved {cd:false} {\cmd_internal_value{\getmessage{setup}{false}}}
+\cmd_define_reserved {cd:category} {\cmd_internal_value{\getmessage{setup}{category}}}
+\cmd_define_reserved {cd:csname} {\cmd_internal_value{\getmessage{setup}{csname}}}
+\cmd_define_reserved {cd:content} {\cmd_internal_value{\getmessage{setup}{content}}}
+
+%cmd_define_reserved {cd:noargument} {\cmd_command_value {}}
+\cmd_define_reserved {cd:oneargument} {\cmd_command_value {\texthash1}}
+\cmd_define_reserved {cd:twoarguments} {\cmd_command_value {\texthash1\texthash2}}
+\cmd_define_reserved {cd:threearguments} {\cmd_command_value {\texthash1\texthash2\texthash3}}
+
+\cmd_define_reserved {cd:sign} {[-+]}
+
+%D Auxiliary.
+
+\unexpanded\def\showSETUP#1#2#3%
+ {\bgroup
+ \doglobal\increment\currentSETUPargument
+ \setbox0=\hbox
+ {\doifelse{\xmlatt{#1}{list}}{yes}{#3}{#2}}%
+ \setbox2=\hbox to \wd0
+ {\hss
+ \raise1.25\exheight\hbox
+ {\txx\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi}%
+ \hss}%
+ \setbox4=\hbox to \wd0
+ {\hss
+ \lower2\exheight\hbox
+ \bgroup
+ \txx
+ \doif {\xmlatt{#1}{optional}} {yes}
+ {\cmd_internal_value{\getmessage{setup}{optional}}}%
+ \egroup
+ \hss}%
+ \ht2\ht\strutbox
+ \dp4\dp\strutbox
+ \hskip.5\emwidth
+ \wd0\zeropoint
+ \box0
+ \wd2\zeropoint
+ \box2
+ \box4%
+ \egroup
+ \ignorespaces}
+
+\unexpanded\def\showSETUPline#1%
+ {\kern.5\emwidth
+ #1%
+ \ignorespaces}
+
+\unexpanded\def\showSETUPnumber
+ {\doglobal\increment\currentSETUPargument
+ \hbox to 2\emwidth
+ {\ifcase\maximumSETUPargument\relax
+ \or*\else\currentSETUPargument
+ \fi
+ \hss}}
+
+% assignments
+
+\xmlmapvalue {setups:assignment} {braces} {\showSETUPassignmentbraces}
+\xmlmapvalue {setups:assignment} {brackets} {\showSETUPassignmentbrackets}
+\xmlmapvalue {setups:keyword} {parentheses} {\showSETUPkeywordparentheses}
+\xmlmapvalue {setups:keyword} {none} {\showSETUPkeywordnone}
+
+\unexpanded\def\setupEQsymbol % we raise the number already
+ {.\lower.25\exheight\hpack{=}.}
+
+\unexpanded\def\setupAPPLYsymbol % we raise the number already
+ {..\lower.25\exheight\hpack{=>}..}
+
+\starttexdefinition unexpanded showSETUPassignmentbraces #1
+ \ifcase\kindofsetup
+ \showSETUPline{\letterleftbrace\setupEQsymbol\letterrightbrace}
+ \else
+ \showSETUP{#1}
+ {\letterleftbrace\setupEQsymbol\letterrightbrace}
+ {\letterleftbrace..,\setupEQsymbol,..\letterrightbrace}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPassignmentbrackets #1
+ \ifcase\kindofsetup
+ \showSETUPline{[\setupEQsymbol]}
+ \else
+ \showSETUP{#1}
+ {[\setupEQsymbol]}
+ {[..,\setupEQsymbol,..]}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPkeywordparentheses #1
+ \ifcase\kindofsetup
+ \showSETUPline{(...)}
+ \else
+ \showSETUP{#1}
+ {(...)}
+ {(...,...)}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPkeywordnone #1
+ \ifcase\kindofsetup
+ \showSETUPline{...}
+ \else
+ \showSETUP{#1}
+ {...}
+ {.. ... ..}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPassignment #1
+ \xmlvalue
+ {setups:assignment}
+ {\xmlattdef{#1}{delimiters}{brackets}}
+ {\showSETUPkeywordbrackets}
+ {#1}
+\stoptexdefinition
+
+% we could also add specifying separatos (default comma) but let's do
+% this stepwise
+
+% keywords
+
+\xmlmapvalue {setups:keyword} {braces} {\showSETUPkeywordbraces}
+\xmlmapvalue {setups:keyword} {brackets} {\showSETUPkeywordbrackets}
+
+\starttexdefinition unexpanded showSETUPkeywordbraces #1
+ \ifcase\kindofsetup
+ \showSETUPline{\letterleftbrace...\letterrightbrace}
+ \else
+ \showSETUP{#1}
+ {\letterleftbrace...\letterrightbrace}
+ {\letterleftbrace...,...\letterrightbrace}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPkeywordbrackets #1
+ \ifcase\kindofsetup
+ \showSETUPline{[...]}
+ \else
+ \showSETUP{#1}
+ {[...]}
+ {[...,...]}
+ \fi
+\stoptexdefinition
+
+\starttexdefinition unexpanded showSETUPkeyword #1
+ \xmlvalue
+ {setups:keyword}
+ {\xmlattdef{#1}{delimiters}{brackets}}
+ {\showSETUPkeywordbrackets}
+ {#1}
+\stoptexdefinition
+
+% arguments
+
+% \unexpanded\def\showSETUPargument#1%
+% {\ifcase\kindofsetup
+% \showSETUPline{%
+% \letterleftbrace
+% \xmlfilter{#1}{/cd:constant/command(xml:setups:constant:value)}% always one
+% \letterrightbrace
+% }
+% \else
+% \showSETUP{#1}
+% {\letterleftbrace..\letterrightbrace}
+% {\letterleftbrace..,...,..\letterrightbrace}%
+% \fi}
+
+\unexpanded\def\showSETUPdisplaymath#1%
+ {\showSETUP{#1}
+ {\letterdollar\letterdollar...\letterdollar\letterdollar}
+ {\letterdollar\letterdollar...\letterdollar\letterdollar}}
+
+\unexpanded\def\showSETUPindex#1%
+ {\showSETUP{#1}
+ {\letterleftbrace...\letterrightbrace}
+ {\letterleftbrace..+...+..\letterrightbrace}}
+
+\unexpanded\def\showSETUPmath#1%
+ {\showSETUP{#1}
+ {\letterdollar...\letterdollar}
+ {\letterdollar...\letterdollar}}
+
+\unexpanded\def\showSETUPnothing#1%
+ {\showSETUP{#1}
+ {...}
+ {}}
+
+\unexpanded\def\showSETUPfile#1%
+ {\showSETUP{#1}
+ {~...~}
+ {}}
+
+\unexpanded\def\showSETUPposition#1%
+ {\showSETUP{#1}
+ {(...)}
+ {(...,...)}}
+
+\unexpanded\def\showSETUPtemplate#1
+ {\showSETUP{#1}
+ {[\letterbar...\letterbar]}
+ {[\letterbar...\letterbar...\letterbar]}}
+
+\unexpanded\def\showSETUPangles#1%
+ {\showSETUP{#1}
+ {<<...>>}
+ {<<...>>}}
+
+\unexpanded\def\showSETUPreference#1%
+ {\showSETUP{#1}
+ {[...]}
+ {[...,...]}}
+
+\unexpanded\def\showSETUPapply#1%
+ {\showSETUP{#1}
+ {[\setupAPPLYsymbol]}
+ {[..,\setupAPPLYsymbol,...]}}
+
+\unexpanded\def\showSETUPtwowords#1%
+ {\showSETUP{#1}
+ {[..+..]}
+ {[..+..]}}
+
+\unexpanded\def\showSETUPthreewords#1%
+ {\showSETUP{#1}
+ {[..+..+..]}
+ {[..+..+..]}}
+
+\unexpanded\def\showSETUPcsname#1%
+ {\showSETUP{#1}
+ {{\cmd_command_value{}}}
+ {}}
+
+\unexpanded\def\showSETUPdestination#1%
+ {\showSETUP{#1}
+ {[\letterleftbrace..[ref]\letterrightbrace]}
+ {[..,\letterleftbrace..[ref,..]\letterrightbrace,..]}}
+
+\unexpanded\def\showSETUPtriplet#1%
+ {\showSETUP{#1}
+ {[x:y:z=]}
+ {[x:y:z=,..]}}
+
+\unexpanded\def\showSETUPword#1%
+ {\showSETUP{#1}
+ {\letterleftbrace...\letterrightbrace}
+ {\letterleftbrace.. ... ..\letterrightbrace}}
+
+\unexpanded\def\showSETUPcontent#1%
+ {\showSETUP{#1}
+ {\letterleftbrace...\letterrightbrace}
+ {\letterleftbrace.. ... ..\letterrightbrace}}
+
+\unexpanded\def\showSETUPtext#1%
+ {\showSETUP{#1}
+ {...}
+ {.. ... ..}}
+
+% \unexpanded\def\showSETUPto#1%
+% {\showSETUP{#1}
+% {\texescape to }
+% {\texescape to }}
+
+\unexpanded\def\showSETUPto#1%
+ {\showSETUPline{\texescape to}}
+
+\unexpanded\def\showSETUPmacro#1%
+ {\showSETUP{#1}
+ {\texescape macro }
+ {\texescape macro }}
+
+% A prelude to a rewrite and some more:
+
+% \definetype[parametercommand][\v!type]
+% \definetype[parameterkey] [\v!type]
+% \definetype[parametervalue] [\v!type][\c!space=\v!on]
+
+% todo: no list but hash ..
+
+\definetype[parametercommand]
+\definetype[parameterkey]
+\definetype[parametervalue] [\c!space=\v!on]
+
+\setuptype [parametercommand] [\c!color=darkmagenta]
+\setuptype [parametervalue] [\c!color=darkyellow]
+
+\startxmlsetups xml:setups:parameters:value
+ \edef\currentsetupparameterkey {\xmlatt{#1}{name}}
+ \edef\currentsetupparametervalue{\begincsname named\currentsetupparametercategory parameter\endcsname\currentsetupparameterinstance\currentsetupparameterkey}
+ \ifx\currentsetupparameterinstance\empty
+ \expanded {
+ \NC \parameterkey {\currentsetupparameterkey}
+ \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
+ \NC \NR
+ }
+ \else\ifx\currentsetupparametervalue\empty
+ \else
+ \edef\currentsetupparameterdefault{\begincsname named\currentsetupparametercategory parameter\endcsname\empty\currentsetupparameterkey}
+ \ifx\currentsetupparametervalue\currentsetupparameterdefault
+ % skip
+ \else
+ \expanded {
+ \NC \parameterkey {\currentsetupparameterkey}
+ \NC \parametervalue{\detokenize\expandafter{\currentsetupparametervalue}}
+ \NC \NR
+ }
+ \fi
+ \fi\fi
+\stopxmlsetups
+
+\startxmlsetups xml:setups:parameters:values
+ \blank[big]
+ \expanded {
+ \parametercommand {
+ \currentsetupparametercommand
+ \space:\space
+ \ifx\currentsetupparameterinstance\empty
+ defaults
+ \else
+ \currentsetupparameterinstance
+ \fi
+ }
+ }
+ \blank[big,samepage]
+ \starttabulate[|l|p|]
+ \xmlall
+ {#1}
+ {/interface/command[@name=='\currentsetupparametercommand' or @handler=='\currentsetupparametercommand']/arguments/assignments/parameter/command(xml:setups:parameters:value)}
+ \ifnum\noftabulaterows = \zerocount
+ \NC \parameterkey{no specific settings} \NC \NC \NR
+ \fi
+ \stoptabulate
+\stopxmlsetups
+
+\starttexdefinition showrootvalues [#1]
+ \edef\currentsetupparametercategory{#1}
+ \edef\currentsetupparametercommand{setup#1}
+ \let\currentsetupparameterinstance\empty
+ \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
+\stoptexdefinition
+
+\starttexdefinition showinstancevalues [#1]#2[#3]
+ \edef\currentsetupparametercategory{#1}
+ \edef\currentsetupparametercommand{setup#1}
+ \edef\currentsetupparameterinstance{#3}
+ \xmlsetup{\loadedsetups}{xml:setups:parameters:values}
+\stoptexdefinition
+
+% official interface
+
+\unexpanded\def\cmdinternal#1%
+ {{\tttf\cmd_reserved_value{#1}}} % todo color .. highlight
+
+\let\cmdbasicsetup\basicsetup
+\let\cmdshortsetup\shortsetup
+\let\cmdfullsetup \showsetup
+
+\protect \endinput