summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-05-30 21:18:26 +0000
committerKarl Berry <karl@freefriends.org>2018-05-30 21:18:26 +0000
commit46f8a5bc71e55825e922495dc0483469fb37b8d6 (patch)
treed444b2d0f43563f9d9187eb4645b4297adb01c3a /Master
parent4ec9e653ef6308945a40e3a3a43c306b99e899f7 (diff)
texdate (30may18)
git-svn-id: svn://tug.org/texlive/trunk@47878 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/generic/texdate/CHANGES1
-rw-r--r--Master/texmf-dist/doc/generic/texdate/README26
-rw-r--r--Master/texmf-dist/doc/generic/texdate/lppl.txt416
-rw-r--r--Master/texmf-dist/doc/generic/texdate/texdate.pdfbin0 -> 246866 bytes
-rw-r--r--Master/texmf-dist/source/generic/texdate/texdate.dtx1546
-rw-r--r--Master/texmf-dist/source/generic/texdate/texdate.ins65
-rw-r--r--Master/texmf-dist/tex/generic/texdate/texdate.sty856
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds3
-rw-r--r--Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/texdate.tlpsrc0
11 files changed, 2916 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/generic/texdate/CHANGES b/Master/texmf-dist/doc/generic/texdate/CHANGES
new file mode 100644
index 00000000000..1dd95cbda9f
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/texdate/CHANGES
@@ -0,0 +1 @@
+26 May 1202 (30 May 2018): Initial release.
diff --git a/Master/texmf-dist/doc/generic/texdate/README b/Master/texmf-dist/doc/generic/texdate/README
new file mode 100644
index 00000000000..6cb3f02178c
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/texdate/README
@@ -0,0 +1,26 @@
++AMDG
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3(c) of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of the files texdate.ins and
+texdate.dtx, along with derived files texdate.sty and
+texdate.pdf.
+
+The texdate package provides plain-TeX-compatible commands
+for printing and manipulating dates.
+
+This package should run properly on any properly running TeX
+or LaTeX system.
diff --git a/Master/texmf-dist/doc/generic/texdate/lppl.txt b/Master/texmf-dist/doc/generic/texdate/lppl.txt
new file mode 100644
index 00000000000..22443139013
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/texdate/lppl.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/Master/texmf-dist/doc/generic/texdate/texdate.pdf b/Master/texmf-dist/doc/generic/texdate/texdate.pdf
new file mode 100644
index 00000000000..b620c7dc210
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/texdate/texdate.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/generic/texdate/texdate.dtx b/Master/texmf-dist/source/generic/texdate/texdate.dtx
new file mode 100644
index 00000000000..4ceee291453
--- /dev/null
+++ b/Master/texmf-dist/source/generic/texdate/texdate.dtx
@@ -0,0 +1,1546 @@
+% \iffalse
+% +AMDG This document was begun on 1 May 1202, the
+% feast of St. Joseph the Worker, and it
+% is humbly dedicated to him and to the Immaculate Heart of
+% Mary for their prayers, and to the Sacred Heart of Jesus
+% for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3(c) of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of texdate.dtx, texdate.ins, and
+% derived files texdate.sty and texdate.pdf.
+% \fi
+
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{texdate}[2018/05/30 v1.0 Print and manipulate dates in plain TeX]
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{doc}
+\usepackage{modulus}
+\usepackage{multicol}
+\usepackage{texdate}
+\usepackage{fancyvrb}
+\usepackage{fvrb-ex}
+\usepackage{booktabs}
+\usepackage[typeone]{dozenal}
+\def\x{\noexpand{\TextOrMath{\protect\doz{{X}}}{\doz@X}}}%
+\def\e{\noexpand{\TextOrMath{\protect\doz{{E}}}{\doz@E}}}%
+\usepackage{longtable}
+\usepackage{xellipsis}
+
+\begin{document}
+\DocInput{texdate.dtx}
+\end{document}
+%</driver> \fi
+%
+% \title{The |texdate| Package, v1.0}
+% \author{Donald P.\ Goodman III}
+% \date{\today}
+%
+% \maketitle
+%
+% \begin{abstract}
+% \noindent
+% \TeX\ and \LaTeX\ provide few facilities for dates by
+% default, though many packages have filled this gap.
+% |texdate| fills it, as well, with a pure \TeX-primitive
+% implementation. It can print dates, advance them by
+% numbers of days, weeks, or months, determine the weekday
+% automatically, and print them in (mostly) arbitrary
+% format. It can also print calendars (monthly and yearly)
+% automatically, and can be easily localized for non-English
+% languages.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction: The State of the \TeX}
+% \label{sect:intro}
+%
+% \TeX\ by default contains very little facilities for
+% dealing with dates, and \LaTeX\ follows suit. As far as
+% primitives go, \TeX\ just offers the counters |\day|,
+% |\month|, and |\year|, which give the current values of
+% those units of time; e.g., |\the\year-\the\month-\the\day|
+% will yield ``\the\year-\the\month-\the\day'' (which is the
+% date on which this document was compiled). \LaTeX\ also
+% has |\today|, which will produce the current date in the
+% default American style: ``\today''. But that's
+% really about all there is.
+%
+% Many packages have attempted to fill up this gap, some
+% with excellent success; |datetime2| certain deserves
+% special mention here, particularly as it goes beyond what
+% |texdate| offers, given that |texdate| contains no
+% facilities for \emph{times} at all. |texdate| tries to fill the gap,
+% as well; but it does it using only \TeX-primitives, in the
+% hope that the solution will be (a) pretty fast, (b)
+% pretty portable, and (c) not requiring the loading of
+% massive packages, only a fraction of the capabilities of
+% which will actually be used.
+%
+% For comparison, |datetime2| uses |pgfcalendar|, which of
+% course requires |pgf|, which is a huge package. Our
+% modern computers make loading such packages often a
+% negligible overhead; but with large and complex documents,
+% it's not always trivial. Also, it's an enjoyable
+% challenge to write a usable package in \TeX\ for something
+% for which \TeX\ was not designed; and some of us enjoy
+% \emph{just knowing} that we're using a lean package, even
+% it makes little practical difference.
+%
+% This document is numbered in \emph{dozenal}, or base
+% twelve; numbering proceeds 1, 2, 3, 4, 5, 6, 7, 8, 9, \x,
+% \e, 10, 11, 12\xelip It uses the |dozenal| \LaTeX\
+% package to do this. For more information, see
+% \url{http://www.dozenal.org}.
+%
+% \section{Printing and Setting the Date}
+% \label{sect:basic}
+%
+% |texdate| works with an \emph{internal date}, which is the
+% current setting of all the date variables. When
+% initiated, the internal date is 1 January of the current
+% year. We can print that date with
+% \DescribeMacro{\printdate}|\printdate|:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% We can easily set the internal date to the current date by
+% running the macro \DescribeMacro{\initcurrdate}|\initcurrdate|:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% (This is the current date at the time this document was
+% compiled.)
+%
+% You can also easily \emph{set} the internal date, by
+% running the \DescribeMacro{\initdate}|\initdate| macro:
+%
+% \begin{quote}
+% \cmd{\initdate} \marg{year} \marg{month} \marg{day-of-month}
+% \end{quote}
+%
+% The elements of the date must be supplied to |\initdate|
+% in that order, or |texdate| will become confused. It's
+% obvious why; what should |texdate| do if the month is
+% entered as |2019|?
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printdate
+% \end{Example}
+% \hrule
+% \bigskip
+%
+% While internally dates are kept as zero-indexed, these
+% dates are received by |\initdate| as one-indexed; that is,
+% |24| will mean the twenty-fourth, not the twenty-fifth,
+% because we count starting at 1 rather than 0.
+%
+%
+% \section{Date Formats}
+% \label{sect:dateforms}
+%
+% The date format we've seen so far is the default, which is
+% designed primarily to demonstrate several of the possible
+% variables that can be in a date format. Naturally, you'll
+% want to change it; and it can be changed, almost
+% arbitrarily, simply by redefining a command, or by using
+% one of several presets.
+%
+% \subsection{Preset Formats}
+% \label{sub:presetforms}
+%
+% |texdate| provides a number of preset formats that can be
+% easily selected without having to design a format string
+% (for which see Section \ref{sub:customforms}, on page
+% \pageref{sub:customforms}).
+%
+% \DescribeMacro{\printfdate\{ISO\}}|\printfdate{ISO}|
+% will print the current date in the default
+% ISO 8601 format, which is \emph{|yyyymmdd|}. In
+% |texdate|'s formatting strings, this is |Ymd|; you'll
+% learn more about these in Section \ref{sub:customforms}.
+% There is also the ``ISO extended'' form, |Y-m-d|.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{ISO}
+%
+% \printfdate{ISOext}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% For Americans fond of our curious customary format, you
+% can use
+% \DescribeMacro{\printfdate\{american\}}|\printfdate{american}|;
+% in |texdate| format strings, this is |B\ d, Y|. There is
+% also
+% \DescribeMacro{\printfdate\{shamerican\}}|\printfdate{shamerican}|,
+% which is the abbreviated form, using slashes rather than
+% hyphens.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{american}
+%
+% \printfdate{shamerican}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% The British also have their own ways of writing dates,
+% which correspond largely to the way the American military
+% writes them (which are consequently sometimes called
+% ``military dates,'' in the same way that twenty-four-hour
+% time readings are sometimes called ``military time'').
+% These are
+% \DescribeMacro{\printfdate\{british\}}|\printfdate{british}|
+% and
+% \DescribeMacro{\printfdate\{shbritish\}}|\printfdate{shbritish}|,
+% along with alternate form
+% \DescribeMacro{\printfdate\{shbritishdots\}}|\printfdate{shbritishdots}|,
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initdate{2019}{6}{24}
+% \printfdate{british}
+%
+% \printfdate{shbritish}
+%
+% \printfdate{shbritishdots}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% This is enough to cover the standards of most places in
+% the world. However, if you want something different, you
+% can easily create it with format strings.
+%
+% \subsection{Custom Date Formats}
+% \label{sub:customforms}
+%
+% All the custom formats described in Section
+% \ref{sub:presetforms} and printed with |\printfdate| are
+% created using the same general mechanism described in this
+% section. We will begin by discussing a way to generically
+% change the presentation of all dates called with the basic
+% |\printdate|, then move on to creating custom date formats
+% that can be printed by name with |\printfdate|.
+%
+% The macro \DescribeMacro{\setdateformat}|\setdateformat|
+% holds the formatting string for the date. It's not
+% \emph{completely} arbitrary, because none of the
+% characters used to produce specific parts of the date can
+% be used in the string itself; however, it's pretty
+% flexible despite that limitation.
+%
+% The default date format string, quite unsuitable for real
+% work, includes most of the possible control characters,
+% and is |A{ }(a),\ B\ (b){ }d,\ Y|. Note that spaces
+% have to be preserved by either \emph{bracing} them or
+% \emph{escaping} them; that is, to put a space in your
+% format string, use either ``|\ |'' or ``|{ }|''.
+%
+% Table \ref{tab:lets} on page \pageref{tab:lets} shows
+% the control characters, an
+% explanation of their meaning, and an example of each.
+% They assume the date 4 June 2019, selected by
+% |\initdate{2019}{6}{4}|.
+% \initdate{2019}{6}{4}
+%
+% \begin{table}[htp]
+% \centering
+% \begin{tabular}{lp{3in}l}
+% \toprule
+% \itshape Let. & \itshape Result & \itshape Ex. \\
+% \midrule
+% d & Numeric day of the month; 0-padded to two digits if
+% necessary & \printfdate{d} \\
+% e & Numeric day of the month; space-padded to two spaces
+% if necessary & \printfdate{e} \\
+% B & Full name of the month & \printfdate{B} \\
+% b & Abbreviated name of the month & \printfdate{b} \\
+% h & Abbreviated name of the month; same as |b| & \printfdate{h} \\
+% m & Number of month, with January as 1; 0-padded to two
+% digits if necessary & \printfdate{m} \\
+% A & Full name of the weekday & \printfdate{A} \\
+% a & Abbreviated name of the weekday & \printfdate{a} \\
+% w & Numeric value of weekday, with Sunday as 0 & \printfdate{w} \\
+% u & ISO numeric value of weekday, with Monday as 1 and
+% Sunday as 7 & \printfdate{u} \\
+% Y & Number of the current year & \printfdate{Y} \\
+% j & Numeric day of the year, starting on a constant count
+% from 1 Jan; 0-padded to three digits if necessary & \printfdate{j} \\
+% C & Century; essentially, the first two digits of the year &
+% \printfdate{C} \\
+% y & The year, in only two digits & \printfdate{y} \\
+% U & Week number of the year, starting at 0, with the week
+% starting on Sunday; 0-padded to two digits if
+% necessary & \printfdate{U} \\
+% V & ISO week number of the year, starting at 1, with the week
+% starting on Monday; 0-padded to two digits if
+% necessary & \printfdate{V} \\
+% W & Week number of the year, starting at 0, with the week
+% starting on Monday; 0-padded to two digits if necesary &
+% \printfdate{W} \\
+% \bottomrule
+% \end{tabular}
+% \caption{Control codes for date formats}
+% \label{tab:lets}
+% \end{table}
+%
+% For folks not familiar with the \emph{control characters}
+% concept, the essential idea is that you format some
+% information with a certain ``string,'' called the ``format
+% string.'' The format string contains some characters
+% which are meaningless as far as formatting goes, and are
+% passed through unchanged; and some characters which will
+% be replaced with certain information. In other words,
+% assume that we have a format string consisting of the
+% following characters: |a b c d e|. |c| is a control
+% character, and represents the information ``zzz''; the other
+% characters are not control characters.
+%
+% \begin{quote}
+% |a b c d e| $\rightarrow$ a b zzz d e
+% \end{quote}
+%
+% Anyone who has used GNU
+% |date| or BSD |date| will recognize these control
+% characters, though of course in those programs a |%|
+% character would be necessary, as well. |texdate|
+% duplicates the behavior of these programs as closely as
+% my \TeX-pertise allows.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \advancebyweeks{6}
+% \def\setdateformat{d\ B\ Y}
+% |d\ B\ Y|: \printdate\par
+% \def\setdateformat{Y-m-d}
+% |Y-m-d|: \printdate\par
+% \def\setdateformat{a,\ d\ b\ Y}
+% |a,\ d\ b\ Y|: \printdate\par
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% We can meddle with this however we like, except that these
+% control characters (the ones that turn into elements of
+% the date) cannot be included literally.
+%
+% You can also define \emph{named date formats}:
+% \DescribeMacro{\nameddateformat}
+%
+% \begin{quote}
+% \cmd{\nameddateformat} \marg{name} \marg{format-string}
+% \end{quote}
+%
+% Perhaps I want a peculiar date format, with the month,
+% followed by the year, followed by the day of the month,
+% followed by the day of the year in parentheses. My format
+% string should be |m-Y-d\ (j)|. I'll then want to use the
+% \DescribeMacro{\printfdate}|\printfdate| command with its single
+% argument, which is the name of the date format I want to
+% use.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \nameddateformat{weird}{m-Y-d\ (j)}
+% \printfdate{weird}\par
+% \printdate
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% It's worth nothing that all of the control characters also
+% have a formatted print string that can be called by name.
+% So one could duplicate the above |weird| date format the
+% hard way, by using these each individually:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printfdate{m}-\printfdate{Y}-\printfdate{d} (\printfdate{j})
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% These seems a bit convoluted, but perhaps you want to wrap
+% it in a macro?
+%
+% \subsection{Number Format}
+% \label{sub:numforms}
+%
+% Any command which will work on a \TeX\ count register can
+% be inserted into the
+% \DescribeMacro{\texdatenumformat}|\texdatenumformat|
+% command, which will be applied to all the numbers which
+% |texdate| outputs. For example, if you are using the
+% |dozenal| package:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \def\texdatenumformat#1{\dozens{#1}}
+% \initdate{2018}{12}{25}
+% \printfdate{ISOext}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+%
+% \section{Manipulating Dates}
+% \label{sect:manipdate}
+%
+% |texdate| goes well beyond merely printing and setting
+% dates; you can manipulate them in many ways. The original
+% purpose of the package was to allow \LaTeX\ to print
+% calendar sheets and things of that nature without
+% resorting to an external program, or loading some enormous
+% package, so it needed the ability to move forward and
+% backward by given increments. So we have that.
+%
+% \subsection{Moving Dates Forward and Backward}
+% \label{sub:movedate}
+%
+% You can advance the date by a certain number of days,
+% weeks, or months. The macros are named, unsurprisingly,
+% \DescribeMacro{\advancebydays}|\advancebydays|,
+% \DescribeMacro{\advancebyweeks}|\advancebyweeks|, and
+% \DescribeMacro{\advancebymonths}|\advancebymonths|, each
+% of which takes one argument, which is the number of that
+% unit you wish to advance the date by. The corresponding
+% commands \DescribeMacro{\regressbydays}|\regressbydays|,
+% \DescribeMacro{\regressbyweeks}|\regressbyweeks|, and
+% \DescribeMacro{\regressbymonths}|\regressbymonths| also
+% exist.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% Current date: \printdate\par
+% \advancebydays{8}
+% 8 days later: \printdate\par
+% \advancebyweeks{4}
+% 4 weeks later: \printdate\par
+% \advancebymonths{4}
+% 4 months later: \printdate\par
+% \regressbydays{14}
+% 14 days earlier: \printdate\par
+% \regressbyweeks{8}
+% 8 weeks earlier: \printdate\par
+% \regressbymonths{2}
+% 2 months earlier: \printdate\par
+% \end{Example}
+% \nobreak\medskip\nobreak
+% \hrule
+% \bigskip
+%
+% Note that |\advancebymonths| does not validate the date,
+% so it's possible that you'll end up with something
+% impossible, such as 31 September. It's best to watch the
+% results of this one carefully.
+%
+% Both the |\advanceby|s and the |\regressby|s should be
+% given positive numbers; negative numbers will just confuse
+% them.
+%
+% \subsection{Saving and Restoring Dates}
+% \label{sub:savedate}
+%
+% Sometimes you may wish to save a date, change the internal
+% date, use that internal date for a while, then restore the
+% old date. |texdate| makes it possible to save and use as
+% many dates as you want (or, at any rate, as many as \TeX\
+% will tolerate).
+%
+% \DescribeMacro{\savedate}|\savedate| takes a single
+% argument, the \emph{name} you'd like to give your saved
+% date. This can be anything that \TeX\ allows in a control
+% sequence; best to stick with normal, seven-bit ASCII
+% letters. You then access the saved date with
+% \DescribeMacro{\restoredate}|\restoredate|, which takes
+% that same name as its argument.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \initcurrdate
+% \printdate\par
+% \savedate{current}
+% \advancebyweeks{12}
+% \printdate\par
+% \savedate{advanced}
+% \restoredate{current}
+% \printdate\par
+% \advancebydays{3}
+% \printdate\par
+% \restoredate{advanced}
+% \printdate\par
+% \restoredate{current}
+% \printdate\par
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% You can also retrieve your saved date directly; rather
+% than calling |\restoredate|, you can call
+% |\savedate<name>|, without the angle brackets. That's the
+% name that |texdate| uses internally, and calls with
+% |\restoredate| to get your information back.
+%
+%
+% \section{Convenience Macros}
+% \label{sect:convmacs}
+%
+% |texdate| offers a few macros for tasks which its author
+% anticipates will likely be common. For example, to
+% produce a small monthly calendar, consider using the
+% |\texdcal| macro, which takes two arguments: the year and
+% the month of the calendar you're seeking to create:
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \begin{center}
+% \begin{tabular}{cc}
+% \texdcal{2018}{5} &
+% \texdcal{2018}{6} \\
+% \texdcal{2018}{8} &
+% \texdcal{2018}{9} \\
+% \end{tabular}
+% \end{center}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% Notice that |\texdcal| does the right thing when there a
+% month goes into an extra week: it simply prints another
+% week. It also correctly refuses to print the days of a
+% week which do not belong to the requested month.
+%
+% \DescribeMacro{\texdcalyear}|\texdcalyear| will produce
+% one of these calendars for an entire year, in three
+% columns; the year chosen is the argument given to the
+% macro. Because the margins of the \LaTeX\ standard
+% classes are much too large (or rather, the paper sizes are
+% much too large; the text blocks are rather nicely
+% proportioned), |\texdcalyear| prints this calendar in a
+% small size, with very small space between columns.
+%
+% \bigskip
+% \hrule
+% \begin{Example}
+% \footnotesize%
+% \begin{center}
+% \texdcalyear{2018}
+% \end{center}
+% \end{Example}
+% \medskip
+% \hrule
+% \bigskip
+%
+% Obviously, it uses |\texdcal| internally to do this, so
+% the definition of |\texdcalyear| is much simpler than that
+% of |\texdcal|.
+%
+% Just as obviously, these yearly calendars
+% could easily be formatted in many different ways; so many,
+% in fact, that attempting to make the macros flexible
+% enough for meaningful customization would be prohibitively
+% difficult. More fruitful results can be obtained by
+% reading the macros themselves (they are truly not very
+% difficult) and customizing them oneself.
+%
+% \section{Language Specification}
+% \label{sect:lang}
+%
+% |texdate| does understand \LaTeX\ language specifications,
+% using Heiko Oberdiek's |iflang| package, which should work
+% for both |babel| and |polyglossia|. Built-in are
+% only English (the default), Spanish, French, and German.
+% However, it's pretty simple to customize the
+% month name and weekday name strings by defining a few
+% commands, so if you need a different language, you just
+% need to redefine a few strings.
+%
+% Each string begins with the prefix |\texd@|, then the
+% English ordinal string for the order in which it comes,
+% with January being the first month and Sunday being the
+% first weekday; e.g., |\texd@first|. Then comes |sh| if
+% it's an abbreviation; e.g., |\texd@firstsh|. Finally
+% comes the string |mon| if it's a month, or |name| if
+% it's a weekday name. Below is the complete list, for
+% German.
+%
+% \begin{quote}
+% |\makeatletter|\\
+% |\def\texd@firstmon{Januar}|\\
+% |\def\texd@firstshmon{Jan}|\\
+% |\def\texd@secondmon{Februar}|\\
+% |\def\texd@secondshmon{Feb}|\\
+% |\def\texd@thirdmon{März}|\\
+% |\def\texd@thirdshmon{März}|\\
+% |\def\texd@fourthmon{April}|\\
+% |\def\texd@fourthshmon{Apr}|\\
+% |\def\texd@fifthmon{Mai}|\\
+% |\def\texd@fifthshmon{Mai}|\\
+% |\def\texd@sixthmon{Juni}|\\
+% |\def\texd@sixthshmon{Juni}|\\
+% |\def\texd@seventhmon{Juli}|\\
+% |\def\texd@seventhshmon{Juli}|\\
+% |\def\texd@eighthmon{August}|\\
+% |\def\texd@eighthshmon{Aug}|\\
+% |\def\texd@ninthmon{September}|\\
+% |\def\texd@ninthshmon{Sept}|\\
+% |\def\texd@tenthmon{Oktober}|\\
+% |\def\texd@tenthshmon{Okt}|\\
+% |\def\texd@eleventhmon{November}|\\
+% |\def\texd@eleventhshmon{Nov}|\\
+% |\def\texd@twelfthmon{Dezember}|\\
+% |\def\texd@twelfthshmon{Dez}|\\
+% |\def\texd@firstdayname{Sonntag}|\\
+% |\def\texd@firstdayshname{So}|\\
+% |\def\texd@seconddayname{Montag}|\\
+% |\def\texd@seconddayshname{Mo}|\\
+% |\def\texd@thirddayname{Dienstag}|\\
+% |\def\texd@thirddayshname{Di}|\\
+% |\def\texd@fourthdayname{Mittwoch}|\\
+% |\def\texd@fourthdayshname{Mi}|\\
+% |\def\texd@fifthdayname{Donnerstag}|\\
+% |\def\texd@fifthdayshname{Do}|\\
+% |\def\texd@sixthdayname{Freitag}|\\
+% |\def\texd@sixthdayshname{Fr}|\\
+% |\def\texd@seventhdayname{Samstag}|\\
+% |\def\texd@seventhdayshname{Sa}|\\
+% |\makeatother|
+% \end{quote}
+%
+% Doing something like this for your desired language,
+% \emph{after} you've loaded |texdate|, will localize all
+% the strings involved.
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+\RequirePackage{modulus}%
+\RequirePackage{padcount}%
+\RequirePackage{iflang}%
+\newcount\texd@loopi\texd@loopi=0%
+\newcount\texd@mon\texd@mon=0%
+\newcount\texd@dow\texd@dow=0%
+\newcount\texd@dom\texd@dom=0%
+\newcount\texd@yr\texd@yr=\year%
+\newcount\texd@rdom\texd@rdom=\texd@dom\advance\texd@rdom by1%
+\newcount\texd@rmon%
+%% taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\def\texd@nextdow#1#2#3{%
+ \newcount\texd@dow% Gets day of the week
+ \newcount\texd@leap% Leap year fingaler
+ \newcount\texd@x% Temp register
+ \newcount\texd@y% Another temp register
+ \global\texd@leap=#2%
+ \global\advance\texd@leap by-14%
+ \global\divide\texd@leap by12%
+ \global\advance\texd@leap by#3%
+ \global\texd@dow=#2%
+ \global\advance\texd@dow by10%
+ \global\texd@y=\texd@dow%
+ \global\divide\texd@y by13%
+ \global\multiply\texd@y by12%
+ \global\advance\texd@dow by-\texd@y%
+ \global\multiply\texd@dow by13%
+ \global\advance\texd@dow by-1%
+ \global\divide\texd@dow by5%
+ \global\advance\texd@dow by#1%
+ \global\advance\texd@dow by77%
+ \global\texd@x=\texd@leap%
+ \global\texd@y=\texd@x%
+ \global\divide\texd@y by100%
+ \global\multiply\texd@y by100%
+ \global\advance\texd@x by-\texd@y%
+ \global\multiply\texd@x by5%
+ \global\divide\texd@x by4%
+ \global\advance\texd@dow by\texd@x%
+ \global\texd@x=\texd@leap%
+ \global\divide\texd@x by400%
+ \global\advance\texd@dow by\texd@x%
+ \global\texd@x=\texd@leap%
+ \global\divide\texd@x by100%
+ \global\multiply\texd@x by2%
+ \global\advance\texd@dow by-\texd@x%
+ \global\texd@x=\texd@dow%
+ \global\divide\texd@x by7%
+ \global\multiply\texd@x by7%
+ \global\advance\texd@dow by-\texd@x%
+}
+%% end taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\def\texd@leapyear{%
+}%
+\def\texd@downame{%
+ \ifcase\texd@dow
+ \texd@firstdayname%
+ \or%
+ \texd@seconddayname%
+ \or%
+ \texd@thirddayname%
+ \or%
+ \texd@fourthdayname%
+ \or%
+ \texd@fifthdayname%
+ \or%
+ \texd@sixthdayname%
+ \or%
+ \texd@seventhdayname%
+ \fi%
+}%
+\def\texd@shdowname{%
+ \ifcase\texd@dow
+ \texd@firstdayshname%
+ \or%
+ \texd@seconddayshname%
+ \or%
+ \texd@thirddayshname%
+ \or%
+ \texd@fourthdayshname%
+ \or%
+ \texd@fifthdayshname%
+ \or%
+ \texd@sixthdayshname%
+ \or%
+ \texd@seventhdayshname%
+ \fi%
+}%
+\def\texd@nextmonth{%
+ \ifnum\texd@mon<11\global\advance\texd@mon by1\fi%
+ \ifnum\texd@mon=11\global\texd@mon=0\fi%
+}%
+\def\texd@lastmonth{%
+ \ifnum\texd@mon=0%
+ \global\texd@mon=11%
+ \global\advance\texd@yr by-1%
+ \fi%
+ \ifnum\texd@mon>0\global\advance\texd@mon by-1\fi%
+}%
+\def\texd@nextdate{%
+ \ifnum\texd@mon=11%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@yr by1%
+ \global\texd@mon=0%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=10%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=9%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=8%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=7%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=6%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=5%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=4%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=3%
+ \ifnum\texd@dom=29%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<29%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=2%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@mon=1%
+ \ifnum\texd@leapyear=0%
+ \ifnum\texd@dom=27%
+ \global\advance\texd@mon by1%
+ \global\texd@dom=0%
+ \fi
+ \ifnum\texd@dom<27%
+ \global\advance\texd@dom by1%
+ \fi%
+ \else\ifnum\texd@leapyear=1%
+ \ifnum\texd@dom=28%
+ \global\advance\texd@mon by1%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<28%
+ \global\advance\texd@dom by1%
+ \fi%
+ \fi\fi%
+ \else\ifnum\texd@mon=0%
+ \ifnum\texd@dom=30%
+ \global\advance\texd@mon by1%%
+ \global\texd@dom=0%
+ \fi%
+ \ifnum\texd@dom<30%
+ \global\advance\texd@dom by1%
+ \fi%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+ \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@lastdate{%
+ \global\advance\texd@dom by-1%
+ \ifnum\texd@dom=0%
+ \global\advance\texd@mon by-1%
+ \ifnum\texd@mon=11%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=0%
+ \global\texd@mon=11%
+ \global\advance\texd@yr by-1%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=10%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=9%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=8%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=7%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=6%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=5%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=4%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=3%
+ \global\texd@dom=29%
+ \fi%
+ \ifnum\texd@mon=2%
+ \global\texd@dom=30%
+ \fi%
+ \ifnum\texd@mon=1%
+ \ifnum\texd@leapyear=0%
+ \global\texd@dom=27%
+ \else\ifnum\texd@leapyear=1%
+ \global\texd@dom=28%
+ \fi\fi%
+ \fi%
+ \ifnum\texd@mon=0%
+ \global\texd@dom=30%
+ \fi%
+ \fi%
+ \global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+ \global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@setrdom{\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1}%
+\def\texd@setrmon{\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1}%
+% \end{macrocode}
+% We have to deal with leap years somehow. We have the
+% counter |\texd@leapyear|, which is 0 if it's not a leap
+% year and 1 if it is. Then we have |\texd@isleapyear|,
+% which sets the counter appropriately.
+% \begin{macrocode}
+\newcount\texd@leapyear\texd@leapyear=0%
+\def\texd@isleapyear{%
+ \global\texd@leapyear=0%
+ \modulo{\texd@yr}{4}%
+ \ifnum\remainder=0%
+ \modulo{\texd@yr}{100}%
+ \ifnum\remainder=0%
+ \global\texd@leapyear=0%
+ \fi\ifnum\remainder>0%
+ \global\texd@leapyear=1%
+ \fi%
+ \fi%
+}%
+% \end{macrocode}
+% Print the month names.
+% \begin{macrocode}
+\def\texd@monthname{%
+ \ifnum\texd@mon=0%
+ \texd@firstmon%
+ \fi%
+ \ifnum\texd@mon=1%
+ \texd@secondmon%
+ \fi%
+ \ifnum\texd@mon=2%
+ \texd@thirdmon%
+ \fi%
+ \ifnum\texd@mon=3%
+ \texd@fourthmon%
+ \fi%
+ \ifnum\texd@mon=4%
+ \texd@fifthmon%
+ \fi%
+ \ifnum\texd@mon=5%
+ \texd@sixthmon%
+ \fi%
+ \ifnum\texd@mon=6%
+ \texd@seventhmon%
+ \fi%
+ \ifnum\texd@mon=7%
+ \texd@eighthmon%
+ \fi%
+ \ifnum\texd@mon=8%
+ \texd@ninthmon%
+ \fi%
+ \ifnum\texd@mon=9%
+ \texd@tenthmon%
+ \fi%
+ \ifnum\texd@mon=10%
+ \texd@eleventhmon%
+ \fi%
+ \ifnum\texd@mon=11%
+ \texd@twelfthmon%
+ \fi%
+}%
+\def\texd@shmonthname{%
+ \ifnum\texd@mon=0%
+ \texd@firstshmon%
+ \fi%
+ \ifnum\texd@mon=1%
+ \texd@secondshmon%
+ \fi%
+ \ifnum\texd@mon=2%
+ \texd@thirdshmon%
+ \fi%
+ \ifnum\texd@mon=3%
+ \texd@fourthshmon%
+ \fi%
+ \ifnum\texd@mon=4%
+ \texd@fifthshmon%
+ \fi%
+ \ifnum\texd@mon=5%
+ \texd@sixthshmon%
+ \fi%
+ \ifnum\texd@mon=6%
+ \texd@seventhshmon%
+ \fi%
+ \ifnum\texd@mon=7%
+ \texd@eighthshmon%
+ \fi%
+ \ifnum\texd@mon=8%
+ \texd@ninthshmon%
+ \fi%
+ \ifnum\texd@mon=9%
+ \texd@tenthshmon%
+ \fi%
+ \ifnum\texd@mon=10%
+ \texd@eleventhshmon%
+ \fi%
+ \ifnum\texd@mon=11%
+ \texd@twelfthshmon%
+ \fi%
+}%
+% \end{macrocode}
+% Here we define the |\advanceby|s, so that you can add move
+% the internal date forward by a given number of units. Does
+% \emph{not} print the date.
+% \begin{macrocode}
+\def\advancebydays#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@nextdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\regressbydays#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@lastdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\newcount\texd@loopj%
+\def\advancebyweeks#1{%
+ \texd@loopi=0%
+ \texd@loopj=#1%
+ \multiply\texd@loopj by7%
+ \loop%
+ \ifnum\texd@loopi<\texd@loopj%
+ \texd@nextdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\regressbyweeks#1{%
+ \texd@loopi=0%
+ \texd@loopj=#1%
+ \multiply\texd@loopj by7%
+ \loop%
+ \ifnum\texd@loopi<\texd@loopj%
+ \texd@lastdate%
+ \advance\texd@loopi by1%
+ \repeat%
+}%
+\def\advancebymonths#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@nextmonth%
+ \advance\texd@loopi by1%
+ \repeat%
+ \texd@setrmon%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+\def\regressbymonths#1{%
+ \texd@loopi=0%
+ \loop%
+ \ifnum\texd@loopi<#1%
+ \texd@lastmonth%
+ \advance\texd@loopi by1%
+ \repeat%
+ \texd@setrmon%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+% \end{macrocode}
+% Print the date, either with the default format or a named
+% format.
+% \begin{macrocode}
+\def\printdate{%
+ \texd@dateformat%
+}%
+\def\printfdate#1{%
+ \texd@formatdateformat{#1}%
+}%
+% \end{macrocode}
+% This defines the date format. We need some helper macros
+% to flip through each character one at a time.
+% \begin{macrocode}
+\def\texd@expandloop#1{%
+ \texd@xloop#1\relax
+}
+\def\texdatenumformat#1{#1}
+\def\texd@xloop#1{%
+ \ifx\relax#1%
+ \else%
+ \ifx#1d%
+ \setpadnum{2}\setpadchar{0}%
+ \padnum{\texdatenumformat{\the\texd@rdom}}%
+ \else\ifx#1e%
+ \setpadnum{2}\setpadchar{\hskip1ex}%
+ \padnum{\texdatenumformat{\the\texd@rdom}}%
+ \else\ifx#1a%
+ \texd@shdowname%
+ \else\ifx#1A%
+ \texd@downame%
+ \else\ifx#1b%
+ \texd@shmonthname%
+ \else\ifx#1h%
+ \texd@shmonthname%
+ \else\ifx#1B%
+ \texd@monthname%
+ \else\ifx#1w%
+ \the\texd@dow%
+ \else\ifx#1u%
+ \ifnum\texd@dow>0\leavevmode\texdatenumformat{\the\texd@dow}\fi%
+ \ifnum\texd@dow=0 7\fi%
+ \else\ifx#1Y%
+ \setpadnum{2}\setpadchar{0}%
+ \padnum{\texdatenumformat{\the\texd@yr}}%
+ \else\ifx#1m%
+ \texd@setrmon%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\texd@rmon}}%
+ \else\ifx#1j%
+ \texd@setjnum%
+ \setpadnum{3}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\texd@jnum}}%
+ \else\ifx#1C%
+ \quotient{\texd@yr}{100}%
+ \leavevmode\texdatenumformat{\the\intquotient}%
+ \else\ifx#1y%
+ \modulo{\texd@yr}{100}%
+ \leavevmode\texdatenumformat{\the\remainder}%
+ \else\ifx#1U%
+ \quotient{\texd@jnum}{7}
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else\ifx#1V%
+ \quotient{\texd@jnum}{7}
+ \ifnum\texd@dow>0\advance\intquotient by1\fi%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else\ifx#1W%
+ \quotient{\texd@jnum}{7}
+ \ifnum\texd@dow=0\advance\intquotient by-1\fi%
+ \setpadnum{2}\setpadchar{0}%
+ \leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+ \else%
+ #1%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+ \expandafter\texd@xloop%
+ \fi%
+}%
+\def\texd@dateformat{%
+ \expandafter\expandafter\texd@expandloop{\setdateformat}%
+}%
+\def\texd@formatdateformat#1{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\texd@expandloop{\csname texd@df#1\endcsname}%
+}%
+\def\setdateformat{A{ }(a),\ B\ (b){ }d,\ Y}
+\def\nameddateformat#1#2{%
+ \expandafter\def\csname texd@df#1\endcsname{#2}%
+}%
+\nameddateformat{american}{B\ d,\ Y}
+\nameddateformat{shamerican}{m/d/Y}
+\nameddateformat{ISO}{Ymd}
+\nameddateformat{ISOext}{Y-m-d}
+\nameddateformat{shbritish}{d/m/Y}
+\nameddateformat{shbritishdots}{d.m.Y}
+\nameddateformat{british}{d\ B\ Y}
+\nameddateformat{d}{d}
+\nameddateformat{e}{e}
+\nameddateformat{B}{B}
+\nameddateformat{b}{b}
+\nameddateformat{h}{h}
+\nameddateformat{m}{m}
+\nameddateformat{A}{A}
+\nameddateformat{a}{a}
+\nameddateformat{w}{w}
+\nameddateformat{u}{u}
+\nameddateformat{Y}{Y}
+\nameddateformat{j}{j}
+\nameddateformat{C}{C}
+\nameddateformat{y}{y}
+\nameddateformat{U}{U}
+\nameddateformat{V}{V}
+\nameddateformat{W}{W}
+% \end{macrocode}
+% Initialize the date to the current date, or to an
+% arbitrary date, entered in the order year, month, and day
+% of month.
+% \begin{macrocode}
+\def\initcurrdate{%
+ \global\texd@mon=\month%
+ \global\advance\texd@mon by-1%
+ \global\texd@dom=\day%
+ \global\advance\texd@dom by-1%
+ \global\texd@yr=\year%
+ \texd@isleapyear%
+ \texd@setrdom%
+ \texd@setrmon%
+ \texd@setjnum%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\initdate#1#2#3{%
+ \global\texd@yr=#1%
+ \global\texd@mon=#2%
+ \global\advance\texd@mon by-1%
+ \global\texd@dom=#3%
+ \global\advance\texd@dom by-1%
+ \global\texd@setrdom%
+ \global\texd@setrmon%
+ \texd@setjnum%
+ \texd@isleapyear%
+ \texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+% \end{macrocode}
+% Now we define the macros for saving and restoring dates.
+% \begin{macrocode}
+\def\savedate#1{%
+ \expandafter\edef\csname savedate#1\endcsname{\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}}%
+}%
+\def\restoredate#1{%
+ \csname savedate#1\endcsname%
+}%
+% \end{macrocode}
+% Convenience macros. First, |\texdcal|.
+% \begin{macrocode}
+\newcount\texd@looptmp\texd@looptmp=0%
+\def\texdcal#1#2{%
+ \global\texd@mon=#2%
+ \global\advance\texd@mon by-1%
+ \global\texd@yr=#1%
+ \global\texd@dom=0%
+ \texd@setrmon\texd@setrdom%
+ \initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+ \def\setdateformat{B\ Y}%
+ \begin{tabular}{rrrrrrr}
+ \multicolumn{7}{c}{\printdate} \\
+ \loop\ifnum\texd@dow>0\texd@lastdate\repeat%
+ \def\setdateformat{d}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi\\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate &
+ \def\setdateformat{d}\advancebydays{1}\printdate \\
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+ \def\setdateformat{d}\advancebydays{1}%
+ \ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+ \end{tabular}
+}%
+\def\texdcalyear#1{%
+ \texd@yr=#1%
+ \texd@mon=0%
+ \texd@dom=0%
+ \texd@setrmon%
+ \texd@setrdom%
+ {\tabcolsep=3pt%
+ \begin{tabular}{ccc}
+ \texdcal{#1}{1} & \texdcal{#1}{2} & \texdcal{#1}{3} \\
+ \texdcal{#1}{4} & \texdcal{#1}{5} & \texdcal{#1}{6} \\
+ \texdcal{#1}{7} & \texdcal{#1}{8} & \texdcal{#1}{9} \\
+ \texdcal{#1}{10} & \texdcal{#1}{11} & \texdcal{#1}{12} \\
+ \end{tabular}
+ }%
+}%
+% \end{macrocode}
+% Calculate the day of the year (|%j|).
+% \begin{macrocode}
+\newcount\texd@jnum\texd@jnum=0%
+\def\texd@setjnum{%
+ \texd@jnum=0%
+ \ifnum\texd@mon>0\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>1%
+ \global\advance\texd@jnum by28%
+ \fi%
+ \ifnum\texd@mon>2\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>3\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>4\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>5\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>6\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>7\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>8\global\advance\texd@jnum by30\fi%
+ \ifnum\texd@mon>9\global\advance\texd@jnum by31\fi%
+ \ifnum\texd@mon>10\global\advance\texd@jnum by30\fi%
+ \global\advance\texd@jnum by\the\texd@dom%
+ \global\advance\texd@jnum by1%
+}%
+% \end{macrocode}
+% Language strings. I've only got English here right now, but
+% additiona languages would be trivial to add, either in a
+% particular document, or in a separate package.
+% \begin{macrocode}
+\def\texd@firstmon{January}%
+\def\texd@firstshmon{Jan}%
+\def\texd@secondmon{February}%
+\def\texd@secondshmon{Feb}%
+\def\texd@thirdmon{March}%
+\def\texd@thirdshmon{Mar}%
+\def\texd@fourthmon{April}%
+\def\texd@fourthshmon{Apr}%
+\def\texd@fifthmon{May}%
+\def\texd@fifthshmon{May}%
+\def\texd@sixthmon{June}%
+\def\texd@sixthshmon{Jun}%
+\def\texd@seventhmon{July}%
+\def\texd@seventhshmon{Jul}%
+\def\texd@eighthmon{August}%
+\def\texd@eighthshmon{Aug}%
+\def\texd@ninthmon{September}%
+\def\texd@ninthshmon{Sep}%
+\def\texd@tenthmon{October}%
+\def\texd@tenthshmon{Oct}%
+\def\texd@eleventhmon{November}%
+\def\texd@eleventhshmon{Nov}%
+\def\texd@twelfthmon{December}%
+\def\texd@twelfthshmon{Dec}%
+\def\texd@firstdayname{Sunday}%
+\def\texd@firstdayshname{Sun}%
+\def\texd@seconddayname{Monday}%
+\def\texd@seconddayshname{Mon}%
+\def\texd@thirddayname{Tuesday}%
+\def\texd@thirddayshname{Tue}%
+\def\texd@fourthdayname{Wednesday}%
+\def\texd@fourthdayshname{Wed}%
+\def\texd@fifthdayname{Thursday}%
+\def\texd@fifthdayshname{Thu}%
+\def\texd@sixthdayname{Friday}%
+\def\texd@sixthdayshname{Fri}%
+\def\texd@seventhdayname{Saturday}%
+\def\texd@seventhdayshname{Sat}%
+\AtBeginDocument{%
+ \IfLanguageName{spanish}{%
+ \def\texd@firstmon{enero}%
+ \def\texd@firstshmon{ene}%
+ \def\texd@secondmon{febrero}%
+ \def\texd@secondshmon{feb}%
+ \def\texd@thirdmon{marzo}%
+ \def\texd@thirdshmon{mar}%
+ \def\texd@fourthmon{abril}%
+ \def\texd@fourthshmon{abr}%
+ \def\texd@fifthmon{mayo}%
+ \def\texd@fifthshmon{may}%
+ \def\texd@sixthmon{junio}%
+ \def\texd@sixthshmon{jun}%
+ \def\texd@seventhmon{julio}%
+ \def\texd@seventhshmon{jul}%
+ \def\texd@eighthmon{agosto}%
+ \def\texd@eighthshmon{ago}%
+ \def\texd@ninthmon{septiembre}%
+ \def\texd@ninthshmon{sep}%
+ \def\texd@tenthmon{octubre}%
+ \def\texd@tenthshmon{oct}%
+ \def\texd@eleventhmon{noviembre}%
+ \def\texd@eleventhshmon{nov}%
+ \def\texd@twelfthmon{diciembre}%
+ \def\texd@twelfthshmon{dic}%
+ \def\texd@firstdayname{domingo}%
+ \def\texd@firstdayshname{dom}%
+ \def\texd@seconddayname{lunes}%
+ \def\texd@seconddayshname{lun}%
+ \def\texd@thirddayname{martes}%
+ \def\texd@thirddayshname{mar}%
+ \def\texd@fourthdayname{miercoles}%
+ \def\texd@fourthdayshname{mie}%
+ \def\texd@fifthdayname{jueves}%
+ \def\texd@fifthdayshname{jue}%
+ \def\texd@sixthdayname{viernes}%
+ \def\texd@sixthdayshname{vie}%
+ \def\texd@seventhdayname{sabado}%
+ \def\texd@seventhdayshname{sab}%
+ }{}%
+ \IfLanguageName{french}{%
+ \def\texd@firstmon{janvier}%
+ \def\texd@firstshmon{janv}%
+ \def\texd@secondmon{février}%
+ \def\texd@secondshmon{févr}%
+ \def\texd@thirdmon{mars}%
+ \def\texd@thirdshmon{mars}%
+ \def\texd@fourthmon{avril}%
+ \def\texd@fourthshmon{avr}%
+ \def\texd@fifthmon{mai}%
+ \def\texd@fifthshmon{mai}%
+ \def\texd@sixthmon{juin}%
+ \def\texd@sixthshmon{juin}%
+ \def\texd@seventhmon{juil}%
+ \def\texd@seventhshmon{juil}%
+ \def\texd@eighthmon{août}%
+ \def\texd@eighthshmon{août}%
+ \def\texd@ninthmon{septembre}%
+ \def\texd@ninthshmon{sept}%
+ \def\texd@tenthmon{octobre}%
+ \def\texd@tenthshmon{oct}%
+ \def\texd@eleventhmon{novembre}%
+ \def\texd@eleventhshmon{nov}%
+ \def\texd@twelfthmon{décembre}%
+ \def\texd@twelfthshmon{déc}%
+ \def\texd@firstdayname{dimanche}%
+ \def\texd@firstdayshname{dim}%
+ \def\texd@seconddayname{lundi}%
+ \def\texd@seconddayshname{lun}%
+ \def\texd@thirddayname{mardi}%
+ \def\texd@thirddayshname{mar}%
+ \def\texd@fourthdayname{mercredi}%
+ \def\texd@fourthdayshname{mer}%
+ \def\texd@fifthdayname{jeudi}%
+ \def\texd@fifthdayshname{jeu}%
+ \def\texd@sixthdayname{vendredi}%
+ \def\texd@sixthdayshname{ven}%
+ \def\texd@seventhdayname{samedi}%
+ \def\texd@seventhdayshname{sam}%
+ }{}%
+ \IfLanguageName{german}{%
+ \def\texd@firstmon{Januar}%
+ \def\texd@firstshmon{Jan}%
+ \def\texd@secondmon{Februar}%
+ \def\texd@secondshmon{Feb}%
+ \def\texd@thirdmon{März}%
+ \def\texd@thirdshmon{März}%
+ \def\texd@fourthmon{April}%
+ \def\texd@fourthshmon{Apr}%
+ \def\texd@fifthmon{Mai}%
+ \def\texd@fifthshmon{Mai}%
+ \def\texd@sixthmon{Juni}%
+ \def\texd@sixthshmon{Juni}%
+ \def\texd@seventhmon{Juli}%
+ \def\texd@seventhshmon{Juli}%
+ \def\texd@eighthmon{August}%
+ \def\texd@eighthshmon{Aug}%
+ \def\texd@ninthmon{September}%
+ \def\texd@ninthshmon{Sept}%
+ \def\texd@tenthmon{Oktober}%
+ \def\texd@tenthshmon{Okt}%
+ \def\texd@eleventhmon{November}%
+ \def\texd@eleventhshmon{Nov}%
+ \def\texd@twelfthmon{Dezember}%
+ \def\texd@twelfthshmon{Dez}%
+ \def\texd@firstdayname{Sonntag}%
+ \def\texd@firstdayshname{So}%
+ \def\texd@seconddayname{Montag}%
+ \def\texd@seconddayshname{Mo}%
+ \def\texd@thirddayname{Dienstag}%
+ \def\texd@thirddayshname{Di}%
+ \def\texd@fourthdayname{Mittwoch}%
+ \def\texd@fourthdayshname{Mi}%
+ \def\texd@fifthdayname{Donnerstag}%
+ \def\texd@fifthdayshname{Do}%
+ \def\texd@sixthdayname{Freitag}%
+ \def\texd@sixthdayshname{Fr}%
+ \def\texd@seventhdayname{Samstag}%
+ \def\texd@seventhdayshname{Sa}%
+ }{}%
+}%
+% \end{macrocode}
+% Happy \TeX{}ing!
diff --git a/Master/texmf-dist/source/generic/texdate/texdate.ins b/Master/texmf-dist/source/generic/texdate/texdate.ins
new file mode 100644
index 00000000000..79ff625b30e
--- /dev/null
+++ b/Master/texmf-dist/source/generic/texdate/texdate.ins
@@ -0,0 +1,65 @@
+% +AMDG
+% This document was begun on 12 Apr 1202, the feast of St.
+% Justin Martyr, and it is humbly dedicated to him and to
+% the Immaculate Heart of Mary, for their prayers, and to
+% the Sacred Heart of Jesus, for His mercy.
+%
+% This document is copyright 2018 by Donald P. Goodman, and is
+% released publicly under the LaTeX Project Public License. The
+% distribution and modification of this work is constrained by the
+% conditions of that license. See
+% http://www.latex-project.org/lppl.txt
+% for the text of the license. This document is released
+% under version 1.3(c) of that license, and this work may be distributed
+% or modified under the terms of that license or, at your option, any
+% later version.
+%
+% This work has the LPPL maintenance status 'maintained'.
+%
+% The Current Maintainer of this work is Donald P. Goodman
+% (dgoodmaniii@gmail.com).
+%
+% This work consists of texdate.dtx, texdate.ins, and
+% derived files texdate.sty and texdate.pdf.
+
+\input docstrip.tex
+
+\preamble
+This is a generated file.
+
+This document is copyright 2018 by Donald P. Goodman, and is
+released publicly under the LaTeX Project Public License. The
+distribution and modification of this work is constrained by the
+conditions of that license. See
+ http://www.latex-project.org/lppl.txt
+for the text of the license. This document is released
+under version 1.3(c) of that license, and this work may be distributed
+or modified under the terms of that license or, at your option, any
+later version.
+
+This work has the LPPL maintenance status 'maintained'.
+
+The Current Maintainer of this work is Donald P. Goodman
+(dgoodmaniii@gmail.com).
+
+This work consists of texdate.dtx, texdate.ins, and
+derived files texdate.sty and texdate.pdf.
+\endpreamble
+
+\keepsilent
+\generate{\file{texdate.sty}{\from{texdate.dtx}{package}}}
+
+\Msg{******************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space texdate.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file texdate.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{******************************************************}
+
+\endbatchfile
diff --git a/Master/texmf-dist/tex/generic/texdate/texdate.sty b/Master/texmf-dist/tex/generic/texdate/texdate.sty
new file mode 100644
index 00000000000..6119e3e830f
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/texdate/texdate.sty
@@ -0,0 +1,856 @@
+%%
+%% This is file `texdate.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% texdate.dtx (with options: `package')
+%% This is a generated file.
+%%
+%% This document is copyright 2018 by Donald P. Goodman, and is
+%% released publicly under the LaTeX Project Public License. The
+%% distribution and modification of this work is constrained by the
+%% conditions of that license. See
+%% http://www.latex-project.org/lppl.txt
+%% for the text of the license. This document is released
+%% under version 1.3(c) of that license, and this work may be distributed
+%% or modified under the terms of that license or, at your option, any
+%% later version.
+%%
+%% This work has the LPPL maintenance status 'maintained'.
+%%
+%% The Current Maintainer of this work is Donald P. Goodman
+%% (dgoodmaniii@gmail.com).
+%%
+%% This work consists of texdate.dtx, texdate.ins, and
+%% derived files texdate.sty and texdate.pdf.
+
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{texdate}[2018/05/30 v1.0 Print and manipulate dates in plain TeX]
+\RequirePackage{modulus}%
+\RequirePackage{padcount}%
+\RequirePackage{iflang}%
+\newcount\texd@loopi\texd@loopi=0%
+\newcount\texd@mon\texd@mon=0%
+\newcount\texd@dow\texd@dow=0%
+\newcount\texd@dom\texd@dom=0%
+\newcount\texd@yr\texd@yr=\year%
+\newcount\texd@rdom\texd@rdom=\texd@dom\advance\texd@rdom by1%
+\newcount\texd@rmon%
+%% taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\def\texd@nextdow#1#2#3{%
+\newcount\texd@dow% Gets day of the week
+\newcount\texd@leap% Leap year fingaler
+\newcount\texd@x% Temp register
+\newcount\texd@y% Another temp register
+\global\texd@leap=#2%
+\global\advance\texd@leap by-14%
+\global\divide\texd@leap by12%
+\global\advance\texd@leap by#3%
+\global\texd@dow=#2%
+\global\advance\texd@dow by10%
+\global\texd@y=\texd@dow%
+\global\divide\texd@y by13%
+\global\multiply\texd@y by12%
+\global\advance\texd@dow by-\texd@y%
+\global\multiply\texd@dow by13%
+\global\advance\texd@dow by-1%
+\global\divide\texd@dow by5%
+\global\advance\texd@dow by#1%
+\global\advance\texd@dow by77%
+\global\texd@x=\texd@leap%
+\global\texd@y=\texd@x%
+\global\divide\texd@y by100%
+\global\multiply\texd@y by100%
+\global\advance\texd@x by-\texd@y%
+\global\multiply\texd@x by5%
+\global\divide\texd@x by4%
+\global\advance\texd@dow by\texd@x%
+\global\texd@x=\texd@leap%
+\global\divide\texd@x by400%
+\global\advance\texd@dow by\texd@x%
+\global\texd@x=\texd@leap%
+\global\divide\texd@x by100%
+\global\multiply\texd@x by2%
+\global\advance\texd@dow by-\texd@x%
+\global\texd@x=\texd@dow%
+\global\divide\texd@x by7%
+\global\multiply\texd@x by7%
+\global\advance\texd@dow by-\texd@x%
+}
+%% end taken from dayofweek.tex, by Martin Minow of DEC;
+%% included in TeXLive
+\def\texd@leapyear{%
+}%
+\def\texd@downame{%
+ \ifcase\texd@dow
+\texd@firstdayname%
+\or%
+\texd@seconddayname%
+\or%
+\texd@thirddayname%
+\or%
+\texd@fourthdayname%
+\or%
+\texd@fifthdayname%
+\or%
+\texd@sixthdayname%
+\or%
+\texd@seventhdayname%
+\fi%
+}%
+\def\texd@shdowname{%
+ \ifcase\texd@dow
+\texd@firstdayshname%
+\or%
+\texd@seconddayshname%
+\or%
+\texd@thirddayshname%
+\or%
+\texd@fourthdayshname%
+\or%
+\texd@fifthdayshname%
+\or%
+\texd@sixthdayshname%
+\or%
+\texd@seventhdayshname%
+\fi%
+}%
+\def\texd@nextmonth{%
+\ifnum\texd@mon<11\global\advance\texd@mon by1\fi%
+\ifnum\texd@mon=11\global\texd@mon=0\fi%
+}%
+\def\texd@lastmonth{%
+\ifnum\texd@mon=0%
+\global\texd@mon=11%
+\global\advance\texd@yr by-1%
+\fi%
+\ifnum\texd@mon>0\global\advance\texd@mon by-1\fi%
+}%
+\def\texd@nextdate{%
+\ifnum\texd@mon=11%
+\ifnum\texd@dom=30%
+\global\advance\texd@yr by1%
+\global\texd@mon=0%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=10%
+\ifnum\texd@dom=29%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<29%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=9%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=8%
+\ifnum\texd@dom=29%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<29%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=7%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=6%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=5%
+\ifnum\texd@dom=29%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<29%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=4%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=3%
+\ifnum\texd@dom=29%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<29%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=2%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@mon=1%
+\ifnum\texd@leapyear=0%
+\ifnum\texd@dom=27%
+\global\advance\texd@mon by1%
+\global\texd@dom=0%
+\fi
+\ifnum\texd@dom<27%
+\global\advance\texd@dom by1%
+\fi%
+\else\ifnum\texd@leapyear=1%
+\ifnum\texd@dom=28%
+\global\advance\texd@mon by1%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<28%
+\global\advance\texd@dom by1%
+\fi%
+\fi\fi%
+\else\ifnum\texd@mon=0%
+\ifnum\texd@dom=30%
+\global\advance\texd@mon by1%%
+\global\texd@dom=0%
+\fi%
+\ifnum\texd@dom<30%
+\global\advance\texd@dom by1%
+\fi%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+\texd@setjnum%
+\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@lastdate{%
+\global\advance\texd@dom by-1%
+\ifnum\texd@dom=0%
+\global\advance\texd@mon by-1%
+\ifnum\texd@mon=11%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=0%
+\global\texd@mon=11%
+\global\advance\texd@yr by-1%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=10%
+\global\texd@dom=29%
+\fi%
+\ifnum\texd@mon=9%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=8%
+\global\texd@dom=29%
+\fi%
+\ifnum\texd@mon=7%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=6%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=5%
+\global\texd@dom=29%
+\fi%
+\ifnum\texd@mon=4%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=3%
+\global\texd@dom=29%
+\fi%
+\ifnum\texd@mon=2%
+\global\texd@dom=30%
+\fi%
+\ifnum\texd@mon=1%
+\ifnum\texd@leapyear=0%
+\global\texd@dom=27%
+\else\ifnum\texd@leapyear=1%
+\global\texd@dom=28%
+\fi\fi%
+\fi%
+\ifnum\texd@mon=0%
+\global\texd@dom=30%
+\fi%
+\fi%
+\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1%
+\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1%
+\texd@setjnum%
+\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\texd@setrdom{\global\texd@rdom=\texd@dom\global\advance\texd@rdom by1}%
+\def\texd@setrmon{\global\texd@rmon=\texd@mon\global\advance\texd@rmon by1}%
+\newcount\texd@leapyear\texd@leapyear=0%
+\def\texd@isleapyear{%
+\global\texd@leapyear=0%
+\modulo{\texd@yr}{4}%
+\ifnum\remainder=0%
+\modulo{\texd@yr}{100}%
+\ifnum\remainder=0%
+\global\texd@leapyear=0%
+\fi\ifnum\remainder>0%
+\global\texd@leapyear=1%
+\fi%
+\fi%
+}%
+\def\texd@monthname{%
+\ifnum\texd@mon=0%
+\texd@firstmon%
+\fi%
+\ifnum\texd@mon=1%
+\texd@secondmon%
+\fi%
+\ifnum\texd@mon=2%
+\texd@thirdmon%
+\fi%
+\ifnum\texd@mon=3%
+\texd@fourthmon%
+\fi%
+\ifnum\texd@mon=4%
+\texd@fifthmon%
+\fi%
+\ifnum\texd@mon=5%
+\texd@sixthmon%
+\fi%
+\ifnum\texd@mon=6%
+\texd@seventhmon%
+\fi%
+\ifnum\texd@mon=7%
+\texd@eighthmon%
+\fi%
+\ifnum\texd@mon=8%
+\texd@ninthmon%
+\fi%
+\ifnum\texd@mon=9%
+\texd@tenthmon%
+\fi%
+\ifnum\texd@mon=10%
+\texd@eleventhmon%
+\fi%
+\ifnum\texd@mon=11%
+\texd@twelfthmon%
+\fi%
+}%
+\def\texd@shmonthname{%
+\ifnum\texd@mon=0%
+\texd@firstshmon%
+\fi%
+\ifnum\texd@mon=1%
+\texd@secondshmon%
+\fi%
+\ifnum\texd@mon=2%
+\texd@thirdshmon%
+\fi%
+\ifnum\texd@mon=3%
+\texd@fourthshmon%
+\fi%
+\ifnum\texd@mon=4%
+\texd@fifthshmon%
+\fi%
+\ifnum\texd@mon=5%
+\texd@sixthshmon%
+\fi%
+\ifnum\texd@mon=6%
+\texd@seventhshmon%
+\fi%
+\ifnum\texd@mon=7%
+\texd@eighthshmon%
+\fi%
+\ifnum\texd@mon=8%
+\texd@ninthshmon%
+\fi%
+\ifnum\texd@mon=9%
+\texd@tenthshmon%
+\fi%
+\ifnum\texd@mon=10%
+\texd@eleventhshmon%
+\fi%
+\ifnum\texd@mon=11%
+\texd@twelfthshmon%
+\fi%
+}%
+\def\advancebydays#1{%
+\texd@loopi=0%
+\loop%
+\ifnum\texd@loopi<#1%
+\texd@nextdate%
+\advance\texd@loopi by1%
+\repeat%
+}%
+\def\regressbydays#1{%
+\texd@loopi=0%
+\loop%
+\ifnum\texd@loopi<#1%
+\texd@lastdate%
+\advance\texd@loopi by1%
+\repeat%
+}%
+\newcount\texd@loopj%
+\def\advancebyweeks#1{%
+\texd@loopi=0%
+\texd@loopj=#1%
+\multiply\texd@loopj by7%
+\loop%
+\ifnum\texd@loopi<\texd@loopj%
+\texd@nextdate%
+\advance\texd@loopi by1%
+\repeat%
+}%
+\def\regressbyweeks#1{%
+\texd@loopi=0%
+\texd@loopj=#1%
+\multiply\texd@loopj by7%
+\loop%
+\ifnum\texd@loopi<\texd@loopj%
+\texd@lastdate%
+\advance\texd@loopi by1%
+\repeat%
+}%
+\def\advancebymonths#1{%
+\texd@loopi=0%
+\loop%
+\ifnum\texd@loopi<#1%
+\texd@nextmonth%
+\advance\texd@loopi by1%
+\repeat%
+\texd@setrmon%
+\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+\def\regressbymonths#1{%
+\texd@loopi=0%
+\loop%
+\ifnum\texd@loopi<#1%
+\texd@lastmonth%
+\advance\texd@loopi by1%
+\repeat%
+\texd@setrmon%
+\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+}%
+\def\printdate{%
+\texd@dateformat%
+}%
+\def\printfdate#1{%
+\texd@formatdateformat{#1}%
+}%
+\def\texd@expandloop#1{%
+\texd@xloop#1\relax
+}
+\def\texdatenumformat#1{#1}
+\def\texd@xloop#1{%
+\ifx\relax#1%
+\else%
+\ifx#1d%
+\setpadnum{2}\setpadchar{0}%
+\padnum{\texdatenumformat{\the\texd@rdom}}%
+\else\ifx#1e%
+\setpadnum{2}\setpadchar{\hskip1ex}%
+\padnum{\texdatenumformat{\the\texd@rdom}}%
+\else\ifx#1a%
+\texd@shdowname%
+\else\ifx#1A%
+\texd@downame%
+\else\ifx#1b%
+\texd@shmonthname%
+\else\ifx#1h%
+\texd@shmonthname%
+\else\ifx#1B%
+\texd@monthname%
+\else\ifx#1w%
+\the\texd@dow%
+\else\ifx#1u%
+\ifnum\texd@dow>0\leavevmode\texdatenumformat{\the\texd@dow}\fi%
+\ifnum\texd@dow=0 7\fi%
+\else\ifx#1Y%
+\setpadnum{2}\setpadchar{0}%
+\padnum{\texdatenumformat{\the\texd@yr}}%
+\else\ifx#1m%
+\texd@setrmon%
+\setpadnum{2}\setpadchar{0}%
+\leavevmode\padnum{\texdatenumformat{\the\texd@rmon}}%
+\else\ifx#1j%
+\texd@setjnum%
+\setpadnum{3}\setpadchar{0}%
+\leavevmode\padnum{\texdatenumformat{\the\texd@jnum}}%
+\else\ifx#1C%
+\quotient{\texd@yr}{100}%
+\leavevmode\texdatenumformat{\the\intquotient}%
+\else\ifx#1y%
+\modulo{\texd@yr}{100}%
+\leavevmode\texdatenumformat{\the\remainder}%
+\else\ifx#1U%
+\quotient{\texd@jnum}{7}
+\setpadnum{2}\setpadchar{0}%
+\leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+\else\ifx#1V%
+\quotient{\texd@jnum}{7}
+\ifnum\texd@dow>0\advance\intquotient by1\fi%
+\setpadnum{2}\setpadchar{0}%
+\leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+\else\ifx#1W%
+\quotient{\texd@jnum}{7}
+\ifnum\texd@dow=0\advance\intquotient by-1\fi%
+\setpadnum{2}\setpadchar{0}%
+\leavevmode\padnum{\texdatenumformat{\the\intquotient}}%
+\else%
+#1%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
+\expandafter\texd@xloop%
+\fi%
+}%
+\def\texd@dateformat{%
+\expandafter\expandafter\texd@expandloop{\setdateformat}%
+}%
+\def\texd@formatdateformat#1{%
+\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\texd@expandloop{\csname texd@df#1\endcsname}%
+}%
+\def\setdateformat{A{ }(a),\ B\ (b){ }d,\ Y}
+\def\nameddateformat#1#2{%
+\expandafter\def\csname texd@df#1\endcsname{#2}%
+}%
+\nameddateformat{american}{B\ d,\ Y}
+\nameddateformat{shamerican}{m/d/Y}
+\nameddateformat{ISO}{Ymd}
+\nameddateformat{ISOext}{Y-m-d}
+\nameddateformat{shbritish}{d/m/Y}
+\nameddateformat{shbritishdots}{d.m.Y}
+\nameddateformat{british}{d\ B\ Y}
+\nameddateformat{d}{d}
+\nameddateformat{e}{e}
+\nameddateformat{B}{B}
+\nameddateformat{b}{b}
+\nameddateformat{h}{h}
+\nameddateformat{m}{m}
+\nameddateformat{A}{A}
+\nameddateformat{a}{a}
+\nameddateformat{w}{w}
+\nameddateformat{u}{u}
+\nameddateformat{Y}{Y}
+\nameddateformat{j}{j}
+\nameddateformat{C}{C}
+\nameddateformat{y}{y}
+\nameddateformat{U}{U}
+\nameddateformat{V}{V}
+\nameddateformat{W}{W}
+\def\initcurrdate{%
+\global\texd@mon=\month%
+\global\advance\texd@mon by-1%
+\global\texd@dom=\day%
+\global\advance\texd@dom by-1%
+\global\texd@yr=\year%
+\texd@isleapyear%
+\texd@setrdom%
+\texd@setrmon%
+\texd@setjnum%
+\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\initdate#1#2#3{%
+\global\texd@yr=#1%
+\global\texd@mon=#2%
+\global\advance\texd@mon by-1%
+\global\texd@dom=#3%
+\global\advance\texd@dom by-1%
+\global\texd@setrdom%
+\global\texd@setrmon%
+\texd@setjnum%
+\texd@isleapyear%
+\texd@nextdow{\the\texd@rdom}{\the\texd@rmon}{\the\texd@yr}%
+}%
+\def\savedate#1{%
+\expandafter\edef\csname savedate#1\endcsname{\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}}%
+}%
+\def\restoredate#1{%
+\csname savedate#1\endcsname%
+}%
+\newcount\texd@looptmp\texd@looptmp=0%
+\def\texdcal#1#2{%
+\global\texd@mon=#2%
+\global\advance\texd@mon by-1%
+\global\texd@yr=#1%
+\global\texd@dom=0%
+\texd@setrmon\texd@setrdom%
+\initdate{\the\texd@yr}{\the\texd@rmon}{\the\texd@rdom}%
+\def\setdateformat{B\ Y}%
+\begin{tabular}{rrrrrrr}
+\multicolumn{7}{c}{\printdate} \\
+\loop\ifnum\texd@dow>0\texd@lastdate\repeat%
+\def\setdateformat{d}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom>8 {} \fi\ifnum\texd@dom<8\leavevmode\printdate\fi\\
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate \\
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate \\
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate &
+\def\setdateformat{d}\advancebydays{1}\printdate \\
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi&
+\def\setdateformat{d}\advancebydays{1}%
+\ifnum\texd@dom<14 {} \fi\ifnum\texd@dom>14\leavevmode\printdate\fi\\
+\end{tabular}
+}%
+\def\texdcalyear#1{%
+\texd@yr=#1%
+\texd@mon=0%
+\texd@dom=0%
+\texd@setrmon%
+\texd@setrdom%
+{\tabcolsep=3pt%
+\begin{tabular}{ccc}
+\texdcal{#1}{1} & \texdcal{#1}{2} & \texdcal{#1}{3} \\
+\texdcal{#1}{4} & \texdcal{#1}{5} & \texdcal{#1}{6} \\
+\texdcal{#1}{7} & \texdcal{#1}{8} & \texdcal{#1}{9} \\
+\texdcal{#1}{10} & \texdcal{#1}{11} & \texdcal{#1}{12} \\
+\end{tabular}
+}%
+}%
+\newcount\texd@jnum\texd@jnum=0%
+\def\texd@setjnum{%
+\texd@jnum=0%
+\ifnum\texd@mon>0\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>1%
+\global\advance\texd@jnum by28%
+\fi%
+\ifnum\texd@mon>2\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>3\global\advance\texd@jnum by30\fi%
+\ifnum\texd@mon>4\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>5\global\advance\texd@jnum by30\fi%
+\ifnum\texd@mon>6\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>7\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>8\global\advance\texd@jnum by30\fi%
+\ifnum\texd@mon>9\global\advance\texd@jnum by31\fi%
+\ifnum\texd@mon>10\global\advance\texd@jnum by30\fi%
+\global\advance\texd@jnum by\the\texd@dom%
+\global\advance\texd@jnum by1%
+}%
+\def\texd@firstmon{January}%
+\def\texd@firstshmon{Jan}%
+\def\texd@secondmon{February}%
+\def\texd@secondshmon{Feb}%
+\def\texd@thirdmon{March}%
+\def\texd@thirdshmon{Mar}%
+\def\texd@fourthmon{April}%
+\def\texd@fourthshmon{Apr}%
+\def\texd@fifthmon{May}%
+\def\texd@fifthshmon{May}%
+\def\texd@sixthmon{June}%
+\def\texd@sixthshmon{Jun}%
+\def\texd@seventhmon{July}%
+\def\texd@seventhshmon{Jul}%
+\def\texd@eighthmon{August}%
+\def\texd@eighthshmon{Aug}%
+\def\texd@ninthmon{September}%
+\def\texd@ninthshmon{Sep}%
+\def\texd@tenthmon{October}%
+\def\texd@tenthshmon{Oct}%
+\def\texd@eleventhmon{November}%
+\def\texd@eleventhshmon{Nov}%
+\def\texd@twelfthmon{December}%
+\def\texd@twelfthshmon{Dec}%
+\def\texd@firstdayname{Sunday}%
+\def\texd@firstdayshname{Sun}%
+\def\texd@seconddayname{Monday}%
+\def\texd@seconddayshname{Mon}%
+\def\texd@thirddayname{Tuesday}%
+\def\texd@thirddayshname{Tue}%
+\def\texd@fourthdayname{Wednesday}%
+\def\texd@fourthdayshname{Wed}%
+\def\texd@fifthdayname{Thursday}%
+\def\texd@fifthdayshname{Thu}%
+\def\texd@sixthdayname{Friday}%
+\def\texd@sixthdayshname{Fri}%
+\def\texd@seventhdayname{Saturday}%
+\def\texd@seventhdayshname{Sat}%
+\AtBeginDocument{%
+\IfLanguageName{spanish}{%
+\def\texd@firstmon{enero}%
+\def\texd@firstshmon{ene}%
+\def\texd@secondmon{febrero}%
+\def\texd@secondshmon{feb}%
+\def\texd@thirdmon{marzo}%
+\def\texd@thirdshmon{mar}%
+\def\texd@fourthmon{abril}%
+\def\texd@fourthshmon{abr}%
+\def\texd@fifthmon{mayo}%
+\def\texd@fifthshmon{may}%
+\def\texd@sixthmon{junio}%
+\def\texd@sixthshmon{jun}%
+\def\texd@seventhmon{julio}%
+\def\texd@seventhshmon{jul}%
+\def\texd@eighthmon{agosto}%
+\def\texd@eighthshmon{ago}%
+\def\texd@ninthmon{septiembre}%
+\def\texd@ninthshmon{sep}%
+\def\texd@tenthmon{octubre}%
+\def\texd@tenthshmon{oct}%
+\def\texd@eleventhmon{noviembre}%
+\def\texd@eleventhshmon{nov}%
+\def\texd@twelfthmon{diciembre}%
+\def\texd@twelfthshmon{dic}%
+\def\texd@firstdayname{domingo}%
+\def\texd@firstdayshname{dom}%
+\def\texd@seconddayname{lunes}%
+\def\texd@seconddayshname{lun}%
+\def\texd@thirddayname{martes}%
+\def\texd@thirddayshname{mar}%
+\def\texd@fourthdayname{miercoles}%
+\def\texd@fourthdayshname{mie}%
+\def\texd@fifthdayname{jueves}%
+\def\texd@fifthdayshname{jue}%
+\def\texd@sixthdayname{viernes}%
+\def\texd@sixthdayshname{vie}%
+\def\texd@seventhdayname{sabado}%
+\def\texd@seventhdayshname{sab}%
+}{}%
+\IfLanguageName{french}{%
+\def\texd@firstmon{janvier}%
+\def\texd@firstshmon{janv}%
+\def\texd@secondmon{février}%
+\def\texd@secondshmon{févr}%
+\def\texd@thirdmon{mars}%
+\def\texd@thirdshmon{mars}%
+\def\texd@fourthmon{avril}%
+\def\texd@fourthshmon{avr}%
+\def\texd@fifthmon{mai}%
+\def\texd@fifthshmon{mai}%
+\def\texd@sixthmon{juin}%
+\def\texd@sixthshmon{juin}%
+\def\texd@seventhmon{juil}%
+\def\texd@seventhshmon{juil}%
+\def\texd@eighthmon{août}%
+\def\texd@eighthshmon{août}%
+\def\texd@ninthmon{septembre}%
+\def\texd@ninthshmon{sept}%
+\def\texd@tenthmon{octobre}%
+\def\texd@tenthshmon{oct}%
+\def\texd@eleventhmon{novembre}%
+\def\texd@eleventhshmon{nov}%
+\def\texd@twelfthmon{décembre}%
+\def\texd@twelfthshmon{déc}%
+\def\texd@firstdayname{dimanche}%
+\def\texd@firstdayshname{dim}%
+\def\texd@seconddayname{lundi}%
+\def\texd@seconddayshname{lun}%
+\def\texd@thirddayname{mardi}%
+\def\texd@thirddayshname{mar}%
+\def\texd@fourthdayname{mercredi}%
+\def\texd@fourthdayshname{mer}%
+\def\texd@fifthdayname{jeudi}%
+\def\texd@fifthdayshname{jeu}%
+\def\texd@sixthdayname{vendredi}%
+\def\texd@sixthdayshname{ven}%
+\def\texd@seventhdayname{samedi}%
+\def\texd@seventhdayshname{sam}%
+}{}%
+\IfLanguageName{german}{%
+\def\texd@firstmon{Januar}%
+\def\texd@firstshmon{Jan}%
+\def\texd@secondmon{Februar}%
+\def\texd@secondshmon{Feb}%
+\def\texd@thirdmon{März}%
+\def\texd@thirdshmon{März}%
+\def\texd@fourthmon{April}%
+\def\texd@fourthshmon{Apr}%
+\def\texd@fifthmon{Mai}%
+\def\texd@fifthshmon{Mai}%
+\def\texd@sixthmon{Juni}%
+\def\texd@sixthshmon{Juni}%
+\def\texd@seventhmon{Juli}%
+\def\texd@seventhshmon{Juli}%
+\def\texd@eighthmon{August}%
+\def\texd@eighthshmon{Aug}%
+\def\texd@ninthmon{September}%
+\def\texd@ninthshmon{Sept}%
+\def\texd@tenthmon{Oktober}%
+\def\texd@tenthshmon{Okt}%
+\def\texd@eleventhmon{November}%
+\def\texd@eleventhshmon{Nov}%
+\def\texd@twelfthmon{Dezember}%
+\def\texd@twelfthshmon{Dez}%
+\def\texd@firstdayname{Sonntag}%
+\def\texd@firstdayshname{So}%
+\def\texd@seconddayname{Montag}%
+\def\texd@seconddayshname{Mo}%
+\def\texd@thirddayname{Dienstag}%
+\def\texd@thirddayshname{Di}%
+\def\texd@fourthdayname{Mittwoch}%
+\def\texd@fourthdayshname{Mi}%
+\def\texd@fifthdayname{Donnerstag}%
+\def\texd@fifthdayshname{Do}%
+\def\texd@sixthdayname{Freitag}%
+\def\texd@sixthdayshname{Fr}%
+\def\texd@seventhdayname{Samstag}%
+\def\texd@seventhdayshname{Sa}%
+}{}%
+}%
+\endinput
+%%
+%% End of file `texdate.sty'.
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index f76f43f8b54..96ff74fc360 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -618,7 +618,8 @@ my @TLP_working = qw(
tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files
tex-label tex-overview tex-ps tex-refs tex-virtual-academy-pl
tex4ebook texapi texbytopic texcount
- texdef texdiff texdirflatten texdraw texfot texilikechaps texilikecover
+ texdate texdef texdiff texdirflatten texdraw
+ texfot texilikechaps texilikecover
texliveonfly texloganalyser texlogos texmate texments
texosquery texpower texproposal texshade textualicomma texvc
textcase textfit textglos textgreek textmerg textopo textpath textpos
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 77050c585c7..59558b49986 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -1513,6 +1513,7 @@ $standarddest = "texmf-dist";
'systeme', 'generic',
'tabto-generic', 'generic',
'tap', 'generic',
+ 'texdate', 'generic',
'texdraw', 'generic',
'texsis', 'texsis',
'textmerg', 'generic',
@@ -2158,6 +2159,7 @@ $standardtex
'tex-virtual-academy-pl', 'generic',
'texbytopic', 'plain',
'texcount', 'support',
+ 'texdate', 'generic',
'texdiff', 'support',
'texdirflatten', 'support',
'texdraw', 'support',
@@ -2297,6 +2299,7 @@ $standarddocfmt='latex';
'startex', 'startex',
'stix', 'fonts',
't2', 'generic',
+ 'texdate', 'generic',
'textmerg', 'generic',
'trajan', 'fonts',
'universa', 'fonts',
diff --git a/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc b/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc
index d234e7b0a79..a50f2ffb3e1 100644
--- a/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-plaingeneric.tlpsrc
@@ -82,6 +82,7 @@ depend termmenu
depend tex-ps
depend tex4ht
depend texapi
+depend texdate
depend texinfo
depend timetable
depend tracklang
diff --git a/Master/tlpkg/tlpsrc/texdate.tlpsrc b/Master/tlpkg/tlpsrc/texdate.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/texdate.tlpsrc