]> mj.ucw.cz Git - ucwmac.git/blobdiff - ucwmac2.tex
Released as version 2.0 with no functional changes
[ucwmac.git] / ucwmac2.tex
index bd4ffda22517a98fdfcabd2034df9591ab0ace0a..1c29317c8073e402da2f2bca4b07597d72a03f2d 100644 (file)
@@ -24,7 +24,7 @@
        \pdfpkresolution=600    % Provide a reasonable default
 \fi\fi
 
-\ifx\directlua\undefined\else
+\ifx\luatexversion\undefined\else
        % In LuaTeX \pdfpkresolution is not enough
        \directlua{kpse.init_prog("luatex", 600, "ljfour")}
 \fi
 \def\sdef#1{\expandafter\def\csname#1\endcsname}
 \def\slet#1#2{\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}
 
+% Assign a control sequence given as a string, complain if it is not defined.
+\def\sget#1#2{\ifcsname#2\endcsname
+               \expandafter\let\expandafter#1\csname#2\endcsname
+       \else
+               \errmessage{Undefined control sequence #2}%
+               \let#1\relax
+       \fi
+}
+
 % Add \protected to an existing macro
 \def\addprotected#1{\protected\edef#1{\expandafter\unexpanded\expandafter{#1}}}
 
 
 \def\ucwwarn#1{\immediate\write16{*** UCWmac warning: #1 ***}}
 
+% Replace all occurrences of #1 in \tmpb by #2.
+% Thanks to Petr Olsak's OPmac for an efficient implementation.
+\bgroup \catcode`!=3 \catcode`?=3
+\gdef\replacestrings#1#2{\long\def\replacestringsA##1#1{\def\tmpb{##1}\replacestringsB}%
+   \long\def\replacestringsB##1#1{\ifx!##1\relax \else\appendef\tmpb{#2##1}%
+      \expandafter\replacestringsB\fi}%
+   \expandafter\replacestringsA\tmpb?#1!#1%
+   \long\def\replacestringsA##1?{\def\tmpb{##1}}\expandafter\replacestringsA\tmpb
+}
+\egroup
+
 %%% Page size and margins %%%
 
 % If you modify these registers, call \setuppage afterwards
 \ifx\luatexversion\undefined
        % In LuaTeX, \pagewidth and \pageheight are primitive
-       \newdimen\pagewidth
-       \newdimen\pageheight
+       % (also, we need \csname here, because \newdimen is \outer)
+       \csname newdimen\endcsname\pagewidth
+       \csname newdimen\endcsname\pageheight
 \fi
 \newdimen\leftmargin
 \newdimen\rightmargin
 %      #.              % with a dot behind
 %      #)              % with a parenthesis behind
 %      (#)             % enclosed in parentheses
+%      [#]             % enclosed in square brackets
 %
 % Historic usage:
 %
 \def\liststyle#1{%
        \edef\markertmp{#1}
        \ifcsname item:\markertmp\endcsname
-               \slet{listmarker}{item:\markertmp}%
+               \sget\listmarker{item:\markertmp}%
        \else
-               \slet{listmarker}{metaitem:\markertometa#1^^X}%
-               \slet{markerinner}{item:\markertoinner#1^^X}%
+               \sget\listmarker{metaitem:\markertometa#1^^X}%
+               \sget\markerinner{item:\markertoinner#1^^X}%
        \fi
 }
 
        \ifx#1^^X%
        \else
                \ifx#1((%
+               \else\ifx#1[[%
                \else\ifx#1))%
+               \else\ifx#1]]%
                \else\ifx#1..%
                \else=%
-               \fi\fi\fi
+               \fi\fi\fi\fi\fi
                \expandafter\markertometa
        \fi
 }
        \else
                \ifx#1(%
                \else\ifx#1)%
+               \else\ifx#1[%
+               \else\ifx#1]%
                \else\ifx#1.%
                \else#1%
-               \fi\fi\fi
+               \fi\fi\fi\fi\fi
                \expandafter\markertoinner
        \fi
 }
 \sdef{metaitem:=.}{\markerinner.}
 \sdef{metaitem:=)}{\markerinner)}
 \sdef{metaitem:(=)}{(\markerinner)}
+\sdef{metaitem:[=]}{[\markerinner]}
 
 % Old-style lists