]> mj.ucw.cz Git - ucwmac.git/commitdiff
First attempts at a new verbatim environment
authorMartin Mares <mj@ucw.cz>
Sat, 25 Sep 2010 13:08:58 +0000 (15:08 +0200)
committerMartin Mares <mj@ucw.cz>
Sat, 9 Oct 2010 11:05:45 +0000 (13:05 +0200)
ucwmac-test.tex
ucwmac.tex

index 678641721c3b1f8825a54f62b131bf1ffc51119e..0987ff5790b3ce00c6ac2e03a02cd72a7ded5c5d 100644 (file)
@@ -37,16 +37,42 @@ misinterpreted\dots{} --- Douglas Addams: HHG
 \:Third:
        \itemize\istar
        \:Primus
-       \:Secundus
+       \: Secundus     %% are spaces eaten correctly?
        \:Tertius
        \:Graecus:
                \numlist\ngreek
                \:alpha
                \:beta
-               \:gamma
+               \: gamma
                \endlist
        \endlist
 \:Fourth
 \endlist
 
+\hd{Inline verbatim}
+
+Lo and behold: |a quick brown fox| {\showspacestrue |jumps over  the lazy dog|} |!@#$%^&*()\_|
+
+\hd{Block verbatim}
+
+\noindent Pre-verbatim
+\showspacestrue
+\verbatim{
+abracadabra {!@#$%^&*()\_}
+1      tab
+12     tab
+123    tab
+1234   tab
+12345  tab
+123456 tab
+1234567        tab
+12345678       tab     tab
+123456789      tab45678        tab
+123456789      tab45678         tab&space
+123456789              tabtab
+
+123456789              tabtab
+}
+\noindent Post-verbatim
+
 \bye
index b5f98773e39765dab0c370540d75a3075f647abc..afd2829267c2461b187aaf4ebd704131333989c4 100644 (file)
 \zeta\or\eta\or\theta\or\iota\or\kappa\or\lambda\or\mu\or\nu\or\xi\or\pi\or\rho
 \or\sigma\or\tau\or\upsilon\or\phi\or\chi\or\psi\or\omega\fi$)}
 
-\def\itm{\:}
+%%% Verbatim typesetting %%%
+
+% New \frenchspacing, which doesn't leave unwanted spaces in text.
+\def\frenchsp@cing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m%
+\sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
+
+% Typesetting of one verbatim word
+
+\newif\ifshowspaces
+\showspacesfalse
+
+\def\make@ther#1{\catcode`#1=12\relax}
+\def\setverb@tim{\tt\frenchsp@cing\catcode`\`=13\catcode`\'=13\n@ligs%
+\let\do=\make@ther\dospecials\obeyspaces\showsp@ces}
+
+{\catcode`'=13
+\catcode``=13
+\gdef\n@ligs{\def`{\relax\lq}\def'{\relax\rq}}}
+
+{\obeyspaces
+\global\chardef\sp@ce=32
+\gdef\showsp@ces{\ifshowspaces\let =\sp@ce\fi}
+\global\let =\ }
+
+\catcode124=\active % Make | active
+\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
+\newskip\verbrightskip
+
+\verbglue=3pt plus 1pt minus 0.3pt
+\verblineglue=0pt plus 1.5pt
+\verbleftskip=1in
+\verbrightskip=0pt plus 1fil
+\def\verblocaldefs{}
+
+\newdimen\tabwidth
+\newcount\tabsize
+\tabsize=8
+\newdimen\t@b
+
+\newdimen\v@rbspace
+
+\def\verbship{%
+       \ifdim\wd0>0pt
+               \ifdim\v@rbspace>0pt \vskip\v@rbspace \fi
+               \line{\hskip\verbleftskip \vrule\box0\vrule \hskip\verbrightskip}
+               \v@rbspace=0pt
+       \else
+               \advance\v@rbspace by 0.3\baselineskip  %FIXME
+       \fi
+}
+
+\newcount\verbcnt
+\def\v@rbend{\par\egroup\endgroup\vskip\verbglue}
+\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\startb@x{\setbox0=\hbox\bgroup}
+\def\defb@x{\def\par{\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{}}%
+}}
+
+{
+\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%
+]]
+
+% Input file verbatim
+
+\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\input #1\endgroup}
 
 %%% Epilog %%%