% interface=en modes=icon,screen language=uk

\usemodule[art-01]
\usemodule[abr-02]

\unexpanded\def\METAPOST{MetaPost}
\unexpanded\def\METAFUN {MetaFun}

\setuphead
  [section]
  [color=darkblue]

\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

% 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 MkIV\kern.25\bodyfontsize}

\startTEXpage
  \tightlayer[TitlePage]
\stopTEXpage

% main text

\subject{About \SCITE}

{\em This manual is under (re)construction.}

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 I can into \SCITE, written by Neil
Hodgson. Although the mentioned editors provide some functionality
not present in \SCITE\ we decided to use that editor because it
frees us from maintaining our own. I 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\ got another new feature: you can
write dynamic external lexers in \LUA\ using \LPEG. As in the
meantime \CONTEXT\ has 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. As we
also use \XML\ as input and output format a lexer for \XML\ is also
provided. And because \PDF\ is one of the backend formats lexing of
\PDF\ is also implemented. \footnote {In the process some of the
general lexing framework was adapted to suit our demands for speed.
We ship these files as well.}

In the \CONTEXT\ (standalone) distribution you will find the
relevant files under:

\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{The look and feel}

The color scheme that we use is consistent over the lexers but we
use more colors that in the traditional lexing. For instance,
\TEX\ primitives, low level \TEX\ commands, \TEX\ constants, basic
file structure related commands, and user commands all get a
different treatment. When spell checking is turned on, we indicate
unknown words, but also words that are known but might need
checking, for instance because they have an uppercase character.
In \in {figure} [fig:colors] we some of that in practice.

\placefigure
  [page]
  [fig:colors]
  {Nested lexers in action.}
  {\rotate
     [rotation=90]
     {\externalfigure
        [scite-context-visual.png]
        [maxheight=1.2\textwidth,
         maxwidth=.9\textheight]}}

\subject{Installing \SCITE}

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

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
\stoptyping

On windows you need to copy the \type {lexers} subfolder to the
\type {wscite} folder. For Linux the place depends on the
distribution and I just copy them in the same path as where the
regular properties files live.

For \UNIX, one can take a precompiled version as well. Here we
need to split the set of files into:

\starttyping
/usr/bin
/usr/share/scite
\stoptyping

The second path is hard coded in the binary.

If you want to use \CONTEXT, you need to copy the relevant files from

\starttyping
<texroot>/tex/texmf-context/context/data/scite
\stoptyping

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.

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
import *
import scite-context-user
\stoptyping

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 defaults to the Dejavu fonts. These free
fonts are part of the \CONTEXT\ suite (also known as the
standalone distribution). Of course you can fetch them from \type
{http://dejavu-fonts.org} as well. You have to copy them to where
your operating system expects them. In the suite they are
available in

\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 places.

The following files are needed for the lpeg based lexer:

\starttyping
lexers/scite-context-lexer.lua
lexers/scite-context-lexer-tex.lua
lexers/scite-context-lexer-mps.lua
lexers/scite-context-lexer-lua.lua
lexers/scite-context-lexer-cld.lua
lexers/scite-context-lexer-txt.lua
lexers/scite-context-lexer-xml*.lua
lexers/scite-context-lexer-pdf*.lua

lexers/context/data/scite-context-data-tex.lua
lexers/context/data/scite-context-data-context.lua
lexers/context/data/scite-context-data-interfaces.lua
lexers/context/data/scite-context-data-metapost.lua
lexers/context/data/scite-context-data-metafun.lua

lexers/themes/scite-context-theme.lua
\stoptyping

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\
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.

\starttyping
scite-ctx.lua
\stoptyping

Because property files can only be loaded from the same path
where the (user) file loads them you need to copy the following
files to the same path where the loading is defined:

\starttyping
scite-context.properties
scite-context-internal.properties
scite-context-external.properties

scite-pragma.properties

scite-tex.properties
scite-metapost.properties

scite-context-data-tex.properties
scite-context-data-context.properties
scite-context-data-interfaces.properties
scite-context-data-metapost.properties
scite-context-data-metafun.properties

scite-ctx.properties
scite-ctx-context.properties
scite-ctx-example.properties
\stoptyping

On Windows these go to:

\starttyping
c:/Users/YourName
\stoptyping

Next you need to add this to:

\starttyping
import scite-context
import scite-context-internal
import scite-context-external
import scite-pragma
\stoptyping

to the file:

\starttyping
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.

\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 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

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

If you use the traditional lexer, this file is taken from the
path determined by the environment variable:

\starttyping
CTXSPELLPATH
\stoptyping

As already mentioned, the lpeg lexer expects them in the data
path. This is because the \LUA\ instance that does the lexing is
rather minimalistic and lacks some libraries as well as cannot
access the main \SCITE\ state.

Spell checking in \type {txt} files is enabled by adding a first
line:

\starttyping
[#!-%] language=uk
\stoptyping

The first character on that line is one of the four mentioned
between square brackets. So,

\starttyping
# language=uk
\stoptyping

should work. For \XML\ files there are two methods. You can use the
following (at the start of the file):

\starttyping
<?xml ... language="uk" ?>
\stoptyping

But probably better is to use the next directive just below the
usual \XML\ marker line:

\starttyping
<?context-xml-directive editor language uk ?>
\stoptyping

\subject{Interface selection}

In a similar fashion you can drive the interface checking:

\starttyping
% 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.
At some point the \CONTEXT\ distribution might ship with files
for \type {textadept} as well.

The external lpeg lexers work okay with the \MSWINDOWS\ and
\LINUX\ versions of \SCITE, but unfortunately at the time of
writing this, the \LUA\ library that is needed is not available
for the \MACOSX\ version of \SCITE. Also, due to the fact that the
lexing framework is rather isolated, there are some issues that
cannot be addressed in the properly, at least not currently.

In addition to \CONTEXT\ and \METAFUN\ lexing a \LUA\ lexer is
also provided so that we can handle \CONTEXT\ \LUA\ Document
(\CLD) files too. There is also an \XML\ lexer. This one also
provides spell checking. The \PDF\ lexer tries to do a good job on
\PDF\ files, but it has some limitations. There is also a simple
text file lexer that does spell checking.

Don't worry if you see an orange rectangle in your \TEX\ or \XML\
document. This indicates that there is a special space character
there, for instance \type {0xA0}, the nonbreakable space. Of course
we assume that you use \UTF8 as input encoding.

\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

\stoptext
