diff options
Diffstat (limited to 'tex/context/modules/mkiv/x-setups-basics.mkiv')
-rw-r--r-- | tex/context/modules/mkiv/x-setups-basics.mkiv | 1563 |
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 |