From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- web/webfiles/webfiles.sty | 1002 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1002 insertions(+) create mode 100644 web/webfiles/webfiles.sty (limited to 'web/webfiles/webfiles.sty') diff --git a/web/webfiles/webfiles.sty b/web/webfiles/webfiles.sty new file mode 100644 index 0000000000..b39a8a2d33 --- /dev/null +++ b/web/webfiles/webfiles.sty @@ -0,0 +1,1002 @@ +%% +%% This is file `webfiles.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% webfiles.dtx (with options: `main') +%% Package for inclusion of CWEB and Spidery WEB programs in +%% LaTeX Documents. + +%% +%% $Id: webfiles.dtx,v 2.1 2002/03/05 10:38:14 potse Exp $ +%% + +\begingroup + \catcode`\$=9 % ignore $ + \gdef\xwebMajorNr{1.0.} + \def\setversion#1:#2.#3:{\xdef\xwebVersion{\xwebMajorNr #3}} + \setversion $Revision: 2.1 $: + \def\setdate#1: #2/#3/#4#5#6:#7:#8;{\gdef\xwebDate{#2/#3/#4#5}} + \setdate $Date: 2002/03/05 10:38:14 $; + \newwrite\vf \immediate\openout\vf=version.tex + \immediate\write\vf{\xwebVersion}\immediate\closeout\vf +\endgroup +\catcode`\@=11 +\chardef\xwebCatUsCode=\catcode`\_ % top level macro file! +\catcode`\_=11 % Catcode letter +\chardef\xwebCatEscape=0 +\chardef\xwebCatOpen=1 +\chardef\xwebCatClose=2 +\chardef\xwebCatIgnore=9 +\chardef\xwebCatLetter=11 +\chardef\xwebCatOther=12 +\chardef\xwebCatActive=13 +\ProvidesPackage{webfiles} +\begingroup + \typeout{LaTeX package `webfiles', version \xwebVersion, \xwebDate} +\endgroup +\ifx \section\undefined + \PackageError{webfiles}{`webfiles' is a package, not a class}{% + webfiles is not a document class, but only a package. + Please adapt your documentclass tag appropriately. + I.e., write \MessageBreak + \protect\usepackage{webfiles} instead of + \protect\documentclass{webfiles}.} +\fi +\newif\ifxweb_GlobalIndex \newif\ifxwebIndex +\newif\ifxweb_GlobalRef \newif\ifxwebRef +\newif\ifxweb_GlobalRagged \newif\ifxwebRagged +\newif\ifxweb_GlobalOC +\newif\ifxweb_GlobalHideFormats \newif\ifxwebHideFormats +\newif\ifxweb_GlobalCon \newif\ifxwebCon +\DeclareOption{index}{\xweb_GlobalIndextrue} +\DeclareOption{noindex}{\xweb_GlobalIndexfalse} +\DeclareOption{reflist}{\xweb_GlobalReftrue} +\DeclareOption{noreflist}{\xweb_GlobalReffalse} +\DeclareOption{raggedbottom}{\xweb_GlobalRaggedtrue} +\DeclareOption{flushbottom}{\xweb_GlobalRaggedfalse} +\DeclareOption{onlychanges}{\xweb_GlobalOCtrue} +\DeclareOption{allsections}{\xweb_GlobalOCfalse} +\DeclareOption{nocon}{\xweb_GlobalConfalse} +\DeclareOption{contents}{\xweb_GlobalContrue} +\DeclareOption{hideformats}{\xweb_GlobalHideFormatstrue} +\DeclareOption{showformats}{\xweb_GlobalHideFormatsfalse} + +\newcount\xweb_hypertype +\newcount\xweb_GlobalHypertype +\DeclareOption{hyperref}{\xweb_GlobalHypertype=1} +\DeclareOption{pdftex}{\xweb_GlobalHypertype=2 \input pdfcolor} +\DeclareOption{nohype}{\xweb_GlobalHypertype=0} + +\newcounter{xwebLopDepth} \setcounter{xwebLopDepth}{9} +\newcounter{xwebOutlineDepth} \setcounter{xwebOutlineDepth}{9} +\DeclareOption{nofiles}{\c@xwebLopDepth=-9} +\DeclareOption{writefiles}{\c@xwebLopDepth=9} +\ExecuteOptions{index,reflist,raggedbottom,allsections,% + contents,showformats,nohype,writefiles} +\let\xweb_UserBindings=\relax +\let\xweb_DocLayout=\relax +\def\xweb_documentation{% + \xweb_UserBindings + \xweb_DocLayout} +\def\xweb_Rprogram{% + \xweb_CweaveBindings} +\def\xweb_program{% + \xweb_CweaveBindings + \xweb_ProgramLayout} +\def\xweb_tex{% + \xweb_UserBindings} +\def\xweb_CR{% + \xweb_CweaveBindings + \xweb_DocLayout} +\newtoks\xweb_undefined +\newtoks\xweb_ToRestore +\def\xweb_rebind{% + \xweb_undefined{}% + \xweb_ToRestore{}% + \xweb_DoRebind + } +\def\xweb_DoRebind#1#2{% + \ifx #1\stop + \let\next\relax + \else + \xweb_SaveBinding #2% + \let #2=#1% + \let\next\xweb_DoRebind + \fi + \next + } +\def\xweb_SaveBinding#1{% + \ifx #1\undefined + \xweb_undefined \expandafter{\the\xweb_undefined #1}% + \else + \expandafter\let \csname xweb_s_\string#1\endcsname =#1% + \xweb_ToRestore \expandafter{\the\xweb_ToRestore #1}% + \fi + } +\def\xweb_RestoreBindings{% + \expandafter\xweb_undefine \the\xweb_undefined \stop + \xweb_undefined{}% + \expandafter\xweb_RestoreBinding \the\xweb_ToRestore \stop + \xweb_ToRestore{}% + } +\def\xweb_undefine#1{% + \ifx #1\stop + \let\next\relax + \else + \let#1\undefined + \let\next\xweb_undefine + \fi + \next + } +\def\xweb_RestoreBinding#1{% + \ifx #1\stop + \let\next\relax + \else + \expandafter\let \expandafter#1\csname xweb\string#1\endcsname + \expandafter\let \csname xweb_s_\string#1\endcsname \undefined + \let\next\xweb_RestoreBinding + \fi + \next + } +\def\xweb_anchor{xwebmod:\xwebJobname:\arabic{xwebModule}} +\def\xweb_SetupHrefs{ + \ifnum\xweb_hypertype=0 + \def\xweb_hlink##1{##1} + \def\xweb_htarget##1{##1} + \else\ifnum\xweb_hypertype=1 + \def\xweb_hlink##1{\hyperlink{\xweb_anchor}{##1}} + \def\xweb_htarget##1{\hypertarget{\xweb_anchor}{##1}} + \else\ifnum\xweb_hypertype=2 + \def\xweb_hlink##1{\xweb_pdflink{\xweb_anchor}{##1}} + \def\xweb_htarget##1{\xweb_pdftarget{\xweb_anchor}{##1}} + \else\PackageError{webfiles}{This can't happen.}{% + this may be a bug in the webfiles package} + \fi\fi\fi} +\xweb_SetupHrefs +\def\xwebPDFOutline#1#2{{% + \edef\tmpnr{#1}% + \edef\name{#2}% + \c@xwebModule=\tmpnr\relax + \ifnum\xweb_hypertype=2 + \edef\anchor{\xweb_anchor} + \pdfoutline goto name{\anchor}{#1 \name} + \fi}} + \def\xweb_pdflink#1#2{% + \pdfannotlink + attr{/Border [0 0 0]} + goto name{#1} + \Blue #2\Black + \pdfendlink} + \def\xweb_pdftarget#1#2{ + \smash{\raise\baselineskip\hbox to 0pt{\pdfdest name{#1} fith}} + #2} +\def\xwebLapStar{\rlap{*}} +\newcount\xwebGroupLevel +\newcounter{xwebSecNoEject} + \setcounter{xwebSecNoEject}{3} +\newcounter{xwebModule} +\newif\ifon % determines if the section is `on' +\def\onmaybe{\let\ifon=\maybe} % analogous to \ontrue +\let\maybe=\iftrue % initial meaning; the user can say "\let\maybe=\iffalse" +\def\xweb_PrepareSection#1{% + {\xdef\secstar{#1}% + \let\*=\empty% remove \* from the number + \xdef\xweb_secno{#1}} + \ifx\xweb_secno\secstar % if they are the same; i.e.: + \onmaybe % if there was no star in #1 + \xdef\xweb_star{}% + \else + \ontrue + \xdef\xweb_star{*}% + \fi + \setcounter{xwebModule}{#1}% global set! + \xweb_documentation +} +\def\thexwebModule{\arabic{xwebModule}} +\newbox\xweb_ModBox +\newif\ifxweb_FirstModule \xweb_FirstModulefalse +\newenvironment{xwebModule}{% + \ifxweb_FirstModule + \ifxwebCon\xwebContents{\xwebJobname}\fi + \global\xweb_FirstModulefalse + \openout\xweb_cont=\xwebJobname.con + \write\xweb_cont{\catcode `\noexpand\@=11\relax}% + \fi + \ifxwebRagged\vfil\penalty-200\vfilneg% (TeXbook p.353) + % (this is a \filbreak without a \par) + \else\penalty-200\fi + %\setbox\xweb_ModBox=\vbox\bgroup + \edef\@currentlabel{\thexwebModule} + \par\bigskip + \everypar{% + \if@noskipsec% + \global\@noskipsecfalse% + \everypar{\penalty-100}% + \fi} + \@noskipsectrue + \mbox{}\hspace{-\parindent}% + \xwebModuleHook + \xweb_htarget{\textbf{\thexwebModule.}\xweb_star}% typeset module number + \hskip 1em plus0.1em minus 0.1em% + }{%\egroup\unvbox\xweb_ModBox + } +\def\xwebModuleHook{} +\def\xwebMainSecSkip{\clearpage} +\def\N#1#2#3.{% + \ifon\end{xwebModule}\fi + \global\xwebGroupLevel #1 % <-- space!! + { \let\*=\empty% + \xdef\xweb_secno{#2}% get the section number + }% + \ifnum\xweb_secno>1 + \ifnum \xwebGroupLevel<\c@xwebSecNoEject + \xwebMainSecSkip + \fi + \fi + \message \expandafter{*\xweb_secno}% + \xweb_PrepareSection{#2} + \ifon + \def\xweb_ModTitle{#3}% + \begin{xwebModule}{\textbf{#3.}}% title + \hskip 1em plus.1em minus.1em% + \ifnum\c@xwebLopDepth > #1% + \addcontentsline{lop}{starred}{% + \protect\global\xwebGroupLevel #1 % space after #1 ! + {\thexwebModule.}~{#3}}% + { \let\protect\@unexpandable@protect + \edef\next{\write\xweb_cont{% + \ZZ{#3}{#1}{\xweb_secno}{\thepage}}}% + \next + }% write "\ZZ{title}{depth}{sec}{page}" to .con file + \fi + \ifnum\c@xwebOutlineDepth > #1% + \xwebPDFOutline{\xweb_secno}{#3}% args: nr, title + \fi +} +\def\M#1{% + \ifon\end{xwebModule}\fi + \xweb_PrepareSection{#1}% + \ifon\begin{xwebModule}% + \ifnum\c@xwebLopDepth>9% + \addcontentsline{lop}{xwebsection}{% + \protect\global\xwebGroupLevel 4 \thexwebModule.}% + { \let\protect\@unexpandable@protect + \edef\next{\write\xweb_cont{% + \ZZ{}{4}{#1}{\thepage}}}% + \next + }% write "\ZZ{title}{depth}{sec}{page}" to .con file + \fi + } +\def\xwebTocName{Contents of \xwebJobname} +\def\xwebLopName{List of Programs} +\ifx\listofprograms\undefined + \ifx \chapter\undefined + \def\listofprograms{\section*{\xwebLopName\@mkboth + {\uppercase{\xwebLopName}}{\uppercase{\xwebLopName}}}\@starttoc{lop}} + \else + \newcommand{\listofprograms}{\chapter*{\xwebLopName\@mkboth + {\uppercase{\xwebLopName}}{\uppercase{\xwebLopName}}}\@starttoc{lop}} + \fi +\fi +\def\l@program#1{% + \xwebGroupLevel\z@ % default value of group level + \begingroup + \let\numberline\@gobble % width not known yet + \setbox\z@ \hbox{#1}% + \endgroup + \xweb_TTLopLine{#1}% +} +\def\l@xwebSection#1{ + \xwebGroupLevel\z@ % default value of group level + \begingroup + \let\numberline\@gobble % width not known yet + \setbox\z@ \hbox{#1}% + \endgroup + \xweb_NormalTocLine{#1}% + } +\newdimen\xwebLopIndent + \xwebLopIndent=2em +\newcount\xwebLopIndentMaxLevel + \xwebLopIndentMaxLevel=4 % group level <= max level + \def\l@starred#1{% % page will be processed later + \xwebGroupLevel\z@ % default value of group level + \begingroup + \let\numberline\@gobble % width not known yet + \setbox\z@ \hbox{#1}% + \endgroup + \ifnum \xwebGroupLevel=\z@ + \let\next\xweb_BoldTocLine + \else + \let\next\xweb_NormalTocLine + \fi + \next{#1}} +\def\xweb_NormalTocLine#1{% % page will be processed later + \ifnum \xwebGroupLevel>\xwebLopIndentMaxLevel + \xwebGroupLevel\xwebLopIndentMaxLevel + \fi + \advance\xwebGroupLevel\m@ne % group level -= 1 + \@dottedtocline + % \xwebGroupLevel % level (old) + 1 % level + {\xwebGroupLevel\xwebLopIndent}% % basic indent + \xwebLopIndent % numwidth + {#1}% % entry + } +\def\xweb_BoldTocLine#1{% + \@dottedtocline + 1 % level + {\xwebGroupLevel\xwebLopIndent}% % basic indent + \xwebLopIndent % numwidth + {{\bf #1}}% % entry + } +\def\xweb_TTLopLine#1#2{% + \addpenalty{\@secpenalty}% + \addvspace{2em plus\p@}% + \begingroup + \noindent + \hangindent\xwebLopIndent + \rightskip\@tocrmarg \parfillskip -\rightskip + \interlinepenalty\@M + \@tempdima\xwebLopIndent % for \numberline + {\large\bf\tt #1}\nobreak\hfill \hbox to\@pnumwidth{\hss #2}% + \par + \endgroup + \addvspace{.5em plus\p@}% + } +\def\PB#1{% + \begingroup + \xweb_Rprogram + \leavevmode + #1% + \endgroup} +\newcount\xwebProgPenalty + \xwebProgPenalty=\@secpenalty + \divide\xwebProgPenalty by 2 +\def\Y{% + \if@noskipsec + \else + \par + \penalty\xwebProgPenalty + \smallskip + \fi} +\def\xweb_CweaveBindings{% + \ifx \xweb_UserBindings\relax + \xweb_rebind + % indentation and paragraph layout + \xweb_IncrIndent \1% + \xweb_DecrIndent \2% + \xweb_ExprBreak \3% + \xweb_backup \4% + \xweb_OptBreak \5% + \xweb_break \6% + \xweb_BigBreak \7% + \xweb_noindent \8% + % C/C++ tokens + \xwebRel \?% + \xwebAddress \AND + \xwebComplement \CM + \xwebScope \DC + \xwebEquiv \E + \xwebGe \G + \xwebRightShift \GG + \xwebNe \I + \xwebAssign \K + \xwebLeftShift \LL + \xwebMod \MOD + \xwebNull \NULL + \xwebNot \R + \xwebBinOr \OR + \xwebMemberRef \PA + \xwebThis \this + \xwebOr \V + \xwebAnd \W + \xwebXor \XOR + \xwebLE \Z + \xwebPointer \MG + \xwebPointerMemberRef \MGA + \xwebDecr \MM + \xwebIncr \PP + % more tokens + \xwebId \\% + \xwebIdLetter \|% + \xwebRes \&% + \xwebString \.% %% ( ...Emacs... + \xwebStringBreak \)% + \xwebNumber \T + \xwebCombinedOp \MRL + % goes to TeX state + \xwebComment \C + \xwebCxxComment \SHC + \xwebRefName \X + % CWEB tokens + \xwebMacrosHere \ATH + \xwebDefine \D + \xwebFormat \F + \xwebIdCat \J + \xwebVerbString \vb + % cross reference tags + \xwebChangeFlag \*% + \xwebCRAlso \A + \xwebCRsAlso \As + \xwebCRCite \Q + \xwebCRsCite \Qs + \xwebCRUse \U + \xwebCRsUse \Us + \xwebCREt \ET + \xwebCRsEt \ETs + % finish the list + \stop\stop + \def\xweb_UserBindings{% + \xweb_RestoreBindings + \let\xweb_UserBindings\relax + }% + \fi + } +\newskip\xweb_SaveParskip +\newskip\xweb_SaveRightskip +\newcount\xweb_SaveSemSFCode +\newcount\xweb_SavePretolerance +\newcount\xweb_SaveHyphenpenalty +\newcount\xweb_SaveExhyphenpenalty + +\def\xweb_SaveDocLayout{% + \xweb_SaveParskip\parskip + \xweb_SaveRightskip\rightskip + \xweb_SaveSemSFCode\sfcode`; % changed by \xweb_ProgramLayout + \xweb_SavePretolerance\pretolerance + \xweb_SaveHyphenpenalty\hyphenpenalty + \xweb_SaveExhyphenpenalty\exhyphenpenalty + } +\def\xweb_RestoreDocLayout{% + \parskip\xweb_SaveParskip + \rightskip\xweb_SaveRightskip + \sfcode`;=\xweb_SaveSemSFCode + \pretolerance\xweb_SavePretolerance + \hyphenpenalty\xweb_SaveHyphenpenalty + \exhyphenpenalty\xweb_SaveExhyphenpenalty + } +\def\xweb_ProgramLayout{% + \ifx \xweb_DocLayout\relax + \xweb_LayoutInit + \xweb_SaveDocLayout + \def\xweb_DocLayout{% + \xweb_RestoreDocLayout + \let\xweb_DocLayout\relax + }% + % set new values + \parskip\z@skip + \rightskip\z@ plus 100\p@ minus 10\p@ + \sfcode`;=3000 % same stretch factor as period. + \pretolerance\@M + \hyphenpenalty 9999 % strings can be broken this way + \exhyphenpenalty\@M + \fi + } +\newdimen\xwebIndentUnit \xwebIndentUnit=1em +\newdimen\xweb_indent +\newbox\xweb_bak % backspace one unit +\newbox\xweb_bakk % backspace two units +\def\xweb_LayoutInit{% + \global\setbox\xweb_bak \hbox to -1\xwebIndentUnit{}% + \global\setbox\xweb_bakk \hbox to -2\xwebIndentUnit{}% + \global\let\xweb_LayoutInit\relax + } +\def\B{% + \if@noskipsec \hskip 1em \fi + \xweb_program + \xweb_indent 3\xwebIndentUnit \hangindent\xweb_indent + \ifvmode + \if@noskipsec + \indent % add an empty documentation part + \else + \noindent \kern\xwebIndentUnit + \fi + \fi +} +\def\xweb_break{% % forced break, between statements + \ifmmode\else + \endgraf % in LaTeX it isn't sure what \par is really... + \noindent + \hangindent\xweb_indent \kern\xweb_indent + \copy\xweb_bakk % go back to basic indentation + \ignorespaces + \fi + } +\def\xweb_OptBreak{% % optional break between statements + \hfil \penalty\m@ne + \hfilneg \kern .5em \kern 2\xwebIndentUnit % discarded on line break + \copy\xweb_bakk + \ignorespaces + } +\def\xweb_BigBreak{% % forced break and a little extra space + \Y + \xweb_break + } +\def\xweb_ExprBreak#1{% % break with penalty #1 * 10 + \hfil \penalty#10 + \hfilneg % discarded on line break + } +\def\xweb_IncrIndent{% + \global\advance\xweb_indent\xwebIndentUnit + \hangindent\xweb_indent + } +\def\xweb_DecrIndent{\global\advance\xweb_indent -\xwebIndentUnit} +\def\xweb_backup{\copy\xweb_bak} +\def\xweb_noindent{% % no indentation + \hskip -\xweb_indent \hskip 2\xwebIndentUnit + } +\let\xwebAnd=\land % logical and, && +\let\xwebEquiv=\equiv % equiv sign, for == +\let\xwebGe=\ge % greater or equal +\let\xwebLE=\le % less or equal +\let\xwebNe=\ne % unequal, != +\let\xwebNull=\Lambda % NULL pointer +\let\xwebNot=\lnot % logical not, ! +\let\xwebOr=\lor % logical or, || +\let\xwebXor=\oplus % bitwise exclusive or, ^ +\font\teni=cmmi10 +\font\sevensy=cmsy7 + +\newbox\xweb_pointer % pointer to struct component, -> +\setbox\xweb_pointer=\hbox{\kern-2pt\lower3pt\hbox{\teni\char'176}\kern1pt} + +\newbox\xweb_decr % decrement, -- +\setbox\xweb_decr=\hbox{% + \kern .5pt + \raise 1pt \hbox{\sevensy\char0 \kern-1pt\char0}% + \kern .5pt + } +\newbox\xweb_incr % increment, ++ +\setbox\xweb_incr=\hbox{% + \kern .05em + \raise .1em \hbox{$\scriptstyle {+}\kern -.1em{+}$}% + \kern .05em + } +\mathchardef\xwebAddress="2026 % `&', as binary op +\let\xwebAssign== % assignment +\let\xwebBinOr=\mid % binary or +\def\xwebComplement{{\sim}} % `~', as ordinary symbol +\def\xwebDecr{\copy\xweb_decr} % decrement +\def\xwebIncr{\copy\xweb_incr} % increment +\let\xwebLeftShift=\ll % left shift, << +\def\xwebMod{\mathbin{\hbox{\footnotesize\rm\%}}} % modulo/remainder, % +\def\xwebMemberRef{\mathbin{.*}} % ptr to member (on object) +\def\xwebPointer{\copy\xweb_pointer} +\def\xwebPointerMemberRef{\mathbin{\xwebPointer*}} % ptr to member (on ptr) +\def\xwebRel{\mathrel?} % relation operator +\let\xwebRightShift=\gg % right shift, >> +\def\xwebScope{\kern.1em{::}\kern.1em} % scope resolution + +\def\xwebThis{\xwebRes{this}} % reserved identifier `this' +\def\xwebCombinedOp#1{\mathrel{\let\K==#1}} % eg, += operator +\def\xwebId#1{\hbox{\it#1\/\kern.05em}} % identifier, more than one char +\def\xwebIdLetter#1{\hbox{$#1$}} % identifier, one letter +\def\xwebRes#1{% % reserverd words and type names + \hbox{\bf + \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}% + #1\/\kern .05em + }% + } +\def\xwebString#1{% + \hbox{\tt + \xweb_StringSetup + #1\kern .05em + }% + } +\def\xweb_StringSetup{% + \chardef\ =`\ % % <-- two spaces ! + \chardef\&=`\& + \chardef\\=`\\ + \chardef\^=`\^ + \chardef\_=`\_ + \chardef\{=`\{ + \chardef\}=`\} + \chardef\~=`\~ + \def\`{`}% + } +\def\xwebStringBreak{\discretionary{\hbox{\tt\char`\\}}{}{}} +\def\xweb_oct{\hbox{$^\circ$\kern-.1em\it\aftergroup\?\aftergroup}} +\def\xweb_hex{\hbox{$^{\scriptscriptstyle\#}$\tt\aftergroup}} + +\def\xwebNumber#1{% % octal, hex, or decimal constant + \hbox{% + $% + \def\?{\kern.2em}% + \def\$##1{\egroup\sb{\,\rm##1}\bgroup}% suffix to constant + \def\_{\cdot 10^{\aftergroup}}% power of ten (via dirty trick) + \let\~\xweb_oct \let\^\xweb_hex + {#1}% + $}% + } +\def\xwebComment#1{% + \5% % 0.5em will be discarded on line break + \hskip 1.5em + $/\ast\,$% + {\xweb_tex + \xwebCommentHook + #1% + }% + $\,\ast/$% + } +\let\xwebCommentHook\relax +\let\xwebCxxComment\xwebComment +\def\xwebIdCat{\xwebString{@\&}} +\def\xwebMacrosHere{% + \begingroup + \def\xwebRefNumber##1{}% + \xwebRefName :\xwebRefMacrosHere\X + \endgroup + } +\def\xwebRefMacrosHere{Preprocessor Definitions} +\def\xwebVerbString#1{{\fboxsep\tw@\p@ \fbox{\xwebString{#1}}}} +\def\xwebRefName#1:#2\X{% + \ifmmode \gdef\xweb_ToggleText{\null$\null}% + \else \let\xweb_ToggleText\relax + \fi + \xweb_ToggleText + $\langle\,${\xweb_tex \xweb_CheckDot{#2}\xwebRefNumber{#1}}$\,\rangle$% + \xweb_ToggleText + } +\def\xwebRefNumber#1{% + {\reset@font \footnotesize \kern .5em% + \xwebSetModNrList#1.}} +\def\xwebSetModuleNumber#1{{\edef\tmpnr{#1}% + \c@xwebModule=\tmpnr\relax + \xweb_hlink{\thexwebModule}}} +\newtoks\xweb_toksA +\newtoks\xweb_toksB +\newtoks\xweb_toksC +\newtoks\xweb_toksD +\newcount\xweb_countA +\xweb_countA=0 +\def\xweb_AddTokens#1#2{% + \edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} +\def\xweb_adn#1{\xweb_AddTokens{\xweb_toksC}{#1}% + \global\xweb_countA=1\let\next=\maketoks} +\def\xweb_poptoks#1#2|ENDTOKS|{% + \let\first=#1\xweb_toksD={#1}\xweb_toksA={#2}} +\def\maketoks{% + \expandafter\xweb_poptoks\the\xweb_toksA|ENDTOKS| + \ifx\first0\xweb_adn0 + \else\ifx\first1\xweb_adn1 \else\ifx\first2\xweb_adn2 + \else\ifx\first3\xweb_adn3 \else\ifx\first4\xweb_adn4 + \else\ifx\first5\xweb_adn5 \else\ifx\first6\xweb_adn6 + \else\ifx\first7\xweb_adn7 \else\ifx\first8\xweb_adn8 + \else\ifx\first9\xweb_adn9 + \else + \ifnum0=\xweb_countA\else\xweb_makenote\fi + \ifx\first.\let\next=\xweb_tdone\else + \let\next=\maketoks + \xweb_AddTokens{\xweb_toksB}{\the\xweb_toksD} + \ifx\first,\xweb_AddTokens{\xweb_toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next +} +\def\xweb_makenote{\xweb_AddTokens{\xweb_toksB}% + {\noexpand\xweb_TagSec{\the\xweb_toksC}}% + \xweb_toksC={}\global\xweb_countA=0} +\def\xweb_tdone{\edef\st{\global\noexpand\xweb_toksA={\the\xweb_toksB}}\st} +\def\xweb_TagSec#1{\xwebSetModuleNumber{#1}} +\def\xwebSetModNrList#1.{% + \setbox0=\hbox{\xweb_toksA={#1.}\xweb_toksB={}\maketoks}% + \the\xweb_toksA} +\def\xweb_CheckDot#1{% + \begingroup + \let\.\@gobble + \let\PB\relax + \expandafter\def \expandafter\next \expandafter{#1}% + \ifx \next\empty + \gdef\next##1{\xwebString}% + \else + \global\let\next\relax + \fi + \endgroup + \next #1 + } +\def\xwebDefine{\xweb_macro{\#define}} +\def\xwebFormat\\#1\\#2\par{\ifxwebHideFormats\else + \xweb_macro{format}\\{#1} \\{#2}\par\fi} +\def\xweb_macro#1{% + \global\advance\xweb_indent \tw@\xwebIndentUnit + \xweb_IncrIndent + \xwebRes{#1 }% % <-- blank! + } +\def\xwebNumberListHangindent{2em} +\def\xwebCrossRef#1#2.{% + \par\smallskip% (= \Y) + \xweb_CR% + \begingroup% + \reset@font \footnotesize% + \noindent \hangindent\xwebNumberListHangindent% + #1~\xwebSetModNrList #2..\par% + \endgroup% + }% +\def\xwebCRAlso{\xwebCrossRef{See also section}} +\def\xwebCRsAlso{\xwebCrossRef{See also sections}} + +\def\xwebCRCite{\xwebCrossRef{This code is cited in section}} +\def\xwebCRsCite{\xwebCrossRef{This code is cited in sections}} + +\def\xwebCRUse{\xwebCrossRef{This code is used in section}} +\def\xwebCRsUse{\xwebCrossRef{This code is used in sections}} +\let\xwebChangeFlag=* +\def\xwebCREt{ and~} +\def\xwebCRsEt{, and~} +\newif\ifxweb_idxEntries +\newif\ifxweb_scnEntries +\newread\xweb_TmpFile +\def\xweb_HasEntries#1{% + \openin\xweb_TmpFile \xwebJobname.#1\relax + \ifeof \xweb_TmpFile + \let\next\@defpar + \message{No #1 file present for \xwebJobname !} + \else + \read\xweb_TmpFile to \next + \fi + \csname xweb_#1Entries% + \ifx \next\@defpar false% + \else true% + \fi + \endcsname + \closein\xweb_TmpFile + } +\newwrite\xweb_cont +\let\ZZ=\let % now you can \write the control sequence \ZZ +\def\xweb_contentsline#1#2#3#4{% + \ifnum#2=0 \smallbreak\fi + \hbox to \textwidth{\xweb_consetup{#2}#1 + \rm\leaders\hbox to .5em{.\hfil}\hfil\ % + \xwebSetModuleNumber{#3} + \hbox to3em{\hss#4}}} +\def\xweb_consetup#1{\ifcase#1 \bf % depth -1 (@**) + \or % depth 0 (@*) + \or \hskip2em % depth 1 (@*1) + \or \hskip4em % depth 2 (@*2) + \or \hskip6em % depth 3 (@*3) + \or \hskip8em % depth 4 (@*4) + \or \hskip10em % depth 5 (@*5) + \else \hskip12em \fi} % depth 6 or more +\def\xwebContents#1{ + \def\readcontents{\IfFileExists{#1.con}{\input #1.con}{}} + \begingroup + \xwebContentsTop + \ifnum\xweb_hypertype=2 + \pdfdest name{#1:contents} fith + \pdfoutline goto name{#1:contents}{#1} + \fi + \hbox to \textwidth{\hfil + \xwebSectionName\hbox to3em{\hss \xwebPageName}} + \let\ZZ=\xweb_contentsline + \readcontents\relax % read the contents info + \xwebContentsBot % print the contents page(s) and terminate + \endgroup +} +\def\xwebSectionName{Section} +\def\xwebPageName{Page} +\def\xwebContentsTop{\vskip.2in} +\def\xwebContentsBot{\par\bigskip} +\def\xweb_InputWebfile#1{ + \def\setname##1.##2.##3/{\gdef\xwebJobname{##1}} + \setname #1../ + \ifnum\c@xwebLopDepth > -10 % entry to the list of programs: + \addcontentsline{lop}{program}{\xwebJobname} + \fi + \def\xwebContentsTop{\centerline{\textbf{\xwebJobname}}\vskip.2in} + \def\xwebContentsBot{\par\bigskip} + \global\xweb_FirstModuletrue + \begingroup + \let\inx\relax + \let\fin\relax + \let\con\relax + \let\ch\xwebCRChanged + \input{#1} + \ifon \end{xwebModule} \fi % end the last module (if it is on). + \endgroup + % process the index and list of refinements ... + \ifxwebIndex\xweb_HasEntries{idx}% + \ifxweb_idxEntries \xwebIdIndex{\xwebJobname.idx}\fi\fi + \ifxwebRef\xweb_HasEntries{scn}% + \ifxweb_scnEntries \xwebRefList{\xwebJobname.scn}\fi\fi + % clean up: + \closeout\xweb_cont + \onfalse % don't end the last section when starting the first section of + % the next web. + \xweb_UserBindings % back to the main document +} +\def\xwebInputIndex#1{{ + \def\setname##1.##2\\{% + \edef\xwebJobname{##1} + \ifx\\##2\\% + \edef\ext{idx} + \else + \edef\ext{\chop##2\\}% + \fi} + \def\chop##1.\\{##1} + \expandafter\setname#1.\\ + \xwebIdIndex{\xwebJobname.\ext} +}} +\def\xwebInputReflist#1{{ + \def\setname##1.##2\\{% + \edef\xwebJobname{##1} + \ifx\\##2\\% + \edef\ext{scn} + \else + \edef\ext{\chop##2\\}% + \fi} + \def\chop##1.\\{##1} + \expandafter\setname#1.\\ + \xwebRefList{\xwebJobname.\ext} +}} +\def\ifstr#1#2#3{% + \edef\xweb_tempa{#1}% + \edef\xweb_tempb{#2}% + \ifx\xweb_tempa\xweb_tempb #3\fi + } +\def\webfile{\@ifnextchar[% + {\xweb_file}{\xweb_file[]}} +\newif\if@opt +\def\xweb_off{\let\maybe=\iffalse} +\def\xweb_on{\let\maybe=\iftrue} +\def\xweb_file[#1]#2{ + \ifxweb_GlobalIndex\xwebIndextrue\else\xwebIndexfalse\fi + \ifxweb_GlobalRef\xwebReftrue\else\xwebReffalse\fi + \ifxweb_GlobalRagged\xwebRaggedtrue\else\xwebRaggedfalse\fi + \ifxweb_GlobalOC\xweb_off\else\xweb_on\fi + \ifxweb_GlobalCon\xwebContrue\else\xwebConfalse\fi + \ifxweb_GlobalHideFormats\xwebHideFormatstrue\else + \xwebHideFormatsfalse\fi + \xweb_hypertype=\xweb_GlobalHypertype + \@for\xweb_opt:=#1\do{ + \typeout{webfiles option: \xweb_opt} + \@optfalse + \ifstr{\xweb_opt}{index}{\xwebIndextrue\@opttrue} + \ifstr{\xweb_opt}{noindex}{\xwebIndexfalse\@opttrue} + \ifstr{\xweb_opt}{reflist}{\xwebReftrue\@opttrue} + \ifstr{\xweb_opt}{noreflist}{\xwebReffalse\@opttrue} + \ifstr{\xweb_opt}{raggedbottom}{\xwebRaggedtrue\@opttrue} + \ifstr{\xweb_opt}{flushbottom}{\xwebRaggedfalse\@opttrue} + \ifstr{\xweb_opt}{onlychanges}{\xweb_off\@opttrue} + \ifstr{\xweb_opt}{allsections}{\xweb_on\@opttrue} + \ifstr{\xweb_opt}{nocon}{\xwebConfalse\@opttrue} + \ifstr{\xweb_opt}{contents}{\xwebContrue\@opttrue} + \ifstr{\xweb_opt}{hideformats}{\xwebHideFormatstrue\@opttrue} + \ifstr{\xweb_opt}{showformats}{\xwebHideFormatsfalse\@opttrue} + \ifstr{\xweb_opt}{hyperref}{\xweb_hypertype=1\@opttrue} + \ifstr{\xweb_opt}{pdftex}{\xweb_hypertype=2\@opttrue} + \ifstr{\xweb_opt}{nohype}{\xweb_hypertype=0\@opttrue} + \if@opt\else\PackageError{webfiles}{% + Unknown option for the \protect\webfile\space command + }{Possible options are: index, noindex, + reflist, noreflist, \MessageBreak + raggedbottom, flushbottom, onlychanges, + allsections,\MessageBreak + nocon, contents, hideformats, showformats, + hyperref, pdftex, nohype} + \fi + } + \xweb_SetupHrefs + \xweb_InputWebfile{#2}} +\let\cwebfile\webfile +\def\xwebCRChanged{% + \xwebCrossRef{The following sections were changed by the change file:}% + \let\*\relax + } +\newtoks\xwebIndexIntro + \xwebIndexIntro={} +\def\xwebIndexName{Index of \texttt{\xwebJobname}} +\def\xweb_IndexTop{ + \xweb_tex + \par\vskip 1cm plus 10mm minus 5mm\noindent + {\bf \xwebIndexName}%\nopagebreak\par\medskip\nopagebreak + %% skip already inserted by xweb_twocolumn env. + \edef\intro{\the\xwebIndexIntro}% % is a local def + \ifx \intro\empty + \else + \noindent\the\xwebIndexIntro\unskip + \par\medskip + \fi +} +\newif\ifxweb_multicol \xweb_multicolfalse +\IfFileExists{multicol.sty}{ + \if@twocolumn\else\xweb_multicoltrue\fi +}{} +\ifxweb_multicol + \newenvironment{xweb_twocolumn}{\begin{multicols}{2}}{\end{multicols}} +\else + \newenvironment{xweb_twocolumn}{ + \if@twocolumn\else + \columnseprule\z@ + \columnsep 35\p@ % value is from article.sty + \fi + \twocolumn% + }{ + \onecolumn} +\fi +\def\xwebJobName{noname} +\def\xweb_SetupIndex{% + \begin{xweb_twocolumn}[\xweb_IndexTop] + \ifnum\xweb_hypertype=2 + \pdfdest name{\xwebJobname:index} fith + \pdfoutline goto name{\xwebJobname:index}{Index} + \fi + % go to CR mode + \xweb_CR + \message{*index: }% % tell the user what we're doing + % paragraph layout + \begingroup + \parskip \z@ plus .5\p@ + \parindent\z@ + \rightskip \z@ plus 2.5em + \parfillskip \z@ plus .6\hsize + \tolerance\@M \hyphenpenalty\@M + % bindings + \let\I\xwebIndexEntry + \let\[\xwebIndexDeclared + \let\*\xwebLapStar +} +\def\xweb_FinishIndex{ + \endgroup + \end{xweb_twocolumn} +} +\def\xwebIdIndex#1{% + \xweb_SetupIndex + \@input{#1} + \xweb_FinishIndex +} +\def\xwebIndexEntry#1,#2.{% + \par + \hangindent\xwebNumberListHangindent + \leavevmode + \xweb_CheckDot{#1}:\quad\xwebSetModNrList #2. + } +\def\xwebIndexDeclared#1]{\underline{#1}} +\def\9#1{} +\def\xwebReflistName{List of Refinements in \texttt{\xwebJobname}} +\def\xwebRLCite{\xwebCrossRef{Cited in section}} +\def\xwebRLsCite{\xwebCrossRef{Cited in sections}} +\def\xwebRLUse{\xwebCrossRef{Used in section}} +\def\xwebRLsUse{\xwebCrossRef{Used in sections}} +\def\xweb_SetupReflist{% + \vskip 3ex plus 7ex minus 1ex + \xweb_tex + \noindent + {\bf \xwebReflistName}\nopagebreak\par\bigskip\nopagebreak + \ifnum\xweb_hypertype=2 + \pdfdest name{\xwebJobname:reflist} fith + \pdfoutline goto name{\xwebJobname:reflist} {Refs} + \fi + \xweb_CR + \message{*list of refinements: }% + % paragraph layout: like in index, but + \parfillskip\@flushglue + \begingroup % different bindings... + \def\I{\par \hangindent\xwebNumberListHangindent}% + \def\xwebCrossRef##1##2.{\quad {\reset@font\footnotesize + ##1~\xwebSetModNrList ##2..}}% + \def\Q {\xwebRLCite}% + \def\Qs{\xwebRLsCite}% + \def\U {\xwebRLUse}% + \def\Us{\xwebRLsUse}% + \let\*\xwebChangeFlag +} +\def\xwebRefList#1{% + \xweb_SetupReflist + \@input{#1} + \endgroup + } +\def\ATL{\par\noindent\bgroup\catcode`\_=12 \postATL} % print @l in limbo +\def\postATL#1 #2 {\bf letter \\{\uppercase{\char"#1}} + tangles as \tentex "#2"\egroup\par} +\def\noATL#1 #2 {} +\def\noatl{\let\ATL=\noATL} % suppress output from @l +\ProcessOptions +\ifxweb_multicol + \RequirePackage{multicol} +\fi +\catcode`\_=\xwebCatUsCode +\endinput +%% +%% End of file `webfiles.sty'. -- cgit v1.2.3