diff options
author | Karl Berry <karl@freefriends.org> | 2021-04-19 21:25:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-04-19 21:25:21 +0000 |
commit | 3125499a8c2b497b0f964e23c53d9c9fe3fe4e58 (patch) | |
tree | 1618fa57d975d6d12cde15c8b1190c09061d033c /Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm | |
parent | f5f0b7d1217bc7ab099302a505fffcac39d41006 (diff) |
optex its own format, so directly under tex/ and doc/
git-svn-id: svn://tug.org/texlive/trunk@58918 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm')
-rw-r--r-- | Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm b/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm deleted file mode 100644 index eb6d747914e..00000000000 --- a/Master/texmf-dist/tex/luatex/optex/base/hi-syntax.opm +++ /dev/null @@ -1,223 +0,0 @@ -%% This is part of the OpTeX project, see http://petr.olsak.net/optex - -\_codedecl \hisyntax {Syntax highlithing of verbatim listings <2020-04-04>} % preloaded in format - - \_doc ----------------------------- - The following macros `\replfromto` and `\replthis` manipulate with the - verbatim text which has been read already and stored in the `\_tmpb` macro. - - The \`\replfromto` `{<from>}{<to>}{<what>}` finds first `<from>` then the - first `<to>` following by `<from>` pattern and the - `<text>` between them is packed to `#1`. - Then `<from><text><to>` is replaced by `<what>`. The `<what>` parameter - can use `#1` which is replaced by the `<text>`. - - The `\replfromto` continues by finding next `<from>`, then, next `<to>` - repeatedly over the whole verbatim text. If the verbatim text is ended by - opened `<from>` but not closing by `<to>` then `<to>` is appended to the - verbatim text automatically and the last part of the verbatim text is replaced too. - - First two parameters are expanded before usage of `\replfromto`. You can - use `\csstring\%` or something else here. - \_cod ----------------------------- - -\_def\_replfromto #1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replfromtoE\_tmpa} -\_def\_replfromtoE#1#2#3{% #1=from #2=to #3=what to replace - \_def\_replfrom##1#1##2{\_addto\_tmpb{##1}% - \_ifx\_end##2\_ea\_replstop \_else \_afterfi{\_replto##2}\_fi}% - \_def\_replto##1#2##2{% - \_ifx\_end##2\_afterfi{\_replfin##1}\_else - \_addto\_tmpb{#3}% - \_afterfi{\_replfrom##2}\_fi}% - \_def\_replfin##1#1\_end{\_addto\_tmpb{#3}\_replstop}% - \_edef\_tmpb{\_ea}\_ea\_replfrom\_tmpb#1\_end#2\_end\_end\_relax -} -\_def\_replstop#1\_end\_relax{} -\_def\_finrepl{} - - \_doc ----------------------------- - The \`\replthis` `{<pattern>}{<what>}` replaces each `<pattern>` by `<what>`. - Both parameters of `\replthis` are expanded first. - \_cod ----------------------------- - -\_def\_replthis#1#2{\_edef\_tmpa{{#1}{#2}}\_ea\_replstring\_ea\_tmpb \_tmpa} - -\_public \replfromto \replthis ; - - \_doc ----------------------------- - The patterns `<from>`, `<to>` and `<pattern>` are not found when they are - hidden in braces `{...}`. Example: - \begtt - \replfromto{/*}{*/}{\x C{/*#1/*}} - \endtt - replaces all C comments by `\x C{...}`. The patterns inside `{...}` are - not used by next usage of `\replfromto` or `\replthis` macros. - - The \`\_xscan` macro does replacing `\x` by `\z` in the post-processing - phase. The `\x <letter>{<text>}` expands to `\_xscan {<letter>}<text>^^J^`. - If `#3` is `\_end` then it signals that something wrong happens, the - `<from>` was not terminated by legal `<to>` when `\replfromto` did work. - We must to fix it by the \`\_xscanR` macro. - \_cod ----------------------------- - -\_def\_xscan#1#2^^J#3{\_ifx\_end#3 \_ea\_xscanR\_fi - \z{#1}{#2}% - \_ifx^#3\_else ^^J\_afterfi{\_xscan{#1}#3}\_fi} -\_def\_xscanR#1\_fi#2^{^^J} - - \_doc ----------------------------- - The \`\hicolor` `<letter> <color>` defines `\_z<letter>{<text>}` - as `{<color><text>}`. It should be used in the context of - `\x <letter>{<text>}` macros. - \_cod ----------------------------- - -\_def\_hicolor #1#2{\_sdef{_z:#1}##1{{#2##1}}} - - \_doc ----------------------------- - The \`\hisyntax``{<name>}` re-defines default \^`\_prepareverbdata``<macro><verbtext>` - in order to it does more things: - It saves `<verbtext>` to `\_tmpb`, appends `\n` around spaces and - `^^J` characters in pre-processing phase, it opens `hisyntax-<name>.opm` - file if `\_hisyntax<name>` is not defined. Then `\_the\_isyntax<name>` - is processed. Finally, the post-processing phase is realized by setting - appropriate values to `\x` and `\y` macros and doing - `\_edef\_tmpb{\_tmpb}`. - \_cod ----------------------------- - -\_def\_hisyntax#1{\_def\_prepareverbdata##1##2{% - \_let\n=\_relax \_let\b=\_relax \_def\t{\n\_noexpand\t\n}\_let\_start=\_relax - \_adef{ }{\n\_noexpand\ \n}\_edef\_tmpb{\_start^^J##2\_end}% - \_replthis{^^J}{\n^^J\b\n}\_replthis{\b\n\_end}{\_end}% - \_let\x=\_relax \_let\y=\_relax \_let\z=\_relax \_let\t=\_relax - \_hicomments % keeps comments declared by \commentchars - \_endlinechar=`\^^M - \_lowercase{\_def\_tmpa{#1}}% - \_ifcsname _hialias:\_tmpa\_endcsname \_edef\_tmpa{\_cs{_hialias:\_tmpa}}\_fi - \_ifx\_tmpa\_empty \_else - \_unless \_ifcsname _hisyntax\_tmpa\_endcsname - \_isfile{hisyntax-\_tmpa.opm}\_iftrue \_opinput {hisyntax-\_tmpa.opm} \_fi\_fi - \_ifcsname _hisyntax\_tmpa\_endcsname - \_ifcsname hicolors\_tmpa\_endcsname - \_cs{_hicolors\_tmpa}=\_cs{hicolors\_tmpa}% - \_else - \_if^\_the\_hicolors^\_else - \_ifcsname _hicolors\_tmpa\_endcsname - \_global\_cs{_hicolors\_tmpa}=\_hicolors \_global\_hicolors={}% - \_fi\_fi\_fi - \_ea\_the \_csname _hisyntax\_tmpa\_endcsname % \_the\_hisyntax<name> - \_else\_opwarning{Syntax "\_tmpa" undeclared (no file hisyntax-\_tmpa.opm)} - \_fi\_fi - \_replthis{\_start\n^^J}{}\_replthis{^^J\_end}{^^J}% - \_def\n{}\_def\b{}\_adef{ }{\_dsp}% - \_bgroup \_lccode`\~=`\ \_lowercase{\_egroup\_def\ {\_noexpand~}}% - \_def\w####1{####1}\_def\x####1####2{\_xscan{####1}####2^^J^}% - \_def\y####1{\_ea \_noexpand \_csname ####1\_endcsname}% - \_edef\_tmpb{\_tmpb}% - \_def\z####1{\_cs{_z:####1}}% - \_def\t{\_hskip \_dimexpr\_tabspaces em/2\_relax}% - \_localcolor -}} -\_public \hisyntax \hicolor ; - - \_doc ----------------------------- - Aliases for languages can be declared like this. - When `\hisyntax{xml}` is used then this is the same as `\hisyntax{html}`. - \_cod ----------------------------- - -\_sdef{_hialias:xml}{html} -\_sdef{_hialias:json}{c} - -\_endcode % ------------------------------------------- - -The user can write - -\begtt \adef/{\_csstring\\} -\begtt \hisytnax{C} -... -/endtt -\endtt -and the code is colorized by C syntax. -The user can write `\everytt={\hisyntax{C}}` and all verbatim listings are -colorized. - -The \^`\hisyntax``{<name>}` reads the file `hisyntax-<name>.opm` where the -colorization is declared. The parameter `<name>` is case insensitive and the -file name must include it in lowercase letters. For example, the file -`hisyntax-c.opm` looks like this: - -\printdoc hisyntax-c.opm - -\OpTeX/ provides `hisyntax-{c,python,tex,html}.opm` files. -You can take inspiration from these files and declare more languages. - -User can re-declare colors by `\hicolors={...}` This value has precedence -before `\_hicolors<name>` values declared in the `hicolors-<name>.opm` file. -What exactly to do: copy `\_hicolors<name>={...}` -from `hicolors-<name>.opm` to your document, -rename it as `\hicolors={...}` and do you own colors modifications. - -Another way to set non-default colors is to declare -`\newtoks\hicolors<name>` (without the `_` prefix) and set the colors palette here. -It has precedence before `\_hicolors<name>` (with the `_` prefix) declared in -the `hicolors-<name>.opm` file. -This is useful when there are more hi-syntax languages used in one document. - -\secl4 Notes for hi-syntax macro writers -The file `hisyntax-<name>.opm` is read only once in the \TeX/ group. -If there are definitions then they must be declared as global. - -The `hisyntax-<name>.opm` file must (globally) declare `\_hisyntax<name>` tokens string -where the action over verbatim text is declared typically by `\replfromto` or -`\replthis` macros. - -The verbatim text is prepared by {\em pre-processing phase}, then the -`\_hisyntax<name>` is applied and then {\em post-processing phase} does final -corrections. Finally, the verbatim text is printed line by line. - -The pre-processing phase does: - -\begitems -* Each space is replaced by {\visiblesp`\n\ \n`}, so `\n<word>\n` should be a pattern to - finding whole words (no subwords). The `\n` control sequence is removed in - the post-processing phase. -* Each end of line is represented by `\n^^J\n`. -* The `\_start` control sequence is added before the verbatim text and the `\_end` control - sequence is appended to the end of the verbatim text. These control - sequences are removed in the post-processing phase. -\enditems - -Special macros are working only in a group when processing the verbatim -text. - - -\begitems -* `\n` means noting but it should be used as a boundary of words as mentioned above. -* `\t` means a tabulator. It is prepared as `\n\t\n` because it can be at - the boundary of a word. -* `\x <letter>{<text>}` can be used as replacing text. Suppose the example - \begtt - \replfromto{/*}{*/}{\x C{/*#1*/}} - \endtt - This replaces all C comments `/*...*/` by `\x C{/*...*/}`. But the - C comments may span more lines, i.e. the `^^J` should be inside it. - - The macro `\x <letter>{<text>}` is replaced by one or more - `\z <letter>{<text>}` in post-processing phase where each parameter `<text>` of - `\z` keeps inside one line. Inside-line parameters are represented - by `\x C{<text>}` and they are replaced to `\z C{<text>}` without any change. - But: - \begtt \catcode`\<=13 - \x C{<text1>^^J<text3>^^J<text3>} - is replaced by - \z C{<text1>}^^J\z C{<text2>}^^J\z C{<text3>} - \endtt - The `\z <letter>{<text>}` is expanded to `\_z:<letter>{<text>}` and if - `\hicolor <letter> <color>` is declared then - `\_z:<letter>{<text>}` expands to `{<color><text>}`. So, required color is - activated at all lines (separately) where C comment spans. -* `\y {<text>}` is replaced by `\<text>` in the post processing phase. It should - be used for macros without a parameter. You cannot use unprotected macros - as replacement text before the post-processing phase, because the post-processing - phase is based on expansion whole verbatim text. -\enditems - |