summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/verbatim.opm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/optex/verbatim.opm')
-rw-r--r--macros/luatex/optex/verbatim.opm225
1 files changed, 99 insertions, 126 deletions
diff --git a/macros/luatex/optex/verbatim.opm b/macros/luatex/optex/verbatim.opm
index 121ec0698e..e0f86c810e 100644
--- a/macros/luatex/optex/verbatim.opm
+++ b/macros/luatex/optex/verbatim.opm
@@ -2,31 +2,49 @@
\_codedecl \begtt {Verbatim <2020-02-14>}
-%> parameters
+ \_doc ----------------------------
+ The internal parameters for verbatim macros are set.
+ \_cod ----------------------------
-\_newdimen\_ttindent \_ttindent=\_parindent % indentation in \begtt...\endtt and \verbinput
\_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput
\_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput
-
-\_newcount\_ttline \_ttline=-1 % last line number in \begtt...\endtt
\_newcount\_viline % last line number in \verbinput
\_newread\_vifile % file fgiven by \verinput
-\_newtoks\_tthook % tokens procesed in \begtt...\endtt
-\_newtoks\_intthook % toens procesed in \code or in `...`
-\_public \ttline \tthook \intthook ;
+ \_doc ----------------------------
+ `\code{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In
+ order to do it more robust when it is used in `\write` then it expands as
+ noexpanded `\code<space>` (followed by space in its csname). This macro
+ does the real work.
+
+ The `\_printinverbatim{<text>}` macro is used for `\code{<text>}` printing and for
+ \code{`}<text>\code{`} printing. It is defined as `\_hbox`, so the in-verbatim <text>
+ will be never broken. But you can re-define this macro.
-%> \code
+ When `\code` occurs in PDF outlines then it does the same as `\detokenize`.
+ The macro for preparing outlines sets `\escapechar` to $-1$ and uses
+ `\_regoul` token list before `\edef`.
+
+ The `\code` is not `\_proteced` because we want that it expands to
+ `\_unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the
+ expansions of the `\code` parameter (like `\\`, `\^` etc.).
+ \_cod ----------------------------
\_def\_code#1{\_unexpanded\_ea{\_csname _code \_endcsname{#1}}}
-\_protected\_sdef{_code }#1{{\_escapechar=-1 \_tt \_the\_intthook \_relax
+\_protected\_sdef{_code }#1{{\_escapechar=-1 \_tt \_the\_everyintt \_relax
\_ea\_printinverbatim\_ea{\_detokenize{#1}}}}
\_def\_printinverbatim#1{\_leavevmode\_hbox{#1}}
-\_toksapp \_pdfstringout{\_let\code=\_detokenize \_let\_code=\_detokenize}
+\_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize}
+
\_public \code ;
-%> \_setverb
+ \_doc ----------------------------
+ The `\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only
+ in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define
+ it as `\_catcodetable\_verbatimcatcodes`. After the group is finished then
+ original catcode table is restored.
+ \_cod ----------------------------
\_newcatcodetable \_verbatimcatcodes
\_def\_setverb{\_begingroup
@@ -38,18 +56,69 @@
\_setverb
\_def\_setverb{\_catcodetable\_verbatimcatcodes }%
-%> \activettchar
+ \_doc ----------------------------
+ `\activettchar<char>` saves original catcode of previously declared <char> (if
+ such character was declared) from `\_savedttchar` and `\_savedttcharc`
+ values. Then new such values are stored. The declared charater is activated
+ by `\_adef` as a macro (active character) which opens a group,
+ does `\_setverb` and other settings and reads its parameter until second the same
+ character. This is done by `\_readverb` macro. Finally it prints scanned
+ <text> by `\_printinverbatim` and closes group. Suppose that `\activettchar"` is
+ used. Then the following work is schematically done:
+ \begtt
+ \_def "{\_begingroup \_setverb ... \_readverb}
+ \_def \_readverb #1"{\_printinverbatim{#1}\_endgroup}
+ \endtt
+ Note that the second occurence of `"` is not active because `\_setverb`
+ deactivates it.
+ \_cod ----------------------------
\_def\_activettchar#1{%
\_ifx\_savedttchar\_undefined\_else \_catcode\_savedttchar=\_savedttcharc \_fi
\_chardef\_savedttchar=`#1
\_chardef\_savedttcharc=\_catcode`#1
- \_adef{#1}{\_begingroup \_setverb \_adef{ }{\ }\_tt \_the\_intthook\_relax \_readverb}%
+ \_adef{#1}{\_begingroup \_setverb \_adef{ }{\ }\_tt \_the\_everyintt\_relax \_readverb}%
\_def\_readverb ##1#1{\_printinverbatim{##1}\_endgroup}%
}
\_public \activettchar ;
-%> \begtt ... \endtt
+ \_doc ----------------------------
+ `\begtt` id defined only as public. We don't need private `\_begtt` variant.
+ This macro os defined by `\eoldef`, so user can put an parameter at the
+ same line where `\begtt` is. This `#1` parameter is used after `\_everytt`
+ parameters settings, so user can change it locally.
+
+ The `\begtt` macro opens group, does `\_setverb` and another preprocessing, sets
+ `\endlinechar` to `^^J` and reads the following text in verbatim mode
+ until `\endtt` occurs. This scanning is done by `\_startverb` macro which is
+ defined as:
+ \begtt
+ \_def\_startverb #1\endtt #2^^J{...}
+ \endtt
+ We must to ensure that the backslash in `\endtt` has category 12 (this is a
+ reason of the `\ea` chain in real code).
+ The `#2` is something between `\endtt` and end of line and it is simply
+ ignored.
+
+ The `\startverb` puts the scanned data to `\_prepareverbdata`. It sets the data
+ to `\_tmpb` without changes by default, but you should re-define it in order
+ to does s special changes (for example colorization of the code), if you
+ want. The scanned data have `^^J` at each end of line and all spaces are
+ active characters. Other characters have nomal category 11 or 12.
+
+ When `\prepareverbdata` finishes then `\startverb` runs `\_printverb` loop
+ over aech line of the data and does a final work: last skip plus `\noindent`
+ without first indentation box. This trick keeps horizontal mode without
+ indentation when the empty line after `\endtt` does not exists. But it stops
+ horizontal mode without any new box in outer vertical mode if `\par` is
+ processed immediately after `\endtt`.
+
+ The `\_printverb` macro calls `\_printverbline{<line>}` to each scanned line of
+ verbatim text. This macro expect that it strarts in vertical mode ant it must
+ do `\par` in order to return the vertical mode. The `\_printverblinenum`
+ is used here: it does nothing when `\_ttline<0` else it prints the line
+ number using `\_llap`.
+ \_cod ----------------------------
\_eoldef \begtt#1{\_par \_wipeepar
\_begingroup
@@ -57,7 +126,7 @@
\_setverb
\_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
\_adef{ }{\ }\_parindent=\_ttindent \_parskip=0pt
- \_the\_tthook #1\_relax \_tt
+ \_the\_everytt \_relax #1\_relax \_tt
\_endlinechar=`^^J
\_startverb
}
@@ -80,7 +149,19 @@
\_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font}
\_def\_printverblinenum{\_global\_advance\_ttline by1 \_llap{\_sevenrm \_the\_ttline\_kern.9em}}
-%> \verbinput
+ \_doc ----------------------------
+ Macro `\verbinput` uses a file read perviously or opens the given file. Then
+ it runss the parameter scanning by `\_viscanparameter` and `\_viscanminus`.
+ Finally the `\_doverbinput` is run. At begining of `\_doverbinput` we have
+ `\_viline`= number of lines already read using previous `\verbinput`,
+ `\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the
+ number of lines we need to print.
+ After group is opened then similar preparation is done as in `\begtt`. Then
+ we skip `\_nolines` lines in a loop a and we read `\_dolines` lines. The
+ read data is accumulated into `\_tmpb` macro. The next steps are equal to
+ the steps done in `\_startverb` macro: data are processed via
+ `\_prepareverbdata` and printed via `\_printverb` loop.
+ \_cod \_fin ----------------------
\_def\_verbinput (#1) #2 {\_par \_def\_tmpa{#2}%
\_ifx\_vifilename\_tmpa \_else
@@ -132,7 +213,7 @@
\_begingroup
\_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi
\_setverb \_adef{ }{\ }\_parindent=\_ttindent \_parskip=0pt
- \_the\_tthook\_relax \_tt
+ \_the\_everytt\_relax \_tt
\_endlinechar=`^^J \_tmpnum=0
\_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi
\_ifnum\_tmpnum<\_vinolines\_space
@@ -160,113 +241,5 @@
\_public
\verbinput ;
-
-\_endcode %---------------------------------------
-
-\secc Implementation notes
-
-\%> parameters
-
-The parameters for verbatim macros are set. `\ttline` is set to $-1$ by
-default, so `\begtt...\endtt` are not numbered but `\verbinput` are with
-numbers.
-
-\%> \code
-
-`\code{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In
-order to do it more robust when it is used in `\write` then it expands as
-noexpanded `\code<space>` (followed by space in its csname). This macro doew
-really the work.
-
-The `\_printinverbatim{<text>}` macro is used for `\code{<text>}` printing and for
-\code{`}<text>\code{`} printing. It is defined as `\_hbox`, so the in-verbatim <text>
-will be never broken. But you can re-define this macro.
-
-When `\code` occurs in PDF outlines then it does the same as `\detokenize`.
-The macro for preparing outlines sets `\escapechar` to $-1$ and uses
-\_pdftringout` token list before `\edef`.
-
-The `\code` is not `\_proteced` because we want that it expands to
-`\_unexpanded{\code<space>{<text>}` in `\write` parameters. This protect the
-expansions of the `\code` parameter (like `\\`, `\^` etc.).
-
-\%> \_setverb
-
-The `\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only
-in a group, so we prepare a new catcode table with \"verbatim" catcodes and we define
-it as `\_catcodetable\_verbatimcatcodes`. After the group is finished then
-original catcode table is restored.
-
-\%> \activettchar
-
-This macro saves original catcode of previously declared `\catcodettchar` (if
-such character was decalred) from `\_savedttchar` and `\_savedttcharc`
-values. Then new such values are stored. The declared charater is activated
-by `\_adef` as a macro (active character) which opens a group,
-does `\_setverb` and other settings and reads its parameter until second the same
-character. This is done by `\_readverb` macro. Finally it prints scanned
-<text> by `\_printinverbatim` and closes group. Suppose that `\activettchar"` is
-used. Then the following work is schematically done:
-
-\begtt
-\_def "{\_begingroup \_setverb ... \_readverb}
-\_def \_readverb #1"{\_printinverbatim{#1}\_endgroup}
-\endtt
-%
-Note that the second occurence of `"` is not active because `\_setverb`
-deactivates it.
-
-\%> \begtt ... \endtt
-
-`\begtt` id defined only as public. We don't need private `\_begtt` variant.
-This macro os defined by `\eoldef`, sot user can put an parameter at the
-same line where `\begtt` is. This `#1` parameter is used after globap
-parameters settings, so user can change it locally.
-
-The `\begtt` macro opens group, does `\_setverb` and another preprocessing, sets
-`\endlinechar` to `^^J` and reads the following text in verbatim mode
-until `\endtt` occurs. This scanning is done by `\_startverb` macro which is
-edfined as:
-
-\begtt
-\_def\_startverb #1\endtt #2^^J{...}
-\endtt
-%
-We must to ensure that the backslash in `\endtt` has category 12 (this is a
-reason of the `\ea` chain in real code).
-The `#2` is something between `\endtt` and end of line and it is simply
-ignored.
-
-The `\startverb` puts the scanned data to `\_prepareverbdata`. It sets the data
-to `\_tmpb` without changes by default, but you should re-define it in order
-to does s special changes (for example colorization of the code), if you
-want. The scanned data have `^^J` at each end of line and all spaces are
-active characters. Other characters have nomal category 11 or 12.
-
-When `\prepareverbdata` finishes then `\startverb` runs `\_printverb` loop
-over aech line of the data and does a final work: last skip plus `\noindent`
-without first indentation box. This trick keeps horizontal mode without
-indentation when the empty line after `\endtt` does not exists. But it stops
-horizontal mode without any new box in outer vertical mode if `\par` is
-processed immediately after `\endtt`.
-
-The `\_printverb` macro calls `\_printverbline{<line>}` to each scanned line of
-verbatim text. This macro expect that it strarts in vertical mode ant it must
-do `\par` in order to return the vertical mode. The `\_printverblinenum`
-is used here: it does nothing when `\_ttline<0` else it prints the line
-number using `\_llap`.
-
-\%> \verbinput
-
-Macro `\verbinput` uses a file read perviously or opens the given file. Then
-it runss the parameter scanning by `\_viscanparameter` and `\_viscanminus`.
-Finally the `\_doverbinput` is run. At begining of `\_doverbinput` we have
-`\_viline`= number of lines already read using previous `\verbinput`,
-`\_vinolines`= the number of lines we need to skip and `\_vidolnes`= the
-number of lines we need to print.
-After group is opened then similar preparation is done as in `\begtt`. Then
-we skip `\_nolines` lines in a loop a and we read `\_dolines` lines. The
-read data is accumulated into `\_tmpb` macro. The next steps are equal to
-the steps done in `\_startverb` macro: data are processed via
-`\_prepareverbdata` and printed via `\_printverb` loop.
+\_endcode