diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii')
-rw-r--r-- | Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii | 491 |
1 files changed, 491 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii b/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii new file mode 100644 index 00000000000..22fffa50a37 --- /dev/null +++ b/Master/texmf-dist/tex/context/modules/mkii/x-contml.mkii @@ -0,0 +1,491 @@ +%M \usemodule [contml] \autoXMLnamespace [context] +%M \definefilesynonym [context] [x-contml.xsd] + +%D \module +%D [ file=x-contml, +%D version=mid 2001, +%D title=\CONTEXT\ XML Support, +%D subtitle=Basic \CONTEXT\ commands, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +% This module provides some basic \XML\ elements. These definitions +% are highly experimental and serve as a playground for interface +% development. + +\unprotect + +%D \elements {include} +%D +%D \startbuffer +%D You can include another file in the current document with the +%D <element>include</element> element. When including the file, &context; +%D will look at the suffix, in order to decide how to include the file. +%D +%D <verbatim> +%D <line><include name="mine"/></line> +%D <line><include name="mine" type="txt"/></line> +%D <line><include name="mine" type="tex"/></line> +%D </verbatim> +%D \stopbuffer +%D +%D \showelements [context] [include] + +\defineXMLsingular [context:include] [name=,type=xml] + {\doifsomethingXMLop{name} + {\processaction + [\XMLop{type}] + [xml=>\readfile{\XMLop{name}}\donothing\donothing, + tex=>{{\disableXML\readfile{\XMLop{name}}\donothing\donothing}}, + txt=>{{\disableXML\typefile{\XMLop{name}}}}]}} + +% or, nicer: +% +% \defineXMLsingular [context:include] [name=unknown,type=txt] +% {\XMLval{include:type}{\XMLop{type}}{}} +% +% \mapXMLvalue {include:type} {xml} {\readfile{\XMLop{name}}\donothing\donothing} +% \mapXMLvalue {include:type} {tex} {{\disableXML\readfile{\XMLop{name}}\donothing\donothing}} +% \mapXMLvalue {include:type} {txt} {{\disableXML\typefile{\XMLop{name}}}} + +%D \elements {compound} +%D +%D \startbuffer +%D Instead of using hard coded compound tokens, you should use the +%D <element>compound</element> element, as in high<compound token="/" />low. +%D The overhead in keying is rewarded with proper symbols and hyphenation. +%D \stopbuffer +%D +%D \showelements [context] [compound] + +\ifx\normalcompound\undefined \let\normalcompound=| \fi + +% \defineXMLsingular [context:compound] [token=] +% {\expanded{\normalcompound\XMLop{token}}|} + +% \defineXMLsingular [context:compound] [token=] +% {\ifmmode +% \doifXMLop{token}{\XMLop{token}}{\compoundhyphen}% +% \else +% \expanded{\normalcompound\XMLop{token}}|% +% \fi} + +\defineXMLsingular [context:compound] [token=] + {\mathortext % disc comm looks ahead, so \relax + {\doifXMLop{token}{\XMLop{token}}\compoundhyphen}% + {\expanded{\directdiscretionary{\XMLop{token}}}\relax}} + +\defineXMLenvironmentsave [context:cp] + {} + {\expanded{\directdiscretionary{\XMLflush{cp}}}\relax} + +%D \elements {p} +%D +%D \startbuffer +%D <p>Although for &tex; it is often enough to mark the end of a paragraph, +%D in &xml; we want to add a bit more structure. <p/> This permits a more +%D robust implementation of begin<compound/>of<compound/>par actions</p> +%D \stopbuffer +%D +%D \showelements [context] [p] + +\defineXMLenvironment [context:p] {} \endgraf +\defineXMLsingular [context:p] \endgraf + +%D \elements {pageref,textref,lineref} +%D +%D \startbuffer +%D You can ask for a page (<pageref label="lastpage">the last pagenumber +%D is</pageref> aka page <pageref label="lastpage"/>), text or line reference +%D with the following three elements. The label may be any valid &context; +%D reference label. +%D \stopbuffer +%D +%D \showelements [context] [references] + +\defineXMLpickup [context:pageref] [label=] {\at} {[\XMLop{label}]} +\defineXMLpickup [context:textref] [label=] {\in} {[\XMLop{label}]} +\defineXMLpickup [context:lineref] [label=] {\inline} {[\XMLop{label}]} + +%D \elements{text} +%D +%D \startbuffer +%D If you have a self contained &xml; file, you need to signal &context; the +%D begin and end of the document. The following elements can be used for +%D that purpose: +%D +%D <verbatim> +%D <line><text></line> +%D <line> ...</line> +%D <line></text></line> +%D </verbatim> +%D \stopbuffer +%D +%D \showelements [context] [text] + +\defineXMLenvironment [context:text] \starttext \stoptext + +%D \elements {em} +%D +%D \startbuffer +%D Authors often want some control over the way a text is typeset, which is +%D why we provide the <element>em</element> element. We may only hope that +%D the author is <em>consistent</em> in his decisions on what to emphasize. +%D \stopbuffer +%D +%D \showelements [context] [em] + +\defineXMLgrouped [context:em] \em + +%D \elements {b} +%D +%D \startbuffer +%D Bold is not always <b>beautiful</b> but if you really want it, you can +%D get it by using this element. +%D \stopbuffer +%D +%D \showelements [context] [b] + +\defineXMLgrouped [context:b] \bf + +%D \elements {verbatim,typing,line,verb,type} +%D +%D \startbuffer +%D Although the following method can be used to typeset a piece of code +%D verbatim +%D +%D <![CDATA[ +%D Dit \is nogal verbatim ! +%D Dit is {nogal} verbatim ! +%D Dit is <nogal> verbatim ! +%D ]]> +%D +%D we prefer the more structured: +%D +%D <verbatim> +%D <line>Dit \is nogal verbatim !</line> +%D <line>Dit is {nogal} verbatim !</line> +%D <line>Dit is <nogal> verbatim !</line> +%D </verbatim> +%D \stopbuffer +%D +%D The element to tag in<compound/>line verbatim is <type><verb></type>. +%D +%D \showelements [context] [verbatim] + +\defineXMLenvironment [context:verbatim] + {\startpacked + \defineXMLargument[context:line]{\endgraf\type}} + {\stoppacked} + +\defineXMLenvironment [context:typing] + {\startpacked\defineXMLargument[context:line]{\endgraf\type}} + {\stoppacked} + +\defineXMLargument [context:verb] \type +\defineXMLargument [context:type] \type + +%D \elements {itemize,item} +%D +%D \startbuffer +%D Itemized lists are quite common in documents, al least in the ones that +%D we produce. For the moment we only provide a few options, later we will +%D hook it into the &context; attribute handler. +%D +%D <itemize type="a"> +%D <item label="bla"> test </item> +%D <item> test </item> +%D </itemize> +%D +%D <itemize packed="yes"> +%D <item label="more bla"> test </item> +%D <item> test <em>what?</em></item> +%D </itemize> +%D \stopbuffer +%D +%D \showelements [context] [itemize] + +\defineXMLenvironment [context:itemize] [type=,packed=] + {\let\XMLoptions\empty + \doifsomethingXMLop{type}{\addtocommalist{\XMLop{type}}\XMLoptions}% + \doifXMLop{packed}{yes}{\addtocommalist{packed}\XMLoptions}% + \expanded{\startitemize[\XMLoptions]}} + {\stopitemize} + +\defineXMLenvironment [context:item] [label=] + {\expanded{\item[\XMLop{label}]}} + {\endgraf} + +%D \elements {externalfigure} +%D +%D \startbuffer +%D The previous examples already demonstrated how we can include a graphic: +%D +%D <verbatim> +%D <line><externalfigure file="cow" width="5cm" /></line> +%D </verbatim> +%D \stopbuffer +%D +%D \showelements [context] [externalfigure] + +\defineXMLsingular [context:externalfigure] [\??ef] [base=,label=,file=] + {\bgroup % \getXMLta \expandXMLta \expandXMLtp{file}% + \expandXMLta + \getXMLta % expand entities first + \doifelsenothing{\XMLtp{label}} + {\expanded{\externalfigure[\XMLtp{file}][\XMLta]}} + {\doifsomething{\XMLtp{base}}{\usefigurebase[\XMLtp{base}]}% + \expanded{\externalfigure[\XMLtp{label}][\XMLta]}} + \egroup} + +%D \elements {fixed} +%D \setupexternalfigures[directory={../sample}] +%D \startbuffer +%D Something fixed will end up at the place where it defined in the input +%D stream. The main idea behind this element is that it gives you control +%D over the placement. +%D +%D <itemize> +%D <item> +%D <fixed align="high"> +%D <content> +%D <externalfigure file="cow" frame="on" height="1cm" /> +%D </content> +%D </fixed> +%D </item> +%D </itemize> +%D \stopbuffer +%D +%D \showelements [context] [fixed] + +\defineXMLenvironment [context:fixed] [type=figure,location=,label=] + {\bgroup + \defineXMLsave[context:caption] + \defineXMLsave[context:content]} + {\expanded{\startfixed[\XMLop{location}]}% + \doifXMLdataelse{context:caption} + {\startcombination[1*1] + {\XMLflush{context:content}} {\XMLflush{context:caption}} + \stopcombination} + {\XMLflush{context:content}}% + \stopfixed + \egroup} + +%D \elements {float} +%D \setupexternalfigures[directory={../sample}] +%D \startbuffer +%D A floating body will be placed at the first location available, unless +%D a location is specified. As with the <element>fixed</element> element, +%D you can provide a caption. +%D +%D <float type="figure"> +%D <content> +%D <externalfigure file="cow" frame="on" height="3cm" /> +%D </content> +%D <caption>This is a cow!</caption> +%D </float> +%D \stopbuffer +%D +%D \showelements [context] [float] + +\defineXMLenvironment [context:float] [type=figure,location=here,label=] + {\bgroup + \defineXMLsave[context:caption] + \defineXMLsave[context:content]} + {\expanded + {\placefloat + [\XMLop{type}] [\XMLop{location}] [\XMLop{label}] + {\XMLflush{context:caption}} {\XMLflush{context:content}}} + \egroup} + +%D \elements {quotation,quote} +%D +%D \startbuffer +%D There is a (not so) subtle difference between a display +%D <quotation>quotation</quotation> and an <quote>in<compound/>line</quote> +%D one. +%D \stopbuffer +%D +%D \showelements [context] [table] + +\defineXMLgrouped [context:quote] \quote +\defineXMLgrouped [context:quotation] \quotation + +%D \elements {table,tr,td} +%D +%D \startbuffer +%D There are (currently) three table mechanisms in &context;. One of them +%D resembles the well known &html; tables. +%D +%D <?context-command \startlinecorrection[blank] ?> +%D <table> +%D <tr> <td>one</td> <td>a</td> <td>first </td> </tr> +%D <tr> <td>two</td> <td>b</td> <td>second</td> </tr> +%D </table> +%D <?context-command \stoplinecorrection ?> +%D +%D As you can see here, we use a similar syntax but stick to the &context; +%D attributes (which provide quite advanced control over the layout). +%D +%D <?context-command \startlinecorrection[blank] ?> +%D <table frame="off" background="color" color="white"> +%D <tr backgroundcolor="red"> <td>xx</td> <td>xx</td> </tr> +%D <tr backgroundcolor="green"> <td>xx</td> <td>xx</td> </tr> +%D </table> +%D <?context-command \stoplinecorrection ?> +%D \stopbuffer +%D +%D \showelements [context] [table] + +\defineXMLenvironment [context:table] [\@@tbl\@@tbl] + {\bgroup + \defineXMLnested [context:tr] [\@@tbl] {\expanded{\bTR[\theXMLarguments{\@@tbl}}]} \eTR + \defineXMLnested [context:td] [\@@tbl] {\expanded{\bTD[\theXMLarguments{\@@tbl}}]} \eTD + \expanded{\bTABLE[\theXMLarguments{\@@tbl\@@tbl}]}} + {\eTABLE + \egroup} + +%D \elements {tabulate,tspec,thead,tbody,ttail,trule,tr,td} +%D +%D \startbuffer +%D The second mechanism that we support is tabulation. The advantage of this +%D mechanism is that it it well tuned for tables that have much text in the +%D cells and cross page boundaires. +%D +%D <tabulate> +%D <tspec> +%D <tcell align="left"/> <tcell align="middle"/> <tcell align="right"/> +%D </tspec> +%D <thead> +%D <trule/> +%D <tr> <td> bagger </td> <td> bagger </td> <td> bagger </td> </tr> +%D <trule/> +%D </thead> +%D <ttail> +%D <trule/> +%D </ttail> +%D <tbody> +%D <tr> <td> bagger </td> <td> bagger </td> <td> bagger </td> </tr> +%D <tr> <td> bagg </td> <td> ger </td> <td> gr </td> </tr> +%D <tr> <td> bag </td> <td> er </td> <td> gger </td> </tr> +%D </tbody> +%D </tabulate> +%D \stopbuffer +%D +%D \showelements [context] [tabulate] + +\newtoks\XMLtabtoks + +\defineXMLgrouped [context:tabulate] {\XMLtabtoks{|l|p|}} + +\defineXMLpickup [context:tbody] + {\expanded{\definetabulate[dummy][\the\XMLtabtoks]} + \startdummy\XMLflush{context:thead}} + {\XMLflush{context:ttail}\stopdummy} + +\defineXMLsave [context:thead] +\defineXMLsave [context:ttail] + +\defineXMLenvironment[context:tspec] + {\XMLtabtoks\emptytoks} + {\appendtoks|\to\XMLtabtoks} + +\defineXMLsingular [context:trule] % verrrry ugly + {\crcr\noalign{\kern-\lineheight}\HL} + +\defineXMLsingular [context:tcell] [align=] + {\appendtoks|\to\XMLtabtoks + \expanded{\processallactionsinset + [\XMLop{align}]} + [ paragraph=>\appendtoks p\to\XMLtabtoks, + left=>\appendtoks l\to\XMLtabtoks, + right=>\appendtoks r\to\XMLtabtoks, + center=>\appendtoks c\to\XMLtabtoks, + middle=>\appendtoks c\to\XMLtabtoks]} + +\defineXMLenvironment [context:tr] {\ignorespaces} {\NC\NR} +\defineXMLenvironment [context:td] {\NC} {\ignorespaces} + +%D \elements {hide} +%D +%D \startbuffer +%D This is the way to [<hide>this is gone</hide>] something for the +%D typesetting engine. Normally this element is only used for testing +%D purposes. +%D \stopbuffer +%D +%D \showelements [context] [tabulate] + +\defineXMLignore[context:hide] + +%D \elements {unknown} +%D +%D \startbuffer +%D We can go on and on and <unknown/> with defining elements that map onto +%D &context; commands, but why not just use &tex; input syntax then? +%D \stopbuffer +%D +%D \showelements [context] [unknown] + +\defineXMLsingular [context:unknown] \unknown + +%D A (for the moment) private one. + +\defineXMLargument [context:element] \type + +%D The following common schema definitions apply: +%D +%D {\setupcolors[state=stop]\showXSDcomponent[context][definitions]} + +\defineXMLargument [context:chapter] [label=] {\chapter[\XMLop{label}]} +\defineXMLargument [context:section] [label=] {\section[\XMLop{label}]} +\defineXMLargument [context:subsection] [label=] {\subsection[\XMLop{label}]} +\defineXMLargument [context:subsubsection] [label=] {\subsubsection[\XMLop{label}]} +\defineXMLargument [context:subsubsubsection] [label=] {\subsubsubsection[\XMLop{label}]} + +\defineXMLargument [context:title] [label=] {\title[\XMLop{label}]} +\defineXMLargument [context:subject] [label=] {\subject[\XMLop{label}]} +\defineXMLargument [context:subsubject] [label=] {\subsubject[\XMLop{label}]} +\defineXMLargument [context:subsubsubject] [label=] {\subsubsubject[\XMLop{label}]} +\defineXMLargument [context:subsubsubsubject] [label=] {\subsubsubsubject[\XMLop{label}]} + +\defineXMLenvironment [context:frontmatter] \startfrontmatter \stopfrontmatter +\defineXMLenvironment [context:bodymatter] \startbodymatter \stopbodymatter +\defineXMLenvironment [context:backmatter] \startbackmatter \stopbackmatter +\defineXMLenvironment [context:appendices] \startappendices \stopappendices + +\defineXMLargument [context:index] [key=] + {\doifelsenothingXMLop{key}{\index}{\expanded{\index[\XMLop{key}]}}} + +% \enableXMLfiledata + +% Needed for example (stickers and so): + +\defineXMLenvironment [context:makeup] + \startstandardmakeup \stopstandardmakeup + +\protect \endinput + +% TO DO + +\defineXMLenvironment [combination] [columns=2,rows=1] + {\scratchtoks\emptytoks + \expanded{\appendtoks \noexpand \startcombination + [\XMLop{columns}*\XMLop{rows}]}\to \scratchtoks} + {\appendtoks \stopcombination \to \scratchtoks + \the\scratchtoks} + +\defineXMLprocess[combinationentry] + +\defineXMLpickup [combinationitem] + {\appendtoks\bgroup}{\egroup\to\scratchtoks} + +\defineXMLpickup [combinationcaption] + {\appendtoks\bgroup}{\egroup\to\scratchtoks} + +\endinput |