diff options
Diffstat (limited to 'Master/texmf-dist/tex/luatex/optex/verbatim.opm')
-rw-r--r-- | Master/texmf-dist/tex/luatex/optex/verbatim.opm | 149 |
1 files changed, 85 insertions, 64 deletions
diff --git a/Master/texmf-dist/tex/luatex/optex/verbatim.opm b/Master/texmf-dist/tex/luatex/optex/verbatim.opm index cfd9ed43548..92a7abac553 100644 --- a/Master/texmf-dist/tex/luatex/optex/verbatim.opm +++ b/Master/texmf-dist/tex/luatex/optex/verbatim.opm @@ -1,33 +1,35 @@ %% This is part of OpTeX project, see http://petr.olsak.net/optex -\_codedecl \begtt {Verbatim <2020-03-21>} % preloaded in format +\_codedecl \begtt {Verbatim <2020-04-22>} % preloaded in format \_doc ---------------------------- - The internal parameters for verbatim macros are set. + The internal parameters + \`\_ttskip`, \`\_ttpenalty`, \`\_viline`, \`\_vifile` and \`\_ttfont` + for verbatim macros are set. \_cod ---------------------------- \_def\_ttskip{\_medskip} % space above and below \begtt, \verbinput \_mathchardef\_ttpenalty=100 % penalty between lines in \begtt, \verbinput \_newcount\_viline % last line number in \verbinput -\_newread\_vifile % file fgiven by \verinput +\_newread\_vifile % file given by \verinput \_def\_ttfont{\_tt} % default tt font \_doc ---------------------------- - `\code{<text>}` expands to `\detokenize{<text>}` when `\escapechar=-1`. In + \`\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> + 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 - `\_regoul` token list before `\edef`. + \^`\_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 + The `\code` is not `\proteced` because we want it expands to + `\unexpanded{\code<space>{<text>}}` in `\write` parameters. This protect the expansions of the `\code` parameter (like `\\`, `\^` etc.). \_cod ---------------------------- @@ -37,13 +39,12 @@ \_def\_printinverbatim#1{\_leavevmode\_hbox{#1}} \_regmacro {}{}{\_let\code=\_detokenize \_let\_code=\_detokenize} - \_public \code ; \_doc ---------------------------- - The `\_setverb` macro sets all catcodes to \"verbatim mode". It should be used only + 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 + it as\nl `\_catcodetable`\`\_verbatimcatcodes`. After the group is finished then original catcode table is restored. \_cod ---------------------------- @@ -58,19 +59,19 @@ \_def\_setverb{\_catcodetable\_verbatimcatcodes }% \_doc ---------------------------- - `\activettchar<char>` saves original catcode of previously declared <char> (if - such character was declared) from `\_savedttchar` and `\_savedttcharc` + \`\activettchar``<char>` saves original catcode of previously declared `<char>` (if + such character was declared) using \`\_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 + character. This is done by the \`\_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` + Note that the second occurrence of `"` is not active because `\_setverb` deactivates it. \_cod ---------------------------- @@ -84,49 +85,48 @@ \_public \activettchar ; \_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 + \`\begtt` is defined only as public. We don't need private `\_begtt` variant. + This macro is defined by `\eoldef`, so user can put a parameter at the same line where `\begtt` is. This `#1` parameter is used after `\_everytt` - parameters settings, so user can change it locally. + parameters settings, so user can change them locally. - The `\begtt` macro opens group, does `\_setverb` and another preprocessing, sets + 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 + until \`\endtt` occurs. This scanning is done by \`\_startverb` macro which is defined as: - \begtt - \_def\_startverb #1\endtt #2^^J{...} + \begtt \adef/{\bslash} + \_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 + The `#2` is something between `\endtt` and end of the same line and it is simply ignored. - The `\startverb` puts the scanned data to `\_prepareverbdata`. It sets the data + 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 + to do special changes, if you want. (For example, \^`\hisyntax` redefines + this macro.) The scanned data have `^^J` at each end of line and all spaces are + active characters (defined as {\visiblesp`\ `}). + Other characters have normal category 11 or 12. + + When `\_prepareverbdata` finishes then `\_startverb` runs \`\_printverb` loop + over each line of the data and does a final work: last skip plus `\noindent` + in the next paragraph. + + The `\_printverb` macro calls \`\_printverbline``{<line>}` to each scanned line of + verbatim text. This macro expect that it strarts in vertical mode and it must + do `\par` in order to return the vertical mode. The \`\_printverblinenum` + is used here: it does nothing when `\_ttline`\code{<0} else it prints the line number using `\_llap`. \_cod ---------------------------- \_eoldef \begtt#1{\_par \_wipeepar - \_begingroup \_vskip\_parskip \_ttskip + \_begingroup \_setverb \_ifnum\_ttline<0 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_adef{ }{\ }\_parindent=\_ttindent \_parskip=0pt + \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt + \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% \_the\_everytt \_relax #1\_relax \_ttfont \_endlinechar=`^^J \_startverb @@ -134,46 +134,49 @@ \_ea\_def\_ea\_startverb \_ea#\ea1\_csstring\\endtt#2^^J{% \_prepareverbdata\_tmpb{#1^^J}% \_ea\_printverb \_tmpb\_end - \_par\_ttskip - \_endgroup + \_par + \_endgroup \_ttskip \_isnextchar\_par{}{\_noindent}% } \_def\_printverb #1^^J#2{\_ifx\_end#2 - \_bgroup \_adef{ }{}\_if\_relax#1\_relax\_egroup \_else\_egroup \_printverbline{#1}\_fi + \_bgroup \_adef{ }{}\_def\t{}% + \_ifcat&\_egroup \_else\_egroup \_printverbline{#1}\_fi \_else \_printverbline{#1}% \_ea \_printverb \_ea #2% \_fi } \_def\_prepareverbdata#1#2{\_def#1{#2}} -\_def\_printverbline#1{\_penalty \_ttpenalty \_indent \_printverblinenum #1\par} +\_def\_printverbline#1{\_penalty \_ttpenalty + \_indent \_printverblinenum \_kern\_ttshift #1\par} \_def\_initverblinenum{\_tenrm \_thefontscale[700]\_ea\_let\_ea\_sevenrm\_the\_font} \_def\_printverblinenum{\_global\_advance\_ttline by1 \_llap{\_sevenrm \_the\_ttline\_kern.9em}} \_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 + Macro \`\verbinput` uses a file read previously or opens the given file. Then + it runs 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 + Similar preparation is done as in `\begtt` after the group is opened. Then + we skip \`\_vinolines` lines in a loop a and we read \`\_vidolines` 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. + 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}% +\_def\_verbinput #1(#2) #3 {\_par \_def\_tmpa{#3}% + \_def\_tmpb{#1}% cmds used in local group \_ifx\_vifilename\_tmpa \_else - \_openin\_vifile=#2 + \_openin\_vifile={#3}% \_global\_viline=0 \_global\_let\_vifilename=\_tmpa \_ifeof\_vifile - \_opwarning{\_noexpand\verbinput - file "#2" is unable to reading} + \_opwarning{\_noexpand\verbinput - file "#3" is unable to reading} \_ea\_ea\_ea\_skiptorelax \_fi \_fi - \_viscanparameter #1+\_relax + \_viscanparameter #2+\_relax } \_def\_skiptorelax#1\_relax{} @@ -213,8 +216,9 @@ \_vskip\_parskip \_ttskip \_wipeepar \_begingroup \_ifnum\_ttline<-1 \_let\_printverblinenum=\_relax \_else \_initverblinenum \_fi - \_setverb \_adef{ }{\ }\_parindent=\_ttindent \_parskip=0pt - \_the\_everytt\_relax \_ttfont + \_setverb \_adef{ }{\ }\_adef\^^I{\t}\_parindent=\_ttindent \_parskip=0pt + \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% + \_the\_everytt\_relax \_tmpb\_relax \_ttfont \_endlinechar=`^^J \_tmpnum=0 \_loop \_ifeof\_vifile \_tmpnum=\_vinolines\_space \_fi \_ifnum\_tmpnum<\_vinolines\_space @@ -232,15 +236,32 @@ \_ea\_prepareverbdata \_ea \_tmpb\_ea{\_tmpb^^J}% \_ea\_printverb \_tmpb\_end \_global\_ttlinesave - \_par\_ttskip + \_par \_endgroup - \_noindent \_setbox0=\_lastbox + \_ttskip + \_isnextchar\_par{}{\_noindent}% } \_def\_vireadline{\_read\_vifile to \_tmp \_global\_advance\_viline by1 } \_def\_visaveline{\_ea\_addto\_ea\_tmpb\_ea{\_tmp}} -\_public - \verbinput ; +\_public \verbinput ; + + \_doc ----------------------------- + The \`\visiblesp` sets spaces as visible characters \char9251. + It redefines {\visiblesp`\ `} primitive, so it is useful for verbatim modes only. + \_cod ----------------------------- + +\_def \_visiblesp{\_ifx\_initunifonts\_relax \_def\ {\_char9251 }% + \_else \_def\ {\_char32 }\_fi} + +\_public \visiblesp ; \_endcode +\_endinput + +History: +2020-04-22 ... \ttshift introduced +2020-04-06 ... \visiblesp added +2020-04-04 ... ^^I activated as \t for multiline verbatim + \verbinput <cmds> (...) <filename>, <cmds> added. |