summaryrefslogtreecommitdiff
path: root/tex/context/base/x-set-11.mkiv
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
committerMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
commit85b7bc695629926641c7cb752fd478adfdf374f3 (patch)
tree80293f5aaa7b95a500a78392c39688d8ee7a32fc /tex/context/base/x-set-11.mkiv
downloadcontext-85b7bc695629926641c7cb752fd478adfdf374f3.tar.gz
stable 2010-05-24 13:10
Diffstat (limited to 'tex/context/base/x-set-11.mkiv')
-rw-r--r--tex/context/base/x-set-11.mkiv476
1 files changed, 476 insertions, 0 deletions
diff --git a/tex/context/base/x-set-11.mkiv b/tex/context/base/x-set-11.mkiv
new file mode 100644
index 000000000..784df3113
--- /dev/null
+++ b/tex/context/base/x-set-11.mkiv
@@ -0,0 +1,476 @@
+%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
+% 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 -> @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}}
+
+\protect \endinput