summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/optex/base/basic-macros.opm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/optex/base/basic-macros.opm')
-rw-r--r--Master/texmf-dist/tex/optex/base/basic-macros.opm130
1 files changed, 130 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/optex/base/basic-macros.opm b/Master/texmf-dist/tex/optex/base/basic-macros.opm
new file mode 100644
index 00000000000..4d465c30109
--- /dev/null
+++ b/Master/texmf-dist/tex/optex/base/basic-macros.opm
@@ -0,0 +1,130 @@
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
+
+\_codedecl \sdef {Basic macros for OpTeX <2021-02-03>} % loaded in format
+
+ \_doc ------------------------------
+ \`\bgroup`, \`\egroup`, \`\empty`, \`\space`, \`\null` and \`\wlog`
+ are classical macros from plain \TeX/.
+ \_cod ------------------------------
+
+\_let\_bgroup={ \_let\_egroup=}
+\_def \_empty {}
+\_def \_space { }
+\_def \_null {\_hbox{}}
+\_def \_wlog {\_immediate\_write-1 } % write on log file (only)
+\_public \bgroup \egroup \empty \space \null \wlog ;
+
+ \_doc ------------------------------
+ \`\ignoreit` ignores next token or `{<text>}`,
+ \`\useit``{<text>}` expands to `<text>` (removes outer braces),
+ \`\ignoresecond` uses first, ignores second parameter and
+ \`\usesecond` ignores first, uses second parameter.
+ \_cod ------------------------------
+
+\_long\_def \_ignoreit #1{}
+\_long\_def \_useit #1{#1}
+\_long\_def \_ignoresecond #1#2{#1}
+\_long\_def \_usesecond #1#2{#2}
+\_public \ignoreit \useit \ignoresecond \usesecond ;
+
+ \_doc ------------------------------
+ \`\bslash` is \"normal backslash" with category code 12.
+ \`\nbb` is double backslash
+ and \`\pcent` is normal~`%`.
+ They can be used in Lua codes, for example.
+ \_cod ------------------------------
+
+\_edef \_bslash {\_csstring\\}
+\_edef \_nbb {\_bslash\_bslash}
+\_edef \_pcent{\_csstring\%}
+\_public \bslash \nbb \pcent ;
+
+ \_doc ------------------------------
+ \`\sdef` `{<text>}` is equivalent to `\def\<text>`, where `\<text>` is a control
+ sequence. You can use arbitrary parameter mask after `\sdef{<text>}`, don't
+ put the (unwanted) space immediately after closing brace \code{\}}.
+ \nl
+ \`\sxdef` `{<text>}` is equivalent to `\xdef\<text>`.
+ \nl
+ \`\slet` `{<textA>}{<textB>}` is equivalent to `\let \<textA> = \<textB>`.
+ \_cod ------------------------------
+
+\_def \_sdef #1{\_ea\_def \_csname#1\_endcsname}
+\_def \_sxdef #1{\_ea\_xdef \_csname#1\_endcsname}
+\_def \_slet #1#2{\_ea\_let \_csname#1\_ea\_endcsname \_csname#2\_endcsname}
+\_public \sdef \sxdef \slet ;
+
+ \_doc ------------------------------
+ \`\adef` `{<char>}{<body>}` puts the <char> as active character and defines it
+ as `{<body>}`. You can declare a macro with parameters too. For example
+ `\adef @#1{...#1...}`.
+ \_cod ------------------------------
+
+\_def \_adef #1{\_catcode`#1=13 \_begingroup \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}}
+\_public \adef ;
+
+ \_doc ------------------------------
+ \`\cs` `{<text>}` is only a shortcut to `\csname <text>\endcsname`, but you need
+ one more `\_ea` if you need to get the real control sequence `\<text>`.
+ \nl
+ \`\trycs` `{<csname>}{<text>}` expands to `\<csname>`
+ if it is defined else to the `<text>`.
+ \_cod ------------------------------
+
+\_def \_cs #1{\_csname#1\_endcsname}
+\_def \_trycs#1#2{\_ifcsname #1\_endcsname \_csname #1\_ea\_endcsname \_else #2\_fi}
+\_public \cs \trycs ;
+
+ \_doc ------------------------------
+ \`\addto` `\macro{<text>}` adds `<text>` to your `\macro`, which must be defined.
+ \_cod ------------------------------
+
+\_long\_def \_addto #1#2{\_ea\_def\_ea#1\_ea{#1#2}}
+\_public \addto ;
+
+ \_doc -----------------------------
+ \`\incr``<counter>` increases `<counter>` by one globally.
+ \`\decr``<counter>` decreases `<counter>` by one globally.
+ \_cod -----------------------------
+
+\_def\_incr #1{\_global\_advance#1by1 }
+\_def\_decr #1{\_global\_advance#1by-1 }
+\_public \incr \decr ;
+
+ \_doc ------------------------------
+ \`\opwarning` `{<text>}` prints warning on the terminal and to the log file.
+ \_cod ------------------------------
+
+\_def \_opwarning #1{\_wterm{WARNING l.\_the\_inputlineno: #1.}}
+\_public \opwarning ;
+
+ \_doc ------------------------------
+ \`\loggingall` and \`\tracingall` are defined similarly as in
+ plain \TeX/, but they print
+ more logging information to the log file and the terminal.
+ \_cod ------------------------------
+
+\_def\_loggingall{\_tracingcommands=3 \_tracingstats=2 \_tracingpages=1
+ \_tracingoutput=1 \_tracinglostchars=1 \_tracingmacros=2
+ \_tracingparagraphs=1 \_tracingrestores=1 \_tracingscantokens=1
+ \_tracingifs=1 \_tracinggroups=1 \_tracingassigns=1 }
+\_def\_tracingall{\_tracingonline=1 \_loggingall}
+\_public \loggingall \tracingall ;
+
+ \_doc ------------------------------
+ Write a warning if the user did not load a Unicode Font {\em or}
+ if there were unresolved references. \`\_byehook` is used in the \^`\bye` macro.
+ \_cod ------------------------------
+
+\_def\_byehook{%
+ \_ifx\_initunifonts\_relax \_relax\_else \_opwarning{Unicode font was not loaded}\_fi
+ \_ifnum\_unresolvedrefs>0 \_opwarning{Try to rerun to get references right}\_fi
+}
+
+\_endcode % -------------------------------------
+
+2021-02-03: \useit defined.
+2021-01-22: \trycs: \ea added in order to be able to use cs with parameters
+2021-01-08: \opwarning format changed (secondly, hope that conclusively)
+2020-10-12: \opwarning: line numbers added
+2020-02-14: introduced