diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/calendar/calendar.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/calendar/calendar.dtx | 1975 |
1 files changed, 0 insertions, 1975 deletions
diff --git a/Master/texmf-dist/source/latex/calendar/calendar.dtx b/Master/texmf-dist/source/latex/calendar/calendar.dtx deleted file mode 100644 index 827b8752f1b..00000000000 --- a/Master/texmf-dist/source/latex/calendar/calendar.dtx +++ /dev/null @@ -1,1975 +0,0 @@ -%\iffalse -% -% File calendar.dtx -% Copyright (C) 1996, 1997 by Frank Bennett. All rights reserved. -% -% IMPORTANT NOTICE: -% You are not allowed to change this file. You may however copy -% this file to a file with a different name and then change the -% copy if (a) you do not charge for the modified code, (b) you -% acknowledge the author(s) in the new file, if it -% is distributed to others, and (c) you attach these same -% conditions to the new file. -% -% You are not allowed to distribute this file alone. You are not -% allowed to take money for the distribution or use of this file -% (or a changed version) except for a nominal charge for copying -% etc. -% -% You are allowed to distribute this file under the condition that -% it is distributed with all of its contents, intact. -% -% For error reports, or offers to help make Calendar a more powerful, -% friendlier, and altogether more thrilling package, please contact me on -% fb@soas.ac.uk -% -%<*dtx> - \ProvidesFile{calendar.dtx} -%</dtx> -%<style>\NeedsTeXFormat{LaTeX2e}[1995/06/01] -%<style>\ProvidesPackage{calendar} -%<style> [1998/01/17 18:14:52 3.1.1.1 Calendar engine (Frank Bennett)] -% \fi -% -% \def\fileversion{3.1.1.1} -% \def\filedate{1998/01/17 18:14:52} -% -% -% \iffalse -%<*driver> -\documentclass{ltxdoc} -%\usepackage[dvips]{color} -%\CodelineIndex -%\EnableCrossrefs -%\RecordChanges -\begin{document} -\OnlyDescription % Comment out for implementation details -\DocInput{calendar.dtx} -\end{document} -%</driver> -% \fi -% -% \changes{v0.01}{1996/11/10}{Initial Version} -% \changes{v0.02}{1996/11/11}{Replaced \TeX{} newcount with \LaTeXe{} -% newcounter, and changed counters accordingly.} -% \changes{v0.02}{1996/11/11} -% {Incorporated higher maths functions into an option declaration -% in the main file (was loaded from a separate file in original -% \TeX{} version.)} -% \changes{v0.03}{1996/11/12}{Complete re-draft of recursing routines, -% with documentation.} -% \changes{v0.03}{1996/11/12}{Drafting of the sort engine.} -% \changes{v0.03}{1996/11/12}{Picked up some more counters that -% hadn't been converted to \LaTeXe format.} -% \changes{v0.03}{1996/11/12}{Wholesale cutting of old recursing -% and formatting routines. The package is now a background engine; -% it knows nothing about printing anymore.} -% \changes{v0.04}{1996/11/17}{Introduction of parsing routines -% and reorganization of entire package.} -% \changes{v0.05}{1996/11/25}{Completed new parsing routines and finished -% debugging of same.} -% \changes{v0.05}{1996/11/25}{Completed sorting routines and finished -% debugging of same.} -% \changes{v0.06}{1996/11/27}{Added support for indicating a range of -% dates in an input file, and for declaring recursive entries.} -% \changes{v0.07}{1996/11/27}{Minor alterations to make the package -% work for the timesheets demo. Another alpha release.} -% \changes{v0.08}{1996/11/27}{No changes to this file; but the -% README shipped to CTAN was for Nelson Beebe's makeindex. Ah, -% the wonders of automation...} -% \changes{v0.09}{1996/11/29}{Added maths routines for weekly -% and monthly recursion. Nearly finished!} -% \changes{v0.10}{1996/11/29}{Various bug fixes.} -% \changes{v0.10}{1996/11/29}{Added routines for handling comments -% in CLD files. Added demonstration files and comments thereto.} -% \changes{v0.11}{1996/12/04}{Enhanced input and parsing routine. -% Now handles entries across multiple lines, even with par, and does -% not make characters active outside of the parsed text.} -% \changes{v0.11}{1996/12/04}{Provided a check to prevent multiple -% input of data files. Necessary to provide support for groups -% of lists.} -% \changes{v0.11}{1996/12/06}{Further work on the initial input -% code, to provide for groups of lists and groups of groups. -% This portion of the code is now complete.} -% \changes{v0.11}{1996/12/07}{Code clean-up in the date parsing -% routine; the code must be reasonably transparent if it is -% to be used as a general date parsing engine in the package.} -% \changes{v0.12}{1996/12/15}{Complete redraft commenced following the -% removal of the overword and dates code to separate -% eponymous packages. Recursive interface macro completed and -% first cut of debugging done. Released with the Thumbnail demo.} -% \changes{v1.0}{1996/12/26}{Far too many changes to document here. -% Finished through to final, hopefully stable form, and packaged -% with demonstration sub-packages for CTAN release.} -% \changes{v1.11}{1997/01/07}{Moved LoadClass declaration from -% bottom of the timesht.cls file to the top, so that margin -% adjustments would not be overwritten and options would take effect.} -% \changes{v1.11}{1997/01/07}{Added newpage to group break in timesheets style -% file.} -% \changes{v1.12}{1997/01/18}{Fixed bug in the timesheets package that often caused -% one line in any *.cld entry spanning a range of times to appear in the wrong place. -% The ending, rather than the starting minutes of the range were used to calculate -% the current time position within the timesheet. Oops. This bug was reported by Miroslav Novak.} -% \changes{v1.12}{1997/01/18}{Added code to correct another infelicity pointed -% out by Miroslav Novak; the appearance of an item description line in timesheet -% boxes where the ending time of the range for the item -% is the starting time of the range in the box.} -% \changes{v1.13}{1997/01/30}{Began work on improved -% documentation. No promises that this will happen quickly\ldots} -% \changes{v1.13}{1997/02/01}{Added color package to timesheets demo file.} -% \changes{v1.13}{1997/02/01}{Added reference to need for color package -% to documentation.} -% \changes{v1.14}{1997/02/12}{Corrected an error lurking in cal@text@init -% (which turned out to be unused code --- the error cropped up when -% the code was extracted for explicit invocation in the Monthly style) -% that swallowed all event text when color was not in force, and gave -% rise to a fatal error otherwise. Oops.} -% \changes{v1.14}{1997/02/16}{Caught initialization of blank (but -% non-empty) entries in \texttt{cal@print@format}.} -% \changes{v1.14}{1997/02/20}{Cut subpackages from this file; -% too many packages now to for this to be manageable.} -% \changes{v1.14}{1997/02/21}{Eliminated erroneous use of -% cal@read for inputting *.eve files.} -% \changes{v1.14}{1997/02/21}{Eliminated extraneous argument -% to PackageWarning.} -% \changes{v1.14}{1997/02/21}{Added comment chars to the end -% of exported *.eve file event entries.} -% \changes{v1.14}{1997/02/21}{Added initalization of exception -% list and cal@append instruction to load events drawn from -% an *.eve file into memory. We now have phases of the moon.} -% \changes{v1.14}{1997/02/21}{Not a change, but a note of a bug. -% A function such as moon.cld should be allowed to dynamically -% change a function, and have the change register in the -% theshorttext or thelongtext macros as the function recurses. -% But the moon.cld phases only change on export, not during -% the first run.} -% \changes{v1.14}{1997/02/22}{Added cal@dates@base and the -% \texttt{z} incrementing option. This gives us vertical -% date columns without much work. For use in a conference -% style package for Miroslav Novak.} -% \changes{v1.14}{1997/02/23}{Added quick but very ugly -% patch to allow non-printing text to be dropped on DVI -% at the beginning of a subgroup.} -% \changes{v1.14}{1997/03/01}{Made a number of variable assignments -% global to prevent buildup in \TeX{}'s save space. Job -% is not finished, but reliability has improved.} -% \changes{v1.14}{1997/03/01}{Merged a large number of changes -% into this ".dtx" file from the "*.sty" file.} -% \changes{v1.14}{1997/03/01}{Cut superfluous documentation -% from this file, and edited the remainder.} -% \changes{v1.15}{1997/03/08}{Fixed bug in \texttt{cal@@@print@items} -% that suppressed entries for a single time falling at the top -% of a selected range of times.} -% \changes{v1.16}{1997/05/19}{Minor changes to pass through language -% options to the \texttt{dates} package.} -% \changes{v1.17}{1997/10/18}{New public release of all styles -% and modules incorporating global bug-fixes.} -% \changes{v1.18}{1997/10/25}{Eliminated need for bogus entries -% to protect against reads past end of file. } -% \changes{v1.19}{1997/10/26}{One more cross-nesting, of \cs{cal@offset}, -% tracked down and eliminated.} -%\iffalse -% Source tree moved under RCS -% --------------------------- -% calendar.dtx,v -% Revision 3.1.1.1 1998/01/17 18:14:52 root -% Release code, checksum verified -% -% Revision 3.1 1998/01/17 16:59:04 root -% Release code -% -% Revision 2.2 1997/11/07 10:44:05 root -% Release code. -% -% Revision 2.1.1.2 1997/11/05 12:38:40 root -% Changed RAN to rAN. -% -% Revision 2.1.1.1 1997/11/04 05:06:07 root -% Development branch -% -% Revision 2.1 1997/11/01 15:14:56 bennett -% Release code. -% -% Revision 1.10 1997/11/01 14:28:10 root -% Eliminated \enditall's from the package. -% -% Revision 1.9 1997/11/01 12:56:27 root -% Added assignment to new counter \dates@range@limit. -% -% Revision 1.8 1997/10/31 21:56:23 root -% Added hardwired \dates@requiremonthtrue immediately before -% \cal@input. -% -% Revision 1.7 1997/10/29 20:06:34 bennett -% *** empty log message *** -% -% Revision 1.6 1997/10/29 17:21:40 root -% Further change affecting subgroup breaks? -% -% Revision 1.5 1997/10/29 16:52:21 root -% Moved use of subgroup@setup to the right location (oops). -% -% Revision 1.4 1997/10/29 16:39:42 root -% Added subgroup@setup to begin@subgroup, to guard against -% starting the second and later pages of a timesheet with -% the last time from the previous page. Thanks to Edward -% Czilli for reporting this bug. -% -% Revision 1.3 1997/10/29 13:47:57 root -% Restored date checking after discovering that it works -% correctly if files are extracted from RCS using the -kv -% option. -% -% Revision 1.2 1997/10/29 11:47:37 root -% Eliminated optional date specification from RequirePackage{dates} -% -% Revision 1.1 1997/10/29 08:17:52 root -% Initial revision -% -%\fi -% -% -% \title{Designer's Guide to the Calendar -% package\thanks{This file is version number -% \fileversion{}. It was last revised on -% \filedate.}} -% -% \author{Frank G. Bennett, Jr.} -% -% \maketitle -% -% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty} -% \DoNotIndex{\@flushglue,\@gobble,\@input} -% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle} -% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa} -% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue} -% \DoNotIndex{\@thanks,\@thefnmark,\@topnum} -% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin} -% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces} -% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup} -% \DoNotIndex{\cal,\csname,\def,\documentstyle,\dospecials,\edef} -% \DoNotIndex{\egroup} -% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist} -% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global} -% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn} -% \DoNotIndex{\ifcase} -% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item} -% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower} -% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing} -% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc} -% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut} -% \DoNotIndex{\strutbox} -% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt} -% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@} -% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim} -% \DoNotIndex{\catcode,\end,\escapechar,\frenchspacing,\glossary} -% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle} -% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode} -% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip} -% \DoNotIndex{\nopagebreak} -% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle} -% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb} -% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar} -% \DoNotIndex{\[,\{,\},\]} -% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode} -% \DoNotIndex{\baselineskip,\begin,\tw@} -% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q} -% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H} -% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z} -% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0} -% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_} -% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother} -% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment} -% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined} -% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc} -% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar} -% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode} -% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting} -% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf} -% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse} -% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault} -% \DoNotIndex{\bfdefault} -% \setcounter{StandardModuleDepth}{1} -% \DeleteShortVerb{\|} -% \MakeShortVerb{\"} -% -% \begin{abstract} -% \noindent This package provides tools for creating -% customized calendars using \LaTeXe. -% \end{abstract} -% -% -% \CheckSum{1460} -% -% \section{Overview and Exhortation} -% -% Think of this package as the Music Minus One -% of the scheduling trade. It provides a standard -% interface for drafting calendars, -% but leaves you in control of the style and -% content of the finished product. -% The calendar style generator included -% in this package can be -% used to create simple lists of events, as well -% as daily, weekly, monthly and yearly calendars in a variety of -% formats. Calendars can be ground into DVI, -% or can be exported in an arbitrary list or table formatting -% language such as HTML, or delimited -% ASCII text. -% While the format of calendars is -% pretty much up to you, all calendars created -% using the Calendar package inherit a number of -% useful features, among which are: -% -% \begin{itemize} -% \item Access to external lists of events -% and appointments written in a user-friendly syntax. -% \item Selective printing of long or short descriptions of -% events and appointments according to the list -% from which they originate or, in the case of appointments, -% according to their starting time. -% \item Built-in recursive entries such as "every" "monday" -% or "Every" "second" "Wednesday", governed by a range. -% \item An extensible interface within list files -% for defining calculable dates within a range -% by reference to a mathematical formula. -% \item ``Stopping'' of recursive entries by reference -% to a list of holidays. -% \item Colour-coding of lists and groups of lists -% for the readable presentation of complex schedules. -% Colours may be associated with individual lists, -% or with entire groups of lists. -% \end{itemize} -% -% On top of this, all calendar styles have a uniform -% user interface. For examples, please see the -% files included in the "styles" subdirectory -% in or near the filespace from which you retrieved -% this file. -% -% Finally, the Calendar package has the virtue of -% being chilled, if not yet completely frozen. -% While there will doubtless -% be minor bug fixes and enhancements in future -% releases, this package is intended to be a finished -% and stable platform on which to build calendar -% styles. It will not move out from underneath -% your work. And if you draft a calendar style -% and publish it on CTAN, others will be able to -% put it straight to work on their own local lists -% of events. -% -% ************ -% The documentation to this package explains how -% to define your own calendar formats. There are many -% possibilities, but here are a few ideas: -% -% \begin{itemize} -% \item Web maintainers -% can provide a current view of upcoming events formatted -% with a tabular calendar at the top, the dates of -% which are linked to events for that day. -% \item Filofax -% calendars can be produced which contain institutional -% data and personal appointments on a per-user basis. -% \item Scheduling conflicts or common free times can be identified by producing -% concordance calendars that lay the daily schedules -% of several members of staff alongside one another. -% \item Timesheets with pre-printed diary entries can be -% produced. -% \item Consolidated academic timetables can be -% produced. -% \item To simplify the maintenance of lists, a -% Web site may want to produce a forms interface -% for the distributed creation and management of lists. This -% task is greatly simplified by the fact that the -% syntax for entries is flexible and human-readable. -% \item Users at a Web site can be given direct control over -% calendar content, by running \LaTeX{} and "dvips" from a -% CGI behind a click-box and radio-button interface. -% \end{itemize} -% -% All of these applications can be supported directly -% by the package as it stands. All that is required -% is to define appropriate calendar formats. -% Classes and packages -% that define new calendar formats contain only the -% essential commands which define their structure. -% -% The source of the Calendar package and related -% files is located in -% the CTAN archives under: -% -% \begin{quote} -% "macros/latex/contrib/supported/calendar" -% \end{quote} -% -% If you design a new calendar format, please upload -% it to the CTAN "/incoming" directory at "ftp.tex.ac.uk" -% and send the site maintainers a note (see the file -% "README.uploads" for their contact details) asking -% them to place it in the "styles" subdirectory -% of the Calendar package filespace. It is best -% to send your calendar format as a "*.dtx" file, with -% documentation on how to use it (see the existing -% packages for model documentation). -% If you design a CGI or other front-end -% that calls on a style or manages -% database entries, please send that as well, for placement -% in the "tools" subdirectory. That way, anyone interested in -% using Calendar will find everything that is available in one -% place, and the utility of the package will be greatly -% enhanced. -% -% I do not have time at present to write a -% readable and well-presented guide to the style -% drafting process. If you want to draft -% your own style, your best bet is to read -% through the commentary and code of an -% existing calendar style, and modify it -% to suit your needs. -% Feel free to write me -% on "fb@soas.ac.uk" if you have any questions -% or comments. -% -%\StopEventually{\PrintIndex} -% -% \section{The Macros} -% -% The Dates and Keyval packages will be used. -% -% \begin{macrocode} -%<*style> -\DeclareOption{english}{\PassOptionsToPackage{\CurrentOption}{dates}} -\DeclareOption{german}{\PassOptionsToPackage{\CurrentOption}{dates}} -\ProcessOptions -\RequirePackage{dates}[1997/10/29] -\RequirePackage{keyval} -% \end{macrocode} -% -% \subsection{The Calendar Formatter} -% -% \begin{macro}{\newcalendar} -% \begin{macro}{\@newcalendar} -% -% This is the business end of the package. The -% calendar-defining front end is spread across -% two macros to allow us to use more than -% nine arguments. The second through ninth given -% to the first macro are stored in a macro that -% is expanded in the second. -% -% (the macro defined just above newcalendar is used -% to parse the increment field) -% -% \begin{macrocode} -\def\cal@parseincrement#1#2#{% - \def\cal@incr{#1}% - \def\cal@subgroup@setup{#2}}% -\long\def\newcalendar#1#2#3#4#5#6#7#8#9{% - \expandafter\def\csname cal@#1@bridge\endcsname{% - \def\cal@output{#2}% - \def\cal@first@weekday{#3}% - \def\cal@group@length{#4}% - \def\cal@subgroup@length{#5}% - \def\cal@item@sep@real{#6}% - \cal@parseincrement#7{}% - \def\cal@header{#8}% - \def\cal@footer{#9}}% - \@newcalendar{#1}} -% \end{macrocode} -% -% This defines the start and finish macros for an -% environment, which will be invoked using "\begin" -% and "\end". The head macro just expands the head -% matter, grabs its first and only argument to a -% variable for future reference, and invokes the -% "\dateread" command in order to read the date -% text entered as the content of the environment. -% The "\dateread" command will expire when it hits -% the "\end" at the bottom of the enviroment. -% -% \begin{macrocode} -\long\def\@newcalendar#1#2#3#4#5#6#7#8#9{% - \expandafter\def\csname#1\endcsname##1##2{% - #4% - \gdef\cal@optionslist{##1}% - \setkeys{opt}{##1}% - \gdef\cal@files{##2}% - \dateread{}}% -% \end{macrocode} -% -% The tail macro for the environment will start -% by setting up the starting and ending dates -% for our calendar. Step one is to set a subrange -% start and end (which "\dateread" sets if "to" is -% used in the date text) if none is found. The -% second step is to set the current date to be the -% start of the subrange derived from the date text, -% and generate human-readable register data for -% future reference. We then set the overall range for -% the calendar to the subrange dates. -% -% The next step is to expand the front matter given -% in the calendar definition, after which we expand -% the material contained in the second through ninth -% arguments given to the first macro. Then a series -% of other toggles and macros are defined. -% -% (We also set the date base, for the zigzag algorithm) -% -% \begin{macrocode} - \expandafter\def\csname end#1\endcsname{\relax% - \ifnum\dates@subrange@start=0% - \dates@subrange@start\dates@date% - \dates@subrange@end\dates@date% - \fi% - \global\dates@date\dates@subrange@start% - \caldate% - \cal@date@base\dates@date% - \cal@range@start\dates@subrange@start% - \cal@range@end\dates@subrange@end% - #5% - \dates@range@limit\cal@range@end% - \csname cal@#1@bridge\endcsname% - \def\cal@groupbreak{#2}% - \def\cal@subgroupbreak{#3}% - \long\def\cal@entry@sep{#6}% - \def\cal@item@init{#7}% - \def\cal@entry@init{#8}% - \long\def\cal@item@text{#9}% -% \end{macrocode} -% -% We catch colors if the color package is not loaded. -% -% \begin{macrocode} - \@ifundefined{color}% - {\let\textcolor\@gobble% - \let\colorbox\@gobble}% - {}% -% \end{macrocode -% -% -% We then input the content of the event files given -% as the argument to the environment, if any files exist -% for processing. -% -% \begin{macrocode} - \ifcat$\cal@files$% - \else% - \dates@requiremonthtrue% - \dates@requiredaytrue% - \expandafter\cal@input\cal@files,,\end% - \fi% -% \end{macrocode} -% -% Then we sort everything. -% -% \begin{macrocode} - \cal@sorts% -% \end{macrocode} -% -% We set the date to the bottom of the range again, -% and set the registers. -% -% \begin{macrocode} - \global\dates@date\cal@range@start% - \caldate% -% \end{macrocode} -% -% Finally, we produce the calendar text. -% -% \begin{macrocode} - \cal@top}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Input and Export for Event Lists} -% -% \begin{macro}{\cal@input} -% \begin{macro}{\cal@append} -% \begin{macro}{\cal@list@append} -% \begin{macro}{\cal@list@init} -% \begin{macro}{\cal@read} -% -% This is the input routine. It starts by setting -% up to loop itself. Then it checks to see if the -% list is empty, and sets up to quit if it is. -% If there is an item in the list, it first -% puts the remainder of the items onto the list for -% future reference. Then the input file is defined -% to be the first item. Then it checks to see -% if a freeze file exists. If it does, it is input, -% and the data file is ignored. The engine number -% counter is also incremented. If the file does not -% exist, we check for a list file. If one is found, -% we increment the engine counter, and turn off -% freezing --- this will be turned on in the file -% itself if a request is found there. Then we -% just input the file for scanning. We follow the -% text in the file with a meaningless entry as -% a buffer, and a command that shuts off the -% macro that gobbles up entries. -% -% \begin{macrocode} -\def\cal@check@colon#1:#2#{% - \def\dates@arg@a{#1}% - \def\dates@arg@b{#2}} -\def\cal@input#1,#2,\end{% - \ifcat$#1$% - \let\cal@input@next\relax% - \global\let\cal@files\relax% - \else% - \advance\cal@engine by 1% - \cal@check@colon#1:{}% - \ifcat$\dates@arg@b$% - \expandafter\edef\csname cal@\the\cal@engine @color\endcsname{}% - \xdef\cal@color{}% - \else% - \expandafter\dates@strip@colon\dates@arg@b% - \expandafter\edef% - \csname cal@\the\cal@engine @color\endcsname{\dates@arg@b}% - \gdef\cal@color{:\dates@arg@b}% - \fi% - \xdef\cal@input@file{\dates@arg@a}% - \let\cal@input@next\cal@input% - \xdef\cal@files{#2,,\noexpand\end}% - \IfFileExists{\cal@input@file.eve}% - {\PackageWarning{Calendar}% - {Using freeze file \cal@input@file.eve}% - \expandafter\ifx\csname\cal@input@file @cal@engine\endcsname% - \relax% - \@@input\cal@input@file.eve\relax% - \fi}% - {\IfFileExists{\cal@input@file.cld}% - {\expandafter\ifx% - \csname\cal@input@file @cal@engine\endcsname% - \relax% - \cal@dofreezefalse% - \gdef\cal@exceptionlist{}% - \expandafter\cal@read% - \@@input\cal@input@file.cld\relax{}% - \ifcal@dofreeze% - \immediate\closeout\cal@freeze@file% - \fi% - \fi}% - {\@missingfileerror{\cal@input@file}{cld}}}% - \fi% - \expandafter\edef% - \csname\cal@input@file @cal@engine\endcsname{\the\cal@engine}% - \expandafter\cal@input@next\cal@files} -\def\cal@input@next@default{\expandafter\cal@input@clone\cal@files} -% \end{macrocode} -% -% This is the handler used to put date information -% into memory and, optionally, to write data to -% a freeze file. The chain of nested conditions -% is explained step by step. -% -% \begin{macrocode} -\def\cal@append{% -% \end{macrocode} -% -% \textit{If we are looking at a list of holidays, we build -% an exceptions list only.} -% -% \begin{macrocode} - \ifcal@holidays% - \cal@except% -% \end{macrocode} -% -% \textit{Otherwise we are looking at dates for use in the calendar. -% We check first for a matching exception date, and block all -% action if one is found ("\cal@checkexception" sets the condition -% that follows).} -% -% \begin{macrocode} - \else% - \cal@checkexception% - \ifcal@useentry% -% \end{macrocode} -% -% \textit{If we are working on a range file, export to a freeze file -% is blocked.} -% -% \begin{macrocode} - \ifcal@noexport% -% \end{macrocode} -% -% \textit{We only export to a freeze file if specifically requested -% to do so. But if freezing is requested, we export all non-range -% items, regardless of the range used for the calendar.} -% -% \begin{macrocode} - \else% - \ifcal@dofreeze% - \cal@freeze% - \fi% - \fi% -% \end{macrocode} -% -% \textit{The remainder of our conditions pertain to the loading of -% data into memory. Range data is loaded, but only once, -% so we use a separate condition to block action here.} -% -% \begin{macrocode} - \ifcal@noload% - \else% -% \end{macrocode} -% -% \textit{If the current date is outside the range for -% Memory store is only performed -% for items within our overall date range for this -% calendar. Having this data in memory -% would do no affirmative harm, but it is dead weight -% since we'll not be using it.} -% -% \begin{macrocode} - \ifnum\dates@date<\cal@range@start% - \else% - \ifnum\dates@date>\cal@range@end% - \else% - \cal@list@init{events}% - \cal@list@init{appointments}\relax% -% \end{macrocode} -% -% \textit{We build separate lists for events and appointments.} -% -% \begin{macrocode} - \ifnum\dates@time@start=0% - \cal@list@append{events}% - \else% - \cal@list@append{appointments}% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi} -% \end{macrocode} -% -% This appends to the selected list type for the -% current date. It grabs the list content, if any, -% to a register. Then it defines the list to be -% itself plus the new set of details. -% -% \begin{macrocode} -\def\cal@list@append#1{% - \cal@reg@a=% - \expandafter\expandafter\expandafter{% - \csname\the\dates@date @#1\endcsname}% - \cal@reg@b\expandafter{\theshorttext}% - \cal@reg@c\expandafter{\thelongtext}% - \expandafter\edef% - \csname\the\dates@date @#1\endcsname{% - \the\cal@reg@a% - \noexpand\cal@delim% - {\the\dates@time@start}% - {\the\dates@time@end}% -% \end{macrocode} -% -% The no-export toggle is set whenever the ends of a range are being -% loaded. We use that here to fiddle the engine number for -% these entries. This is necessary to prevent color from being -% applied to them. -% -% \begin{macrocode} - {\ifcal@noexport% - 0% - \else% - \the\cal@engine% - \fi}% - {\the\cal@reg@b}% - {\the\cal@reg@c}}}% -% \end{macrocode} -% -% This is the list initializer. We first -% check to see if there is an existing -% list, and initialize it if it is new. -% -% \begin{macrocode} -\def\cal@list@init#1{% - \expandafter\ifx% - \csname\the\dates@date @#1\endcsname% - \relax% - \expandafter\def% - \csname\the\dates@date @#1\endcsname% - {}% - \fi} -% \end{macrocode} -% -% This is the file scanner. The input handler -% can be redefined. The default at start-up is -% to handle list files by putting them into memory. -% -% \begin{macrocode} -\def\cal@read{% - \dateread{\cal@append}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Sorting Routines} -% -% \begin{macro}{\cal@sorts} -% \begin{macro}{\cal@@sorts} -% \begin{macro}{\cal@@sorts@exit} -% \begin{macro}{\cal@@sort@init} -% -% This is the front end for sorting all items in -% memory. We step through the range day by day, -% and execute the sort routine on any lists that -% are found. One could avoid processing the empty -% days by loading all items into a single list, but -% a linear sort on a large number of items can be -% very slow, both because the work done in a linear -% sort grows geometrically, and because the sorting -% alogorithm requires more comparisons. -% On balance, this is a faster approach -% in most cases. -% -% We start by setting the date to be the start of -% the range, and do a "\let" that will set up -% recursion in the next macro in the chain. We then -% execute that macro. -% -% \begin{macrocode} -\def\cal@sorts{% - \global\dates@date\cal@range@start% - \let\cal@@sorts@next\cal@@sorts% - \cal@@sorts} -% \end{macrocode} -% -% The following will die when we hit the end of the range. -% Otherwise, it will look to see if there is something -% in a list for the current date in the events or appointment -% macros, and execute a sort of each if required. -% -% \begin{macrocode} -\def\cal@@sorts{\relax% - \ifnum\dates@date>\cal@range@end% - \let\cal@@sorts@next\cal@@sorts@exit% - \else% - \expandafter\ifx% - \csname\the\dates@date @events\endcsname\relax% - \else% - \cal@sort{\the\dates@date @events}% - \fi% - \expandafter\ifx% - \csname\the\dates@date @appointments\endcsname\relax% - \else% - \cal@sort{\the\dates@date @appointments}% - \fi% - \global\advance\dates@date by 1% - \fi% - \cal@@sorts@next} -% \end{macrocode} -% -% When we finish all of the sorting work, we restore the date -% to the start of the range, and we're ready to make a calendar! -% -% \begin{macrocode} -\def\cal@@sorts@exit{% - \global\dates@date\cal@range@start% - \caldate} -% \end{macrocode} -% -% This is used to initialize a list for sorting. It -% simply appends an entry with a time of minus one -% to the end of the primary working list. -% -% \begin{macrocode} -\def\cal@sort@init{% - \cal@sort@A=-1% - \cal@sort@B=0% - \cal@sort@C=0% - \cal@sort@D{}% - \cal@sort@E{}% - \global\let\cal@sort@new\cal@sort@list% - \cal@appendright% - \let\cal@sort@list\cal@sort@new% - \gdef\cal@sort@new{}% - \cal@sort@passonetrue} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\cal@sort} -% \begin{macro}{\cal@@sort} -% \begin{macro}{\cal@appendright} -% \begin{macro}{\cal@sort@swap} -% -% This is the front end for sorting individual lists -% of items. It takes a single -% list macro name as its argument, invokes sorting on that -% list macro, and sets it to be the sorted form. The sorting -% setup here is designed to be easy to follow. It is probably -% not the most efficient way of sorting, but the size of lists -% is small (probably about ten items at the upper end), -% so speed is not really an issue. -% -% The name of the list is given as text, to keep the code -% where this is invoked more easily readable. -% -% \begin{macrocode} -\def\cal@sort#1{% - \expandafter\let\expandafter\cal@sort@list\csname#1\endcsname% - \cal@sort@init% - \global\let\cal@delim\cal@@sort% - \cal@sort@list% - \expandafter\let\csname#1\endcsname\cal@sort@new} -% \end{macrocode} -% This is the sort engine itself. Our data in memory consists of -% a list macro in groups of five items each. We will -% use this list under the name of "\cal@sort@list", and a working -% sort list for export under the name of "\cal@sort@new". -% -% We begin -% by grabbing the items to registers. -% -% \begin{macrocode} -\def\cal@@sort#1#2#3#4#5{% - \cal@sort@a=#1% - \cal@sort@b=#2% - \cal@sort@c=#3% - \cal@sort@d{#4}% - \cal@sort@e{#5}% -% \end{macrocode} -% -% Our default action is to do nothing when we finish -% with each sorting comparison; processing will be passed -% to the next delimited item in the list. -% -% \begin{macrocode} - \let\cal@@sort@next\relax% -% \end{macrocode} -% -% Every list for sorting is assumed to end in an entry with a -% time of minus one. When this is encountered, we export -% the last held item, and just expire if there was no change -% in the list. -% -% set the new list to be "\cal@sort@list", or we perform -% some actions to prepare for rerunning the list. -% -% \begin{macrocode} - \ifnum\cal@sort@a=-1\relax% - \message{.}% -% \cal@sort@swap% ... ? - \cal@appendright% - \ifcal@nosortchange% -% \end{macrocode} -% -% If we are to rerun the list, we reset the change toggle -% and the pass toggle. Then we export the held item, -% swap, and export the existing end-of-list marker. -% Then we set next to be the new list, and blank the -% new list to prevent geometric progression. -% -% \begin{macrocode} - \else% - \cal@nosortchangetrue% - \cal@sort@passonetrue% -% \cal@appendright% - \cal@sort@swap% - \cal@appendright% - \let\cal@@sort@next\cal@sort@new% - \gdef\cal@sort@new{}% - \fi% -% \end{macrocode} -% -% If are not at the end of the list, we start here. -% If this is the first pass, we do nothing. Otherwise -% we perform a series of comparisons. -% -% \begin{macrocode} - \else% - \ifcal@sort@passone% - \else% -% \end{macrocode} -% -% The time held is larger than the existing time. -% We need to change the order of the list, so we say so. -% We swap and export the smaller item. -% -% \begin{macrocode} - \ifnum\cal@sort@A>\cal@sort@a\relax% - \cal@nosortchangefalse% - \cal@sort@swap% - \cal@appendright% -% \end{macrocode} -% -% The time held is less than or equal to the existing time.\footnote{We also -% need to keep engine numbers in sequence. But the -% engine held must be less than the existing engine -% because they are loaded in sequence. We therefore -% do not need to check the next level.} -% \changes{1996/12/25}{v1.2}{Cut out a check for equal -% values in the sort comparison, and eliminated an erroneous -% swap action.} -% -% \begin{macrocode} - \else% -% \ifnum\cal@sort@A=\cal@sort@a\relax% - \cal@appendright% -% \begin{macrocode} -% -% The time held was less than the existing time. -% -% \begin{macrocode} -% \else% -% \cal@appendright% -% \fi% - \fi% - \fi% -% \end{macrocode} -% -% Swap registers. The current small registers were not exported -% to the new list, and are used as the large registers in the -% next pass. -% -% \begin{macrocode} - \cal@sort@swap% - \cal@sort@passonefalse% - \fi% - \cal@@sort@next} -% \end{macrocode} -% -% This simply appends to the end of the export list. -% -% \begin{macrocode} -\def\cal@appendright{% - \cal@reg@a\expandafter{\cal@sort@new}% - \xdef\cal@sort@new{% - \the\cal@reg@a% - \noexpand\cal@delim% - {\the\cal@sort@A}% - {\the\cal@sort@B}% - {\the\cal@sort@C}% - {\the\cal@sort@D}% - {\the\cal@sort@E}}} -% \end{macrocode} -% -% This swaps the large and small registers (trust me). -% -% \begin{macrocode} -\def\cal@sort@swap{% - \cal@count@a\cal@sort@a% - \cal@sort@a\cal@sort@A% - \cal@sort@A\cal@count@a% - \cal@count@a\cal@sort@b% - \cal@sort@b\cal@sort@B% - \cal@sort@B\cal@count@a% - \cal@count@a\cal@sort@c% - \cal@sort@c\cal@sort@C% - \cal@sort@C\cal@count@a% - \cal@reg@a\expandafter{\the\cal@sort@d}% - \cal@sort@d\expandafter{\the\cal@sort@D}% - \cal@sort@D\expandafter{\the\cal@reg@a}% - \cal@reg@a\expandafter{\the\cal@sort@e}% - \cal@sort@e\expandafter{\the\cal@sort@E}% - \cal@sort@E\expandafter{\the\cal@reg@a}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{The Calendar Generator} -% -% The following is run at the start of table generation only. -% After adjusting the global range for the table, -% it sets up the limiting counters for lines and groups. -% It also sets up a counter that tracks the number of items -% in a line and another that tracks the number of items -% in a group, -% and sets counters indicating the day on which -% each line will start and finish. It then outputs the -% headers and chains to the first macro in the loop. -% -% \begin{macrocode} -\def\cal@top{\relax% - \ifnum\tracingdates>0% - \message{^^J\themonth}% - \fi% - \let\cal@add@date@item\cal@add@date@item@default% - \advance\cal@range@end by 1% - \global\cal@subgroup@count0% - \global\cal@group@count0% - \cal@subgroup@len\cal@subgroup@length% - \advance\cal@subgroup@len by -1\relax% - \global\cal@group@len\cal@group@length% -% \advance\cal@group@len by -1\relax% - \cal@first@weekd\cal@first@weekday\relax% - \ifnum\cal@first@weekd=0% - \cal@last@weekd=6% - \else% - \cal@last@weekd\cal@first@weekd% - \advance\cal@last@weekd by -1% - \fi% - \cal@subgroup@setup% - \cal@output{\cal@header}\cal@begin@subgroup} -% \end{macrocode} -% -% The following begins every line in the table. -% It zeros the line item counter, then -% checks to see if we are ready to finish the table. -% If we are not finished, it checks to see if we have -% finished a group. If so, it puts the name of the new month -% on the terminal, resets the line and group counters, -% and grabs the group length afresh (this can change if, -% say, the group is a month). It then puts down a subfooter -% (left out in the routine that feeds into this, so that -% nothing will intervene between it and the foot), a footer -% and a new header. It then either pads or goes straight -% to input, as appropriate. -% If we are not at the end of a group, it puts down the start of a line. -% It then either starts the padding routine or goes straight -% to the item insertion routine. -% If we were ready to finish, -% it puts down a final line ending and footer, then dies. -% -% \begin{macrocode} -\def\cal@begin@subgroup{% - \global\cal@subgroup@count=0% - \global\def\cal@item@sep{}% - \ifnum\dates@date<\cal@range@end\relax% - \ifnum\cal@group@count=\cal@group@len\relax% - \ifnum\tracingdates>0% - \message{^^J\themonth}% - \fi% - \global\cal@group@count=0% - \global\cal@group@len\cal@group@length% - \cal@subgroup@setup% - \cal@output{\cal@groupbreak}\relax% - \ifnum\cal@first@weekd<7% - \let\next\cal@pad@start% - \else% - \let\next\cal@add@date@item% - \fi% - \else% - \ifnum\cal@first@weekd<7\relax% - \let\next\cal@pad@start% - \else% - \let\next\cal@add@date@item% - \fi% - \fi% - \else% - \cal@output{\cal@footer}% - \let\next\relax% - \fi% - \next} -% \end{macrocode} -% -% This adds a date item. It starts by checking to -% see if we are at the end of a group. It then either -% selects padding or a new line, as requested. -% If this is not the end of a group, we check to see -% if it is the end of a line. If so, it puts out a -% subfooter, but only if we're not going to be finishing -% the whole table. (The same treatment should be given -% to groups, come to think of it --- so there's at least -% one known bug here). If we're not at the end of a line, -% we place the item separator (which might be asleep), -% then let it wake up. This is followed by the item -% text and updates to the date and counters. -% -% \begin{macrocode} -\def\cal@add@date@item@default{\relax% - \ifnum\cal@group@count=\cal@group@len\relax% - \ifnum\cal@first@weekd<7% - \let\next\cal@pad@end% - \else% - \let\next\cal@begin@subgroup% - \fi% - \if\cal@incr G% - \global\advance\dates@date by 1% - \caldate% - \fi% - \if\cal@incr z% - \global\advance\dates@date by1% - \fi% - \else\relax% - \ifnum\cal@subgroup@count>\cal@subgroup@len\relax% - \if\cal@incr z% - \global\dates@date\cal@date@base% -% \global\advance\dates@date by-1% - \fi% - \ifnum\dates@date<\cal@range@end% - \if\cal@incr S% - \global\advance\dates@date by1% - \caldate% - \fi% - \cal@subgroup@setup% - \cal@output{\cal@subgroupbreak}% - \fi% - \let\next\cal@begin@subgroup% - \else% - \cal@output{\cal@item@sep}% - \global\def\cal@item@sep{\cal@item@sep@real}\relax% - \ifnum\tracingdates>0% - \message{\theday}% - \fi% - \cal@item@init% - \cal@output{\cal@item@text}% - \if\cal@incr I% - \global\advance\dates@date by 1% - \caldate% - \fi% - \if\cal@incr z% - \global\advance\dates@date by 1% - \caldate% - \fi% - \global\advance\cal@subgroup@count by 1\relax% - \global\advance\cal@group@count by 1\relax% - \let\next\cal@add@date@item% - \fi% - \fi% - \next} -% \end{macrocode} -% -% This pads out a line if the current date is later -% than the day that should start a table. -% -% It then calculates an offset that will be used -% by the padding loop, restoring the current date -% after the figure has been determined. -% -% \begin{macrocode} -\def\cal@pad@start{% - \cal@temp@count\dates@date% - \bgroup% - \global\cal@offset=\dates@date% - \prevday\cal@first@weekd% - \global\advance\cal@offset by -\dates@date% - \egroup% - \global\dates@date\cal@temp@count% - \cal@pad@@start} -% \end{macrocode} -% -% This is the padding loop. It moves to the beginning of -% the next line -% if padding is unnecessary or has been completed, -% putting the item separator to sleep as it does so. -% Otherwise, it wakes up the separator, -% puts it down, and increments -% the group and line counters. -% -% \begin{macrocode} -\def\cal@pad@@start{\relax% - \ifnum\cal@offset=0\relax% - \global\def\cal@item@sep{}% - \let\next\cal@add@date@item% - \else% - \global\def\cal@item@sep{\cal@item@sep@real}% - \cal@output{\cal@item@sep}% - \global\advance\cal@offset by -1\relax% - \global\advance\cal@subgroup@count by 1\relax% - \let\next\cal@pad@@start% - \fi% - \next} -% \end{macrocode} -% -% This pads a line to the ending day of the week. -% It calculates the offset, -% being careful not to let it hit an absurd value. -% -% \begin{macrocode} -\def\cal@pad@end{% - \cal@temp@count\dates@date% - \bgroup% - \global\cal@offset=\dates@date\relax% - \nextday\cal@last@weekd% - \advance\dates@date by -\cal@offset% - \global\cal@offset\dates@date\relax% - \ifnum\cal@offset=6% - \global\cal@offset=0% - \else% - \global\advance\cal@offset by 1% - \fi% - \egroup% - \global\dates@date\cal@temp@count% - \cal@pad@@end} -% \end{macrocode} -% -% If the offset is zero, there is no (longer) need for -% padding, and we go back to see if it's okay to start -% another line. Otherwise we output an item separator -% and iterate. -% -% \begin{macrocode} -\def\cal@pad@@end{\relax% - \ifnum\cal@offset=0\relax% - \let\next\cal@begin@subgroup% - \else% - \cal@output{\cal@item@sep}% - \global\advance\cal@offset by -1% - \global\advance\cal@subgroup@count by 1\relax% - \let\next\cal@pad@@end% - \fi% - \next} -% \end{macrocode} -% -% \subsection{Event Macros} -% -% The macros in this section are used to place text in the -% finished calendar. They are used by designers with -% the "\newcalendar" formatting macro. -% -% -% We provide several macros for conditional execution -% of text and color. The first two make rough decisions -% about an entire list of items, and are intended for -% use in tiny calendars in which specific text relating -% to events is not included. -% -% \begin{macro}{\ifanyitem} -% -% This executes one of two arguments depending on whether -% there is an event or appointment associated with the -% current date. We'll use this for small calendars -% on black and white printers, to boldface text -% showing that there is something significant about -% the date. -% -% \begin{macrocode} -\def\ifanyitem#1#2{% - \gdef\cal@temp{#1}% - \expandafter\ifx% - \csname\the\dates@date @events\endcsname% - \relax% - \expandafter\ifx% - \csname\the\dates@date @appointments\endcsname% - \relax% - \gdef\cal@temp{#2}% - \fi% - \fi% - \let\next\cal@temp% - \next} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\getanycolor} -% \begin{macro}{\get@calcolor} -% \begin{macro}{\calcolor} -% -% The next extracts a colour -% associated with a date. The color is returned in -% "\calcolor". -% -% \begin{macrocode} -\def\getanycolor{% - \gdef\calcolor{}% - \global\let\cal@delim\get@anycolor% - \csname\the\dates@date @events\endcsname% - \csname\the\dates@date @appointments\endcsname} -% \end{macrocode} -% -% The following is executed on each item in the list. -% When a color is found, we stick with that; the -% order of lists fed to the calendar will determine -% priority. -% \changes{v0.12}{1996/12/21}{First attempt at color -% coding --- it works!} -% -% \begin{macrocode} -\def\get@anycolor#1#2#3#4#5{% - \ifcat$\calcolor$% - \expandafter\ifx% - \csname cal@#3@color\endcsname% - \relax% - \else% - \xdef\calcolor{\csname cal@#3@color\endcsname}% - \fi% - \fi} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% Next, we have macros for working with lists. The set here -% sets up for the execution of a list, and dumps the list into the -% DVI hopper. Any list found will formatted using -% "\thecaltext", which the user may wish to redefine. -% -% If options are given to the command, only matching -% entries will be printed. -% -% We permit the selection of -% appointments and events by time, and -% by engine number.\footnote{The latter feature will allow -% the creation of concordance calendars that lay -% schedules side by side on the page. It should be -% possible, with minor enhancements to the Calendar -% package itself, to produce a schedule concordance -% that formats itself to the number of top-level lists -% fed to it. Really terrific if you have a use for it\ldots} -% -% We begin by hunting for options. -% -% \begin{macrocode} -\def\cal@get@events{% - \def\theevents{}% - \gdef\cal@entry@macro{\theevents}% - \expandafter\let% - \expandafter\cal@dumplist\csname\the\dates@date @events\endcsname% - \cal@print@items} -\def\cal@get@appointments{% - \gdef\theappointments{}% - \gdef\cal@entry@macro{\theappointments}% - \expandafter\let% - \expandafter\cal@dumplist% - \csname\the\dates@date @appointments\endcsname% - \cal@print@items} -\def\cal@print@items{% - \cal@sort@passonetrue% - \@ifnextchar[% - {\cal@@print@items}% - {\cal@@print@items[-1/-1]}} -\def\cal@@print@items#1[#2/#3]{% - \cal@select@start=#2% - \cal@select@end=#3% - \@ifnextchar[% - {\cal@@@print@items}% - {\cal@@@print@items[-1]}} -\def\cal@@@print@items#1[#2]{% - \cal@engine@limit=#2% - \global\let\cal@delim\cal@print@format% - \cal@dumplist} -% \end{macrocode} -% -% I'm sure there is a more clever way to do this, -% but I can't think of it tonight. If no value -% is given for an option, it becomes irrelevant -% to the decision of whether or not to print. Otherwise, -% a match for its value is required. -% -% \begin{macrocode} -\def\cal@print@format#1#2#3#4#5{\relax% - \ifcat$#4$% - \else% - \def\theshorttext{#4}% - \ifcat$#5$% - \let\thelongtext\theshorttext% - \else% - \def\thelongtext{#5}% - \fi% - \global\dates@time@start#1\relax% - \global\dates@time@end#2\relax% - \mod{60}\dates@time@start\cal@minutes@start% - \cal@hours@start\dates@three% - \divide\cal@hours@start by60% - \mod{60}\dates@time@end\cal@minutes@end% - \cal@hours@end\dates@three% - \divide\cal@hours@end by60% - \ifnum\cal@minutes@start<10% - \xdef\cal@minutes@start@mac{% - 0\the\cal@minutes@start}% - \else% - \xdef\cal@minutes@start@mac{% - \the\cal@minutes@start}% - \fi% - \ifnum\cal@minutes@end<10% - \xdef\cal@minutes@end@mac{% - 0\the\cal@minutes@end}% - \else% - \xdef\cal@minutes@end@mac{% - \the\cal@minutes@end}% - \fi% - \xdef\cal@appt@start@text{% - \the\cal@hours@start:\cal@minutes@start@mac}% - \xdef\cal@appt@end@text{% - \the\cal@hours@end:\cal@minutes@end@mac}% - \cal@doeventfalse% - \cal@doapptfalse\relax% - \ifnum\cal@engine@limit>-1\relax% - \ifnum#3=\cal@engine@limit% - \cal@doeventtrue% - \fi% - \else% - \cal@doeventtrue% - \fi\relax% - \ifnum\cal@select@start>-1\relax% -% -% We eliminate anything that is outside or just -% touches the time slot we're dealing with. -% - \ifnum\dates@time@start<\cal@select@end% - \ifnum\dates@time@end>\cal@select@start% - \cal@doappttrue% -% -% Ha! But just-touching entries that are pinpoint -% times are okay. -% - \else - \ifnum\dates@time@end=\cal@select@start% - \ifnum\dates@time@start=\dates@time@end% - \cal@doappttrue% - \fi% - \fi% - \fi% - \fi% - \else% - \cal@doappttrue% - \fi% - \ifcal@doappt% - \ifcal@doevent% - \xdef\calcolor{\csname cal@#3@color\endcsname}% - \ifcal@sort@passone% - \cal@reg@a{}% - \else% - \cal@reg@a\expandafter{\cal@entry@sep}% - \fi% - \cal@times@init% - \global\let\cal@textcolor\relax% - \cal@entry@init% - \global% - \global\let\cal@textcolor\cal@textcolor@default% - \cal@reg@b\expandafter{\cal@entry@text}% - \cal@reg@c% - \expandafter\expandafter% - \expandafter{\cal@entry@macro}% - \expandafter\xdef\cal@entry@macro{% - \the\cal@reg@c% - \the\cal@reg@a% - \the\cal@reg@b}% - \cal@sort@passonefalse% - \fi% - \fi% - \fi} -% \end{macrocode} -% -% This macro is used to initialize the values of -% text-literal macros "\thetimestart" and "\thetimeend". -% -% \begin{macrocode} -\def\cal@times@init{% - \mod{60}\dates@time@start\dates@one% - \dates@three\dates@time@start% - \divide\dates@three by 60% - \ifnum\dates@one<10\relax% - \xdef\cal@temp{0\the\dates@one}% - \else% - \xdef\cal@temp{\the\dates@one}% - \fi% - \xdef\thetimestart{\the\dates@three:\cal@temp}% - \mod{60}\dates@time@end\dates@one% - \dates@three\dates@time@end% - \divide\dates@three by 60% - \ifnum\dates@one<10\relax% - \xdef\cal@temp{0\the\dates@one}% - \else% - \xdef\cal@temp{\the\dates@one}% - \fi% - \xdef\thetimeend{\the\dates@three:\cal@temp}} -% \end{macrocode} -% -% And last but not least, we have the default macros used -% to print the text. Users may want to season this one -% to taste, but it should serve for most purposes. -% We need to define two macros. One always goes to DVI, -% and can contain non-printable stuff. The other goes -% may be routed to an external file, and should only -% contain things that expand to text, as nearly as possible. -% -% \begin{macrocode} -\def\cal@textcolor@default#1#2{% - \@ifundefined{color} - {\ifcat$#1$#2\else\textbf{#2}\fi} - {\ifcat$#1$#2\else\textcolor{#1}{#2}\fi}} -\global\let\cal@textcolor\cal@textcolor@default -% \end{macrocode} -% -% \subsection{Parser Customizations} -% -% This section contains macros that are used to alter -% the behaviour of the "\dateread" macro. Two new commands -% are introduced, "freeze" and "range". The first sets a toggle -% that will cause pre-processed dates to be exported to -% a freeze file for the list being imported. The second -% sets a range for the current import file by referring to -% a separate import file containing the range information. -% -% \begin{macro}{\fremac} -% \begin{macro}{\cal@freeze} -% \begin{macro}{\event} -% -% The first set is pretty simple. Users must be cautioned, however, -% that they should only use this macro at the \textit{top} of a -% file to be frozen, in order to catch all of the data it contains. -% A patch could probably be applied to kill the parser if -% "\fremac" occurs after the first argument is read. Later, later! -% -% \begin{macrocode} -\def\fremac{% - \immediate\openout\cal@freeze@file=\cal@input@file.eve\relax - \cal@dofreezetrue% -} -% \end{macrocode} -% -% The following macro is used to export text if the -% "\cal@dofreeze" toggle is on. -% -% \begin{macrocode} -{\catcode`\%=12\xdef\cal@percent{%}} -\def\cal@freeze{% - \immediate\write\cal@freeze@file\relax% - {\string\event% - {\the\dates@date}% - {\the\dates@time@start}% - {\the\dates@time@end}% - {\theshorttext}% - {\thelongtext}\cal@percent}} -% \end{macrocode} -% -% -% Frozen export files contain "\event" macros, the arguments to -% which contain frozen data. The "\event" macro loads date items -% into memory via the same handler used to import fresh-cooked -% data. We don't set the engine number from the file, because -% we've already set the figure for this run. -% -% \begin{macrocode} -\def\event#1#2#3#4#5{% - \global\dates@date=#1\relax% - \global\dates@time@start=#2\relax% - \global\dates@time@end=#3\relax% - \def\theshorttext{#4}% - \def\thelongtext{#5}% - \cal@append} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\ranmac} -% \begin{macro}{\cal@@@read@ranmac} -% \begin{macro}{\cal@get@range} -% \begin{macro}{\cal@get@@range} -% \begin{macro}{\rANmac} -% -% This set of macros fetches a file containing -% ranges (or other dates, although that would not -% be wise) into the current file. -% We need to snatch the word immediately following the -% command. We do this by diverting the flow of the -% date parsing routines, as documented in the Dates -% package. -% -% \begin{macrocode} -\def\ranmac{% - \global\let\dates@@@read\cal@@@read@ranmac}% -% \end{macrocode} -% -% The following will grab the very next word after -% "range", and input that file immediately, so that -% the currently-running dates parser can pass over -% it. We look forward for a brace; if we -% find one, it means that the user put a braced -% argument after the range as a comment. -% -% \begin{macrocode} -\def\cal@@@read@ranmac{% - \global\let\dates@@@read\dates@@@read@default% - \@ifoverword\dates@serious@brace% - {\expandafter\cal@get@range\@gobble}% - {\cal@get@range}% - {\message{This can't happen.}}} -% \end{macrocode} -% -% The following two macros grab the range into the -% current parsing process. The name of the file -% is expanded first, then the "\@@input" is expanded, -% then the parser proceeds without knowing that -% the text it sees came from elsewhere. -% -% \begin{macrocode} -\def\cal@get@range{% - \cal@noexporttrue% - \expandafter\ifx% - \csname\@overword @range@loaded\endcsname% - \relax% - \expandafter\def% - \csname\@overword @range@loaded\endcsname{% - 1}% - \else% - \cal@noloadtrue% - \fi% - \IfFileExists{\@overword.cld}% - {\expandafter\cal@get@@range\@overword.cld rAN }% - {\@missingfileerror{\@overword}{cld}}} -% \end{macrocode} -% -% We need a single macro that grabs stuff. -% -% \begin{macrocode} -\def\cal@get@@range{% - \expandafter\dates@read\@@input} -% \end{macrocode} -% -% We need to prevent the range data from being -% loaded into memory multiple times. We also -% never want to export this data to a freeze -% file; there would be no tidy means of determining -% which range data had been loaded and which -% not. -% -% We accomplish these effects -% by checking whether this range has been -% loaded previously, and toggling -% "\ifcal@noload" to true in the above -% macro if it has. We also toggle "\ifcal@noexport" -% to true. We then plant -% a macro after the imported text that will -% restore this functionality in "\cal@append". -% An all-caps word -% in the user text will be lower-cased, so this -% will not cause confusion. -% -% In a future release, the entry of ranges directly -% into a list file should probably be prevented; -% freezing several lists containing a literal range -% would introduce precisely the problem referred to -% in the first paragraph of this comment. -% -% The reset for "\cal@holidays" supports the modified -% behaviour required by the holiday option immediately -% below. -% -% \begin{macrocode} -\def\rANmac{% - \cal@holidaysfalse% - \cal@noloadfalse\cal@noexportfalse} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\holmac} -% \begin{macro}{\cal@except} -% \begin{macro}{\cal@checkexception} -% \begin{macro}{\cal@@checkexception} -% -% Some lists should ignore entries that fall on a holiday. -% This is a property of the list, and so is governed by -% a list of holidays called at the top of the list itself; -% the user writing a calendar document does not need or -% want control over holidays. -% -% We accomplish this by importing a holidays list into the -% document, using the routines above. However, we -% modify the action for the parser so that it builds an -% exceptions list. This action is built into the -% "\cal@append" macro. -% -% \begin{macrocode} -\def\holmac{% - \cal@holidaystrue% - \global\let\dates@@@read\cal@@@read@ranmac}% -% \end{macrocode} -% -% The "\cal@append" macro will call the following macro -% to build an exceptions list. -% -% \begin{macrocode} -\def\cal@except{% - \cal@reg@a\expandafter{\cal@exceptionlist}% - \xdef\cal@exceptionlist{% - \noexpand\cal@delim{\the\dates@date}\the\cal@reg@a}} -% \end{macrocode} -% -% This sets to false if an entry exists on the exception list, -% otherwise true. -% -% \begin{macrocode} -\def\cal@checkexception{% - \cal@useentrytrue% - \global\let\cal@delim\cal@@checkexception% - \cal@exceptionlist} -% \end{macrocode} -% -% This sets the condition, via the above macro, by checking each -% item in the list. -% -% \begin{macrocode} -\def\cal@@checkexception#1{\relax% - \ifnum\dates@date=#1\relax\cal@useentryfalse\fi} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\lismac} -% -% We allow nested lists. We avoid nested input by placing the -% name of the file onto the input list, so that the input -% routine will pick it up during tail recursion. Nonetheless -% we want the colors of susidiary lists to be governed by -% the color at the top level, so we put the last-defined color onto the -% list as well. -% -% \begin{macrocode} -\def\lismac{% - \global\let\dates@@@read\cal@pass@list} -% \end{macrocode} -% -% We need a little gadget to safely extract the contents of the -% file list. -% -% \begin{macrocode} -\def\cal@grablist#1\end{% - \def\cal@grabbedlist{#1}} -% \end{macrocode} -% -% This just does the passing and returns control to "\dates@@@read". -% -% \begin{macrocode} -\def\cal@pass@list{% - \expandafter\cal@grablist\cal@files% - \global\let\dates@@@read\dates@@@read@default% - \@ifoverword\dates@serious@brace% - {\xdef\cal@files{% - \@overword\cal@color,\cal@grabbedlist\noexpand\end}% - \expandafter\dates@read\@gobble}% - {\message{I don't think I'm supposed to do this}% - \xdef\cal@files{% - \@overword\cal@color,\cal@grabbedlist\noexpand\end}}% - {\message{This can't happen}}} -% \end{macrocode} -%\end{macro} -% -% \subsection{Initializations} -% -% Before any of this runs, we need the following registers, -% macros and conditionals. -% -% \begin{macrocode} -\newcount\cal@first@weekd -\newcount\cal@range@start -\newcount\cal@range@end -\newcount\cal@temp@count -\newcount\cal@last@weekd -\newcount\cal@subgroup@len -\newcount\cal@offset -\newcount\cal@subgroup@count -\newcount\cal@group@count -\newcount\cal@group@len -\newcount\cal@engine -\newcount\cal@engine@limit -\newcount\cal@select@start -\newcount\cal@select@end -\newcount\cal@hours@start -\newcount\cal@minutes@start -\newcount\cal@hours@end -\newcount\cal@minutes@end -\newcount\tracingdates -\tracingdates=1 -\def\cal@sort@new{} -\newtoks\cal@reg@a -\newtoks\cal@reg@b -\newtoks\cal@reg@c -\newcount\cal@sort@A -\newcount\cal@sort@B -\newcount\cal@sort@C -\newtoks\cal@sort@D -\newtoks\cal@sort@E -\newcount\cal@sort@a -\newcount\cal@sort@b -\newcount\cal@sort@c -\newtoks\cal@sort@d -\newtoks\cal@sort@e -\newcount\cal@count@a -\newwrite\cal@freeze@file -\newif\ifcal@sort@passone -\newif\ifcal@nosortchange -\newif\ifcal@dofreeze -\newif\ifcal@noload -\newif\ifcal@noexport -\newif\ifcal@holidays -\newif\ifcal@useentry -\newif\ifcal@doevent -\newif\ifcal@doappt -\def\cal@insert#1{#1} -\expandafter\edef\csname cal@0@color\endcsname{black} -\def\theappointments{} -\def\theevents{} -\def\cal@exceptionlist{} -\newcount\cal@date@base -%</style> -% \end{macrocode} -% -%\iffalse -% \section{The Installation File} -% \begin{macrocode} -%<*installer> -\def\batchfile{calendar.ins} -\input docstrip.tex - -\keepsilent - -\preamble - -This file is part of the Calendar package. -Copyright (C) 1996 Frank Bennett, Jr. -All rights reserved. ------------------------------------------- -This is a generated file. - -IMPORTANT NOTICE: - -You are not allowed to change this file. You may however copy -this file to a file with a different name and then change the -copy if (a) you do not charge for the modified code, (b) you -acknowledge the author(s) in the new file, if it -is distributed to others, and (c) you attach these same -conditions to the new file. - -You are not allowed to distribute this file alone. You are not -allowed to take money for the distribution or use of this file -(or a changed version) except for a nominal charge for copying -etc. - -You are allowed to distribute this file under the condition that -it is distributed with all of its contents, intact. - -For error reports, or offers to help make Calendar a more powerful, -friendlier, and better package, please contact me on -`fb' at soas.ac.uk - -\endpreamble - -\postamble -\endpostamble - -\generate{\file{calendar.sty} {\from{calendar.dtx}{style}} -} - -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, you have to move the following} -\Msg{* files into a directory searched by TeX:} -\Msg{*} -\Msg{* \space\space calendar.sty} -\Msg{*} -\Msg{* You will also need to have the following packages} -\Msg{* installed on your system before using this package} -\Msg{* or printing its documentation:} -\Msg{*} -\Msg{* \space\space overword.dtx} -\Msg{* \space\space dates.dtx} -\Msg{*} -\Msg{***********************************************************} - -%</installer> -% \end{macrocode} -%\fi -% \Finale \PrintChanges |