summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/crw
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/plain/contrib/crw
Initial commit
Diffstat (limited to 'macros/plain/contrib/crw')
-rw-r--r--macros/plain/contrib/crw/README18
-rw-r--r--macros/plain/contrib/crw/crw.tex51
-rw-r--r--macros/plain/contrib/crw/crwdoc.tex283
3 files changed, 352 insertions, 0 deletions
diff --git a/macros/plain/contrib/crw/README b/macros/plain/contrib/crw/README
new file mode 100644
index 0000000000..c6340ef548
--- /dev/null
+++ b/macros/plain/contrib/crw/README
@@ -0,0 +1,18 @@
+
+%
+%Contents:Typesetting Crosswords via plain TeX.
+% Introduced at EuroTeX '92. Here with some mods.
+%Version: December 1993.
+%Purpose: Typesetting crosswords via near natural input.
+% Clues have to be set separately.
+%Example of use (after \input crw.tex %the macro)
+%\bdata%
+%P*On
+%DEk*
+%*n*S
+%Edit
+%\edata
+%$$\crw\qquad\def\usersize{\fiverm\csize=3ex}
+% \sol$$
+%Documentation: Proceedings EuroTeX '92, Prague, and MAPS 92.2 (see later 2p.)
+%Macro: crw.tex file
diff --git a/macros/plain/contrib/crw/crw.tex b/macros/plain/contrib/crw/crw.tex
new file mode 100644
index 0000000000..44e80f9102
--- /dev/null
+++ b/macros/plain/contrib/crw/crw.tex
@@ -0,0 +1,51 @@
+%C.G. van der Laan, Hunzeweg 57, 9893PB, Garnwerd. Holland. 05941-1525.
+% cgl@risc1.rug.nl
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue \cnt=0
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\boxit{\usersize\setbox0=%
+ \hbox to\csize{\vrule\hss\vrule%
+ height.8\csize depth.2\csize width%
+ \csize\hss\vrule}%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\setbox0=\hbox to\csize{\vrule%
+ \hss\vrule height.8\csize depth%
+ .2\csize width\csize\hss\vrule}%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\copy0\relax\else%
+\ifx\relax#1\copy0\relax\else\ifnum`#1=
+ \uccode`#1\cap#1\else\low#1\fi%
+\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}\fi%
+\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}%
+%\endinput %end macros %cgl@risc1.rug.nl
diff --git a/macros/plain/contrib/crw/crwdoc.tex b/macros/plain/contrib/crw/crwdoc.tex
new file mode 100644
index 0000000000..fc6d48474f
--- /dev/null
+++ b/macros/plain/contrib/crw/crwdoc.tex
@@ -0,0 +1,283 @@
+%History of changes
+%dec 1993: The Prague proceedings version as been adapted.
+% This version submitted to CTAN.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Revised/Alternative Crosswords via (plain) TeX
+%Version: Oct 92
+\input tugboat.sty
+\def\rtitle{\hbox to \pagewd{\tenrm MAPS92.2\hfil
+ {\it Typesetting Crosswords via \TeX, revisited}
+}}
+\def\rfoot{\hbox to\pagewd{\sevenrm \rlap{Draft: \today}\hfil-\the\pageno-
+\hfil\llap{\copyright cgl}}
+}
+\pageno=1
+\overfullrule=0pt
+
+\title*Typesetting Crosswords via \TeX, revisited*
+\author*Kees van der Laan*
+\address*Hunzeweg 57, 9893PB\\
+ Garnwerd (Gr), The Netherlands*
+\netaddress*cgl@risc1.rug.nl*
+\article
+%Footnote counter and footnote indexer
+\newcount\fcnt
+\def\ftn{\global\advance\fcnt1 \footnote{${}^{\the\fcnt}$}}
+\def\DeK{D\kern-.11em\lower.5ex\hbox{E}\kern-.1em K}
+
+\head*Abstract*
+An alternative macro, to van der Laan (1992b),
+is provided for typesetting crosswords via (plain) \TeX.
+
+\subhead*Keywords* Crosswords, games, plain \TeX. %, typography.
+%
+\head*Introduction*
+The previous version has been published
+in the proceedings of Euro\-\TeX\ '92, and in MAPS92.1.
+A TUGboat referee suggested not to use |\halign|, et voil\`a.
+The differences of this version with the previous version are:
+|\halign| is not used, and therefore there is no mark-up phase,
+and |\data| is hidden.
+The nested FIFO paradigm is directly applied to |\data|,
+van der Laan (1992a). The control sequence |\data| is created in
+|\store| with as replacement text the data provided between |\bdata...\edata|.
+Alternative sizes of the crossword
+can be obtained via appropriate (re)definition of
+|\usersize|.
+
+\head*Example of use* %\input crwrev.tex
+%
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\cnt=0\relax\boxit{\usersize%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\cc\else%
+\ifx\relax#1\cc\else%
+\ifnum`#1=\uccode`#1\cap#1\else%
+\low#1\fi\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}%
+\fi\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+\def\cc{\vrule height.8\csize depth%
+.2\csize width\csize}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}% cgl, oct92
+%
+\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata$$\crw\qquad
+\def\usersize{\fiverm\csize=3ex}\sol$$
+\medskip\noindent
+is obtained via\ftn{The sides seem to wiggle. Is this optical illusion,
+a driver bug, or caused by the properties of ink-blocks on paper?
+Electronic previewing did not suffer from this.
+The framing was added via {\tt\char92 boxit} to enhance a straight frame.}
+\verbatim
+\input crwrev.tex
+\bdata%
+P*On
+DEk*
+*n*S
+Edit
+\edata$$\crw\qquad
+\def\usersize{\fiverm\csize=3ex}\sol$$
+\endverbatim
+\noindent Conventions for |\bdata| $\langle\,data\,\rangle$ |\edata|\ftn{A
+`white lie,' spaces are also allowed for crossed out cells, see the Appendix.}
+\item{--} cell descriptions have to be given line by line
+\item{--} * denotes crossed out cell
+\item{--} capitals denote marked open cells (with reference numbers
+ to the clues), and letters of the solution
+\item{--} lower case letters, denote empty cells,
+ and letters of the solution.
+\par\noindent The explicit number of cells is not needed to specify,
+nor used.
+
+\head*Programming*
+Crossword diagrams consist of
+(marked) empty cells, crossed out cells, and
+for the solution cells with (capital) letters.
+I parameterized each cell into the
+size |\csize| by |\csize|, with height |.8\csize|.
+Cells are typeset per row in a |\hbox| and these boxes are
+stacked in a |\vbox|. All is framed via |\boxit|.
+The carriage return, |^^M|, and space are active characters
+between |\bdata| and |\edata|, allowing WYSIWYG input.
+The numbering of the marked cells is done automatically, row-wise and hidden.
+I adopted the convention to use reversed words for end-parameter separators,
+except for the |\edata| separator.
+
+Furthermore,
+I assumed that no diacritical marks are used in crosswords, and restricted
+myself to the roman alphabet.
+
+\subhead*The file {\tt crwrev.tex}*
+%\verbfile{crwrev.tex}
+\verbatim
+\let\ea=\expandafter \newif\ifpuzzle
+\newcount\cnt \puzzletrue
+\newdimen\csize\csize=3ex
+%
+\def\bdata{\bgroup\obeylines\obeyspaces%
+\store}
+\def\store#1\edata{\egroup\def\data{#1}}
+{\obeyspaces\global\let =\relax}
+\def\usersize{}
+%
+{\catcode`\^^M=13 %local scope
+\gdef\crw{\cnt=0\relax\boxit{\usersize%
+\hrule\ea\fifol\data\lofif^^M}}
+\gdef\sol{\boxit{\def\num{}\puzzlefalse%
+\usersize\hrule\ea\fifol\data\lofif^^M}}
+\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
+\processl{#1}\fifol}}%end local scope
+%
+\def\lofif#1\fifol{\fi}
+\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
+\def\fifo#1{\ifx\ofif#1\ofif\fi%
+\process#1\fifo} \def\ofif#1\fifo{\fi}
+%
+\def\process#1{\if*#1\cc\else%
+\ifx\relax#1\cc\else%
+\ifnum`#1=\uccode`#1\cap#1\else%
+\low#1\fi\fi\fi}
+\def\low#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\ifpuzzle\null\else\hss\uppercase{#1}%
+\fi\hss\vrule}}
+\def\cap#1{\hbox to\csize{\vrule
+height.8\csize depth.2\csize\relax%
+\num\ifpuzzle\null\else\hss#1\fi%
+\hss\vrule}}
+\def\cc{\vrule height.8\csize depth%
+.2\csize width\csize}
+%
+\def\num{\global\advance\cnt1\relax%
+\vbox to.8\csize{\rlap{\kern1pt%
+\fiverm\the\cnt\hss}\vfil}}
+%
+\def\boxit#1{\vbox{\hrule\hbox{\vrule%
+\vbox{#1}\vrule}\hrule}}% cgl, oct92
+\endverbatim
+%
+\subhead*{\tt\char92crw}, {\tt\char92sol}*
+The crossword, respectively the solution are typeset
+(as |\vbox|-es) by these macros. |\data| is used.
+%
+\subhead*{\tt\char92process}*
+This macro typesets each cell contents according to the |\data|. %
+|\if*#1| etc.\ tests whether a crossed-out cell has to be typeset, and if so
+a copy is inserted. For the other situation according to
+the case of the letter |\low|(er case letter) or
+|\cap|(ital letter), is invoked.
+How the cell contents will be typeset depends upon |\ifpuzzle|.
+The letters are typeset in upper case and centered.
+%
+\subhead*{\tt\char92num}*
+Generates and typesets the reference numbers.
+The numbers are set in the left upper corners of the cells marked
+by capitals in the puzzle representation.
+%
+\subhead*{\tt\char92bdata, \char92store}*
+These store the user provided information between |\bdata| and |\edata|
+in |\data|, with the carriage return and space as active characters.
+(The |\bgroup| after |\gdef| must be an
+{\it explicit\/} brace, because |\bgroup| can be equally well a
+parameter separator.)
+%
+\head*References*
+%
+\frenchspacing
+\newcount\bcnt
+\def\bib{\global\advance\bcnt1 [\the\bcnt]}
+\item{\bib} Hamilton Kelley, B (1990): Some macros to draw crosswords.
+ \tubissue{11}(1), 103\dash119.
+\item{\bib} Knuth, D.E (1986): The \TeX Book. Addison-Wesley.
+\item{\bib} Laan, C.G van der (1992a):
+ FIFO and LIFO sing the BLUes. MAPS92.2.
+\item{\bib} Laan, C.G van der Laan (1992b): Typesetting Crosswords via \TeX.
+ Euro\TeX\ '92. 217\dash224. Also in MAPS92.1.
+\par\noindent
+%%%The above blank line (or \par) is needed to terminate \item%%%
+\head*Appendix: {\rm Hamilton Kelley's puzzle}*
+\tolerance=5000
+\bdata%BHK's example, TB11#1
+ S I C T D S P*
+Swam Oho Icecap
+ o p m r t n l*
+Bopeep Schedule
+ s l a i y u *
+Thalassographer
+ e s n a r*
+HAirpin UmbRage
+ r o S b i *
+ScaLenetriangLe
+ o a u c g e*
+AMounted Allege
+ a v e e l e a*
+Floral Nil Tace
+ l e y t y s y*
+\edata$$\crw$$
+is obtained---after |\input|\ |crwrev.tex|---via
+\verbatim
+\bdata%BHK's example
+ S I C T D S P*
+Swam Oho Icecap
+ o p m r t n l*
+Bopeep Schedule
+ s l a i y u *
+Thalassographer
+ e s n a r*
+HAirpin UmbRage
+ r o S b i *
+ScaLenetriangLe
+ o a u c g e*
+AMounted Allege
+ a v e e l e a*
+Floral Nil Tace
+ l e y t y s y*
+\edata$$\crw$$
+\endverbatim
+\endarticle
+\bye
+
+
+
+
+
+
+
+