summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain/zztex/zzindexv1.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/plain/zztex/zzindexv1.tex')
-rw-r--r--Master/texmf-dist/tex/plain/zztex/zzindexv1.tex379
1 files changed, 379 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/zztex/zzindexv1.tex b/Master/texmf-dist/tex/plain/zztex/zzindexv1.tex
new file mode 100644
index 00000000000..c809d20c9fc
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/zztex/zzindexv1.tex
@@ -0,0 +1,379 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Module: ZzTeX Indexing Facilities, version 1
+%
+% Synopsis: This file contains the tools for producing an index.
+%
+% Author: Paul C. Anagnostopoulos
+% Created: 20 May 2006
+%
+% Copyright 1989--2020 by Paul C. Anagnostopoulos
+% under The MIT License (opensource.org/licenses/MIT)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Index Version
+% ----- -------
+
+
+\def \indexversion #1{%
+ \input zzindexv#1\relax}
+
+% Define Index Locator Types
+% ------ ----- ------- -----
+
+
+% This list contains the definition of each locator. New ones must be
+% added to the end, and any program looking at the definitions must assume
+% that duplicates may exist, and that the last one prevails.
+
+\def \zixloclist {}
+
+
+%~ This command is deprecated in favor of |\definelocator|.
+
+\def \definelocatortype #1#2#3#4#5#6{% {name}{attributes}{precedence}
+ % {beginning-punc}{templates}
+ % {ending-punc}
+ {\setflag \pg = \true
+ \let \page = \relax
+ \def \nopage {\setflag \pg = \false}%
+ \setflag \txt = \false
+ \def \text {\setflag \txt = \true}%
+ \let \notext = \relax
+ #2%
+ \def \bpunc {#4}%
+ \def \temp {#5}%
+ \def \epunc {#6}%
+ \edef \znext {%
+ \noexpand\append{{#1}{\pg}{\txt}{#3}%
+ {\expandafter\zdefof \meaning\bpunc\zmark}%
+ {\expandafter\zdefof \meaning\temp\zmark}%
+ {\expandafter\zdefof \meaning\epunc\zmark}}}%
+ \znext{\zixloclist}%
+ \if \txt
+ \withname\gdef{\x#1}##1##2{\zixindex{#1}{##1}{S}{##2}}%
+ \if \pg
+ \withname\gdef{\x#1begin}##1##2{\zixindex{#1}{##1}{B}{##2}}%
+ \withname\gdef{\x#1end}##1##2{\zixindex{#1}{##1}{E}{##2}}%
+ \fi
+ \else
+ \withname\gdef{\x#1}##1{\zixindex{#1}{##1}{S}{}}%
+ \if \pg
+ \withname\gdef{\x#1begin}##1{\zixindex{#1}{##1}{B}{}}%
+ \withname\gdef{\x#1end}##1{\zixindex{#1}{##1}{E}{}}%
+ \fi
+ \fi}}
+
+
+% This command is deprecated.
+
+\def \defineindexlocator #1#2#3#4#5#6{% {name}{attributes}{precedence}
+ % {punctuation}{single-template}
+ % {range-template}
+}
+
+% Builtin Locator Types
+% ------- ------- -----
+
+
+% Precedences 0--1 and 6--9 are reserved for specific books.
+
+\definelocatortype{term}{\page\notext}{2.3}
+ {, |}{\bold{~P}|\bold{~P--~Q}|, }{. |}
+\definelocatortype{biblio}{\page\notext}{2.5}
+ {, |}{~P|~P--~Q|, }{. |}
+\definelocatortype{cite}{\page\notext}{2.5}
+ {, |}{~P|~P--~Q|, }{. |}
+\definelocatortype{page}{\page\notext}{2.5}
+ {, |}{~P|~P--~Q|, }{. |}
+\definelocatortype{figure}{\page\notext}{2.7}
+ {, |}{~P\+\emph{f}|~P--~Q\+\emph{f}|, }{. |}
+\definelocatortype{glossary}{\page\notext}{2.7}
+ {, |}{~P\+\emph{g}|~P--~Q\+\emph{g}|, }{. |}
+\definelocatortype{note}{\page\notext}{2.8}
+ {, |}{~P\+\emph{n}|~P--~Q\+\emph{n}|, }{. |}
+\definelocatortype{sidebar}{\page\notext}{2.7}
+ {, |}{~P\+\emph{s}|~P--~Q\+\emph{s}|, }{. |}
+\definelocatortype{table}{\page\notext}{2.7}
+ {, |}{~P\+\emph{t}|~P--~Q\+\emph{t}|, }{. |}
+\definelocatortype{see}{\nopage\text}{3}
+ {. |\See\ }{~T||; }{. |}
+\definelocatortype{seealso}{\nopage\text}{4}
+ {. |\Seealso\ }{~T||; }{. |}
+\definelocatortype{consult}{\nopage\text}{5}
+ {. |\Consult\ }{~T||; }{. |}
+
+% Index Preparation File
+% ----- ----------- ----
+
+
+% The \produceindex command must appear before the \document command.
+
+\setflag \zindexing = \false
+
+
+\def \produceindex #1#2{% {type}{prep-file}
+ {\processdesign{\index}{#1}%
+ \immediate\openout \zwritea = #2.zzh\relax
+ \immediate\write \zwritea {root \jobname}%
+ \immediate\write \zwritea {type #1}%
+ \immediate\write \zwritea {divisions {\the\divisions}}%
+ \immediate\write \zwritea {locators {\the\locators}}%
+ \immediate\write \zwritea {\the\indexparams}%
+ \maplist{\immediate\write \zwritea {define-locator ##1}}{\zixloclist}%
+ \immediate\closeout \zwritea}%
+ \global\setflag \zindexing = \true}
+
+% Index File Handling
+% ----- ---- --------
+
+\definewrite{\zixrootfile}
+\definewrite{\zixdivfile}
+\setflag \zixdivopen = \false
+
+
+\def \zindexinit {%
+ \if \zindexing
+ \immediate\openout \zixrootfile = \jobname.zzi\relax
+ \immediate\write \zixrootfile
+ {\zcomment Raw index entry file for book `\jobname'.}%
+ \fi}
+
+\def \zindexfinal {%
+ \if \zindexing
+ \immediate\write \zixrootfile {\zcomment [end]}%
+ \immediate\closeout \zixrootfile
+ \fi}
+
+\def \zindexdivinit #1{% {division}
+ \if \zindexing
+ \immediate\openout \zixdivfile = #1.zzi\relax
+ \immediate\write \zixdivfile
+ {\zcomment Raw index entry file for book `\jobname', division `#1'.}%
+ \global\setflag \zixdivopen = \true
+ \fi}
+
+\def \zindexdivfinal {%
+ \if \zixdivopen
+ \immediate\write \zixdivfile {\zcomment [end]}%
+ \immediate\closeout \zixdivfile
+ \global\setflag \zixdivopen = \false
+ \fi}
+
+% Generate Index Entry
+% -------- ----- -----
+
+
+% This macro is called from the indexing macros generated by
+% \definelocatortype.
+
+\def \zixindex #1#2#3#4{% {locator}{level}{page-code}{text}
+ \tcounta = #2\relax
+ \if \notp{\rangep{\tcounta}{1}{3}}%
+ \error{invindexlvl}{Invalid index level '#2' specified}%
+ \tcounta = 1
+ \fi
+ \name{\zixindex\romannumeral\tcounta}{#1}{#2}{#3}{#4}}
+
+\def \zixindexi #1#2#3#4#5{%
+ \zixindexw{#1}{#2}{#3}{#4}{#5}{}{}{\noexpand\folio}}
+\def \zixindexii #1#2#3#4#5#6{%
+ \zixindexw{#1}{#2}{#3}{#4}{#5}{#6}{}{\noexpand\folio}}
+\def \zixindexiii #1#2#3#4#5#6#7{%
+ \zixindexw{#1}{#2}{#3}{#4}{#5}{#6}{#7}{\noexpand\folio}}
+
+\catcode"B8 = \catother
+
+\gdef \zixindexw #1#2#3#4#5#6#7#8{% {locator}{level}{page-code}{text}
+ % {heading1}{heading2}{heading3}{page}
+ \if \notp{\zindexing}%
+ \warning{notindexing}{An indexing command was encountered,
+ but no \string\produceindex}%
+ \fi
+ \zbeginhidewrite
+ \def \zhdx {#5}%
+ \def \zhdy {#6}%
+ \def \zhdz {#7}%
+ \def \ztxt {#4}%
+ \edef \znext {#1^^b8%
+ #2^^b8%
+ \expandafter\zdefof \meaning\zhdx\zmark^^b8%
+ \expandafter\zdefof \meaning\zhdy\zmark^^b8%
+ \expandafter\zdefof \meaning\zhdz\zmark^^b8%
+ #3^^b8%
+ #8^^b8%
+ \expandafter\zdefof \meaning\ztxt\zmark}%
+ \write \if \zixdivopen \zixdivfile \else \zixrootfile \fi
+ \expandafter{\znext}%
+ \if \vmodep \repeatpenalty \fi % In case glue follows write.
+ \zendhidewrite}
+
+\catcode"B8 = \catinvalid
+
+% Discussion of Index Formatting
+% ---------- -- ----- ----------
+
+
+% An index is formatted inside an index block, which is more or less
+% like a text block. Within the index block are occurences of the
+% \indexentry macro, one for each entry. In addition, the
+% \alphabreak macro can be used to produce breaks preceding the `A'
+% entries, `B' entries, etc.
+%
+% In an index block, parts 4 and 5 of the mark are used to remember
+% index entries so they can be carried forward to subsequent columns
+% or pages. The mark is used as follows:
+%
+% Part Subpart Usage
+% 4 1 Boolean, true if in the midst of a first-level entry.
+% 4 2 The first-level entry text.
+% 5 1 Boolean, true if in the midst of a second-level entry.
+% 5 2 The second-level entry text.
+
+% Index Block
+% ----- -----
+
+
+\defineblock{\index}{\endindex}{\false}{}
+
+%~block index Type
+% \def \alphaformat ##1{...} % Alpha break formatter.
+% \bodyfont = {\size\style} % Body font.
+% \clubpenalty = penalty % Club penalty is often different.
+% \columngutter = glue % Column gutter.
+% \divisions = {...} % Which divisions to include.
+% \leftindent = glue % Left indentation.
+% \locators = {...} % Which locators to include.
+% \indexparams = {...} % Parameters for index generator.
+% \parhang = glue % Paragraph hang.
+% \parindent = dimen % Paragraph indent.
+% \parrag = dimen % Paragraph raggedness.
+% \parskip = glue % Paragraph skip.
+% \position = {...} % Position and number of columns.
+% \rightindent = glue % Right indentation.
+%~end
+
+\definetoks{\locators}
+\definetoks{\indexparams}
+
+\definecount{\previndexlevel}{0}
+\definecount{\zixcols}{0}
+
+
+\def \index #1{% {type}
+ \blockcantbein{\index}{\index}%
+ \beginblockscope{index}%
+ \global\increment \indexdepth
+ \clubpenalty = \breakallowed %~default soft
+ \parskip = 0pt %~default soft
+ \processdesign{\index}{#1}%
+ \global\increment \indexnumber
+ \def \zixtype {#1}%
+ \zixparsepos
+ \indexformat}
+
+\def \indexformat {%
+ \the\bodyfont
+ \alterindentation{\leftindent}{\rightindent}%
+ \setparrag{\parrag}%
+ \setpagecolumns{\zixpageuse}{\the\zixcols}{\columngutter}%
+ \everycolumn = {\zixcarryover}%
+ \begingroup
+ \let \zfullcolumnbreak = \fullcolumnbreak
+ \let \fullcolumnbreak = \indexbreak
+ \let \shortcolumnbreak = \indexbreak
+ \global\previndexlevel = 0\relax}
+
+\def \endindex {%
+ \endgraf % End last entry.
+ \vbox{}% % Force start of column if not already.
+ \endgroup
+ \clearindexmarks
+ \everycolumn = {}%
+ \setpagecolumns{\usetextmeasure}{1}{0pt}%
+ \global\decrement \indexdepth
+ \endblockscope{index}}
+
+\def \zixparsepos {%
+ \zixcols = 1
+ \let \oneup = \relax
+ \def \twoup {\zixcols = 2}%
+ \def \threeup {\zixcols = 3}%
+ \def \zixpageuse {\usetextmeasure}%
+ \let \textarea = \relax
+ \def \typearea {\def \zixpageuse {\usetypewidth}}%
+ \let \leftmargin = \typearea
+ \the\position}
+
+% Index Entries
+% ----- -------
+
+
+\setflag \zixbreak = \false
+
+
+\def \indexentry #1#2#3{% level{heading}{locators}
+ \endgraf
+ \ifcase #1%
+ \or % Level 1 heading:
+ \clearindexmarks
+ \zixmaybebreak
+ \hangindent = \parhang \hangafter = 1
+ {\name{\index\zixtype entryiformat}{#2\setmarkinfo{4}{\true}{#2}}{#3}}%
+%%% \setmarkinfo{4}{\true}{#2}%
+ \or % Level 2 heading:
+ \setmarkinfo{5}{\false}{}%
+ \zixmaybebreak
+ \hangindent = \parhang \hangafter = 1
+ {\name{\index\zixtype entryiiformat}{#2\setmarkinfo{5}{\true}{#2}}{#3}}%
+%%% \setmarkinfo{5}{\true}{#2}%
+ \or % Level 3 heading:
+ \zixmaybebreak
+ \hangindent = \parhang \hangafter = 1
+ {\name{\index\zixtype entryiiiformat}{#2}{#3}}%
+ \fi
+ \global\previndexlevel = #1\relax}
+
+\def \alphabreak #1{% {text}
+ \endgraf
+ \clearindexmarks
+ \zixmaybebreak
+ \alphaformat{#1}%
+ \endgraf}
+
+\def \indexbreak {%
+ \setflag \zixbreak = \true}
+
+\def \clearindexmarks {%
+ \setmarkinfo{4}{\false}{}%
+ \setmarkinfo{5}{\false}{}}
+
+\def \zixmaybebreak {%
+ \if \zixbreak
+ \zfullcolumnbreak
+ \setflag \zixbreak = \false
+ \fi}
+
+
+% This macro is invoked at the beginning of each column to perform
+% any first- and second-level entry carryovers. It only includes
+% carryovers on the first column of versos.
+
+\def \zixcarryover {%
+ \if \andp{\evenpagep}{\firstcolumnp}%
+ {\setflag \znext = {\markinfo{\bottommark}{4}{1}}%
+ \if \znext
+ \hangindent = \parhang \hangafter = 1
+ \name{\index\zixtype carryiformat}{\markinfo{\bottommark}{4}{2}}%
+ \setflag \znext = {\markinfo{\bottommark}{5}{1}}%
+ \if \znext
+ \hangindent = \parhang \hangafter = 1
+ \name{\index\zixtype carryiiformat}{\markinfo{\bottommark}{5}{2}}%
+ \fi
+ \endgraf
+ \tdimena = \zoutputcoldepth % Compensate for depth of
+ \advance \tdimena by -\prevdepth % previous column v. depth
+ \kern \tdimena % of carryover line(s).
+ \fi}%
+ \fi}