--- /dev/null
+% The UCW Macro Collection: Interface to OFS (Olsak's Font System)
+% Written by Martin Mares <mj@ucw.cz> in 2010 and placed into public domain
+% -------------------------------------------------------------------------
+
+\ifx\OFSversion\undefined
+\input ofs.tex
+% \detailfontmessages
+\fi
+
+% We extend OFS's default CM family by several fonts: cmb, cmcsc
+
+\ofsputfamlist{^^JUCW:}
+
+\ofsdeclarefamily [CMRomanUCW] {% ------------ Computer Modern Roman (UCW extended version)
+ \loadtextfam cmr\fotenc;%
+ cmbx\fotenc;%
+ cmti\fotenc;%
+ cmbxti\fotenc;\defaultextraenc;%
+ \newvariant8 \sl (Slanted) cmsl\fotenc;\defaultextraenc;%
+ \newvariant9 \bxsl (BoldSlanted) cmbxsl\fotenc;\defaultextraenc;%
+ \newvariant a \bo (BoldNormal) cmb\fotenc;\defaultextraenc;%
+ \newvariant b \csc (CapsAndSmallCaps) cmcsc\fotenc;\defaultextraenc;%
+ \modifyenc 8z:csfont;%
+}
+\registerenc: 8z
+
+\registertfm cmb8z - csb10
+\registertfm cmb8z 0pt-6pt csb5
+\registertfm cmb8z 6pt-7pt csb6
+\registertfm cmb8z 7pt-8pt csb7
+\registertfm cmb8z 8pt-9pt csb8
+\registertfm cmb8z 9pt-10pt csb9
+\registertfm cmb8z 10pt-12pt csb10
+\registertfm cmb8z 12pt-17pt csb12
+\registertfm cmb8z 17pt-* csb17
+
+\registertfm cmcsc8z - cscsc10
+\registertfm cmcsc8z 0pt-6pt cscsc5
+\registertfm cmcsc8z 6pt-7pt cscsc6
+\registertfm cmcsc8z 7pt-8pt cscsc7
+\registertfm cmcsc8z 8pt-9pt cscsc8
+\registertfm cmcsc8z 9pt-10pt cscsc9
+\registertfm cmcsc8z 10pt-12pt cscsc10
+\registertfm cmcsc8z 12pt-17pt cscsc12
+\registertfm cmcsc8z 17pt-* cscsc17
+
+\ofsdeclarefamily [BlackboardBold] {%
+ \loadtextfam bbm;%
+ ;%
+ ;%
+ ;\defaultextraenc;%
+}
+
+\registertfm bbm - bbm10
+\registertfm bbm 0pt-6pt bbm5
+\registertfm bbm 6pt-7pt bbm6
+\registertfm bbm 7pt-8pt bbm7
+\registertfm bbm 8pt-9pt bbm8
+\registertfm bbm 9pt-10pt bbm9
+\registertfm bbm 10pt-12pt bbm10
+\registertfm bbm 12pt-17pt bbm12
+\registertfm bbm 17pt-* bbm17
+
+\setfonts[CMRomanUCW/]
+
+% \bb - blackboard bold math font
+
+\newfam\bbfam
+\def\bb{\fam\bbfam}
+
+\def\loadbbm{
+ \loadmathfam\bbfam[/bbm]
+}
+\loadbbm
+
+% Recalculate line spacing for a given point size of the font (assuming CM-like metrics).
+% Also sets \strut and \topskip.
+\def\setbaselines#1{
+ \dimen0=1pt
+ \dimen0=#1\dimen0
+ \normalbaselineskip=1.2\dimen0
+ \normallineskip=0.1\dimen0
+ \setbox\strutbox=\hbox{\vrule height 0.85\dimen0 depth 0.35\dimen0 width 0pt}
+ \topskip=1\dimen0
+ \normalbaselines
+}
+
+% Switch to a specified font size (including math, line spacing etc.)
+\def\settextsize#1{
+ \def\fomenc{CM}
+ \setfonts[/#1]
+ \setmath[//]
+ \setbaselines{#1}
+ \loadbbm
+}
+\def\twelvepoint{\settextsize{12}}
--- /dev/null
+% The UCW Macro Collection: Verbatim environment
+% Written by Martin Mares <mj@ucw.cz> in 2010 and placed into public domain
+% -------------------------------------------------------------------------
+
+% We'll use internal macros of plain TeX
+\catcode`@=11
+
+% 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: |word|
+
+% Set if spaces should be rendered as "bath-tub" glyphs
+\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 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
+
+\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{}
+
+% 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
+ \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 \verbemptylineskip
+ \fi
+}
+
+\newcount\verbcnt
+\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
+ \vskip\verbstartskip
+ \let\par=\endb@x
+ \obeylines
+}
+
+\def\startb@x{\setbox0=\hbox\bgroup}
+\def\endb@x{\egroup\verbship\startb@x}
+
+{\catcode`\^^I=\active
+\gdef\setupt@bs{\catcode`\^^I=\active
+\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\setupt@bs\startb@x%
+]]
+
+% Input file verbatim
+
+\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\setupt@bs\startb@x\input #1 \egroup\endgroup}
+
+% Let's hide all internal macros
+\catcode`@=12
\input ucwmac.tex
+\input ucw-ofs.tex
+\input ucw-verb.tex
+
+\showfonts
+
+\twelvepoint
\pageunderlay{\placeat{0pt}{0pt}{\crosshair{10pt}}}
%\verbinput{ucwmac.tex}
+\hd{Font selection}
+
+{\bo non-extended bold}
+
+{\csc Caps And Small Caps}
+
+$x\in\fam\bbfam R$
+
\bye
\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$)}
-%%% 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: |word|
-
-% Set if spaces should be rendered as "bath-tub" glyphs
-\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 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
-
-\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{}
-
-% 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
- \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 \verbemptylineskip
- \fi
-}
-
-\newcount\verbcnt
-\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
- \vskip\verbstartskip
- \let\par=\endb@x
- \obeylines
-}
-
-\def\startb@x{\setbox0=\hbox\bgroup}
-\def\endb@x{\egroup\verbship\startb@x}
+%%% Miscellanea %%%
-{\catcode`\^^I=\active
-\gdef\setupt@bs{\catcode`\^^I=\active
-\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{}}%
-}}
+% {\I italic} with automatic italic correction
+\def\I{\it\aftergroup\/}
-{
-\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\setupt@bs\startb@x%
-]]
+% A breakable dash, to be repeated on the next line
+\def\={\discretionary{-}{-}{-}}
-% Input file verbatim
+% Non-breakable identifiers
+\def\<#1>{\leavevmode\hbox{\I #1}}
-\def\verbinput#1{\begingroup\v@rbparams\verblocaldefs\setupt@bs\startb@x\input #1 \egroup\endgroup}
+% A handy shortcut
+\let\>=\noindent
%%% Epilog %%%