summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/basics-macros.opm
blob: b86fd2e2e9b008c0c911d4a8cb4e87484e7f1c62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
%% This is part of OpTeX project, see http://petr.olsak.net/optex

\_codedecl \sdef {Basic macros for OpTeX <2020-02-14>} % 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)

   \_doc ------------------------------
   `\bslash` is \"normal backslash" with category code 12. 
   `\nbb` and `\pcent` are double backslash and normal `%`, they should 
   be used in lua codes, for example.
   \_cod ------------------------------

\_edef\_bslash {\_csstring\\}
\_edef \_nbb {\_bslash\_bslash}
\_edef \_pcent{\_csstring\%}

   \_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{\}}.

   `\sxdef{<text>}` is equivalent to `\xdef\<text>`.

   `\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}

   \_doc ------------------------------
   `\adef{<char>}{<body>}` puts the <char> as active character and defines it
   as {<body>}. You can use parameter mask too, for example 
   `\adef @#1{...$1...}`
   \_cod ------------------------------

\_def \_adef #1{\_catcode`#1=13 \_begingroup 
   \_lccode`\~=`#1\_lowercase{\_endgroup\_def~}}

   \_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>`.
   \_cod ------------------------------

\_def \_cs #1{\_csname#1\_endcsname}

   \_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}}

   \_doc ------------------------------
   `\opwarning{<text>}` prints warning on the terminal and to the log file.
   \_cod ------------------------------

\_def \_opwarning #1{\_wterm{WARNING: #1.}}

   \_doc ------------------------------
   `\loggingall` and `\tracingall` is similar as in plain \TeX/, but prints
   more logging information to the log file and to 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
   \bgroup \egroup \empty \space \null \wlog 
   \bslash \nbb \pcent
   \sdef \sxdef \slet \cs \adef
   \addto \wlog \opwarning 
   \loggingall \tracingall ; 

\_endcode % -------------------------------------