summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv766
1 files changed, 766 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv b/Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv
new file mode 100644
index 00000000000..ffbb5587bc8
--- /dev/null
+++ b/Master/texmf-dist/tex/context/third/letter/base/t-correspondence.mkiv
@@ -0,0 +1,766 @@
+%D \module
+%D [ file=t-correspondence,
+%D version=2009.04.27,
+%D title=\CONTEXT\ User Module,
+%D subtitle=Correspondence,
+%D author=Wolfgang Schuster,
+%D date=\currentdate,
+%D copyright=Wolfgang Schuster,
+%D email=schuster.wolfgang@googlemail.com,
+%D license=Public Domain]
+
+\unprotect
+
+% Placeholders for the messages:
+%
+% 1: letter|resume / interface|style|extension / filename
+% 2: letter|resume / interface|style|extension / filename
+% 3: ‹number› / ‹number›
+% 4: ‹file› / ‹version›
+
+\definemessageconstant {correspondence}
+
+\setinterfacemessage{correspondence}{title}{correspondence}
+\setinterfacemessage{correspondence}{1} {loading -- -- --}
+\setinterfacemessage{correspondence}{2} {-- -- -- not found}
+\setinterfacemessage{correspondence}{3} {correspage set -- processed (size --)}
+\setinterfacemessage{correspondence}{4} {--: --}
+
+%D Page numbering
+
+\def\????cn{@@@@cn}
+
+\definesystemconstant {correspage}
+
+\definetwopasslist\s!correspage
+
+\definenumber[\s!correspage]
+
+\newcount\correspageno
+\newif\ifresettingcorrespagenumber
+
+\def\newnofcorrespages{0}
+\def\nofcorrespages {0}
+
+\def\savenofcorrespages
+ {\showmessage\m!correspondence{3}{\newnofcorrespages,\the\correspageno}%
+ \immediatesavetwopassdata{\s!correspage}{\newnofcorrespages}{\the\correspageno}}
+
+\def\numberofcorrespages
+ {\nofcorrespages}
+
+\def\correspagenumber
+ {\the\correspageno}
+
+\appendtoks\savenofcorrespages\to\everybye
+
+\def\setupcorrespagenumber
+ {\dosingleargument\dosetupcorrespagenumber}
+
+\def\dosetupcorrespagenumber[#1]%
+ {\doifelse{#1}\v!reset
+ {\resetcorrespagenumber}
+ {\getparameters[\????cn][#1]}}
+
+\def\resetcorrespagenumber
+ {\global\resettingcorrespagenumbertrue}
+
+\def\setcorrespagenumbers
+ {\iftwopassdatafound
+ \xdef\nofcorrespages{\twopassdata}%
+ \else
+ \xdef\nofcorrespages{0}%
+ \fi}
+
+\def\gotonextcorrespage
+ {\ifresettingcorrespagenumber
+ \resetnumber[\s!correspage]%
+ \global\resettingcorrespagenumberfalse
+ \fi
+ \xdef\oldcorrespage{\the\correspageno}%
+ \incrementnumber[\s!correspage]%
+ \global\correspageno\rawnumber[\s!correspage]\relax
+ \ifnum\correspageno=\plusone
+ \gettwopassdata\s!correspage
+ \setcorrespagenumbers
+ \ifnum\oldcorrespage>\zerocount
+ \showmessage\m!correspondence{3}{\newnofcorrespages,\oldcorrespage}%
+ \immediatesavetwopassdata{\s!correspage}{\newnofcorrespages}{\oldcorrespage}%
+ \fi
+ \doglobal\increment\newnofcorrespages\relax
+ \fi}
+
+\appendtoks\gotonextcorrespage\to\beforeeverypage
+
+%D Setup command for the styles
+
+\def\definecorrespondencesetup[#1][#2][#3]%
+ {\setvalue{\e!setup#1\e!endsetup}{\doquintupleempty\dosetupcorrespondencestyle[#2][#3]}}
+
+\def\dosetupcorrespondencestyle[#1][#2][#3][#4][#5]%
+ {\iffifthargument
+ \dodosetupcorrespondencelayer[#1][#2][#3][#4][#5]%
+ \else\iffourthargument
+ \dodosetupcorrespondencestyle[#1][#2][#3][#4]%
+ \else
+ \dosetupcorrespondenceoption[][#2][\v!option][#3]%
+ \fi\fi}
+
+\def\dodosetupcorrespondencestyle[#1][#2][#3][#4]%
+ {\def\dododosetupcorrespondencestyle##1%
+ {\csname dosetupcorrespondence\ifcsname#1:#2:##1\endcsname
+ \csname#1:#2:##1\endcsname
+ \else
+ \v!option
+ \fi\endcsname[#1][#2][##1][#4]}%
+ \processcommalist[#3]\dododosetupcorrespondencestyle}
+
+\def\dosetupcorrespondenceoption[#1][#2][#3][#4]%
+ {\getparameters[#2#3][#4]}
+
+\def\dosetupcorrespondencelayout[#1][#2][#3][#4]%
+ {\definelayout[#1#3][#4]}
+
+\def\dosetupcorrespondencesection[#1][#2][#3][#4]%
+ {\getcheckedparameters[#1\v!section:#3][#2#3][#4]}
+
+\def\dosetupcorrespondencedescription[#1][#2][#3][#4]%
+ {\getcheckedparameters[#1\v!description:#3][#2#3][#4]}
+
+\def\dosetupcorrespondencelayer[#1][#2][#3][#4]%
+ {\dodosetupcorrespondencelayer[#1][#2][#3][\v!layer,\v!frame,\v!option][#4]}
+
+\def\dodosetupcorrespondencelayer[#1][#2][#3][#4][#5]%
+ {\def\dododosetupcorrespondencelayer##1%
+ {\def\dodododosetupcorrespondencelayer####1%
+ {\ifcsname dosetupcorrespondencelayer####1\endcsname
+ \@EA\@EA\csname dosetupcorrespondencelayer####1\endcsname
+ \else
+ \@EA\dosetupcorrespondencelayeroption
+ \fi[#1][#2][##1][#5]}%
+ \processcommalist[#4]\dodododosetupcorrespondencelayer}%
+ \processcommalist[#3]\dododosetupcorrespondencelayer}
+
+\def\dosetupcorrespondencelayerlayer[#1][#2][#3][#4]%
+ {\setuplayer[#1:#3][#4]%
+ \getparameters[#2#3\v!layer][#4]}
+
+\def\dosetupcorrespondencelayerframe[#1][#2][#3][#4]%
+ {\setuplocalframed[#2#3\v!frame][#4]}
+
+\def\dosetupcorrespondencelayeroption[#1][#2][#3][#4]%
+ {\getcheckedparameters[#1\v!layer\v!option:#3][#2#3][#4]}
+
+%D Setup command for the values
+
+\def\definecorrespondencevalue
+ {\dodoubleargument\dodefinecorrespondencevalue}
+
+\def\dodefinecorrespondencevalue[#1][#2]%
+ {\setvalue{\e!setup#1\e!endsetup}{\dotripleempty\docorrespondencesetup[#2]}%
+ \@EA\definecomplexorsimple\csname\e!set#1\e!value\endcsname
+ \setvalue{\e!complex\e!set#1\e!value}[##1]##2{\setvalue{#2##1}{##2}}%
+ \setvalue{\e!simple \e!set#1\e!value}##1##2{\setvalue{#2##1}{##2}}}
+
+\def\docorrespondencesetup[#1][#2][#3]%
+ {\doifelsenothing{#3}
+ {\getparameters[#1][#2]}
+ {\def\dodocorrespondencesetup##1%
+ {\getparameters[#1##1][#3]}%
+ \processcommalist[#2]\dodocorrespondencesetup}}
+
+%D Tests
+
+\long\def\doifcorrespondencevalue#1#2%
+ {\ifcsname#1#2\endcsname
+ \edef\!!stringa{\csname#1#2\endcsname}%
+ \ifx\!!stringa\empty
+ \@EAEAEA\gobbleoneargument
+ \else
+ \@EAEAEA\firstofoneargument
+ \fi
+ \else
+ \@EA\gobbleoneargument
+ \fi}
+
+\long\def\doifelsecorrespondencevalue#1#2%
+ {\ifcsname#1#2\endcsname
+ \edef\!!stringa{\csname#1#2\endcsname}%
+ \ifx\!!stringa\empty
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\long\def\doifcorrespondencestylevalue#1#2#3%
+ {\ifcsname#1#2#3\endcsname
+ \edef\!!stringa{\csname#1#2#3\endcsname}%
+ \ifx\!!stringa\empty
+ \@EAEAEA\gobbleoneargument
+ \else
+ \@EAEAEA\firstofoneargument
+ \fi
+ \else
+ \@EA\firstofoneargument
+ \fi}
+
+\long\def\doifelsecorrespondencestylevalue#1#2#3%
+ {\ifcsname#1#2#3\endcsname
+ \edef\!!stringa{\csname#1#2#3\endcsname}%
+ \ifx\!!stringa\empty
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\def\correspondencestylevalue#1#2#3%
+ {\csname#1#2#3\endcsname}
+
+%D External files
+
+\def\definecorrespondencefile[#1][#2][#3]%
+ {\setvalue{\e!use#1#2}[##1]{\usecorrespondencefile[#1][#2][#3][##1]}}
+
+\def\usecorrespondencefile[#1][#2][#3][#4]%
+ {\def\dousecorrespondencefile##1%
+ {\readfile{##1.#3}
+ {\showmessage\m!correspondence{1}{#1,#2,##1.#3}\registercorrespondencefile{##1.#3}}
+ {\showmessage\m!correspondence{2}{#1,#2,##1.#3}}}%
+ \processcommacommand[#4]\dousecorrespondencefile}
+
+%D Layers
+
+\def\correspondencelayerkeys
+ {\c!state,\c!symbol,\c!separator,\c!offset,\c!spacebefore,\c!list,\c!rulethickness%
+ \c!alternative,\c!spaceafter,\c!leftmargin,\c!rightmargin,\c!rule}
+
+\def\definecorrespondencelayer[#1][#2]%
+ {\setvalue{\s!do\e!define#1\v!layer}{\dodefinecorrespondencelayer[#1][#2]}%
+ \setvalue{\s!do\e!set #1\v!layer}{\dosetcorrespondencelayer [#1][#2]}}
+
+\def\dodefinecorrespondencelayer[#1][#2][#3]%
+ {\def\dodododefinecorrespondencelayer##1{\dododefinecorrespondencelayer[#1][#2][##1]}%
+ \processaction
+ [#3]
+ [\v!foldmark=>{\processcommacommand[\csname#1!list!marking\endcsname]\dodododefinecorrespondencelayer},
+ \v!header=>{\processcommacommand[\csname#1!list!header\endcsname ]\dodododefinecorrespondencelayer},
+ \v!footer=>{\processcommacommand[\csname#1!list!footer\endcsname ]\dodododefinecorrespondencelayer},
+ \s!unknown=>{\dododefinecorrespondencelayer[#1][#2][#3]}]}
+
+\def\dododefinecorrespondencelayer[#1][#2][#3]%
+ {\letvalue{#2\v!option#3}\v!yes
+ \doifundefined{#1:#2:#3}
+ {\letvalue{#1:#2:#3}\v!layer
+ \addvalue{#1!list!layers}{#3}}%
+ \setvalidparameterkeys[#1\v!layer\v!option:#3][\correspondencelayerkeys]%
+ \presetlocalframed[#2#3\v!frame]%
+ \definelayer
+ [#1:#3]
+ [\c!width=\paperwidth,
+ \c!height=\paperheight]%
+ \dodosetupcorrespondencelayer
+ [#1][#2][#3][\v!option]%
+ [\c!state=\v!stop,
+ \c!symbol=,
+ \c!list=,
+ \c!alternative=\v!a,
+ \c!rule=\v!off,
+ \c!rulethickness=\linewidth,
+ \c!separator=\crlf,
+ \c!offset=\zeropoint,
+ \c!spacebefore=\zeropoint,
+ \c!spaceafter=\zeropoint,
+ \c!leftmargin=\zeropoint,
+ \c!rightmargin=\zeropoint]%
+ \dodosetupcorrespondencelayer
+ [#1][#2][#3][\v!frame]%
+ [\c!frame=\v!off,
+ \c!align=\v!right,
+ \c!offset=\zeropoint,
+ \c!strut=\v!yes]%
+ \dodosetupcorrespondencelayer
+ [#1][#2][#3][\v!layer]%
+ [\c!state=\v!start,
+ \c!offset=\zeropoint,
+ \c!preset=\v!left\v!top]}
+
+\def\dosetcorrespondencelayer[#1][#2][#3]%
+ {\doifelsecorrespondencestylevalue{#2}{#3}\c!symbol
+ {\dodosetcorrespondencelayer[#1][#2][#3][\correspondencestylevalue{#2}{#3}\c!symbol]}
+ {\dodosetcorrespondencelayer[#1][#2][#3][\directsetup{#1:#3}]}}
+
+\def\dodosetcorrespondencelayer[#1][#2][#3][#4]%
+ {\setlayer[#1:#3]
+ {\localframed[#2#3\v!frame]
+ {\edef\currentcorrespondenceelement{#3}%
+ \doadaptleftskip {\correspondencestylevalue{#2}{#3}\c!leftmargin }%
+ \doadaptrightskip{\correspondencestylevalue{#2}{#3}\c!rightmargin}%
+ \doattributes{#2#3}\c!style\c!color{#4}}}}
+
+\def\dodosetheaderfooterlayer#1{\csname @@headfoot@@#1\endcsname}
+
+\setvalue{@@headfoot@@\v!start }{\!!doneatrue }
+\setvalue{@@headfoot@@\v!stop }{\!!doneafalse }
+\setvalue{@@headfoot@@\v!first }{\!!doneatrue }
+\setvalue{@@headfoot@@\v!next }{\!!donebtrue\!!donectrue}
+\setvalue{@@headfoot@@\v!left }{\!!donebtrue }
+\setvalue{@@headfoot@@\v!right }{\!!donectrue }
+\setvalue{@@headfoot@@\v!leftpage }{\!!donebtrue }
+\setvalue{@@headfoot@@\v!rightpage}{\!!donectrue }
+\setvalue{@@headfoot@@\v!page }{\!!donedtrue }
+\setvalue{@@headfoot@@\v!subpage }{\!!donedfalse }
+
+% \def\dosetheaderfooterlayer[#1][#2][#3]%
+% {\!!doneafalse % first page
+% \!!donebfalse % even numbered pages
+% \!!donecfalse % odd numbered pages
+% \!!donedfalse % real pagenumber
+% \processcommacommand[\csname#2#3\c!state\endcsname]\dodosetheaderfooterlayer
+% \doifnotvalue{#2#3\v!layer\c!state}\v!stop{\setuplayer[#1:#3][\c!state=\v!start]}%
+% \ifnum\if!!doned\pagenumber\else\subpagenumber\fi=\plusone
+% \if!!donea\dosetcorrespondencelayer[#1][#2][#3]\fi
+% \else
+% \ifodd\if!!doned\pagenumber\else\subpagenumber\fi
+% \if!!donec\dosetcorrespondencelayer[#1][#2][#3]\fi
+% \else
+% \if!!doneb\dosetcorrespondencelayer[#1][#2][#3]\fi
+% \fi\fi}
+
+% Alternative version of the macro above for the experimental
+% interface because \subpagenumber can't be used in \ifnum.
+
+\def\dosetheaderfooterlayer[#1][#2][#3]%
+ {\!!doneafalse % first page
+ \!!donebfalse % even numbered pages
+ \!!donecfalse % odd numbered pages
+ \!!donedfalse % real pagenumber
+ \processcommacommand[\csname#2#3\c!state\endcsname]\dodosetheaderfooterlayer
+ \doifnotvalue{#2#3\v!layer\c!state}\v!stop{\setuplayer[#1:#3][\c!state=\v!start]}%
+ \ifnum\if!!doned\pagenumber\else\correspagenumber\fi=\plusone
+ \if!!donea\dosetcorrespondencelayer[#1][#2][#3]\fi
+ \else
+ \ifodd\if!!doned\pagenumber\else\correspagenumber\fi
+ \if!!donec\dosetcorrespondencelayer[#1][#2][#3]\fi
+ \else
+ \if!!doneb\dosetcorrespondencelayer[#1][#2][#3]\fi
+ \fi\fi}
+
+%D Sections
+
+\def\correspondencesectionkeys
+ {\c!before,\c!after,\c!align,\c!leftmargin,\c!rightmargin,\c!alternative,%
+ \c!inbetween,\c!separator,\c!optimize,\c!command,\c!style,\c!color}
+
+\def\definecorrespondencesection[#1][#2]%
+ {\setvalue{\s!do\e!define#1\v!section}{\dodefinecorrespondencesection[#1][#2]}%
+ \setvalue{\s!do\e!set #1\v!section}{\dosetcorrespondencesection [#1][#2]}}
+
+\def\dodefinecorrespondencesection[#1][#2][#3]%
+ {\letvalue{#2\v!option#3}\v!yes
+ \doifundefined{#1:#2:#3}
+ {\letvalue{#1:#2:#3}\v!section
+ \addvalue{#1!list!sections}{#3}}%
+ \setvalidparameterkeys[#1\v!section:#3][\correspondencesectionkeys]%
+ \getparameters
+ [#2#3]
+ [\c!before=,
+ \c!after=,
+ \c!inbetween=,
+ \c!align=,
+ \c!leftmargin=\zeropoint,
+ \c!rightmargin=\zeropoint,
+ \c!alternative=\v!a,
+ \c!separator=\crlf,
+ \c!optimize=\v!no,
+ \c!command=,
+ \c!style=,
+ \c!color=]}
+
+\def\dosetcorrespondencesection[#1][#2][#3]%
+ {\begingroup
+ \doifelsecorrespondencestylevalue{#2}{#3}\c!before
+ {\correspondencestylevalue{#2}{#3}\c!before}
+ \endgraf
+ \doadaptleftskip {\correspondencestylevalue{#2}{#3}\c!leftmargin}%
+ \doadaptrightskip{\correspondencestylevalue{#2}{#3}\c!rightmargin}%
+ \doifcorrespondencestylevalue{#2}{#3}\c!align
+ {\setupalign[\correspondencestylevalue{#2}{#3}\c!align]}%
+ \dostartattributes{#2#3}\c!style\c!color\empty
+ \correspondencestylevalue{#2}{#3}\c!command{\directsetup{#1:#3}}%
+ \dostopattributes
+ \doifcorrespondencestylevalue{#2}{#3}\c!after
+ {\endgraf\correspondencestylevalue{#2}{#3}\c!after}
+ \endgraf
+ \endgroup}
+
+%D Descriptions
+
+\def\correspondencedescriptionkeys
+ {\c!location,\c!inbetween,\c!before,\c!after,\c!width,\c!headstyle,\c!headcolor,\c!distance}
+
+\def\definecorrespondencedescription[#1][#2]%
+ {\setvalue{\s!do\e!define#1\v!description}{\dodefinecorrespondencedescription[#1][#2]}%
+ \setvalue{\s!do\e!set #1\v!description}{\dosetcorrespondencedescription [#1][#2]}%
+ \setvalue{\s!do\e!flush #1\v!description}{\doflushcorrespondencedescription [#1][#2]}}
+
+\def\dodefinecorrespondencedescription[#1][#2][#3]%
+ {\letvalue{#2\v!option#3}\v!yes
+ \doifundefined{#1:#2:#3}{\letvalue{#1:#2:#3}\v!description}%
+ \setvalidparameterkeys[#1\v!description:#3][\correspondencedescriptionkeys]%
+ \getparameters
+ [#2#3]
+ [\c!location=\v!left,
+ \c!inbetween=\nowhitespace,
+ \c!before=\blank,
+ \c!after=\blank,
+ \c!width=\v!broad,
+ \c!headstyle=,
+ \c!headcolor=,
+ \c!distance=\zeropoint]}
+
+\def\dosetcorrespondencedescription[#1][#2][#3]%
+ {\bgroup
+ \doifelsecorrespondencestylevalue{#2}{#3}\c!before
+ {\correspondencestylevalue{#2}{#3}\c!before}
+ \endgraf
+ \scratchdimen\zeropoint
+ \setbox\scratchbox\hbox{\doattributes{#2#3}\c!headstyle\c!headcolor{\labeltext{#1:#3}}}%
+ \doifelse{\correspondencestylevalue{#2}{#3}\c!width}\v!broad
+ {\ifdim\wd\scratchbox>\zeropoint
+ \scratchdimen\dimexpr\wd\scratchbox+1em\relax
+ \fi}
+ {\doifelse{\correspondencestylevalue{#2}{#3}\c!width}\v!fit
+ {\if\wd\scratchbox>\zeropoint
+ \scratchdimen\dimexpr\wd\scratchbox+\correspondencestylevalue{#2}{#3}\c!distance\relax
+ \fi}
+ {\scratchdimen\dimexpr\correspondencestylevalue{#2}{#3}\c!width+\correspondencestylevalue{#2}{#3}\c!distance\relax}}%
+ \executeifdefined{@@description@@\correspondencestylevalue{#2}{#3}\c!location}\gobblethreearguments{#1}{#2}{#3}%
+ \doifelsecorrespondencestylevalue{#2}{#3}\c!after
+ {\endgraf\correspondencestylevalue{#2}{#3}\c!after}
+ \endgraf
+ \egroup}
+
+\setvalue{@@description@@\v!left}#1#2#3%
+ {\EveryPar{\hangindent\scratchdimen\hangafter\zerocount}%
+ \setbox\scratchbox\hbox\!!to\scratchdimen{\box\scratchbox\hss}%
+ \noindent\llap{\box\scratchbox}\directsetup{#1:#3}}
+
+\setvalue{@@description@@\v!right}#1#2#3%
+ {\EveryPar{\hangindent-\scratchdimen\hangafter\zerocount}%
+ \setbox\scratchbox\hbox\!!to\scratchdimen{\hss\box\scratchbox}%
+ \setbox\scratchbox\hbox\!!to\!!zeropoint {\hskip\dimexpr\hsize-\scratchdimen\relax\box\scratchbox\hss}%
+ \noindent\rlap{\box\scratchbox}\directsetup{#1:#3}}
+
+\setvalue{@@description@@\v!top}#1#2#3%
+ {\box\scratchbox\par
+ \nobreak
+ \doifcorrespondencestylevalue{#2}{#3}\c!inbetween{\correspondencestylevalue{#2}{#3}\c!inbetween}%
+ \nobreak
+ \directsetup{#1:#3}}
+
+\setvalue{@@description@@\v!text}#1#2#3%
+ {\noindent\box\scratchbox\directsetup{#1:#3}}
+
+\def\doflushcorrespondencedescription[#1][#2]%
+ {\def\dodoflushcorrespondencedescription##1%
+ {\doif{\correspondencestylevalue{#2}\v!option{##1}}\v!yes{\dosetcorrespondencedescription[#1][#2][##1]}}%
+ \processcommacommand[\csname#1!list!descriptions\endcsname]\dodoflushcorrespondencedescription}
+
+%D Commands to define named elements for header, footer etc. and use them,
+%D clone them or delete their content.
+
+\def\definecorrespondenceelement [#1]#2[#3]#4[#5]#6{\setvalue{#1:#3:#5}{#6}}
+\def\resetcorrespondenceelement [#1]#2[#3]#4[#5]{\resetvalue{#1:#3:#5}}
+\def\copycorrespondenceelement[#1]#2[#3]#4[#5]#6[#7]{\copycsname#1:#3:#5\endcsname\csname#1:#3:#7\endcsname}
+\def\correspondenceelement [#1]#2[#3]#4[#5]{\csname#1:#3:#5\endcsname}
+
+\def\registercorrespondencefile#1%
+ {\doifundefined{@@@@#1@@@@}
+ {\letgvalue{@@@@#1@@@@}\empty
+ \modulecode{correspondence.checkfile("#1")}}}
+
+%D Lua table with all macro files and their current version, it is used
+%D to build the revision table in the manual. The Lua alternative is easier
+%D to maintain (same folder as the other files) and allows me to store more
+%D information as I can do with the TeX solution.
+
+\startmodulecode
+
+correspondence = correspondence or { }
+
+correspondence.files = {
+ {
+ name = "t-correspondence.tex",
+ path = "tex/context/third/letter/base/",
+ type = "base",
+ version = "2009.04.27",
+ description = "Core module"
+ } ,
+ {
+ name = "t-letter.tex",
+ path = "tex/context/third/letter/base/",
+ type = "base",
+ version = "2009.02.13",
+ description = "Letter Module"
+
+ } ,
+ {
+ name = "t-resume.tex",
+ path = "tex/context/third/letter/base/",
+ type = "base",
+ version = "2009.02.12",
+ description = "Résumé Module"
+ } ,
+ {
+ name = "default.nli",
+ path = "tex/context/third/letter/interface/",
+ type = "interface",
+ version = "2009.03.31",
+ description = "Default letter interface"
+
+ } ,
+ {
+ name = "pragma.nli",
+ path = "tex/context/third/letter/interface/",
+ type = "interface",
+ version = "2009.02.12",
+ description = "m-letter.tex Interface"
+ } ,
+ {
+ name = "knuth.nli",
+ path = "tex/context/third/letter/interface/",
+ type = "interface",
+ version = "2009.01.23",
+ description = "letter.tex Interface"
+ } ,
+ {
+ name = "default.nri",
+ path = "tex/context/third/letter/interface/",
+ type = "interface",
+ version = "2009.03.31",
+ description = "Default resume interface"
+ } ,
+ {
+ name = "moderncv.nri",
+ path = "tex/context/third/letter/interface/",
+ type = "interface",
+ version = "2009.03.31",
+ description = "moderncv resume interface"
+ } ,
+ {
+ name = "label.nle",
+ path = "tex/context/third/letter/extension/",
+ type = "extension",
+ version = "2009.02.13",
+ description = "Text labels"
+ } ,
+ {
+ name = "corres.nle",
+ path = "tex/context/third/letter/extension/",
+ type = "extension",
+ version = "2009.02.13",
+ description = "XML-Database"
+ } ,
+ {
+ name = "pragma.nle",
+ path = "tex/context/third/letter/extension/",
+ type = "extension",
+ version = "2008.01.23",
+ description = "Examples from m-letter.tex"
+ } ,
+ {
+ name = "optimize.nle",
+ path = "tex/context/third/letter/extension/",
+ type = "extension",
+ version = "2008.12.03",
+ description = "Page optimation"
+ } ,
+ {
+ name = "addrentry.nle",
+ path = "tex/context/third/letter/extension/",
+ type = "extension",
+ version = "2008.12.26",
+ description = "\tex{addrenetry} support"
+ } ,
+ {
+ name = "dina.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2007.02.11",
+ description = "German style DIN 676 A"
+ } ,
+ {
+ name = "dinb.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.14",
+ description = "German style DIN 676 B"
+ } ,
+ {
+ name = "pragma.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.12",
+ description = "m-letter.tex style"
+ } ,
+ {
+ name = "knuth.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.13",
+ description = "letter.tex style"
+ } ,
+ {
+ name = "dutch.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.28",
+ description = "Dutch letter style"
+ } ,
+ {
+ name = "french.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.08.07",
+ description = "French letter style"
+ } ,
+ {
+ name = "english.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.03.13",
+ description = "English letter style"
+ } ,
+ {
+ name = "default.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.03.27",
+ description = "Basic style"
+ } ,
+ {
+ name = "blockstyle.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.11.29",
+ description = "Default block values"
+ } ,
+ {
+ name = "fullblock.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.16",
+ description = "Full-block"
+ } ,
+ {
+ name = "semiblock.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.16",
+ description = "Semiblock"
+ } ,
+ {
+ name = "modified.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.16",
+ description = "Modified block"
+ } ,
+ {
+ name = "hanging.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.25",
+ description = "Hanging intended"
+ } ,
+ {
+ name = "memo.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.11.29",
+ description = "Memo style"
+ } ,
+ {
+ name = "simplified.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.12.16",
+ description = "Simplified style"
+ } ,
+ {
+ name = "swiss.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.14",
+ description = "Swiss style"
+ } ,
+ {
+ name = "swissleft.nls",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.14",
+ description = "Swiss left style"
+ } ,
+ {
+ name = "default.nrs",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.02.10",
+ description = "Default resume style"
+ } ,
+ {
+ name = "modern.nrs",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.04.10",
+ description = "modercv basic style"
+ } ,
+ {
+ name = "classic.nrs",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.03.31",
+ description = "modercv classic style"
+ } ,
+ {
+ name = "casual.nrs",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2009.03.31",
+ description = "modercv casual style"
+ } ,
+ {
+ name = "user.ori",
+ path = "tex/context/third/letter/style/",
+ type = "style",
+ version = "2008.07.08",
+ description = "Example for user settings"
+ } ,
+}
+
+for k,v in global.pairs(correspondence.files) do
+ local file = correspondence.files[k]["name"]
+ correspondence[file] = { }
+ correspondence[file]["name"] = file
+ correspondence[file]["version"] = correspondence.files[k]["version"]
+end
+
+function correspondence.checkfile(filename)
+ if correspondence[filename] ~= nil then
+ local name = correspondence[filename]["name"]
+ local version = correspondence[filename]["version"]
+ tex.sprint(tex.prtcatcodes,string.format("\\doglobal\\appendtoks\\showmessage\\m!correspondence{4}{%s,%s}\\to\\everynotabene",name,version))
+ end
+end
+
+\stopmodulecode
+
+\registercorrespondencefile{t-correspondence.tex}
+
+\protect \endinput