diff options
author | Marius <mariausol@gmail.com> | 2011-09-17 17:20:13 +0300 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2011-09-17 17:20:13 +0300 |
commit | 6a1645d499e26ab02b365dd4b93da771815d8c0d (patch) | |
tree | 35f096770997609a39a2d777421b85c1e45504e8 /context/data/scite/scite-context-readme.tex | |
parent | 32956188684f3f0bd1cc077a6870fdd57fea0cfc (diff) | |
download | context-6a1645d499e26ab02b365dd4b93da771815d8c0d.tar.gz |
beta 2011.09.17 15:56
Diffstat (limited to 'context/data/scite/scite-context-readme.tex')
-rw-r--r-- | context/data/scite/scite-context-readme.tex | 672 |
1 files changed, 646 insertions, 26 deletions
diff --git a/context/data/scite/scite-context-readme.tex b/context/data/scite/scite-context-readme.tex index 3a6d673c5..6f32c87bc 100644 --- a/context/data/scite/scite-context-readme.tex +++ b/context/data/scite/scite-context-readme.tex @@ -1,19 +1,199 @@ +% interface=en modes=icon,screen language=uk + +\usemodule[abr-02] + +\logo [METAPOST] {MetaPost} +\logo [METAFUN] {MetaFun} + +\setupcolors + [state=start] + +\setuplayout + [footer=0pt, + width=middle, + height=middle] + +\setupbodyfont + [dejavu,11pt] + +\setuphead + [section] + [page=, + style=\bfb, + color=darkblue, + after=\blank] + +\setuptype + [color=darkblue] + +\setuptyping + [color=darkblue] + +\setuptyping + [margin=yes] + +\setupwhitespace + [big] + +\definecolor[gray][s=.2,t=.5,a=1] + +\startuseMPgraphic{TitlePage}{darkness} + StartPage ; + + numeric factor ; factor := 1/3 ; + numeric multiple ; multiple := PaperHeight/PaperWidth ; % 1.6 ; + numeric stages ; stages := multiple/16 ; % .1 ; + numeric darkness ; darkness := \MPvar{darkness} ; + + def Scaled(expr s, m) = + if m = 1 : + scaled (2*s*PaperWidth) + else : + xscaled (2*s*PaperWidth) yscaled (2*s*PaperHeight) + fi + enddef ; + + fill Page withcolor (factor*white) ; + + fill fullcircle scaled (multiple*PaperWidth) shifted llcorner Page withcolor (factor*red) ; + fill fullcircle scaled (multiple*PaperWidth) shifted ulcorner Page withcolor (factor*green) ; + fill fullcircle scaled (multiple*PaperWidth) shifted urcorner Page withcolor (factor*blue) ; + fill fullcircle scaled (multiple*PaperWidth) shifted lrcorner Page withcolor (factor*yellow) ; + + for i = llcorner Page, ulcorner Page, urcorner Page, lrcorner Page : + for j = 0 step stages until (10*stages-eps) : % or .8 + fill fullcircle Scaled(j,1) shifted i withcolor transparent(1,\MPvar{darkness}*(1-j),white) ; + endfor ; + endfor ; + + draw Page withpen pencircle scaled .1PaperWidth withcolor transparent(1,.5,.5white) ; + + StopPage +\stopuseMPgraphic + +\startmode[icon,screen] + + \setuppapersize[S66][S66] + + \setupbodyfont[10pt] + +\stopmode + +\startmode[icon] + + \starttext + + \startTEXpage + \useMPgraphic{TitlePage}{darkness=0.4} + \stopTEXpage + + \stoptext + +\stopmode + \starttext -\subject{Installing Scite} +% title page + +\definelayer + [TitlePage] + [width=\paperwidth, + height=\paperheight] + +\setlayer + [TitlePage] + {\useMPgraphic{TitlePage}{darkness=1}} + +\setlayerframed + [TitlePage] + [preset=rightbottom, + hoffset=.1\paperwidth, + voffset=.1\paperwidth] + [align=left, + width=\hsize, + frame=off, + foregroundcolor=gray] + {\definedfont[SerifBold sa 10]SciTE\endgraf + \definedfont[SerifBold sa 2.48]IN CONTEXT\kern.25\bodyfontsize} + +\startTEXpage + \tightlayer[TitlePage] +\stopTEXpage + +% main text + +\subject{About \SCITE} + +{\em This is an updated but yet uncorrected version.} + +\SCITE\ is a source code editor written by Neil Hodgson. After +playing with several editors we decided that this editor was quite +configurable and extendible. + +For a long time at \PRAGMA\ we used \TEXEDIT, an editor we'd +written in \MODULA. It had some project management features and +recognized the project structure in \CONTEXT\ documents. Later we +rewrote this to a platform independent reimplementation called +\TEXWORK\ written in \PERLTK\ (not to be confused with the editor +with the plural name). + +In the beginning of the century we can into \SCITE. Although the +mentioned editors provide some functionality not present in +\SCITE\ we've decided to use that editor because it frees us from +maintaining our own. We ported our \TEX\ and \METAPOST\ (line based) +syntax highlighting to \SCITE\ and got a lot of others for free. + +After a while I found out that there was an extension interface +written in \LUA. I played with it and wrote a few extensions too. +This pleasant experience later triggered the \LUATEX\ project. + +A decade into the century \SCITE\ as another new feature: you can +write dynamic external lexers in \LUA\ using \LPEG. As in the +meantime \CONTEXT\ had evolved in a \TEX/\LUA\ hybrid, it made +sense to look into this. The result is a couple of lexers that +suit \TEX, \METAPOST\ and \LUA\ usage in \CONTEXT\ \MKIV. +\footnote {In the process some of the general lexing framework was +adapted to suit our demands for speed. We shipe these files as +well.} + +In the \CONTEXT\ (standalone) distribution you will find the +relevant files under: -Scite has built-in lexers as well as external lpeg based ones. We -can use both but for the external lexers some more work is needed -to get them running. As they are more advanced it's worth the -effort. +\starttyping +<texroot>/tex/texmf-context/context/data/scite +\stoptyping + +Normally a user will not have to dive into the implementation +details but in principle you can tweak the properties files to +suit your purpose. + +\subject{Installing \SCITE} -First you need to install Scite. Just get the latest greatest from: +Installing \SCITE\ is straightforward. We are most familiar with +\MSWINDOWS\ but for other operating systems installation is not +much different. First you need to fetch the archive from: \starttyping www.scintilla.org \stoptyping -Next you need to install the lpeg lexers. These can be fetched from: +The \MSWINDOWS\ binaries are zipped in \type {wscite.zip}, and you +can unzip this in any directory you want as long as you make sure +that the binary ends up in your path or as shortcut on your +desktop. So, say that you install \SCITE\ in: + +\starttyping +c:\data\system\scite\wscite +\stoptyping + +You need to add this path to your local path definition. +Installing \SCITE\ to some known place has the advantage that you +can move it around. There are no special dependencies on the +operating system. + +Next you need to install the lpeg lexers. \footnote {Versions +later than 2.11 will not run on Windows 2K. In that case you need +to comment the external lexer import.} These can be fetched from: \starttyping code.google.com/p/scintilla @@ -22,32 +202,37 @@ code.google.com/p/scintilla On windows you need to copy the \type {lexers} subfolder to the \type {wscite} folder. For Linux the place depends on the distribution. -\subject{Extending Scite} - -In the \CONTEXT\ distribution you find the relevant files in: +For \UNIX, one can take a precompiled version as well. Here we +need to split the set of files into: \starttyping -<contextroot>/tex/texmf-context/context/data/scite +/usr/bin +/usr/share/scite \stoptyping -The easy way is to copy all the files in that path to the path where -the global properties files lives +The second path is hard coded in the binary. + +If you want to use \CONTEXT, you need to copy the relevant files from \starttyping -SciteGlobal.properties +<texroot>/tex/texmf-context/context/data/scite \stoptyping -At the end of that file (on windows it is in the path where the Scite -binary) you then add a line to the end: +to the path were \SCITE\ keeps its property files (\type (*.properties). + +There is a file called \type {SciteGlobal.properties}. At the end +of that file (on windows it is in the path where the Scite binary) +you then add a line to the end: \starttyping import scite-context-user \stoptyping -You need to restart Scite in order to see if things work out as expected. +You need to restart \SCITE\ in order to see if things work out as +expected. -Disabling the external lexer in a recent Scite is somewhat tricky. In that -case the end of that file looks like: +Disabling the external lexer in a recent \SCITE\ is somewhat +tricky. In that case the end of that file looks like: \starttyping imports.exclude=scite-context-external @@ -57,10 +242,34 @@ import scite-context-user In any case you need to make sure that the user file is loaded last. +After this, things should run as expected (given that \TEX\ runs +at the console as well). + +% In order to run the commands needed, we assume that the following programs +% are installed: +% +% \startitemize[packed] +% \item tidy (for quick and dirty checking of \XML\ files) +% \item xsltproc (for converting \XML\ files into other formats) +% \item acrobat (for viewing files) +% \item ghostview (for viewing files, use gv on \UNIX) +% \item rxvt (a console, only needed on \UNIX) +% \stopitemize + +\subject{Fonts} + +The configuration file defauls to the Dejavu fonts. These are part of the +\CONTEXT\ standalone (minimals) distribution. You can copy them to your +operating system from: + +\starttyping +<contextroot>/tex/texmf/fonts/truetype/public/dejavu +\stoptyping + \subject{An alternative approach} If for some reason you prefer not to mess with property files in the main -Scite path, you can follow a different route and selectively copy files to +\SCITE\ path, you can follow a different route and selectively copy files to places. The following files are needed for the lpeg based lexer: @@ -85,10 +294,10 @@ The data files are needed because we cannot access property files from within the lexer. If we could open a file we could use the property files instead. -These files go to the \type {lexers} subpath in your Scite +These files go to the \type {lexers} subpath in your \SCITE\ installation. Normally this sits in the binary path. The following files provide some extensions. On windows you can copy -these files to the path where the scite binary lives. +these files to the path where the \SCITE\ binary lives. \starttyping scite-ctx.lua @@ -141,24 +350,45 @@ SciTEUser.properties \stoptyping Of course the pragma import is optional. You can comment either the -internal or external variant but there is no reason not to keep them both. +internal or external variant but there is no reason not to keep them both. + +\subject{Extensions} + +Just a quick not to some extensions. If you select a part of the +text (normally you do this with the shift key pressed) and you hit +\type {Shift-F11}, you get a menu with some options. More (robust) +ones will be provided at some point. \subject{Spell checking} -If you want to have spellchecking, you need have files with correct words +If you want to have spell checking, you need have files with correct words on each line. The first line of a file determines the language: \starttyping % language=uk \stoptyping -In this case the following file is needed: +When you use the external lexers, you need to provide some files. Given that +you have a text file with valid words only, you can run the following script: + +\starttyping +mtxrun --script scite --words nl uk +\stoptyping + +This will convert files with names like \type {spell-nl.txt} into \LUA\ files +that you need to copy to the \type {lexers/data} path. Spell checking happens +realtime when you have the language directive (just add a bogus character to +disable it). Wrong words are colored red, and words that might have a case +problem are colored orange. Recognized words are greyed and words with less than +three characters are ignored. + +In the case of internal lexers, the following file is needed: \starttyping spell-uk.txt \stoptyping -This file is searched on the the path determined by the environment variable: +This file is searched on the path determined by the environment variable: \starttyping CTXSPELLPATH @@ -172,4 +402,394 @@ In a similar fashion you can drive the interface checking: % interface=nl \stoptyping +\subject{Property files} + +The internal lexers are controlled by the property files while the +external ones are steered with themes. Unfortunately there is +hardly any access to properties from the external lexer code nor +can we consult the file system and/or run programs like \type +{mtxrun}. This means that we cannot use configuration files in the +\CONTEXT\ distribution directly. Hopefully this changes with future +releases. + +\subject{The external lexers} + +These are the more advanced. They provide more detail and the \CONTEXT\ +lexer also supports nested \METAPOST\ and \LUA. Currently there is no +detailed configuration but this might change once they are stable. + +The external lexers operate on documents while the internal ones +operate on lines. This can make the external lexers slow on large +documents. We've optimized the code somewhat for speed and memory +consumption but there's only so much one can do. While lexing each +change in style needs a small table but allocating and garbage +collecting many small tables comes at a price. Of course in +practice this probably gets unnoticed. \footnote {I wrote the code +in 2011 on a more than 5 years old Dell M90 laptop, so I suppose +that speed is less an issue now.} + +In principle the external lexers can be used with \type +{textadept} which also uses \type {scintilla}. Actually, support +for lpeg lexing originates in \type {textadept}. Currently \type +{textadept} lacks a couple of features I like about \SCITE\ (for +instance it has no realtime logpane) and it's also still changing. +\footnote {A native version of \SCITE\ for \MACOSX\ is underway, +which is a good thing.} At some point the \CONTEXT\ distribution +will probably provide files for \type {textadept} as well. + +\subject{The internal lexers} + +\SCITE\ has quite some built in lexers. A lexer is responsible for +highlighting the syntax of your document. The way a \TEX\ file is +treated is configured in the file: + +\starttyping +tex.properties +\stoptyping + +You can edit this file to your needs using the menu entry under +\type {options} in the top bar. In this file, the following +settings apply to the \TEX\ lexer: + +\starttyping +lexer.tex.interface.default=0 +lexer.tex.use.keywords=1 +lexer.tex.comment.process=0 +lexer.tex.auto.if=1 +\stoptyping + +The option \type {lexer.tex.interface.default} determines the way +keywords are highlighted. You can control the interface from your +document as well, which makes more sense that editing the +configuration file each time. + +\starttyping +% interface=all|tex|nl|en|de|cz|it|ro|latex +\stoptyping + +The values in the properties file and the keywords in the preamble +line have the following meaning: + +\starttabulate[|lT|lT|p|] +\NC 0 \NC all \NC all commands (preceded by a backslash) \NC \NR +\NC 1 \NC tex \NC \TEX, \ETEX, \PDFTEX, \OMEGA\ primitives (and macros) \NC \NR +\NC 2 \NC nl \NC the dutch \CONTEXT\ interface \NC \NR +\NC 3 \NC en \NC the english \CONTEXT\ interface \NC \NR +\NC 4 \NC de \NC the german \CONTEXT\ interface \NC \NR +\NC 5 \NC cz \NC the czech \CONTEXT\ interface \NC \NR +\NC 6 \NC it \NC the italian \CONTEXT\ interface \NC \NR +\NC 7 \NC ro \NC the romanian \CONTEXT\ interface \NC \NR +\NC 8 \NC latex \NC \LATEX\ (apart from packages) \NC \NR +\stoptabulate + +The configuration file is set up in such a way that you can easily +add more keywords to the lists. The keywords for the second and +higher interfaces are defined in their own properties files. If +you're curious about the way this is configures, you can peek into +the property files that start with \type {scite-context}. When you +have \CONTEXT\ installed you can generate configuration files with + +\starttyping +mtxrun --script interface --scite +\stoptyping + +You need to make sure that you move the result to the right place so best +not mess around with this command and use the files from the distribution. + +Back to the properties in \type {tex.properties}. You can disable keyword +coloring alltogether with: + +\starttyping +lexer.tex.use.keywords=0 +\stoptyping + +but this is only handy for testing purposes. More interesting is that you can +influence the way comment is treated: + +\starttyping +lexer.tex.comment.process=0 +\stoptyping + +When set to zero, comment is not interpreted as \TEX\ code and it will come out +in a uniform color. But, when set to one, you will get as much colors as a \TEX\ +source. It's a matter of taste what you choose. + +The lexer tries to cope with the \TEX\ syntax as good as possible and takes for +instance care of the funny \type {^^} notation. A special treatment is +applied to so called \type {\if}'s: + +\starttyping +lexer.tex.auto.if=1 +\stoptyping + +This is the default setting. When set to one, all \type {\ifwhatever}'s will be +seen as a command. When set to zero, only the primitive \type {\if}'s will be +treated. In order not to confuse you, when this property is set to one, the +lexer will not color an \type {\ifwhatever} that follows an \type {\newif}. + +\subject{The \METAPOST\ lexer} + +The \METAPOST\ lexer is set up slightly different from its \TEX\ counterpart, +first of all because \METAPOST\ is more a language that \TEX. As with the +\TEX\ lexer, we can control the interpretation of identifiers. The \METAPOST\ +specific configuration file is: + +\starttyping +metapost.properties +\stoptyping + +Here you can find properties like: + +\starttyping +lexer.metapost.interface.default=1 +\stoptyping + +Instead of editing the configuration file you can control the lexer with the +first line in your document: + +\starttyping +% interface=none|metapost|mp|metafun +\stoptyping + +The numbers and keywords have the following meaning: + +\starttabulate[|lT|lT|p|] +\NC 0 \NC none \NC no highlighting of identifiers \NC \NR +\NC 1 \NC metapost or mp \NC \METAPOST\ primitives and macros \NC \NR +\NC 2 \NC metafun \NC \METAFUN\ macros \NC \NR +\stoptabulate + +Similar to the \TEX\ lexer, you can influence the way comments are handled: + +\starttyping +lexer.metapost.comment.process=1 +\stoptyping + +This will interpret comment as \METAPOST\ code, which is not that useful +(opposite to \TEX, where documentation is often coded in \TEX). + +The lexer will color the \METAPOST\ keywords, and, when enabled also additional +keywords (like those of \METAFUN). The additional keywords are colored and shown +in a slanted font. + +The \METAFUN\ keywords are defined in a separate file: + +\starttyping +metafun-scite.properties +\stoptyping + +You can either copy this file to the path where you global properties files lives, +or put a copy in the path of your user properties file. In that case you need to +add an entry to the file \type {SciTEUser.properties}: + +\starttyping +import metafun-scite +\stoptyping + +The lexer is able to recognize \type {btex}||\type {etex} and will treat anything +in between as just text. The same happens with strings (between \type {"}). Both +act on a per line basis. + +\subject{Using \ConTeXt} + +When \type {mtxrun} is in your path, \CONTEXT\ should run out of the box. You can +find \type {mtxrun} in: + +\starttyping +<contextroot>/tex/texmf-mswin/bin +\stoptyping + +or in a similar path that suits the operating system that you use. + +When you hit \type{CTRL-12} your document will be processed. Take a look at +the \type {Tools} menu to see what more is provided. + +\subject{Extensions (using \LUA)} + +When the \LUA\ extensions are loaded, you will see a message +in the log pane that looks like: + +\starttyping +- see scite-ctx.properties for configuring info + +- ctx.spellcheck.wordpath set to ENV(CTXSPELLPATH) +- ctxspellpath set to c:\data\develop\context\spell +- ctx.spellcheck.wordpath expands to c:\data\develop\context\spell + +- ctx.wraptext.length is set to 65 +- key bindings: + +Shift + F11 pop up menu with ctx options + +Ctrl + B check spelling +Ctrl + M wrap text (auto indent) +Ctrl + R reset spelling results +Ctrl + I insert template +Ctrl + E open log file + +- recognized first lines: + +xml <?xml version='1.0' language='nl' +tex % language=nl +\stoptyping + +This message tells you what extras are available. + +\subject{Templates} + +There is an experimental template mechanism. One option is to define +templates in a properties file. The property file \type +{scite-ctx-context} contains definitions like: + +\starttyping +command.25.$(file.patterns.context)=insert_template \ +$(ctx.template.list.context) + +ctx.template.list.context=\ + itemize=structure.itemize.context|\ + tabulate=structure.tabulate.context|\ + natural TABLE=structure.TABLE.context|\ + use MP graphic=graphics.usemp.context|\ + reuse MP graphic=graphics.reusemp.context|\ + typeface definition=fonts.typeface.context + +ctx.template.structure.itemize.context=\ +\startitemize\n\ +\item ?\n\ +\item ?\n\ +\item ?\n\ +\stopitemize\n +\stoptyping + +The file \type {scite-ctx-example} defines \XML\ variants: + +\starttyping +command.25.$(file.patterns.example)=insert_template \ +$(ctx.template.list.example) + +ctx.template.list.example=\ + bold=font.bold.example|\ + emphasized=font.emphasized.example|\ + |\ + inline math=math.inline.example|\ + display math=math.display.example|\ + |\ + itemize=structure.itemize.example + +ctx.template.structure.itemize.example=\ +<itemize>\n\ +<item>?</item>\n\ +<item>?</item>\n\ +<item>?</item>\n\ +</itemize>\n +\stoptyping + +For larger projects it makes sense to keep templates with the +project. In one of our projects we have a directory in the +path where the project files are kept which holds template files: + +\starttyping +..../ctx-templates/achtergronden.xml +..../ctx-templates/bewijs.xml +\stoptyping + +One could define a template menu like we did previously: + +\starttyping +ctx.templatelist.example=\ + achtergronden=mathadore.achtergronden|\ + bewijs=mathadore.bewijs|\ + +ctx.template.mathadore.achtergronden.file=smt-achtergronden.xml +ctx.template.mathadore.bewijs.file=smt-bewijs.xml +\stoptyping + +However, when no such menu is defined, we will automatically scan +the directory and build the menu without user intervention. + +\subject{Using \SCITE} + +The following keybindings are available in \SCITE. Most of this +list is taken from the on|-|line help pages. + +\startbuffer[keybindings] +\starttabulate[|l|p|] +\FL +\NC \rm \bf keybinding \NC \bf meaning (taken from the \SCITE\ help file) \NC \NR +\ML +\NC \type{Ctrl+Keypad+} \NC magnify text size \NC \NR +\NC \type{Ctrl+Keypad-} \NC reduce text size \NC \NR +\NC \type{Ctrl+Keypad/} \NC restore text size to normal \NC \NR +\ML +\NC \type{Ctrl+Keypad*} \NC expand or contract a fold point \NC \NR +\ML +\NC \type{Ctrl+Tab} \NC cycle through recent files \NC \NR +\ML +\NC \type{Tab} \NC indent block \NC \NR +\NC \type{Shift+Tab} \NC dedent block \NC \NR +\ML +\NC \type{Ctrl+BackSpace} \NC delete to start of word \NC \NR +\NC \type{Ctrl+Delete} \NC delete to end of word \NC \NR +\NC \type{Ctrl+Shift+BackSpace} \NC delete to start of line \NC \NR +\NC \type{Ctrl+Shift+Delete} \NC delete to end of line \NC \NR +\ML +\NC \type{Ctrl+Home} \NC go to start of document; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+End} \NC go to end of document; \type{Shift} extends selection \NC \NR +\NC \type{Alt+Home} \NC go to start of display line; \type{Shift} extends selection \NC \NR +\NC \type{Alt+End} \NC go to end of display line; \type{Shift} extends selection \NC \NR +\ML +\NC \type{Ctrl+F2} \NC create or delete a bookmark \NC \NR +\NC \type{F2} \NC go to next bookmark \NC \NR +\ML +\NC \type{Ctrl+F3} \NC find selection \NC \NR +\NC \type{Ctrl+Shift+F3} \NC find selection backwards \NC \NR +\ML +\NC \type{Ctrl+Up} \NC scroll up \NC \NR +\NC \type{Ctrl+Down} \NC scroll down \NC \NR +\ML +\NC \type{Ctrl+C} \NC copy selection to buffer \NC \NR +\NC \type{Ctrl+V} \NC insert content of buffer \NC \NR +\NC \type{Ctrl+X} \NC copy selection to buffer and delete selection \NC \NR +\ML +\NC \type{Ctrl+L} \NC line cut \NC \NR +\NC \type{Ctrl+Shift+T} \NC line copy \NC \NR +\NC \type{Ctrl+Shift+L} \NC line delete \NC \NR +\NC \type{Ctrl+T} \NC line transpose with previous \NC \NR +\NC \type{Ctrl+D} \NC line duplicate \NC \NR +\ML +\NC \type{Ctrl+K} \NC find matching preprocessor conditional, skipping nested ones \NC \NR +\NC \type{Ctrl+Shift+K} \NC select to matching preprocessor conditional \NC \NR +\NC \type{Ctrl+J} \NC find matching preprocessor conditional backwards, skipping nested ones \NC \NR +\NC \type{Ctrl+Shift+J} \NC select to matching preprocessor conditional backwards \NC \NR +\ML +\NC \type{Ctrl+[} \NC previous paragraph; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+]} \NC next paragraph; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+Left} \NC previous word; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+Right} \NC next word; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+/} \NC previous word part; \type{Shift} extends selection \NC \NR +\NC \type{Ctrl+\ } \NC next word part; \type{Shift} extends selection \NC \NR +\LL +\stoptabulate +\stopbuffer + +\getbuffer[keybindings] + +\subject{Affiliation} + +\starttabulate[|l|l|] +\NC author \NC Hans Hagen \NC \NR +\NC copyright \NC PRAGMA ADE, Hasselt NL \NC \NR +\NC more info \NC \type {www.pragma-ade.com} \NC \NR +\NC \NC \type {www.contextgarden.net} \NC \NR +\NC version \NC \currentdate \NC \NR +\stoptabulate + +\startstandardmakeup[headerstate=none,footer=none] + + \setuptabulate[before=,after=] \getbuffer[keybindings] + + \vfill + +\stopstandardmakeup + \stoptext |