diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/x-set-11.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/x-set-11.mkiv | 566 |
1 files changed, 472 insertions, 94 deletions
diff --git a/Master/texmf-dist/tex/context/base/x-set-11.mkiv b/Master/texmf-dist/tex/context/base/x-set-11.mkiv index 499d531e5f0..784df311389 100644 --- a/Master/texmf-dist/tex/context/base/x-set-11.mkiv +++ b/Master/texmf-dist/tex/context/base/x-set-11.mkiv @@ -1,98 +1,476 @@ -% engine=luatex +%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 / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. -\startluacode - do - document = document or { } +% \startluacode +% collectgarbage("stop") +% function collectgarbage() return 0 end +% \stopluacode - document.setups = { - loaded = { }, - root = nil, - used = { }, +% 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 -> @file +% cd:choice +% +% register, interaction + +\usemodule[set-99] % interface messages + +\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} + +\def\c!setup!definereserved#1#2% + {\setvalue{c!setup!:r:#1}{#2}} + +\def\c!setup!reserved!#1% + {\executeifdefined{c!setup!:r:#1}{#1}} + +\def\c!setup!internal!#1% + {\dontleavehmode + \begingroup + \setupintfont{#1}% + \endgroup} + +\def\c!setup!text!#1% + {\dontleavehmode + \begingroup + \setupvarfont{#1}% + \endgroup} + +\def\c!setup!command!#1% + {{\setupvarfont{\texescape...#1}}} + +\def\??stp{@@stp} + +\defineregister + [texmacro] + [texmacros] + +\definesorting + [texcommand] + [texcommands] + +\setupsorting + [texcommand] + [\c!command=\showsetupinlist, + \c!criterium=\@@stpcriterium] + +\pushmacro\setuptext + +\defineframedtext + [setuptext] + [\c!width=\hsize, + \c!height=\v!fit, + \c!align=\v!right, + \c!offset=0.75em] + +\popmacro\setuptext + +%D Loading: + +\let\currentSETUPfullname\s!unknown + +\startxmlsetups xml:setups:assemblename + \doifelse {\xmlatt{#1}{environment}} {yes} { + \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}} + } + \edef\currentSETUPfullname { + \currentSETUPprefix + \currentSETUPname + \currentSETUPvariant + \currentSETUPgenerated + } +\stopxmlsetups + +\startxmlsetups xml:setups:register + \xmlsetup{#1}{xml:setups:assemblename} + \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}} +\stopxmlsetups + +\startxmlsetups xml:setups:basics + \xmlsetsetup {#1} { + sequence|string|variable|assignments|keywords|content|displaymath|index|math| + nothing|file|position|reference|csname|destination|triplet|word| + resolve|parameter|constant|inherit|parameter|define + } {xml:setups:*} +\stopxmlsetups + +\xmlregisterdocumentsetup{setups}{xml:setups:basics} + +\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 + \xmlloadonly{setups:#1}{#1}{setups}% + \xmlfilter{setups:#1}{/interface/command/command(xml:setups:register)}}}} % qualified path saves > 50% runtime + +\newif\ifshortsetup + +\unexpanded\def\setup {\shortsetupfalse\doshowsetup} +\def\showsetup {\shortsetupfalse\doshowsetup} +\def\shortsetup{\shortsetuptrue \doshowsetup} +\unexpanded\def\setupsetup{\dodoubleargument\getparameters[\??stp]} + +%unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\showsetupindeed{#3}\par} +\unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\xmlsetup{#3}{xml:setups:typeset}\par} + +% todo: only references in lists + +\def\doshowsetup + {\dosingleempty\dodoshowsetup} + +\def\dodoshowsetup[#1]% + {\iffirstargument + \dododoshowsetup{#1}% + \else + \expandafter\dododoshowsetup + \fi} + +\def\dododoshowsetup#1% this will trigger 'used' + {\registersort[texcommand][stp:x:#1]% + \showsetupindeed{#1}} + +\def\showsetupindeed#1% + {\xmlfilterlist{\loadedsetups}{/interface/command[@name='#1']/command(xml:setups:typeset)}} + +\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!method=mkiv, % mixed mode + \c!default=\v!hidden, % ignore elements that are not defined + \c!compress=\v!yes, % strip comment + \c!entities=\v!yes] % replace entities + +\newcounter\currentSETUPargument +\newcounter\maximumSETUPargument + +\def\currentSETUPwidth{0pt} + +\startxmlsetups xml:setups:typeset + \getvalue{\e!start setuptext} + \tttf + \nohyphens + \veryraggedright + \doglobal\newcounter\currentSETUPargument + \xdef\maximumSETUPargument{\xmlcount{#1}{/arguments/*}} + \bgroup + \doif {\xmlatt{#1}{generated}} {yes} { + \ttsl + } + \doifelse {\xmlatt{#1}{type}} {environment} { + \tex{\e!start} + } { + \tex{} + } + \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 + \hskip.5em\unknown\hskip.5em + \doif {\xmlatt{#1}{generated}} {yes} { + \ttsl + } + \tex{\e!stop} + \xmlfilter{#1}{/sequence/variable/first()} + \ignorespaces + \egroup + } + \endgraf + \xmldoif{#1}{/arguments} { + \bgroup + \enablemode[setups-pass-two] + \doglobal\newcounter\currentSETUPargument + \blank[\v!line] + \switchtobodyfont[small] + \ignorespaces\xmlfilter{#1}{/arguments/text()}\endgraf + \egroup + } + \getvalue{\e!stop setuptext} +\stopxmlsetups + +\setupsetup + [\c!before=, + \c!after=, + \c!command=\setup, + \c!criterium=\v!used] + +\startxmlsetups xml:setups:resolve + \ignorespaces + \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 + +\def\showSETUPcomponent#1#2#3% + {\doifmodeelse{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 + \advance\leftskip 2em + \noindent\llap{\hbox to 2em{#1\hss}}} + +\unexpanded\def\stopfirstSETUPcolumn + {\endgraf + \egroup} + +\unexpanded\def\startsecondSETUPcolumn#1#2% + {\bgroup + \advance\hangindent\dimexpr\currentSETUPwidth+2.5em\relax + \noindent \hbox to \hangindent{#1\hss\hbox to 2.5em{\hss#2\hss}}} + +\unexpanded\def\stopsecondSETUPcolumn + {\endgraf + \egroup} + +\def\secondSETUPcolumn#1#2% + {\startsecondSETUPcolumn{#1}{#2}\stopsecondSETUPcolumn} + +\def\previousSETUPargument{\currentSETUPargument} + +\startxmlsetups xml:setups:parameter:measure + \setbox0=\hbox{\c!setup!reserved!{\xmlatt{#1}{name}}} + \ifdim\wd0>\currentSETUPwidth\xdef\currentSETUPwidth{\the\wd0}\fi +\stopxmlsetups + +\startxmlsetups xml:setups:assignments + \doifmodeelse{setups-pass-one} { + \showSETUPassignment{#1} + } { + \xdef\currentSETUPwidth{0pt}% + \bgroup + \xmlfilter{#1}{/parameter/command(xml:setups:parameter:measure)} + \egroup + \startfirstSETUPcolumn{\showSETUPnumber}% + \ignorespaces + \xmlflush{#1} + \let\previousSETUPargument\currentSETUPargument + \stopfirstSETUPcolumn + \blank[\v!halfline] + \ignorespaces + } +\stopxmlsetups + +\startxmlsetups xml:setups:keywords + \doifmodeelse{setups-pass-one} { + \showSETUPkeyword{#1} + } { + \startfirstSETUPcolumn{\showSETUPnumber}% + \ignorespaces + \xmlflush{#1} + \let\previousSETUPargument\currentSETUPargument + \stopfirstSETUPcolumn + \blank[\v!halfline] + \ignorespaces + } +\stopxmlsetups + +\startxmlsetups xml:setups:parameter + \startsecondSETUPcolumn{\c!setup!reserved!{\xmlatt{#1}{name}}}{=} + \ignorespaces + \xmlflush{#1} + \stopsecondSETUPcolumn + \ignorespaces +\stopxmlsetups + +\startxmlsetups xml:setups:constant + \doifmodeelse {setups-pass-one} { + } { + \doif {\xmlatt{#1}{default}} {yes} { + \underbar % next needs to be {braced} } + {\c!setup!reserved!{\xmlatt{#1}{type}}} + \space + \ignorespaces + } +\stopxmlsetups + +\startxmlsetups xml:setups:variable + \doifmodeelse {setups-pass-one} { + \expanded{\setupintfont{\xmlatt{#1}{value}}}\ignorespaces + } { + \c!setup!reserved!{\xmlatt{#1}{value}} + \space + \ignorespaces + } +\stopxmlsetups + +\startxmlsetups xml:setups:inherit + \secondSETUPcolumn { + \c!setup!text!{\getmessage{setup}{inherits}} + \enspace + \tex{} + \xmlatt{#1}{name} + } {} + \ignorespaces +\stopxmlsetups + +\def\simpleSETUPargument#1% + {\startfirstSETUPcolumn{\showSETUPnumber}% + \c!setup!internal!{#1}% + \stopfirstSETUPcolumn + \blank[\v!halfline] + \ignorespaces} + +\c!setup!definereserved {cd:command} {\c!setup!internal!{\getmessage{setup}{command}}} +\c!setup!definereserved {cd:dimension} {\c!setup!internal!{\getmessage{setup}{dimension}}} +\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}} +\c!setup!definereserved {cd:name} {\c!setup!internal!{\getmessage{setup}{identifier}}} +\c!setup!definereserved {cd:character} {\c!setup!internal!{\getmessage{setup}{character}}} +\c!setup!definereserved {cd:mark} {\c!setup!internal!{\getmessage{setup}{mark}}} +\c!setup!definereserved {cd:number} {\c!setup!internal!{\getmessage{setup}{number}}} +\c!setup!definereserved {cd:reference} {\c!setup!internal!{\getmessage{setup}{reference}}} +\c!setup!definereserved {cd:plural} {\c!setup!internal!{\getmessage{setup}{plural}}} +\c!setup!definereserved {cd:singular} {\c!setup!internal!{\getmessage{setup}{singular}}} +\c!setup!definereserved {cd:text} {\c!setup!internal!{\getmessage{setup}{text}}} +\c!setup!definereserved {cd:formula} {\c!setup!internal!{\getmessage{setup}{formula}}} +\c!setup!definereserved {cd:file} {\c!setup!internal!{\getmessage{setup}{file}}} +\c!setup!definereserved {cd:matrix} {\c!setup!internal!{\getmessage{setup}{matrix}}} +\c!setup!definereserved {cd:list} {\c!setup!internal!{\getmessage{setup}{list}}} +\c!setup!definereserved {cd:section} {\c!setup!internal!{\getmessage{setup}{section}}} + +\c!setup!definereserved {cd:noargument} {\c!setup!command! {}} +\c!setup!definereserved {cd:oneargument} {\c!setup!command! {\#1}} +\c!setup!definereserved {cd:twoarguments} {\c!setup!command! {\#1\#2}} +\c!setup!definereserved {cd:threearguments} {\c!setup!command! {\#1\#2\#3}} + +%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 + \raise1ex\hbox + {\tx\ifcase\maximumSETUPargument\relax + \or*\else\currentSETUPargument + \fi}% + \hss}% + \setbox4=\hbox to \wd0 + {\hss + \lower2ex\hbox + \bgroup + \txx\doif{\xmlatt{#1}{optional}}{yes}{\c!setup!internal!{\getmessage{setup}{optional}}}% + \egroup + \hss}% + \ht2\ht\strutbox + \dp4\dp\strutbox + \hskip.5em\hsmash{\box0}\hsmash{\box4}\box2% + \egroup + \ignorespaces} + +\def\showSETUPnumber + {\doglobal\increment\currentSETUPargument + \hbox to 2em + {\ifcase\maximumSETUPargument\relax + \or*\else\currentSETUPargument + \fi + \hss}} + +\def\showSETUPassignment #1{\showSETUP{#1}{[.\lower.5ex\hbox{=}.]} {[..,.\lower.5ex\hbox{=}.,..]}} +\def\showSETUPkeyword #1{\showSETUP{#1}{[...]} {[...,...]}} +\def\showSETUPargument #1{\showSETUP{#1}{\leftargument..\rightargument} {\leftargument..,...,..\rightargument}} +\def\showSETUPdisplaymath#1{\showSETUP{#1}{\$\$...\$\$} {\$\$...\$\$}} +\def\showSETUPindex #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument..+...+..\rightargument}} +\def\showSETUPmath #1{\showSETUP{#1}{\$...\$} {\$...\$}} +\def\showSETUPnothing #1{\showSETUP{#1}{...} {}} +\def\showSETUPfile #1{\showSETUP{#1}{~...~} {}} +\def\showSETUPposition #1{\showSETUP{#1}{(...)} {(...,...)}} +\def\showSETUPreference #1{\showSETUP{#1}{[...]} {[...,...]}} +\def\showSETUPcsname #1{\showSETUP{#1}{{\c!setup!command!{}}} {}} +\def\showSETUPdestination#1{\showSETUP{#1}{[\leftargument..[ref]\rightargument]}{[..,\leftargument..[ref,..]\rightargument,..]}} +\def\showSETUPtriplet #1{\showSETUP{#1}{[x:y:z=]} {[x:y:z=,..]}} +\def\showSETUPword #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}} +\def\showSETUPcontent #1{\showSETUP{#1}{\leftargument...\rightargument} {\leftargument.. ... ..\rightargument}} - function document.setups.load(filename) - filename = resolvers.find_file(filename) or "" - if filename ~= "" and not document.setups.loaded[filename] then - local loaded = xml.load(filename) - if loaded then - if document.setups.root then - xml.inject(document.setups.root,"/",loaded) - else - document.setups.root = loaded - end - document.setups.loaded[filename] = true - end - end - end - function document.setups.name(ek) - local at = ek.at - local name = at.name - if at.type == 'environment' then - name = "start" .. name - end - if at.variant then - name = name .. ":" .. at.variant - end - if at.generated == "yes" then - name = name .. "*" - end - return name:lower() - end - function document.setups.show(name) - if document.setups.root then - local name = name:gsub("[<>]","") - local setup = xml.first(document.setups.root,"cd:command[@name='" .. name .. "']") - document.setups.used[#document.setups.used+1] = setup - xml.sprint(setup) - end - end - function document.setups.showused() - if document.setups.root and next(document.setups.used) then - for k,v in ipairs(table.sortedkeys(document.setups.used)) do - xml.sprint(document.setups.used[v]) - end - end - end - function document.setups.showall() - if document.setups.root then - local list = { } - xml.each_element(document.setups.root,"cd:command", function(r,d,t) - local ek = d[t] - list[document.setups.name(ek)] = ek - end ) - for k,v in ipairs(table.sortedkeys(list)) do - xml.sprint(list[v]) - end - end - end - function document.setups.resolve(name) - if document.setups.root then - local e = xml.filter(document.setups.root,string.format("cd:define[@name='%s']/text()",name)) - if e then - xml.sprint(e) - end - end - end - end -\stopluacode - -\def\mkloadsetups #1{\ctxlua{document.setups.load("#1")}} -\def\mkshowsetup #1{\ctxlua{document.setups.show("#1")}} -\def\mkshowusedsetups {\bgroup\enableXML\ctxlua{document.setups.showused()}\egroup} -\def\mkshowallsetups {\bgroup\enableXML\ctxlua{document.setups.showall ()}\egroup} - -\def\mkshowsetup #1{\bgroup\enableXML\ctxlua{document.setups.show("#1")}\egroup} - -\defineXMLenvironmentsave [cd:define] [name=] - {} - -\defineXMLsingular [cd:resolve] [name=] - {\enableXML\ignorespaces\ctxlua{document.setups.resolve("\XMLop{name}")}} - -\endinput - -% \starttext -% \loadsetups[cont-en.xml] -% \setup[goto] -% \placeeverysetup -% \stoptext +\protect \endinput |