From b7dc026d74d594d2bfc39dcd1de6b545036d9182 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 25 Sep 2010 15:42:47 +0200 Subject: [PATCH] \verbatim finished --- ucwmac-test.tex | 2 ++ ucwmac.tex | 84 ++++++++++++++++++++++++++++++++----------------- 2 files changed, 58 insertions(+), 28 deletions(-) diff --git a/ucwmac-test.tex b/ucwmac-test.tex index 0987ff5..d28427c 100644 --- a/ucwmac-test.tex +++ b/ucwmac-test.tex @@ -75,4 +75,6 @@ abracadabra {!@#$%^&*()\_} } \noindent Post-verbatim +%\verbinput{ucwmac.tex} + \bye diff --git a/ucwmac.tex b/ucwmac.tex index afd2829..da83a1c 100644 --- a/ucwmac.tex +++ b/ucwmac.tex @@ -217,8 +217,9 @@ \def\frenchsp@cing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m% \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m} -% Typesetting of one verbatim word +% Typesetting of one verbatim word: |word| +% Set if spaces should be rendered as "bath-tub" glyphs \newif\ifshowspaces \showspacesfalse @@ -239,66 +240,93 @@ \def\ttst@rt{\begingroup\setverb@tim\let|=\endgroup} \let|=\ttst@rt -% Typesetting of verbatim block (enclosed in balanced {}'s) - -\newskip\verbglue -\newskip\verblineglue -\newskip\verbleftskip +% Typesetting of verbatim blocks: +% - the block is enclosed in balanced {}'s +% - leading and trailing empty lines are ignored +% - all other empty lines are converted to \verbemptylineskip's +% - tabs are interpreted (one tab stop per \verbtabsize columns) +% - \showspacestrue works here, too, but it does not apply to tabs + +\newskip\verbstartskip % vskip before \verbatim +\newskip\verbendskip % vskip after \verbatim +\newskip\verbinterlineskip % between adjacent non-empty lines +\newskip\verbemptylineskip % instead of every empty line +\newskip\verbleftskip % left and right margin \newskip\verbrightskip -\verbglue=3pt plus 1pt minus 0.3pt -\verblineglue=0pt plus 1.5pt -\verbleftskip=1in +\verbstartskip=3pt plus 1pt minus 0.3pt +\verbendskip=\verbstartskip +\verbinterlineskip=0pt +\verbemptylineskip=5pt plus 2pt +\verbleftskip=0in \verbrightskip=0pt plus 1fil + +% Can be re-defined to customize the verbatim environment \def\verblocaldefs{} -\newdimen\tabwidth -\newcount\tabsize -\tabsize=8 -\newdimen\t@b +% Size of a single tab +\newcount\verbtabsize +\verbtabsize=8 \newdimen\v@rbspace +\newdimen\t@b +\newdimen\t@bwidth +% When a complete line is assembled in \box0, \verbship is called to add it +% to the main vertical list. You can override it to get e.g. line numbering. \def\verbship{% \ifdim\wd0>0pt - \ifdim\v@rbspace>0pt \vskip\v@rbspace \fi - \line{\hskip\verbleftskip \vrule\box0\vrule \hskip\verbrightskip} + \ifdim\v@rbspace>0pt + \penalty-100 + \vskip\v@rbspace + \else + \ifdim\v@rbspace=0pt + \vskip\verbinterlineskip + \fi + \fi + \line{\hskip\verbleftskip \box0 \hskip\verbrightskip} \v@rbspace=0pt \else - \advance\v@rbspace by 0.3\baselineskip %FIXME + \advance\v@rbspace by \verbemptylineskip \fi } \newcount\verbcnt -\def\v@rbend{\par\egroup\endgroup\vskip\verbglue} +\def\v@rbend{\par\egroup\endgroup\vskip\verbendskip} \def\v@rbl{\ifnum\verbcnt>0\{\fi\global\advance\verbcnt by 1\relax} \def\v@rbr{\ifnum\verbcnt>1\}\else\v@rbend\fi\global\advance\verbcnt by -1\relax} -\def\v@rbparams{\setverb@tim\raggedbottom -\verbcnt=0 -\v@rbspace=-1000pt -\catcode124=12\setupt@bs\vskip\verbglue\defb@x\obeylines} +\def\v@rbparams{% + \setverb@tim + \raggedbottom + \verbcnt=0 + \v@rbspace=-1000pt + \catcode124=12 + \vskip\verbstartskip + \let\par=\endb@x + \obeylines +} \def\startb@x{\setbox0=\hbox\bgroup} -\def\defb@x{\def\par{\egroup\verbship\startb@x}} +\def\endb@x{\egroup\verbship\startb@x} {\catcode`\^^I=\active \gdef\setupt@bs{\catcode`\^^I=\active -\setbox0=\hbox{\tt\ }\tabwidth=\wd0\multiply\tabwidth by \tabsize%FIXME!!! -\def^^I{\egroup\t@b=\wd0\divide\t@b by \tabwidth% -\multiply\t@b by \tabwidth% -\advance\t@b by \tabwidth\advance\t@b by -\wd0\startb@x\box0\hbox to \t@b{}}% +\setbox0=\hbox{\ }\t@bwidth=\wd0\multiply\t@bwidth by \verbtabsize +\def^^I{\egroup\t@b=\wd0\divide\t@b by \t@bwidth% +\multiply\t@b by \t@bwidth% +\advance\t@b by \t@bwidth\advance\t@b by -\wd0\startb@x\box0\hbox to \t@b{}}% }} { \catcode`[=1\catcode`]=2\catcode123=\active\catcode125=\active \gdef\verbatim[\begingroup\v@rbparams\catcode123=\active\catcode125=\active% -\let{=\v@rbl\let}=\v@rbr\chardef\{=123\chardef\}=125\verblocaldefs\startb@x% +\let{=\v@rbl\let}=\v@rbr\chardef\{=123\chardef\}=125\verblocaldefs\setupt@bs\startb@x% ]] % Input file verbatim -\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\input #1\endgroup} +\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\setupt@bs\startb@x\input #1 \egroup\endgroup} %%% Epilog %%% -- 2.39.2