% interface=en modes=icon,screen language=uk \usemodule[article-basic] \usemodule[abbreviations-smallcaps] \usemodule[scite] \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} \definedfont[SerifBold sa 1.60]IN CONTEXT MkIV & LMTX\kern.25\bodyfontsize} \startTEXpage \tightlayer[TitlePage] \stopTEXpage % main text \startsubject[title={About \SCITE}] 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) that when I checked last still works okay, which is proof that \PERLTK\ has been stable for decades. 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. In the process some of the general lexing framework were adapted to suit our demands for speed. For a long time we shipped these files as well but at point I decided that it made no sense to keep adapting to the relatively frequent changes in the \API. The last version in the 3.* series worked okay, in the 4.* series things failed but we didn't adapt, and when series 5.* showed up I decided to drop the old lexer compatibility. I assume that a version of \SCITE\ is run that has \LPEG\ available in the main \LUA\ instance and that also supports copying text fragments using the editor object. (Till that is the case, we provide binaries with the \CONTEXT\ distribution.) In the \CONTEXT\ (standalone) distribution you will find the relevant files under: \starttyping /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. \stopsubject \startsubject[title={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]}} \stopsubject \startsubject[title={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. On \MSWINDOWS\ you can for instance install \SCITE\ in: \starttyping c:\data\system\scite \stoptyping and then end up with: \starttyping c:\data\system\scite\wscite \stoptyping and that is the path you need to add to your environment \type {PATH} variable. On \LINUX\ the files end up in: \starttyping /usr/bin /usr/share/scite \stoptyping Where the second path is the path we will put more files. \stopsubject \startsubject[title={Binaries}] When you compile binaries yourself or get them from somewhere you need to make sure that they en dup in te right place (see previous section): When you're on \MSWINDOWS\ they fly to: \starttyping wscite/scite.exe wscite/scilexer.dll \stoptyping And on \LINUX\ then end up in: \starttyping /usr/bin/SciTE /usr/bin/libscintilla.so /usr/bin/liblexilla.so \stoptyping Because we only use the official \LUA\ interface methods the lexers should just work, assuming that you have imported the \typ {context/scite-context-user} properties file. \stopsubject \startsubject[title={Installing the \CONTEXT\ lexers}] % When we started using this nice extension, we ran into issues and as a % consequence shipped a patched \LUA\ code. We also needed some more control as we % wanted to provide more features and complex nested lexers. Because the library % \API\ changed a couple of times, we now have our own variant which will be % cleaned up over time to be more consistent with our other \LUA\ code (so that we % can also use it in \CONTEXT\ as variant verbatim lexer). We hope to be able to % use the \type {scintillua} library as it does the job. % % Anyway, if you want to use \CONTEXT, you need to copy the relevant files from If you want to use \CONTEXT, you need to copy the relevant files from \starttyping /tex/texmf-context/context/data/scite \stoptyping to the path were \SCITE\ keeps its property files (\type {*.properties}). This is the path we already mentioned. There should be a file there called \type {SciteGlobal.properties}. So,in the end you get on \MSWINDOWS\ new files in: \starttyping c:\data\system\scite\wscite c:\data\system\scite\wscite\context c:\data\system\scite\wscite\context\lexer c:\data\system\scite\wscite\context\lexer\themes c:\data\system\scite\wscite\context\lexer\data c:\data\system\scite\wscite\context\documents \stoptyping while on \LINUX\ you get: \starttyping /usr/bin/share/ /usr/bin/share/context /usr/bin/share/context/lexer /usr/bin/share/context/lexer/themes /usr/bin/share/context/lexer/data /usr/bin/share/context/documents \stoptyping At the end of the \type {SciteGlobal.properties} you need to add the following line: \starttyping import context/scite-context-user \stoptyping 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 \stopsubject \startsubject[title={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 /tex/texmf/fonts/truetype/public/dejavu \stoptyping \stopsubject \startsubject[title={Extensions}] Just a quick note 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. \stopsubject \startsubject[title={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. A spell checking file has to be put in the \type {lexers/data} directory and looks as follows (e.g. \type {spell-uk.lua}): \starttyping return { ["max"]=40, ["min"]=3, ["n"]=151493, ["words"]={ ["aardvark"]="aardvark", ["aardvarks"]="aardvarks", ["aardwolf"]="aardwolf", ["aardwolves"]="aardwolves", ... } } \stoptyping The keys are words that get checked for the given value (which can have uppercase characters). The word files are not distributed (but they might be at some point). 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 \stoptyping But probably better is to use the next directive just below the usual \XML\ marker line: \starttyping \stoptyping \stopsubject \startsubject[title={Interface selection}] In a similar fashion you can drive the interface checking: \starttyping % interface=nl \stoptyping \stopsubject \startsubject[title={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. \stopsubject \startsubject[title={The external lexers}] These are the more advanced lexers. 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.} 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. Finally there is a lexer for \CWEB\ files. 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. \stopsubject \startsubject[title={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}. \stopsubject \startsubject[title={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. \stopsubject \startsubject[title={Using \ConTeXt}] When \type {mtxrun} is in your path, \CONTEXT\ should run out of the box. You can find \type {mtxrun} in: \starttyping /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. \stopsubject \startsubject[title={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 Ctrl + + show language character strip (key might change) - recognized first lines: xml \stoptyping The file will be searched for in the current direct and upto two levels higher. When no file is found the \TEX\ distribution is checked. The files \type {scite-ctx-example} and \type {scite-ctx-context} define the menu commands, like: \starttyping command.25.$(file.patterns.example)=insert_template \stoptyping \stopsubject \startsubject[title={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 \ML \NC \type{F12 / Ctrl+F7} \NC check (or process) \NC \NR \NC \type{Ctrl+F12 / Ctrl+F7} \NC process (run) \NC \NR \NC \type{Alt+F12 / Ctrl+F7} \NC process (run) using the luajit vm (if applicable) \NC \NR \LL \stoptabulate \stopbuffer \getbuffer[keybindings] \page \stopsubject \startsubject[title={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