summaryrefslogtreecommitdiff
path: root/tex/context/base/verb-ini.mkii
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
commit8d8d528d2ad52599f11250cfc567fea4f37f2a8b (patch)
tree94286bc131ef7d994f9432febaf03fe23d10eef8 /tex/context/base/verb-ini.mkii
parentf5aed2e51223c36c84c5f25a6cad238b2af59087 (diff)
downloadcontext-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/verb-ini.mkii')
-rw-r--r--tex/context/base/verb-ini.mkii1789
1 files changed, 0 insertions, 1789 deletions
diff --git a/tex/context/base/verb-ini.mkii b/tex/context/base/verb-ini.mkii
deleted file mode 100644
index 5a817b4bb..000000000
--- a/tex/context/base/verb-ini.mkii
+++ /dev/null
@@ -1,1789 +0,0 @@
-%D \module
-%D [ file=verb-ini,
-%D version=1997.12.22,
-%D title=\CONTEXT\ Verbatim Macros,
-%D subtitle=Initialization,
-%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.
-
-%D Today I would implement the pretty handler slightly
-%D different, using stack and intermediate flushing. Maybe
-%D even without active chars. So, someday \unknown. Also
-%D I think that there are better ways (the current approach
-%D is an accumulation; for instance, we could save a second
-%D argument by turning chars into numbers and vise versa.
-
-%D Because this module is quite independant of system macros,
-%D it can be used as a stand||alone verbatim environment.
-%D
-%D This is a sort of second release of \type{supp-ver} and
-%D therefore differs in some aspects from the implementation
-%D published in the \MAPS. The first change concern
-%D optimization of breaks, that is, the first and last two
-%D lines of verbatim blocks are kept together. The second
-%D adaption is due to the fact that I wanted to support pretty
-%D printing not only for \TEX\ sources, but also for \PERL,
-%D \METAPOST\ and probably more. The \JAVASCRIPT\ module is
-%D closely related to \PERL, so we will not mention that one
-%D again.
-
-\ifx \undefined \writestatus \input supp-mis.tex \fi
-
-%D Verbatim typesetting, especially of \TEX\ sources, is a
-%D non||trivial task. This is a direct results of the fact that
-%D characters can have \CATCODES\ other than~11 and such
-%D characters needs a special treatment. What for instance is
-%D \TEX\ supposed to do when it encounters a \type{$} or an
-%D \type{#}? This module deals with these matters.
-
-\writestatus{loading}{ConTeXt Verbatim Macros / Initialization}
-
-%D The verbatim environment has some features, like coloring
-%D \TEX\ text, seldom found in other environments. Especially
-%D when the output of \TEX\ is viewed on an electronic medium,
-%D coloring has a positive influence on the readability of
-%D \TEX\ sources, so we found it very acceptable to dedicate
-%D half of this module to typesetting \TEX\ specific character
-%D sequences in color. In this module we'll also present some
-%D macro's for typesetting inline, display and file verbatim.
-%D The macro's are capable of handling \TAB\ too.
-%D
-%D This module shows a few tricks that are often overseen by
-%D novice, like the use of the \TEX\ primitive \type{\meaning}.
-%D First I'll show in what way the users are confronted with
-%D verbatim typesetting. Because we want to be able to test for
-%D symmetry and because we hate the method of closing down the
-%D verbatim mode with some strange active character, we will
-%D use the following construction for display verbatim:
-%D
-%D \starttyping
-%D The Dutch word 'typen' stands for 'typing', therefore in the Dutch version
-%D one will not find the word 'verbatim'.
-%D \stoptyping
-%D
-%D In \CONTEXT\ files can be typed with \type{\typefile} and
-%D inline verbatim can be accomplished with \type{\type}. This
-%D last command comes in many flavors:
-%D
-%D \starttyping
-%D We can say \type<<something>> or \type{something}. The first one is a bit
-%D longer but also supports slanted typing, which accomplished by typing
-%D \type<<a <<slanted>> word>>. We can also use commands to enhance the text
-%D \type<<with <</bf boldfaced>> text>>. Just to be complete, we decided
-%D to accept also \LaTeX\ alike verbatim, which means that \type+something+
-%D and \type|something| are valid commands too. Of course we want the grouped
-%D alternatives to process \type{hello {\bf big} world} with braces.
-%D \stoptyping
-%D
-%D In the core modules, we will build this support on top of
-%D this module. There these commands can be tuned with
-%D accompanying setup commands. There we can enable commands,
-%D slanted typing, control spaces, \TAB||handling and (here we
-%D are:) coloring. We can also setup surrounding white space
-%D and indenting. Here we'll only show some examples.
-
-\unprotect
-
-%D \macros
-%D {verbatimfont}
-%D
-%D When we are typesetting verbatim we use a non||proportional
-%D (mono spaced) font. Normally this font is available by
-%D calling \type{\tt}. In \CONTEXT\ this command does a
-%D complete font||style switch. There we could have stuck with
-%D \type{\tttf}.
-
-\ifx\verbatimfont\undefined \def\verbatimfont{\tt\normalnoligatures\font} \fi
-
-\ifx\normalnoligatures\undefined \let\normalnoligatures\gobbleoneargument \fi
-
-%D \macros
-%D {obeyedspace, obeyedtab, obeyedline, obeyedpage}
-%D
-%D We have followed Knuth in naming macros that make \SPACE,
-%D \NEWLINE\ and \NEWPAGE\ active and assigning them
-%D \type{\obeysomething}, but first we set some default values.
-
-\def\obeyedspace {\hbox{ }}
-\def\obeyedtab {\obeyedspace}
-\def\obeyedline {\par}
-\def\obeyedpage {\vfill\eject}
-
-%D Because we will introduce a status variable, we can define
-%D a better \type {\obeyedspace}.
-
-\def\obeyedspace {\ifprocessingverbatim\hbox{ }\else\space\fi}
-
-%D \macros
-%D {controlspace,setcontrolspaces}
-%D
-%D First we define \type{\obeyspaces}. When we want visible
-%D spaces (control spaces) we only have to adapt the definition
-%D of \type{\obeyedspace} to:
-
-\def\controlspace{\hbox{\char32}}
-\def\normalspace { }
-\def\normalspaces{\catcode`\ =\@@space}
-
-\bgroup
-\catcode`\ =\@@active
-\gdef\obeyspaces{\catcode`\ =\@@active\def {\obeyedspace}}
-\gdef\setcontrolspaces{\catcode`\ =\@@active\def {\controlspace}}
-\egroup
-
-%D \macros
-%D {obeytabs, obeylines, obeypages,
-%D ignoretabs, ignorelines, ignorepages}
-%D
-%D Next we take care of \NEWLINE\ and \NEWPAGE\ and because we
-%D want to be able to typeset listings that contain \TAB, we
-%D have to handle those too. Because we have to redefine the
-%D \NEWPAGE\ character locally, we redefine the meaning of
-%D this (often already) active character.
-
-\catcode`\^^L=\@@active \def^^L{\par}
-
-%D The following indirect definitions enable us to implement
-%D all kind of \type{\obeyed} handlers.
-
-\bgroup
-
-\catcode`\^^I=\@@active
-\catcode`\^^M=\@@active
-\catcode`\^^L=\@@active
-
-\gdef\obeytabs {\catcode`\^^I=\@@active\def^^I{\obeyedtab}}
-\gdef\obeylines {\catcode`\^^M=\@@active\def^^M{\obeyedline}}
-\gdef\obeypages {\catcode`\^^L=\@@active\def^^L{\obeyedpage}}
-
-\gdef\ignoretabs {\catcode`\^^I=\@@active\def^^I{\obeyedspace}}
-\gdef\ignorelines {\catcode`\^^M=\@@active\def^^M{\obeyedspace}}
-\gdef\ignorepages {\catcode`\^^L=\@@ignore} % \@@active\def^^L{\obeyedline}}
-\gdef\ignoreeofs {\catcode`\^^Z=\@@ignore}
-
-%D For testing (see digit parser) we need an indirect macro
-%D in order to compare the next (\type {\next}) token
-%D (possibly \type {^^M}) being \type {\obeyedline}.
-
-\gdef\nextobeyedline{\obeyedline}
-
-\egroup
-
-%D \macros
-%D {obeycharacters}
-%D
-%D We also predefine \type{\obeycharacters}, which will
-%D enable us to implement character||specific behavior, like
-%D colored verbatim.
-
-\let\obeycharacters=\relax
-
-%D \macros
-%D {settabskips}
-%D
-%D The macro \type{\settabskip} can be used to enable tab
-%D handling. Processing tabs is sometimes needed when one
-%D processes a plain \ASCII\ listing. Tab handling slows down
-%D verbatim typesetting considerably.
-
-\bgroup
-
-\catcode`\^^I=\@@active
-
-\gdef\settabskips
- {\let\processverbatimline\doprocesstabskipline
- \catcode`\^^I\@@active
- \let^^I\doprocesstabskip}
-
-\gdef\setfixedtabskips#1%
- {\catcode`\^^I\@@active
- \def^^I{\kern#1\spaceskip}}
-
-\egroup
-
-%D \macros
-%D {processingverbatim}
-%D
-%D Typesetting a file in most cases results in more than one
-%D page. Because we don't want problems with files that are
-%D read in during the construction of the page, we set \type
-%D {\ifprocessingverbatim}, so the output routine can adapt
-%D its behavior. Originally we used \type {\scratchread}, but
-%D because we want to support nesting, we decided to use a
-%D separate input file.
-
-\newif\ifprocessingverbatim
-
-%D \macros
-%D {processinlineverbatim}
-%D
-%D Although the inline verbatim commands presented here will be
-%D extended and embedded in the core modules of \CONTEXT,
-%D they can be used separately. Both grouped and character
-%D alternatives are provided but \type{<<} and nested
-%D braces are implemented in the core module. This commands
-%D takes one argument: the closing command.
-%D
-%D \starttyping
-%D \processinlineverbatim{\closingcommand}
-%D \stoptyping
-%D
-%D One can define his own verbatim commands, which can be very
-%D simple:
-%D
-%D \starttyping
-%D \def\Verbatim {\processinlineverbatim\relax}
-%D \stoptyping
-%D
-%D or a bit more more complex:
-%D
-%D \starttyping
-%D \def\GroupedVerbatim%
-%D {\bgroup
-%D \dosomeusefullthings
-%D \processinlineverbatim\egroup}
-%D \stoptyping
-%D
-%D Before entering inline verbatim mode, we take care of the
-%D unwanted \TAB, \NEWLINE\ and \NEWPAGE\ characters and
-%D turn them into \SPACE. We need the double \type{\bgroup}
-%D construction to keep the closing command local.
-
-\def\setverbatimspaceskip
- {\setbox\scratchbox\hbox{x}%
- \spaceskip\wd\scratchbox
- \xspaceskip\spaceskip}
-
-\def\setupinlineverbatim
- {\verbatimfont
- \setverbatimspaceskip
- \let\obeytabs\ignoretabs
- \let\obeylines\ignorelines
- \let\obeypages\ignorepages
- \setupcopyverbatim}
-
-\def\doprocessinlineverbatim
- {\ifx\next\bgroup
- \setupinlineverbatim
- \catcode`\{\@@begingroup
- \catcode`\}\@@endgroup
- \def\next{\let\next=}%
- \else
- \setupinlineverbatim
- \def\next##1{\catcode`##1=\@@endgroup}%
- \fi
- \next}
-
-\def\processinlineverbatim#1%
- {\bgroup
- \processingverbatimtrue
- \localcatcodestrue % TeX processes paragraph's
- \def\endofverbatimcommand{#1\egroup}%
- \bgroup
- \aftergroup\endofverbatimcommand
- \futurelet\next\doprocessinlineverbatim}
-
-%D The closing command is executed afterwards as an internal
-%D command and therefore should not be given explicitly when
-%D typesetting inline verbatim.
-
-%D \macros
-%D {optimizeverbatim}
-%D
-%D One day, a collegue asked me why I didn't prevent breaking
-%D after a first or before a last verbatim line. At first sight
-%D I thought of using the two pass mechanism, but because we're
-%D already keeping track of individual lines, a more direct
-%D solution is possible: we just keep track of in what line
-%D we are. One can turn this feature off.
-
-\newif\ifoptimizeverbatim \optimizeverbatimtrue
-
-%D Before we implement display and file verbatim, we define
-%D some macros that deal with typesetting the individual lines.
-%D We keep track of the status by means of a character
-%D specification. This status variable tells us if we're
-%D skipping a first line or placing a first or last line.
-%D The next few examples show us where breaks are inserted.
-%D
-%D \bgroup
-%D
-%D \def\doverbatimnobreak
-%D {\nobreak\hrule width 10cm\par\penalty500} % == \nobreak
-%D
-%D \def\doverbatimgoodbreak
-%D {\nobreak\hrule width 3cm \par\penalty\linepenalty}
-%D
-%D \starttyping
-%D test
-%D test
-%D \stoptyping
-%D
-%D or
-%D
-%D \starttyping
-%D test
-%D test
-%D test
-%D test
-%D \stoptyping
-%D
-%D or
-%D
-%D \starttyping
-%D test
-%D
-%D test
-%D test
-%D test
-%D \stoptyping
-%D
-%D \egroup
-%D
-%D The long ones are \type{\nobreaks} and the short ones
-%D \type{\goodbreaks}. And this is how it's done:
-
-\def\doverbatimnobreak
- {\ifoptimizeverbatim\penalty500 \fi}
-
-\def\doverbatimgoodbreak
- {\ifoptimizeverbatim\penalty\linepenalty\fi}
-
-\def\doflushverbatimline
- {\expandafter\dodoverbatimline\expandafter{\savedverbatimline}}
-
-\def\doverbatimbeginofline#1% linenumber (optional provided by mkiv / todo)
- {\dontleavehmode
- \strut
- \the\everyline}
-
-\def\doverbatimendofline
- {\par}
-
-\def\doverbatimemptyline
- {\strut
- \par}
-
-\let\handleverbatimline=\relax
-
-% \def\initializeverbatimline%
-% {\global\let\savedverbatimline=\empty
-% \ifskipfirstverbatimline
-% \global\chardef\verbatimstatus=0
-% \else
-% \global\chardef\verbatimstatus=1
-% \fi}
-%
-% more efficient
-
-\global\chardef\verbatimstatus0
-
-\def\initializeverbatimline
- {\global\let\savedverbatimline\empty
- \global\chardef\verbatimstatus\ifskipfirstverbatimline0 \else1 \fi}
-
-\chardef\verbatimemptylinemode\zerocount
-
-\def\presetemptyverbatimline
- {\ifcase\verbatimstatus
- \global\chardef\verbatimstatus\plusone
- \or
- \ifcase\verbatimemptylinemode\or\or
- \doemptyverbatimline
- \fi
- \or
- \ifcase\verbatimemptylinemode\else
- \doemptyverbatimline
- \fi
- \or
- \doflushverbatimline
- \global\let\savedverbatimline\empty
- \doemptyverbatimline
- \global\chardef\verbatimstatus\plustwo
- \else
- \kern\zeropoint
- \doverbatimnobreak
- \doflushverbatimline
- \global\let\savedverbatimline\empty
- \doemptyverbatimline
- \global\chardef\verbatimstatus\plustwo
- \fi}
-
-\def\presetnormalverbatimline
- {\ifcase\verbatimstatus
- \global\chardef\verbatimstatus\plustwo
- \or
- \global\chardef\verbatimstatus\plusthree
- \or
- \global\chardef\verbatimstatus\plusthree
- \or
- \doflushverbatimline
- \global\chardef\verbatimstatus\plusfour
- \or
- \kern\zeropoint
- \doverbatimnobreak
- \doflushverbatimline
- \global\chardef\verbatimstatus\plusfive
- \or
- \doverbatimgoodbreak
- \doflushverbatimline
- \fi
- \global\let\savedverbatimline\verbatimline}
-
-\def\presetlastverbatimline
- {\ifcase \verbatimstatus
- \or
- \or
- \or
- \doflushverbatimline
- \else
- \kern \zeropoint
- \doverbatimnobreak
- \doflushverbatimline
- \fi
- \ifcase\verbatimemptylinemode\or\else
- \kern \zeropoint
- \fi}
-
-%D \macros
-%D {skipfirstverbatimline}
-%D
-%D By default the rest of the first line is ignored. We can
-%D turn this feature off by saying:
-%D
-%D \starttyping
-%D \skipfirstverbatimlinefalse
-%D \stoptyping
-
-\newif\ifskipfirstverbatimline \skipfirstverbatimlinetrue
-
-%D \macros
-%D {processdisplayverbatim}
-%D
-%D We can define a display verbatim environment with the
-%D command \type{\processdisplayverbatim} in the following way:
-%D
-%D \starttyping
-%D \processdisplayverbatim{\closingcommand}
-%D \stoptyping
-%D
-%D \noindent For instance, we can define a simple command like:
-%D
-%D \starttyping
-%D \def\BeginVerbatim {\processdisplayverbatim{EndVerbatim}}
-%D \stoptyping
-%D
-%D \noindent But we can also do more advance things like:
-%D
-%D \starttyping
-%D \def\BeginVerbatim {\bigskip \processdisplayverbatim{\EndVerbatim}}
-%D \def\EndVerbatim {\bigskip}
-%D \stoptyping
-%D
-%D When we compare these examples, we see that the backslash in
-%D the closing command is optional. One is free in actually
-%D defining a closing command. If one is defined, the command
-%D is executed after ending verbatim mode.
-
-\def\processdisplayverbatim#1%
- {\par
- \bgroup
- \escapechar=-1
- \xdef\verbatimname{\string#1}%
- \egroup
- \def\endofdisplayverbatim{\csname\verbatimname\endcsname}%
- \bgroup
- \parindent\zeropoint
- \ifdim\lastskip<\parskip
- \removelastskip
- \vskip\parskip
- \fi
- \parskip\zeropoint
- \processingverbatimtrue
- \global\linepartrue
- \expandafter\let\csname\verbatimname\endcsname\relax
- \edef\endofverbatimcommand{\csname\verbatimname\endcsname}%
- \edef\endofverbatimcommand{\meaning\endofverbatimcommand}%
- \verbatimfont
- \setverbatimspaceskip
- \global\linepartrue % needed for paragraph numbering
- \setupcopyverbatim
- \initializeverbatimline
- \copyverbatimline}
-
-%D We save the closing sequence in \type{\endofverbatimcommand}
-%D in such a way that it can be compared on a line by line
-%D basis. For the conversion we use \type{\meaning}, which
-%D converts the line to non||expandable tokens. We reset
-%D \type{\parskip}, because we don't want inter||paragraph
-%D skips to creep into the verbatim source. Furthermore we
-%D \type{\relax} the line||processing macro while getting the
-%D rest of the first line. The initialization command
-%D \type{\setupcopyverbatim} does just what we expect it to do:
-%D it assigns all characters \CATCODE~11. Next we switch to
-%D french spacing and call for obeyance.
-
-\newevery \everysetupverbatim \relax
-
-\def\setupcopyverbatim
- {\uncatcodecharacters
- \frenchspacing
- \obeyspaces
- \obeytabs
- \obeylines
- \obeypages
- \obeycharacters
- \the\everysetupverbatim}
-
-%D The main copying routine of display verbatim does an
-%D ordinary string||compare on the saved closing command and
-%D the current line. The space after \type{#1} in the
-%D definition of \type{\next} is essential! As a result of
-%D using \type{\obeylines}, we have to use \type{%}'s after
-%D each line but none after the first \type{#1}.
-
-{\obeylines%
- \long\gdef\copyverbatimline#1
- {\def\next{#1 }%
- \gdef\verbatimline{#1}%
- \ifx\next\emptyspace%
- \presetemptyverbatimline%
- \else%
- \edef\next{\meaning\next}%
- \ifx\next\endofverbatimcommand%
- \presetlastverbatimline%
- \def\copyverbatimline{\egroup\endofdisplayverbatim}%
- \else%
- \presetnormalverbatimline%
- \fi%
- \fi%
- \handleverbatimline%
- \copyverbatimline}}
-
-%D The actual typesetting of a line is done by a separate
-%D macro, which enables us to implement \TAB\ handling. The
-%D \type{\do} and \type{\dodo} macros take care of the
-%D preceding \type{\parskip}, while skipping the rest of the
-%D first line. The \type{\relax} is used as an signal.
-
-%D \macros
-%D {iflinepar}
-%D
-%D A careful reader will see that \type{\linepar} is reset.
-%D This boolean can be used to determine if the current line is
-%D the first line in a pseudo paragraph and this boolean is set
-%D after each empty line. The \type{\relax} can be used to
-%D determine the end of the line when one implements a scanner
-%D routine.
-
-\newif\iflinepar
-
-\let\doopenupverbatimline=\empty
-
-\let\beginverbatimline\relax
-\let\endverbatimline \relax
-
-\long\def\dodoverbatimline#1% we don't want to group
- {\bgroup % due to pretty status
- \iflinepar\else\EveryPar{}\fi
- \dontleavehmode % \leavevmode
- \xdef\dokeepverbatimlinedata % why was this?
- {\parindent \the\parindent
- \hangindent\the\hangindent
- \hangafter \the\hangafter
- \leftskip \the\leftskip
- \rightskip \the\rightskip}%
- \egroup
- \dokeepverbatimlinedata
- \doopenupverbatimline
- \the\everyline\strut
- \beginverbatimline
- \processverbatimline{#1\relax\flushrestofverbatimline}%
- \endverbatimline
- \global\lineparfalse
- \obeyedline\par}
-
-%D \macros
-%D {flushrestofverbatimline}
-%D
-%D Some pretty drivers will collect tokens for the sake of
-%D testing on keywords. This collected string needs to be
-%D flushed. The \type {\relax} can serve as signal that there
-%D is nothing more to be interpreted.
-
-\let\flushrestofverbatimline\empty
-
-%D \macros
-%D {obeyemptylines,verbatimbaselineskip}
-%D
-%D Empty lines in verbatim can lead to white space on top of
-%D a new page. Because this is not what we want, we turn
-%D them into vertical skips. This default behavior can be
-%D overruled by:
-%D
-%D \starttyping
-%D \obeyemptylines
-%D \stoptyping
-%D
-%D Although it would cost us only a few lines of code, we
-%D decided not to take care of multiple empty lines. When a
-%D (display) verbatim text contains more successive empty
-%D lines, this probably suits some purpose. When applicable,
-%D one can set the verbatim baselineskip.
-
-\bgroup
-\catcode`\^^L=\@@active \gdef\emptypage {^^L}
-\catcode`\^^M=\@@active \gdef\emptyline {^^M}
- \gdef\emptyspace { }
-\egroup
-
-\def\verbatimbaselineskip% We don't use \let here!
- {\baselineskip}
-
-\def\doemptyverbatimline
- {\vskip\verbatimbaselineskip
- {\setbox0\hbox{\the\everyline}}%
- \global\linepartrue}
-
-% \def\obeyemptylines
-% {\let\donextemptyverbatimline\doemptyverbatimline}
-
-\def\obeyemptylines % tricky, only in verbatim (should be token list)!
- {\chardef\verbatimemptylinemode\plusone}
-
-\def\obeyallemptylines % tricky, only in verbatim (should be token list)!
- {\chardef\verbatimemptylinemode\plustwo}
-
-%D \TEX\ does not offer \type{\everyline}, which is a direct
-%D result of its advanced multi||pass paragraph typesetting
-%D mechanism. Because in verbatim mode paragraphs and lines are
-%D more or less equal, we can easily implement our own simple
-%D \type{\everyline} support.
-
-%D \macros
-%D {EveryPar, EveryLine}
-%D
-%D In this module we've reserved \type{\everypar} for the
-%D things to be done with paragraphs and \type{\everyline} for
-%D line specific actions. In \CONTEXT\ however, we use
-%D \type{\everypar} for placing side- and columnfloats,
-%D inhibiting indentation and some other purposes. In verbatim
-%D mode, every line becomes a paragraph, which means that
-%D \type{\everypar} is executed frequently. To be sure, the
-%D user specific use of both \type{\everyline} and
-%D \type{\everypar} is implemented by means of
-%D \type{\EveryLine} and \type{\EveryPar}.
-%D
-%D We still have to take care of the \TAB. A \TAB\ takes eight
-%D spaces and a \SPACE\ normally has a width of 0.5~em. Because
-%D we can be halfway a tabulation, we must keep track of the
-%D position. This takes time, especially when we print complete
-%D files, therefore we \type{\relax} this mechanism by default.
-
-\chardef\spacespertab=7
-
-\def\doprocesstabskip
- {\obeyedspace % \hskip.5em or \hbox to .5em{}
- \ifdone
- \donefalse
- \advance\scratchcounter \plusone
- \@EA\doprocesstabskip
- \else\ifnum\scratchcounter>\spacespertab
- % nothing
- \else
- \advance\scratchcounter \plusone
- \@EAEAEA\doprocesstabskip
- \fi\fi}
-
-\let\endoftabskipping=\relax % will become obsolete
-
-\def\doprocesstabskipline#1%
- {\bgroup
- \scratchcounter\plusone
- \dodoprocesstabskipline#1\relax
- \egroup}
-
-\def\dodoprocesstabskipline#1%
- {\ifnum\scratchcounter>\spacespertab\relax
- \donetrue \else \donefalse \advance
- \fi \scratchcounter \plusone
- \ifx#1\relax \else
- \ifcase\tabskipmode
- % can't happen
- \or
- % go on
- \else\ifnum`#1<128
- % ok, no special character
- \else\ifnum\catcode`#1=\active
- % quits parsing, else utf lookahead problems
- \chardef\tabskipmode\zerocount
- \fi\fi\fi
- \ifcase\tabskipmode
- \@EAEAEA#1%
- \else
- \@EAEAEA#1\@EAEAEA\dodoprocesstabskipline
- \fi
- \fi}
-
-% ^ will be replaced
-
-\chardef\tabskipmode=1 % 0=quit 1=no test 2=test on active>128
-
-\long\def\processverbatimline#1{#1} % remove the fake grouping
-
-%D \macros
-%D {processfileverbatim}
-%D
-%D The verbatim typesetting of files is done on a bit different
-%D basis. This time we don't check for a closing command, but
-%D look for \EOF\ and when we've met, we make sure it does not
-%D turn into an empty line.
-%D
-%D \starttyping
-%D \processfileverbatim{filename}
-%D \stoptyping
-%D
-%D We reserve a dedicated file handle.
-
-\newread\verbatiminput
-
-\newcount\verbatimlinenumber
-
-\let \beginofverbatimlines \relax
-\let \endofverbatimlines \relax
-
-\def\processfileverbatim#1%
- {\par
- \bgroup
- \processingverbatimtrue
- \global\verbatimlinenumber\zerocount
- \global\linepartrue
- \beginofverbatimlines
- \bgroup
- \parindent\zeropoint
- \ifdim\lastskip<\parskip
- \removelastskip
- \vskip\parskip
- \fi
- \parskip\zeropoint
- \verbatimfont
- \uncatcodecharacters
- \setverbatimspaceskip
- \frenchspacing
- \obeyspaces
- \obeytabs
- \obeylines
- \obeypages
- \obeycharacters
- \ignoreeofs
- \catcode`\^^M=\@@ignore % \par is already taken care of
-% \openin\verbatiminput=#1\relax
- \openinputfile\verbatiminput{#1}%
- \skipfirstverbatimlinefalse
- \initializeverbatimline
- \def\readline%
- {\ifeof\verbatiminput \else
- \ifx\firstverbatimfileline\empty
- \global\advance\verbatimlinenumber\plusone
- \read\verbatiminput to \verbatimline
- \else
- \let\verbatimline\firstverbatimfileline
- \let\firstverbatimfileline\empty
- \fi
- \fi
- \ifeof\verbatiminput
- \ifx\lastverbatimfileline\empty
- \presetlastverbatimline
- \let\readline\relax
- \else % we will re-enter the \ifeof branch twice
- \presetnormalverbatimline
- \def\readline%
- {\let\verbatimline\lastverbatimfileline
- \let\lastverbatimfileline\empty}%
- \fi
- \else\ifx\verbatimline\empty
- \presetemptyverbatimline
- \else\ifx\verbatimline\emptyline
- \presetemptyverbatimline
- \else\ifx\verbatimline\emptypage
- \presetemptyverbatimline
- \else
- \presetnormalverbatimline
- \fi\fi\fi\fi
- \handleverbatimline
- \readline}%
- \ifeof\verbatiminput \else
- \expandafter\readline
- \fi
- \closein\verbatiminput
- \egroup
- \endofverbatimlines
- \egroup
- \ignorespaces}
-
-%D Something new:
-
-\def\processfilelinesverbatim#1#2#3%
- {\bgroup
- \let\saveddoflushverbatimline\doflushverbatimline
- \let\saveddoemptyverbatimline\doemptyverbatimline
- \def\checkverbatimfileline##1%
- {\ifnum\verbatimlinenumber<#2\else
- \ifnum\verbatimlinenumber>#3\else
- ##1%
- \fi\fi}%
- \def\doflushverbatimline
- {\checkverbatimfileline\saveddoflushverbatimline}%
- \def\doemptyverbatimline
- {\checkverbatimfileline\saveddoemptyverbatimline}%
- \processfileverbatim{#1}%
- \egroup}
-
-%D \macros
-%D {firstverbatimfileline, lastverbatimfileline}
-%D
-%D The following two macros can be set to achieve special
-%D effects, like:
-%D
-%D \starttyping
-%D \convertargument\StartFake{something}\to\firstverbatimfileline
-%D \convertargument\StopFake\to\firstverbatimfileline
-%D \stoptyping
-%D
-%D These hooks were needed for typesetting flowchart
-%D definitions verbatim, since the temporary files does not
-%D have the start and stop commands embedded.
-
-\let\firstverbatimfileline\empty
-\let\lastverbatimfileline \empty
-
-%D One can use the different \type{\obeysomething} commands to
-%D influence the behavior of these macro's. We use for instance
-%D \type{\obeycharacters} for making \type{/} an active
-%D character when we want to include typesetting commands.
-
-%D The next part of this module deals with pretty printing. The
-%D best way to understand how pretty verbatim typeseting works
-%D is to take a look at the output produced by the \TEX, \PERL\
-%D and \METAPOST\ modules first. Each of these modules has a
-%D few setup macros that tag the individual characters with a
-%D number that itself is associated to a interpretation macro.
-%D A previous implementation linked characters (after making
-%D them active) directly to such interpreters, but the more
-%D indirect way makes it possible to inspect the next
-%D character(s) without much expansion problems and/or
-%D increasing run time.
-
-%D By the way, \TEX\ defines \type{\+} as an outer macro, so we
-%D have to redefine this one to keep ourselves out of complaints.
-
-\def\+{\tabalign}
-
-%D Just to keep things consistant and to speed up some macros a
-%D but, we define a few private constants.
-
-\def\!!PRETTY {PRETTY}
-
-\def\!!prettyone {prettyone}
-\def\!!prettytwo {prettytwo}
-\def\!!prettythree {prettythree}
-\def\!!prettyfour {prettyfour}
-\def\!!prettyfive {prettyfive}
-\def\!!prettynine {prettynine}
-\def\!!prettyeight {prettyeight}
-\def\!!prettytwoone {prettytwoone}
-\def\!!prettyfourthree {prettyfourthree}
-
-%D The first step in defining a pretty interpreter is to assign
-%D each character that needs special attention a number, like:
-%D
-%D \starttyping
-%D \setpretty \`A 21
-%D \stoptyping
-%D
-%D Here the macro \type{\setpretty} makes the character
-%D \type{A} active, and sets it meaning to the auxiliary macro
-%D \type{\handleprettytoken}. This auxiliary macro takes the
-%D character code (a number) and the interpretation number. The
-%D three step implementation uses the \TEX book \type{~} trick.
-
-\def\dodosetpretty
- {\!!countb=\uccode`~\relax
- \catcode\!!countb=\@@active
- \uppercase{\edef~{\noexpand\handleprettytoken{\the\!!counta}{\the\!!countb}}}}
-
-\def\dosetpretty
- {\afterassignment\dodosetpretty\!!counta}
-
-\def\setpretty
- {\afterassignment\dosetpretty\uccode`~=}
-
-%D The macro \type{\handleprettytoken} is rather trivial and
-%D calls for an interpreter macro.
-
-\def\handleprettytoken#1%
- {\csname\!!PRETTY#1\endcsname} % \getvalue{\!!PRETTY#1}}
-
-%D This interpreter is installed by saying
-%D
-%D \starttyping
-%D \installprettyhandler 21 \SOMEprettyone
-%D \stoptyping
-
-\def\installprettyhandler#1 #2%
- {\letvalue{\!!PRETTY#1}#2}
-
-%D Such an interpreter gets the character number:
-%D
-%D \starttyping
-%D \def\SOMEprettyone#1{...\getpretty{#1}...}
-%D \stoptyping
-%D
-%D where \type{\getpretty} equals \type{\char}. We can't
-%D use \type{\let} here because we have to get rid of the
-%D braces.
-
-\def\getpretty#1%
- {\char#1}
-
-%D Sometimes the action depends on the next token. This token
-%D can be passed to the macro \type{\getprettydata}, that sets
-%D \type{\prettytype} to the interpreter code. The character
-%D code is saved in \type{\prettychar}.
-
-\def\setprettydata#1#2%
- {\global\chardef\prettytype#1%
- \global\chardef\prettychar#2\relax}
-
-\def\getprettydata#1%
- {\global\chardef\prettytype\zerocount
- \global\chardef\prettychar\zerocount
- \bgroup
- \let\handleprettytoken\setprettydata
- \setbox0\hbox{#1}% expands #1 and ignores space
- \egroup}
-
-%D If needed the current and next token can be handled alongside:
-
-\def\getpretties#1#2%
- {\char#1\bgroup\let\handleprettytoken\getsecondpretty#2\egroup}
-
-\def\getsecondpretty#1#2%
- {\char#2}
-
-%D When needed, one can reassign an interpreter by using
-%D \type{\newpretty} and its associates.
-%D
-%D \bgroup
-%D \setuptyping[file][optionoptie=tex,paletpalet=colorpretty]
-%D
-%D \startbuffer
-%D \bgroup
-%D \catcode`\|=\@@escape %%\|\
-%D \catcode`\\=\@@active %%\\+
-%D |gdef|dohandlenewpretty#1%
-%D {|def|dodohandlenewpretty##1%
-%D {|def|oldprettychar{#1}%
-%D |getprettydata{##1}%
-%D |ifnum|oldprettychar=|prettychar
-%D |def|dododohandlenewpretty####1%
-%D {|getprettydata{\}%
-%D |let|oldprettytype=|prettytype
-%D |getprettydata{####1}%
-%D |ifnum|prettytype=|oldprettytype
-%D |let|next=|newpretty
-%D |else
-%D |def|next{|newprettycommand{#1}##1####1}%
-%D |fi
-%D |next}%
-%D |let|next=|dododohandlenewpretty
-%D |else
-%D |def|next{|newprettycommand{#1}##1}%
-%D |fi
-%D |next}%
-%D |def|donohandlenewpretty##1%
-%D {|newprettycommand{#1}##1}%
-%D |handlenextnextpretty|dodohandlenewpretty|donohandlenewpretty}
-%D |egroup
-%D \stopbuffer
-%D
-%D {\newprettytrue\typebuffer}
-%D
-%D In this example we see that the colors differ from what we
-%D expect, but conform the definitions in the macro. This kind
-%D of recoloring can be achieved by saying:
-%D
-%D \typebuffer
-%D
-%D We'll show some more examples:
-%D
-%D \startbuffer[pretty]
-%D \installnewpretty r \red
-%D \installnewpretty g \green
-%D \installnewpretty b \blue
-%D \stopbuffer
-%D
-%D \getbuffer[pretty]
-%D
-%D \startbuffer
-%D %%\ r{Red
-%D %%\ g\Green
-%D %%\ b[Blue
-%D \stopbuffer
-%D
-%D {\newprettytrue\typebuffer}
-%D
-%D Watch the green \type{\Green}! This lines are specified as:
-%D
-%D \typebuffer
-%D
-%D along with:
-%D
-%D \typebuffer[pretty]
-%D
-%D When needed, one can use grouping.
-%D
-%D \startbuffer
-%D {yes} %%\ B %%\{[ %%\}]
-%D {no}
-%D {no} %%\ E
-%D {yes}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Here we tell the visualizer that the \type +{+ should be
-%D treated like a \type +[+ so we get:
-%D
-%D {\newprettytrue\typebuffer}
-%D
-%D I won't explain the details of this mechanism. Those who
-%D want to build their own pretty interpreters have to close
-%D read the source anyway.
-%D
-%D Last we show an example of mixed pretty typesetting:
-%D
-%D \startbuffer
-%D \ziezo{test} %%\ P ##\ B##\ T % enter PERL mode %%\ E
-%D if $test eq "test" ##\ B ##\ B##\ T % begin group (\bgroup) %%\ E
-%D if $test eq "test"; ##\ T %%\ B%%\ T % enter TEX mode %%\ E
-%D \ziezo{test} %%\ M %%\ B%%\ T % enter METAPOST mode %%\ E
-%D draw (0,0)--(10,10); %%\ E ##\ B##\ T % end group (\egroup) %%\ E
-%D if $test eq "test";
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Here we use \type{%%\ T}, \type{%%\ P} and \type{%%\ M} for
-%D switching between \TEX, \PERL\ and \METAPOST\ mode.
-%D
-%D {\newprettytrue\typebuffer}
-%D
-%D \egroup
-%D
-%D Don't forget to set:
-
-\newif\ifnewpretty
-
-\def\installnewpretty
- {\def\doinstallnewpretty##1%
- {\setvalue{NP::\the\scratchcounter}{##1}}%
- \afterassignment\doinstallnewpretty\scratchcounter=`}
-
-%D Let's define the options we used here:
-
-\newevery\everyprettyend\relax
-
-\let\prettyend=\relax
-
-\def\prettybegin
- {\bgroup\def\prettyend{\the\everyprettyend\egroup}}
-
-\installnewpretty B \prettybegin
-\installnewpretty E \prettyend
-
-\installnewpretty J \setupprettyJVtype
-\installnewpretty M \setupprettyMPtype
-\installnewpretty P \setupprettyPLtype
-\installnewpretty T \setupprettyTEXtype
-
-%D \macros
-%D {ifnaturaltextext}
-%D
-%D When one uses \ETEX, switching to normal \TEX\ is possible
-%D too. We also introduce a switch that can be used in the
-%D drivers and set in higher level shell macros.
-
-\newif\ifnaturaltextext
-
-% \starttyping
-% test /naturaltextext\hpos{word}{test}/relax test
-% \stoptyping
-%
-% \MPxy{word}
-
-\def\naturaltextext#1\relax
- {\bgroup
- \prettynaturalfont{\restorecatcodes\scantokens{\ignorespaces#1}}%
- \egroup}
-
-\def\naturaltextext#1\relax
- {\bgroup
- \def\ascii{#1}%
- \setnormalcatcodes
- \restorecatcodes
- \prettynaturalfont{\scantokens\expandafter{\ascii}\ifhmode\unskip\fi}%
- \egroup}
-
-\installnewpretty N \naturaltextext
-
-%D When seen in action this gives:
-%D
-%D \startbuffer
-%D \startTEX
-%D \def\mathematics#1% %%\ N usage: \type {\mathematics{x^2}}
-%D {\ifmmode#1\else$#1$\fi} %%\ N becomes: \mathematics{X^2}
-%D \stopTEX
-%D \stopbuffer
-%D
-%D \getbuffer
-%D
-%D This is keyed in as:
-%D
-%D \typebuffer
-
-%D This means that when the interpreter modules support this
-%D mechanism, by default we have some keys already available.
-
-\def\newpretty#1%
- {\getprettydata{#1}%
- \ifcase\prettytype
- \expandafter\nonewpretty
- \else
- \expandafter\donewpretty
- \fi
- #1}
-
-\def\nonewpretty#1#2%
- {\getprettydata{#2}%
- \getvalue{NP::\the\prettychar}}
-
-\def\donewpretty#1%
- {\bgroup
- \def\handleprettytoken##1##2##3%
- {\getprettydata{##3}%
- \egroup
- \ifcase\prettytype\else
- \setpretty##2=\prettytype\relax
- \fi}%
- #1}
-
-%D When implementing new pretty macros, one only needs to
-%D define something like:
-%D
-%D \starttyping
-%D \def\TEXtypezero%
-%D {\handlenewpretty\TEXtypethree}
-%D \stoptyping
-%D
-%D Here the number states the category (in our examples the
-%D backslash). The second argument takes care of normal
-%D situations.
-
-\def\handlenewpretty#1%
- {\let\newprettycommand=#1%
- \handlenextnextpretty\dohandlenewpretty\newprettycommand}
-
-%D The previous shown implementation only interprets single
-%D comments, but the final one also accepts double ones. The
-%D main reason for this is that in \JAVA\ we have to deal with
-%D \type{//}. Personally I prefer the double \type{%%} because
-%D is stands out and is more symmetrical with the double
-%D slash.
-
-\bgroup
-\catcode`\|=\@@escape
-\catcode`\\=\@@active
-|gdef|dohandlenewpretty#1%
- {|def|dodohandlenewpretty##1%
- {|def|oldprettychar{#1}%
- |getprettydata{##1}%
- |ifnum|oldprettychar=|prettychar
- |def|dododohandlenewpretty####1%
- {|getprettydata{\}%
- |let|oldprettytype=|prettytype
- |getprettydata{####1}%
- |ifnum|prettytype=|oldprettytype
- |let|next|newpretty
- |else
- |def|next{|newprettycommand{#1}##1####1}%
- |fi
- |next}%
- |let|next|dododohandlenewpretty
- |else
- |def|next{|newprettycommand{#1}##1}%
- |fi
- |next}%
- |def|donohandlenewpretty##1%
- {|newprettycommand{#1}##1}%
- |handlenextnextpretty|dodohandlenewpretty|donohandlenewpretty}
-|egroup
-
-%D The `nextnext' macro we used in the previous definition
-%D looks ahead. This is needed because individual lines are
-%D handles by macro's and the next character can be something
-%D that ends the line and/or does not belong to the verbatim
-%D data.
-
-\def\handlenextnextpretty#1#2#3%
- {\def\dohandlenextnextpretty%
- {\ifx\next\bgroup % something {}
- \@EA#2%
- \else\ifx\next\relax % end of line / signal
- \@EAEAEA#2%
- \else
- \@EAEAEA#1%
- \fi\fi
- {#3}}%
- \futurelet\next\dohandlenextnextpretty}
-
-%D The pretty interpreters can (and will) change the meaning of
-%D some controls. To enable them calling the originals we save
-%D their meanings and to enable nesting we permit this only
-%D once.
-
-\def\saveprettycontrols
- {\global\let\oldobeyedspace \obeyedspace
- \global\let\oldobeyedline \obeyedline
- \global\let\oldobeyedpage \obeyedpage
- \let\saveprettycontrols \relax}
-
-%D The \PERL\ and \METAPOST\ interpreters will also handle
-%D reserved words. Sets of identifiers are defined like:
-%D
-%D \starttyping
-%D \useprettyidentifiers \MODULAidentifiers \MODULAsetspecials
-%D if then else elsif case while do repeat until ...
-%D \stoptyping
-%D
-%D New entries can be added to existing sets by repeatedly
-%D using this command.
-
-\def\useprettyidentifiers#1#2% \variable \presetcatcodes
- {\bgroup
- \ifx#1\undefined
- \global\let#1=\empty
- \fi
- \def\handleprettytoken##1##2{\char##2}%
- #2\relax
- \def\douseprettyidentifiers##1\par%
- {\xdef#1{\space#1\space##1}%
- \egroup}%
- \douseprettyidentifiers}
-
-%D We can test om identifiers with:
-
-\def\doifprettyidentifierelse#1%
- {\doifincsnameelse{\space#1\space}}
-
-%D \macros
-%D {prettyidentifierfont,prettyvariablefont,prettynaturalfont}
-%D
-%D When one want to typeset identifiers and system variables
-%D in a different typeface, one has to set the next two
-%D variables.
-
-\let\prettyidentifierfont=\relax
-\let\prettyvariablefont =\relax
-\let\prettynaturalfont =\relax
-
-%D The interpreter macros are loaded at run time. The main
-%D reason lays in the fact that we don't want to have the
-%D identifier lists hard coded in the format file. To prevent
-%D repetitive loading, one should load the modules before the
-%D first call to the macros.
-%D
-%D \starttyping
-%D \input verb-tex.tex
-%D \input verb-pl.tex
-%D \input verb-mp.tex
-%D \input verb-jv.tex
-%D \stoptyping
-%D
-%D In \CONTEXT\ we follow a different thread, and therefore all
-%D macros in the additional modules use \type {\gdef}'s and
-%D \type {\doglobal}'s. Manipulating \type {\globaldef} is
-%D possible but leads to fuzzy situations.
-
-%D \macros
-%D {ifdisablepretty,disableprettynow,disableprettyafterwards}
-%D
-%D Although for pretty printing \PERL\ and \JAVASCRIPT\ code
-%D one has to implement a bit more clever mechanism, the next
-%D switches can be used to turn off pretty printing. The
-%D boolean turns on this feature.
-
-\newif\ifdisablepretty \disableprettyfalse
-\newif\ifprettydisabled \prettydisabledfalse
-
-\def\disableprettynow
- {\ifdisablepretty\ifprettydisabled\else
- \let\prettyidentifierfont\relax
- \let\prettyvariablefont\relax
- \let\prettycomment\relax
- \def\beginofpretty[##1]{}%
- \let\endofpretty\relax
- \prettydisabledtrue
- \fi\fi}
-
-\def\disableprettyafterwards
- {\ifdisablepretty\ifprettydisabled\else
- \def\endofpretty{\normalendofpretty\disableprettynow}%
- \fi\fi}
-
-\def\enableprettynow
- {\prettydisabledfalse
- \let\prettyidentifierfont\normalprettyidentifierfont
- \let\prettyvariablefont \normalprettyvariablefont
- \let\prettynaturalfont \normalprettynaturalfont
- \let\beginofpretty \normalbeginofpretty
- \let\endofpretty \normalendofpretty}
-
-%D This feature is hooked into the verbatim line handling
-%D routine with:
-
-\def\beginverbatimline
- {\prettydisabledfalse
- \ifnewpretty\else\let\handlenewpretty\empty\fi % moved
- \let\normalprettyidentifierfont\prettyidentifierfont
- \let\normalprettyvariablefont \prettyvariablefont
- \let\normalprettynaturalfont \prettynaturalfont
- \let\normalbeginofpretty \beginofpretty
- \let\normalendofpretty \endofpretty}
-
-\def\endverbatimline
- {\enableprettynow}
-
-%D The rest of this module is dedicated to non \CONTEXT\ users
-%D and shows an example of an verbatim environment based on the
-%D previous macros.
-%D
-%D The macro's can be used to construct the commands we
-%D mentioned in the beginning of this documentation. We leave
-%D this to the fantasy of the reader and only show some \PLAIN\
-%D \TEX\ alternatives for display verbatim and listings. We
-%D define three commands for typesetting inline text, display
-%D text and files verbatim. The inline alternative also accepts
-%D user supplied delimiters.
-%D
-%D
-%D \type{text}
-%D
-%D \starttyping
-%D ... verbatim text ...
-%D \stoptyping
-%D
-%D \typefile{filename}
-%D
-%D We can turn on the options by:
-%D
-%D \starttyping
-%D \controlspacetrue
-%D \verbatimtabstrue
-%D \prettyverbatimtrue
-%D \stoptyping
-%D
-%D Here is the implementation:
-
-\newif\ifcontrolspace
-\newif\ifverbatimtabs
-\newif\ifprettyverbatim
-
-\ifCONTEXT \else
-
- \def\presettyping
- {\ifcontrolspace \let\obeyspace \setcontrolspace \fi
- \ifverbatimtabs \let\obeytabs \settabskips \fi
- \ifprettyverbatim \let\obeycharacters\setupprettytype \fi}
-
- \def\type
- {\bgroup
- \def\_{\string_}%
- \def\^{\string^}%
- \presettyping
- \processinlineverbatim\egroup}
-
- \def\starttyping
- {\bgroup
- \presettyping
- \processdisplayverbatim\stoptyping}
-
- \def\stoptyping
- {\egroup}
-
- \def\typefile#1%
- {\bgroup
- \presettyping
- \processfileverbatim{#1}%
- \egroup}
-
-\fi
-
-%D In \CONTEXT\ users say things like:
-%D
-%D \starttyping
-%D \definetyping [TEX] [option=TEX]
-%D \definetyping [MP] [option=MP]
-%D \definetyping [PL] [option=PL]
-%D \definetyping [JV] [option=JV]
-%D \stoptyping
-%D
-%D or
-%D
-%D \starttyping
-%D \setuptyping[file][option=color]
-%D \stoptyping
-%D
-%D That way \CONTEXT\ selects the appropriate interpreter
-%D itself, but more on that in another module. In other
-%D packages one can define:
-
-\ifCONTEXT \else
-
- \input verb-tex.mkii
- \input verb-mp.mkii
-
- \def\startTEX
- {\bgroup \everypar{}%
- \let\obeycharacters\setupprettyTEXtype
- \processdisplayverbatim{\stopTEX}}
-
- \def\startMP
- {\bgroup \everypar{}%
- \let\obeycharacters\setupprettyMPtype
- \processdisplayverbatim{\stopMP}}
-
- \let\stopTEX=\egroup
- \let\stopMP =\egroup
-
-\fi
-
-%D This following poor mans implementation of color is based on
-%D PostScript. One can of course use grayscales too. In the
-%D core modules these macros are redefined to using the color
-%D mechanism present in \CONTEXT.
-
-\ifCONTEXT \else
-
- \def\setcolorverbatim
- {\def\prettyone {.9 .0 .0 } % red
- \def\prettytwo {.0 .8 .0 } % green
- \def\prettythree {.0 .0 .9 } % blue
- \def\prettyfour {.8 .8 .6 } % yellow
- \def\beginofpretty[##1]%
- {\special{ps:: \csname##1\endcsname setrgbcolor}}
- \def\endofpretty%
- {\special{ps:: 0 0 0 setrgbcolor}}} % black
-
- \def\setgrayverbatim
- {\def\prettyone {.30 } % gray
- \def\prettytwo {.45 } % gray
- \def\prettythree {.60 } % gray
- \def\prettyfour {.75 } % gray
- \def\beginofpretty[##1]%
- {\special{ps:: \csname##1\endcsname setgray}}
- \def\endofpretty%
- {\special{ps:: 0 setgray}}} % black
-
-\fi
-
-%D One can redefine these two commands after loading this
-%D module. When available, one can also use appropriate
-%D font||switch macro's. We default to color.
-
-\ifCONTEXT \else \setcolorverbatim \fi
-
-%D Here come the commands that are responsible for entering and
-%D leaving the two states. As we can see, they've got much in
-%D common.
-
-%D The previous version of this module was published in the
-%D \MAPS\ of the dutch \TEX\ users group \NTG. In that article,
-%D the verbatim part of the text was typeset with the following
-%D commands for the examples:
-%D
-%D \starttyping
-%D \def\starttyping% We simplify the \ConTeXt\ macro.
-%D {\bgroup
-%D \everypar{} % We disable some troublesome mechanisms.
-%D \advance\leftskip by 1em
-%D \processdisplayverbatim{\stoptyping}}
-%D
-%D \let\stoptyping=\egroup
-%D \stoptyping
-%D
-%D We also used:
-%D
-%D \starttyping
-%D \def\startdefinition%
-%D {\bgroup
-%D \everypar{} % Again we disable some troublesome mechanisms.
-%D \let\obeycharacters=\setupprettyTEXtype % See verb-tex.tex!
-%D \EveryPar{\showparagraphcounter}%
-%D \EveryLine{\showlinecounter}%
-%D \verbatimbodyfont
-%D \processdisplayverbatim{\stopdefinition}}
-%D
-%D \def\stopdefinition%
-%D {\egroup}
-%D \stoptyping
-%D
-%D And because we have both \type{\EveryPar} and
-%D \type{\EveryLine} available, we can implement a dual
-%D numbering mechanism:
-%D
-%D \starttyping
-%D \newcount\paragraphcounter
-%D \newcount\linecounter
-%D
-%D \def\showparagraphcounter%
-%D {\llap
-%D {\bgroup
-%D \counterfont
-%D \hbox to 4em
-%D {\global\advance\paragraphcounter by 1
-%D \hss \the\paragraphcounter \hskip2em}%
-%D \egroup
-%D \hskip1em}}
-%D
-%D \def\showlinecounter%
-%D {\llap
-%D {\bgroup
-%D \counterfont
-%D \hbox to 2em
-%D {\global\advance\linecounter by 1
-%D \hss \the\linecounter}%
-%D \egroup
-%D \hskip1em}}
-%D \stoptyping
-%D
-%D One may have noticed that the \type{\EveryPar} is only
-%D executed once, because we consider each piece of verbatim
-%D as one paragraph. When one wants to take the empty lines
-%D into account, the following assignments are appropriate:
-%D
-%D \starttyping
-%D \EveryLine
-%D {\iflinepar
-%D \showparagraphcounter
-%D \fi
-%D \showlinecounter}
-%D \stoptyping
-%D
-%D In this case, nothing has to be assigned to \type{\EveryPar},
-%D maybe except of just another extra numbering scheme. The
-%D macros used to typeset this documentation are a bit more
-%D complicated, because we have to take take 'long' margin
-%D lists into account. When such a list exceeds the previous
-%D pargraph we postpone placement of the paragraph number till
-%D there's room. This way so it does not clash with the margin
-%D words.
-
-%D Normally such commands have to be embedded in a decent setup
-%D structure, where options can be set at will.
-%D
-%D Now let's summarize the most important commands.
-%D
-%D \starttyping
-%D \processinlineverbatim{\closingcommand}
-%D \processdisplayverbatim{\closingcommand}
-%D \processfileverbatim{filename}
-%D \stoptyping
-%D
-%D We can satisfy our own specific needs with the following
-%D interfacing macro's:
-%D
-%D \starttyping
-%D \obeyspaces \obeytabs \obeylines \obeypages \obeycharacters
-%D \stoptyping
-%D
-%D We can influence the verbatim environment with the following
-%D macro:
-%D
-%D \starttyping
-%D \obeyemptylines
-%D \stoptyping
-%D
-%D Some needs are fulfilled already with:
-%D
-%D \starttyping
-%D \setcontrolspace \settabskips
-%D \stoptyping
-%D
-%D lines can be enhanced with ornaments using:
-%D
-%D \starttyping
-%D \everypar \everyline \iflinepar
-%D \stoptyping
-%D
-%D and pretty verbatim support is implemented by:
-%D
-%D \starttyping
-%D \beginofpretty[#1] ... \endofpretty
-%D \stoptyping
-%D
-%D and some setup macro, like:
-%D
-%D \starttyping
-%D \setupprettyIDENTIFIERtype
-%D \stoptyping
-%D
-%D The color support macro can be redefined by the user. The
-%D parameter \type{#1} can be one of the four 'fixed'
-%D identifiers {\em prettyone}, {\em prettytwo}, {\em
-%D prettythree} and {\em prettyfour}. We have implemented a
-%D more or less general PostScript color support mechanism,
-%D using \type{specials}. One can toggle between color and
-%D grayscale with:
-%D
-%D \starttyping
-%D \setgrayverbatim \setcolorverbatim
-%D \stoptyping
-
-%D \macros
-%D {permitshiftedendofverbatim}
-%D
-%D We did not mention one drawback of the mechanism described
-%D here. The closing command must start at the first position
-%D of the line. In \CONTEXT\ we will not have this drawback,
-%D because we can test if the end command is a substring of the
-%D current line. The testing is done by two of the support
-%D macros, which of course are not available in a stand alone
-%D application of this module.
-
-\ifCONTEXT
-
- \let\doifendofverbatim=\doifelse
-
- \def\permitshiftedendofverbatim
- {\let\doifendofverbatim\doifinstringelse}
-
- {\obeylines%
- \long\gdef\copyverbatimline#1
- {\convertargument#1 \to\next%
- \gdef\verbatimline{#1}%
- \ifx\next\emptyspace%
- \presetemptyverbatimline%
- \else%
- \doifendofverbatim{\endofverbatimcommand}{\next}%
- {\presetlastverbatimline%
- \def\copyverbatimline{\egroup\endofdisplayverbatim}}%
- {\presetnormalverbatimline}%
- \fi%
- \handleverbatimline%
- \copyverbatimline}}
-
-%D As a bonus, we provide the next alternative, which takes
-%D end tags like \type {Hello World!}.
-
- \def\doprocessdisplayverbatim#1#2%
- {\par
- \beginofverbatimlines
- \bgroup
- \escapechar-1
- \xdef\verbatimname{\string#2}%
- \egroup
- \ifcase#1%
- \let\endofdisplayverbatim\relax
- \else
- \def\endofdisplayverbatim{\endofverbatimlines\csname\verbatimname\endcsname}%
- \fi
- \bgroup
- \parindent\zeropoint
- \ifdim\lastskip<\parskip
- \removelastskip
- \vskip\parskip
- \fi
- \parskip\zeropoint
- \processingverbatimtrue
- \ifcase#1%
- \convertargument#2\to\endofverbatimcommand
- \else
- \expandafter\let\csname\verbatimname\endcsname=\relax
- \expandafter\convertargument\csname\verbatimname\endcsname
- \to\endofverbatimcommand
- \fi
- \verbatimfont
- \setverbatimspaceskip
- \global\linepartrue % needed for paragraph numbering
- \setupcopyverbatim
- \initializeverbatimline
- \copyverbatimline}
-
- \def\processdisplayverbatim {\doprocessdisplayverbatim1}
- \def\processtaggeddisplayverbatim{\doprocessdisplayverbatim0}
-
-\fi
-
-%D \macros
-%D {installprettyescape}
-%D
-%D The next feature is dedicated to Fabrice Popineau who
-%D wanted math inside verbatim.
-
-\def\prettyescapecnt{255}
-
-\def\installprettyescape
- {\dodoubleempty\doinstallprettyescape}
-
-\def\doinstallprettyescape[#1][#2]#3 #4%
- {\bgroup
- \doglobal\decrement\prettyescapecnt
- \def\docommand##1%
- {\def\next{\dodoinstallprettyescape{##1}{#3}{#4}}%
- \catcode`#3=\@@active
- \@EA\scantokens\@EA{\next}}%
- \iffirstargument
- \processcommalist[#1]\docommand
- \else
- \docommand\empty
- \fi}
-
-\def\dodoinstallprettyescape#1#2#3%
- {\unexpanded\setgvalue{PRETTY@#1@\prettyescapecnt}##1##2#2{#3{##2}}%
- \expanded % we need to freeze the counter
- {\doglobal\noexpand\appendtoks
- \noexpand\doif{#1}\noexpand\prettyidentifier
- {\noexpand\setpretty`\string#2=\prettyescapecnt
- \noexpand\installprettyhandler \prettyescapecnt\space\getvalue{PRETTY@#1@\prettyescapecnt}}%
- }\to \everysetupverbatim
- \egroup}
-
-%D An example of its usage is:
-%D
-%D \startbuffer
-%D \def\xverbatimmath#1#2{\naturaltextext\mathematics{#1}\relax}
-%D \def\yverbatimmath#1#2{\naturaltextext\mathematics{[[#1]]}\relax}
-%D \def\zverbatimmath#1#2{\naturaltextext\mathematics{(#1)}\relax}
-%D
-%D \installprettyescape [MP] $ \xverbatimmath
-%D \installprettyescape [MP] ~ \yverbatimmath
-%D \installprettyescape [MP] * \zverbatimmath
-%D
-%D \startMP
-%D if $x>10$ :
-%D $x := 20$
-%D ~x := 20~
-%D *x := 20*
-%D end
-%D \stopMP
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-\protect \endinput