From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/exptl/mem/mem.sty | 1439 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1439 insertions(+)
 create mode 100644 macros/latex/exptl/mem/mem.sty

(limited to 'macros/latex/exptl/mem/mem.sty')

diff --git a/macros/latex/exptl/mem/mem.sty b/macros/latex/exptl/mem/mem.sty
new file mode 100644
index 0000000000..a541aeb20c
--- /dev/null
+++ b/macros/latex/exptl/mem/mem.sty
@@ -0,0 +1,1439 @@
+% (c) 2001-2005 Javier Bezos
+
+\def\fileversion{0.0004 pre-alpha}
+
+\iffalse % ==========================
+To do:
+
+- verbatim
+ - scripts
+ Some settings (eg. names) should be done in two steps:
+  \chaptername = \<french>chaptername or maybe not?
+- AtBeginLanguage
+- AtEndLanguage
+- Hacer que al cargar una escritura rm/sf/ttfamily se ajusten
+  para esa escritura? Así si se vuelve se conservan.
+- Idea? platform + language => charset, eg, [unix, czech]
+  is the same as [charset=isolat2]
+- Most of definitions in .sd files should be moved to
+  font encoding files. If a language requires another
+  definition (Greek \~) then set it with
+  \DeclareLanguageCommand.
+- En lugar de mem.cfg, hacer eg spanish.mem which llama
+  a spa.ld, ajusta las codificaciones, los patrones, etc. 
+  (?)
+
+\fi %========================
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{mem}
+  [2004/08/22 Multilingual LaTeX support for Lamed/Lambda]
+
+\DeclareOption{loadonly}{\let\mem@sel@opt\relax}
+
+% Now, a buggy setup in TeXLive 2003 is fixed. The
+% best solution is to remove the file:
+% \texmf\omega\lambda\omegabook\ltpatch.ltx
+% Only restored if uctt, perhaps a package has
+% customized fonts
+
+\def\mem@a{uctt}
+\ifx\ttdefault\mem@a
+  \def\ttdefault{cmtt}
+\fi                    
+
+%\def\sfdefault{cmss}
+
+\newcount\mem@count
+
+\def\mem@@{mem-}
+\def\mem@@trpr{mem-trpr-}
+\def\mem@@prop{mem-prop-}
+\def\mem@@flag{mem-flag-}
+\def\mem@csflag#1{\csname mem-flag-#1\endcsname}
+
+\def\mem@last{{}{}}
+
+\input{mem-comm.sty}
+
+% \mem@cmd{prefix}{<language>}{suffix} searchs the
+% following definitions in an expandable way:
+%
+% \mem-prefix<language>-suffix   -> dialect
+% \mem-prefix!<language>-suffix  -> language
+% \mem-prefix?-suffix            -> global
+%
+% and uses the first one found. Must be used
+% inside \csname.
+%
+% Is it possible to extend it to script?
+% 2005-12-08 Add \@empty after #3 in case it's {}.
+
+\long\def\mem@cmd#1#2#3{%
+  \mem@@#1%
+  \expandafter
+  \ifx\csname\mem@@#1#2-\string#3\@empty\endcsname\relax % if not language 
+    \expandafter\ifx\csname\mem@@?#2\endcsname\relax % if not language
+      ?%
+    \else%
+      \expandafter  % if not !language
+      \ifx\csname\mem@@#1\csname\mem@@?#2\endcsname-\string#3\@empty\endcsname\relax
+        ?%
+      \else % if !language
+        \csname\mem@@?#2\endcsname
+      \fi
+    \fi
+  \else % if language
+      #2%
+  \fi-\string#3\@empty}
+
+% \mem@use is a shorthand. If fact \mem@cmd is used directly
+% only once
+
+\long\def\mem@use#1#2{\mem@cmd{#1}\languagename{#2}}
+
+\def\mem@ifno#1#2#3#4{%
+  \if#1n\if#2o#3\else\@firstoftwo\fi\else#4\fi}
+
+% \def\mem@ifup#1#2#3#4{%
+%   \if#1u\if#2p#3\else\@firstoftwo\fi\else#4\fi}
+
+\def\AtEndComponent#1{%
+  \@ifundefined{\mem@@flag#1}%
+    {\mem@error{Unknown component}}
+    {\@ifundefined{mem@no#1}%
+      {\@ifundefined{\mem@@\languagename-#1}%
+        {\expandafter\let\csname\mem@@\languagename-#1\endcsname\@empty}%
+        \@empty
+      \expandafter\mem@after
+         \csname\mem@@\languagename-#1\expandafter\endcsname}\@gobble}}
+
+\def\mem@eadd#1{%
+  \@ifundefined{\mem@@flag#1}%
+    {\mem@error{Unknown module}}
+    {\@ifundefined{mem@no#1}%
+      {\@ifundefined{\mem@@\languagename-#1}%
+        {\expandafter\let\csname\mem@@\languagename-#1\endcsname\@empty}%
+        \@empty
+      \expandafter\mem@eafter
+         \csname\mem@@\languagename-#1\expandafter\endcsname}\@gobble}}
+
+\def\DeclareLanguage#1{%
+  \def\languagename{!#1}%
+  \def\mem@main{!#1}%
+  \DeclareDialect{#1}}
+
+\def\DeclareDialect#1{%
+  \expandafter\let\csname\mem@@?#1\endcsname\mem@main
+  \expandafter
+  \@namedef{#1text}{\languagetext{#1}}%
+  \@ifundefined{#1}%
+    {\newenvironment{#1}{\languageset{#1}}{}}%
+    {\PackageWarning{mem}{Skipping declaration of #1
+    environment.\MessageBreak This name already exists.}}}
+
+\@onlypreamble\DeclareLanguage
+\@onlypreamble\DeclareDialect
+
+\def\SetLanguage#1{%
+  \@ifundefined{\mem@@?#1}%
+     {\mem@bug@err4}%
+     {\edef\languagename{!#1}}}
+
+\def\SetDialect#1{
+  \@ifundefined{\mem@@?#1}%
+     {\mem@bug@err4}%
+     {\edef\languagename{#1}}}
+
+\@onlypreamble\SetLanguage
+\@onlypreamble\SetDialect
+
+\def\mem@ifcomponent#1{\@ifundefined{\mem@@flag#1}%
+  {\mem@bug@err1\@gobble}}
+
+% Components
+% ~~~~~~~~~~
+
+\def\DeclareLanguageComponent{%
+  \@ifstar{\mem@newcomponent\mem@c}%
+          {\mem@newcomponent\mem@text@components}}
+
+\def\mem@newcomponent#1#2{%
+  \def\mem@a##1##2##3\mem@a{%
+    \mem@ifno##1##2}%
+  \mem@a#2\mem@a
+    {\mem@bug@err2}%
+    {\@ifundefined{\mem@@flag#2}%
+       {\mem@eafter\mem@components{%  Note the flag expands to \relax
+          \noexpand\mem@elt\mem@csflag{#2}{#2}}%
+        \mem@eafter#1{%
+          \noexpand\mem@elt\mem@csflag{#2}{#2}}%
+        \expandafter\edef
+        \csname\mem@@prop?-#2\endcsname{%
+          \noexpand\mem@flagon{\mem@csflag{#2}}%
+          \noexpand\@tempswafalse}%
+        \expandafter\edef
+        \csname\mem@@prop?-no#2\endcsname{%
+          \noexpand\mem@flagoff{\mem@csflag{#2}}%
+          \noexpand\@tempswafalse}%
+        \expandafter\newcount\csname\mem@@flag#2\endcsname}%
+       {\PackageInfo{mem}%
+         {Ignoring component declaration: #2.^^J%
+          Already declared\@gobble}}}}
+
+\@onlypreamble\DeclareLanguageComponent
+\@onlypreamble\mem@newcomponent
+
+\let\mem@components\@empty
+\let\mem@text@components\@empty
+\let\mem@c\@empty
+
+\DeclareLanguageComponent*{names}
+\DeclareLanguageComponent*{layout}
+
+\DeclareLanguageComponent{date}
+\DeclareLanguageComponent{processes}
+\DeclareLanguageComponent{tools}
+
+\expandafter\let\csname\mem@@prop?-text\endcsname\relax
+\expandafter\let\csname\mem@@prop?-notext\endcsname\relax
+
+\def\mem@enable{% Implicit #1
+  \let\mem@ifenabling\@firstoftwo
+  \mem@switch}
+
+\def\mem@disable{% Implicit #1
+  \let\mem@ifenabling\@secondoftwo
+  \mem@switch}
+
+\def\mem@switch#1{% !language
+  \@nameuse{\mem@@\@nameuse{\mem@@?\languagename}-#1}% -!language-
+  \@nameuse{\mem@@\languagename-#1}}  % -dialect-
+
+\def\mem@switch@cmd#1#2{%
+  \let\mem@c=#1%
+  \let#1=#2%
+  \let#2=\mem@c}
+
+\def\mem@disablesub#1#2{%
+  \ifcase#1\or\or
+    \@gobble\or\mem@disable{#2}%
+  \else
+    \advance#1-\tw@
+  \fi}
+
+\def\mem@enablesub#1#2{%
+  \ifcase#1\or\or
+    \@gobble\or\mem@enable{#2}%
+  \fi}
+
+\def\mem@submain#1#2{%
+  #1=\ifcase#1\z@\or
+    \@ne\or
+    \z@\or
+    \@ne\mem@enable{#2}\or
+    \tw@\or
+    \thr@@\mem@disable{#2}\or
+    \tw@\or
+    \thr@@\or
+    4 \or
+    5 \mem@disable{#2}\or
+    4 \or
+    5 \fi\relax}
+
+\def\mem@disablemain#1#2{%
+  \ifcase#1\or\mem@disable{#2}\fi}
+
+\def\mem@enablemain#1#2{%  Considerar la marca -\@m
+  #1=\ifnum#1<\z@\z@\else\@ne\mem@enable{#2}\fi}
+
+\def\mem@step#1{\let\mem@elt#1\mem@components}
+
+%%% 2005-12-08 Added grouping for languageset
+
+\def\languageset{%
+  \@ifstar{\mem@sel@i\@ne}{\mem@sel@i\z@}}
+
+% Task: Replacing the text for empty
+\def\mem@sel@i#1{%
+%  To be used later. If \...text, then \mem@pardir = \@empty
+  \def\mem@pardir{\pardir\csname\mem@@\mem@script-dir\endcsname}%
+  \@ifnextchar[{\mem@sel@ii#1}{\mem@sel@ii#1[]}}
+
+\def\mem@sel@ii#1[#2]#3{%
+  \edef\mem@b{\zap@space#2 \@empty}%
+  \ifcase#1%
+    \edef\mem@a{{\expandafter\@firstoftwo\mem@last}{[\mem@b]{#3}}}%
+  \else
+    \def\mem@a{{[#2]{#3}}{}}%
+  \fi
+  \ifx\mem@a\mem@last\else
+    \let\mem@last\mem@a
+    \aftergroup\mem@fileends
+    \mem@filesetup#1{#2}{#3}%
+    \expandafter\mem@sel@iii\expandafter[\mem@b]{#3}#1%
+  \fi}
+
+\def\mem@sel@iii[#1]#2#3{%
+  \@ifundefined{l@#2}%
+     {\@ifundefined{memh@#2}%
+        {\mem@error{Unknown language}\language\z@}%
+        {\language\csname memh@#2\endcsname}}%
+     {\language\csname l@#2\endcsname}%
+  \let\mem@b\mem@script
+  \mem@step\mem@disablesub
+  \edef\languagename{#2}%
+  \ifcase#3%  if local
+    \def\mem@flagon##1{\advance##14\relax}%
+    \def\mem@flagoff##1{\advance##18\relax}%
+    \@tempswatrue
+    \ExecuteLanguageProperties{#1}%
+    \if@tempswa % if there was not <component> or <nocomponent>
+      \def\mem@elt##1##2{\mem@flagon{##1}}%
+      \mem@text@components
+    \fi
+    \mem@csflag{processes}=5
+    \let\languagename\mem@main
+    \mem@step\mem@submain
+    \edef\languagename{#2}%
+    \mem@step\mem@enablesub
+  \else % if global
+    \mem@step\mem@disablemain
+    \def\mem@flagon##1{\Error}%
+    \def\mem@flagoff##1{##1-\@m}% Just a mark
+    \@tempswatrue
+    \ExecuteLanguageProperties{#1}%
+    %\if@tempswa
+    %   % to be used if syntax changes
+    %\fi
+    %\mem@csflag{processes}=\@ne
+    \edef\mem@main{#2}%
+    \edef\languagename{#2}%
+    \mem@step\mem@enablemain
+  \fi
+  \ifx\mem@b\mem@script\else\mem@switchfont\fi % mem@b saved above
+  \edef\mem@charset{\csname\mem@use{}{cset}\endcsname}%
+  \textdir\csname\mem@@\mem@script-dir\endcsname
+    %\ifvmode
+  \mem@pardir
+    %\bodydir\csname\mem@@\mem@script-dir\endcsname
+    %\fi
+  \let\mem@pardir\@empty
+  \SetLanguageProcess{charenc}{\mem@charset}%
+  \SelectProcesses}
+
+\def\mem@switchfont{%
+  \mem@eforeach{\mem@fontfamilies}{%
+    \@ifundefined{\mem@@ font-\languagename-##1}%
+      {\@ifundefined{\mem@@ font-\mem@script-##1}{}%
+         {\edef\rmdefault{%
+            \csname\mem@@ font-\mem@script-##1\endcsname}}}%
+      {\edef\rmdefault{%
+         \csname\mem@@ font-\languagename-##1\endcsname}}}%
+  \mem@family}  % To be expanded and fine-tuned
+
+\def\mem@fontfamilies{rmfamily}%,sffamily,ttfamily}
+
+\DeclareRobustCommand\languagetext{\@ifnextchar[{\mem@text}{\mem@text[]}}
+
+% The following contains a trick to avoid passing the text as
+% argument. The text is actually inside a group.
+
+\def\mem@text[#1]#2{%
+  \bgroup
+    \mem@sel@ii\z@[#1]{#2}%
+    \@ifnextchar\bgroup
+      {\let\mem@a}% Gobbles the opening {
+      {\mem@text@x}}% No braces--only a token
+
+\def\mem@text@x#1{#1\egroup}
+
+\def\languageunset{%
+  \@ifstar
+    {\languageset[]{\mem@main}}%
+    {\mem@unsel@i\mem@unsel@ii}}
+
+\def\mem@unsel@i{%
+  \c@mem@depth\z@
+  \mem@fileends
+  \def\mem@elt##1{%
+     \expandafter\let\csname\mem@@slot##1\endcsname\@empty}%
+  \mem@elt{}%   or \@empty??
+  \mem@streams}
+
+\def\mem@unsel@ii{%
+  \edef\languagereset{%
+    \let\noexpand\languagereset\relax
+    \noexpand\mem@ensure\mem@last}%
+  \language\z@
+  \mem@step\mem@disablesub
+  \mem@step\mem@disablemain
+  \def\mem@elt##1##2{\mem@csflag{##2}\z@}%
+  \mem@components
+  \let\languagename\@empty
+  %\SelectProcesses
+  %\let\mem@main\@empty %% 2004/08/04 Commented out
+  %\let\mem@trprlist\nullocplist
+  \def\mem@last{{}{}}}
+
+% Automatic switching of languages
+
+\def\UpdateScript#1{}
+
+% Synchonization with auxiliary files
+% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+\AtBeginDocument{%
+  \if@filesw\else
+    \def\mem@filesetup#1#2#3{}%
+    \let\mem@filewrite\@gobble
+    \let\mem@fileends\relax
+  \fi}
+
+\AtEndDocument{%
+    \let\mem@newpage\newpage
+    \def\newpage{%
+      \let\newpage\mem@newpage
+      \newpage
+      \let\mem@immediate\immediate
+      \languageunset}}
+
+\let\mem@immediate\relax
+
+\def\mem@@slot{mem@slot@}
+
+\def\mem@filesetup#1#2#3{%
+  \advance\c@mem@depth\@ne
+  \def\mem@elt##1{%
+     \expandafter\mem@after\csname\mem@@slot##1\endcsname
+       {\addtocounter{\mem@@slot\the\mem@count}\@ne
+        \mem@immediate\write\mem@count
+          {\mem@begin
+           \noexpand\languageset\ifcase#1\or*\fi[#2]{#3}}}}%
+  \mem@elt\@empty
+  \mem@streams}
+
+\def\mem@filewrite#1{%
+   \mem@count=#1\relax
+   \@ifundefined{c@\mem@@slot\the\mem@count}%
+     {\newcounter{\mem@@slot\the\mem@count}%
+      \mem@slot@
+      \let\mem@elt\relax
+      \xdef\mem@streams{\mem@streams\mem@elt{\the\mem@count}}}{}%
+     {\@nameuse{\mem@@slot\the\mem@count}}%
+   \expandafter\gdef\csname\mem@@slot\the\mem@count\endcsname{}}
+
+\def\mem@fileends{%
+  \def\mem@elt##1%
+    {\ifnum\value{\mem@@slot##1}>\c@mem@depth
+       \mem@immediate\write##1{\mem@end}%
+       \addtocounter{\mem@@slot##1}\m@ne
+       \expandafter\mem@elt
+     \else
+       \expandafter\@gobble
+     \fi{##1}}%
+  \mem@streams
+  \let\mem@elt\relax}%
+
+\let\mem@streams\@empty
+\let\mem@slot@\@empty % <<?????
+
+\let\mem@begin\begingroup
+\let\mem@end\endgroup
+
+\newcounter{mem@depth}
+
+\long\def\protected@write#1#2#3{%
+  \mem@filewrite{#1}%
+  \begingroup
+    \let\thepage\relax
+    #2%
+    \let\protect\@unexpandable@protect
+    \edef\reserved@a{\write#1{#3}}%
+    \reserved@a
+    \endgroup
+  \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\long\def\@writefile#1#2{%
+  \@ifundefined{tf@#1}\relax
+    {\mem@filewrite{\csname tf@#1\endcsname}%
+     \@temptokena{#2}%
+     \mem@immediate\write\csname tf@#1\endcsname{\the\@temptokena}}}
+
+% Dangerous. We should consider packages modifying that:
+% Actually, is it necessary at all?
+
+\def\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]%
+  \if@filesw
+    \protected@write\@auxout{}%
+      {\string\bibcite{#2}{\protect\mem@ensure\mem@last#1}}%
+  \fi\ignorespaces}
+
+% Declaring language stuff
+% ~~~~~~~~~~~~~~~~~~~~~~~~
+
+\def\DeclareLanguageCommand{%
+  \@ifstar{\mem@command@s}% Full \newcommand syntax not allowed
+          {\mem@command@x}}% with star. To be fixed.
+
+\def\mem@command@s#1#2#3{%
+  \@ifundefined{\mem@use{}{#1}}%
+   {\mem@eadd{#2}{%
+      \noexpand\mem@switch@cmd
+      \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+      \noexpand#1}%
+    \expandafter\newcommand
+    \csname\mem@@\languagename-\string#1\endcsname
+        {\utftext{#3}}}%
+   {\mem@bug@err3}}
+
+\def\mem@command@x#1#2{%
+  \@ifundefined{\mem@use{}{#1}}%
+   {\mem@eadd{#2}{%
+      \noexpand\mem@switch@cmd
+      \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+      \noexpand#1}%
+    \expandafter\newcommand
+    \csname\mem@@\languagename-\string#1\endcsname}%
+   {\mem@bug@err3}}
+
+\def\DeclareLanguageRobustCommand#1#2{%
+  \@ifundefined{\mem@use{}{#1}}%
+   {\mem@eadd{#2}{%
+      \noexpand\mem@switch@robustcmd
+      \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+      \noexpand#1%
+      \expandafter\noexpand\csname\mem@@\languagename--\string#1\endcsname}%
+    \expandafter\newcommand
+    \csname\mem@@\languagename-\string#1\endcsname}%
+   {\mem@bug@err3}}
+
+\def\SetLanguageVariable#1#2{%
+  \@ifundefined{\mem@use{}{#1}}%
+   {\mem@eadd{#2}{
+      \noexpand\mem@switch@var
+      \expandafter\noexpand\csname\mem@@\languagename-\string#1\endcsname
+      \noexpand#1}%
+    \@namedef{\mem@@\languagename-\string#1}}%
+   {\mem@bug3}}
+
+\@onlypreamble\SetLanguageVariable
+\@onlypreamble\DeclareLanguageCommand
+
+\def\mem@enable{% Implicit #1
+  \let\mem@ifenabling\@firstoftwo
+  \mem@switch}
+
+\def\mem@disable{% Implicit #1
+  \let\mem@ifenabling\@secondoftwo
+  \mem@switch}
+
+\def\mem@switch#1{% !language
+  \@nameuse{\mem@@\@nameuse{\mem@@?\languagename}-#1}% -!language-
+  \@nameuse{\mem@@\languagename-#1}}  % -dialect-
+
+\def\mem@switch@cmd#1#2{%
+  \let\mem@c=#1%
+  \let#1=#2%
+  \let#2=\mem@c}
+
+\def\mem@switch@robustcmd#1#2#3{%
+  \mem@ifenabling
+    {\expandafter\let\expandafter#3%
+        \csname\expandafter\@gobble\string#2 \endcsname
+     \expandafter\let\csname\expandafter\@gobble\string#2 \endcsname=#1%
+     \let#1=#2%
+     \edef\reserved@a{\string#2}%
+     \def\reserved@b{#2}%
+     \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}%
+     \edef#2{%
+        \ifx\reserved@a\reserved@b
+           \noexpand\x@protect
+           \noexpand#1%
+        \fi
+        \noexpand\protect
+        \expandafter\noexpand\csname
+           \expandafter\@gobble\string#2 \endcsname}}%
+    {\let#2=#1%
+     \expandafter\let\expandafter#1%
+        \csname\expandafter\@gobble\string#2 \endcsname
+     \expandafter\let\csname\expandafter\@gobble\string#2 \endcsname=#3}}
+
+\def\mem@switch@var#1#2{%
+  \edef\mem@c{\the#1}%
+  #1=#2\relax
+  \edef#2{\mem@c}}
+
+\def\SetLanguageCode#1#2#3#4{%
+  \mem@count=#3\relax
+  \edef\mem@a{%
+    \noexpand\SetLanguageVariable{\noexpand#1\the\mem@count}}%
+  \mem@a{#2}{#4}%
+  \def\mem@a{#2}% We must be sure that the language name
+  \begingroup    % remains untouched with \lowercase
+    \lccode`~=`#1
+    \lccode`#1=`#1
+    \lowercase{%
+  \endgroup
+  \AtEndComponent\mem@a{\UpdateSpecial{#1}}}}
+
+\@onlypreamble\SetLanguageCode
+
+% Dates
+% ~~~~~
+
+\def\DeclareDateFunctionDefault#1{%
+  \expandafter\providecommand\csname\mem@@ DF-#1\endcsname}
+
+\def\DeclareDateFunction#1{%
+  \expandafter\DeclareLanguageCommand
+    \csname\mem@@ DF-#1\endcsname{date}}
+
+\@onlypreamble\DeclareDateFunctionDefault
+\@onlypreamble\DeclareDateFunction
+
+\begingroup
+\catcode`<=\active
+\gdef\DeclareDateCommand#1{%
+  \begingroup
+  \let\protect\@unexpandable@protect
+  \catcode`<=\active
+  \def<##1>{\expandafter\noexpand\csname\mem@@ DF-##1\endcsname}%
+  \def\mem@a{%
+   \edef\mem@b{\endgroup%
+    \noexpand\DeclareLanguageCommand*{\noexpand#1}{date}{\mem@c}}
+    \mem@b}%
+  \afterassignment\mem@a\def\mem@c}
+\endgroup
+
+\@onlypreamble\DeclareDateCommand
+
+\newcount\weekday
+
+\let\c@day\day
+\let\c@weekday\weekday
+\let\c@month\month
+\let\c@year\year
+
+\def\SetWeekDay{\mem@count=\year\divide\mem@count4
+  \weekday=\mem@count
+  \multiply\mem@count4
+  \advance\mem@count-\year
+  \ifnum\mem@count=\z@
+        \ifnum\month<\thr@@\advance\weekday -1\fi\fi
+  \advance\weekday\year
+  \advance\weekday-1899
+  \advance\weekday\ifcase\month\or0 \or31 \or59 \or90 \or120
+        \or151 \or181 \or212 \or243 \or293 \or304 \or334 \fi
+  \advance\weekday\day
+  \mem@count=\weekday
+  \divide\mem@count7
+  \multiply\mem@count7
+  \advance\weekday-\mem@count
+  \advance\weekday\@ne}
+
+\SetWeekDay
+
+\DeclareDateFunctionDefault{d}{\the\day}
+\DeclareDateFunctionDefault{dd}{\ifnum\day<10 0\fi\the\day}
+
+\DeclareDateFunctionDefault{m}{\the\month}
+\DeclareDateFunctionDefault{mm}{\ifnum\month<10 0\fi\the\month}
+
+\DeclareDateFunctionDefault{yy}{\expandafter\@gobbletwo\the\year}
+\DeclareDateFunctionDefault{yyyy}{\the\year}
+
+\def\UpdateSpecial#1{%
+  \expandafter\mem@updatespecial\csname\string#1\endcsname}
+
+\def\mem@updatespecial#1{%
+  \def\mem@b##1##2{%
+    \ifnum`#1=`##2 \else
+      \noexpand##1\noexpand##2%
+    \fi}%
+  \def\mem@c##1##2{%
+    \ifnum\catcode`##2<\active
+      \ifnum\catcode`##2>10 \else\@firstoftwo\fi
+    \else
+      \noexpand##1\noexpand##2%
+    \fi}%
+  \def\do{\mem@b\do}%
+  \def\@makeother{\mem@b\@makeother}%
+  \edef\dospecials{\dospecials\mem@c\do#1}%
+  \edef\@sanitize{\@sanitize\mem@c\@makeother#1}%
+  \let\do\relax
+  \def\@makeother##1{\catcode`##1=12\relax}}
+
+\def\languageensure{%
+  \ifx\glossary\relax
+    \protect\mem@ensure\mem@last
+  \fi}
+
+\def\mem@ensure#1#2{%
+  \def\mem@a{{#1}{#2}}%
+  \ifx\mem@a\mem@last\else
+    \def\mem@a{#1}%
+    \ifx\mem@a\@empty
+      \def\mem@c{\mem@unsel@ii}%
+    \else
+      \def\mem@c{\mem@sel@iii#1\@ne}%
+    \fi
+    \def\mem@a{#2}%
+    \ifx\mem@a\@empty\else
+      \def\mem@a{#1}\edef\mem@b{\expandafter\@firstoftwo\mem@last}%
+      \ifx\mem@b\mem@a
+        \expandafter\def\else\expandafter\mem@after
+      \fi
+      \mem@c{\mem@sel@iii#2\z@}%
+    \fi
+    \expandafter\mem@c
+  \fi}
+
+% A recent change in LaTeX: now marks *are not* expanded 2004/08/05
+
+\def\markboth#1#2{%
+  \begingroup
+    \let\label\relax \let\index\relax \let\glossary\relax
+    \protected@edef\mem@a##1##2{%
+       \noexpand\unrestored@protected@xdef
+       \noexpand\@themark
+       {{\languageensure##1}{\languageensure##2}}}%
+    \mem@a{#1}{#2}%
+    \@temptokena \expandafter{\@themark}%
+    \mark{\the\@temptokena}%
+  \endgroup
+  \if@nobreak\ifvmode\nobreak\fi\fi}
+
+\def\@markright#1#2#3{%
+  \@temptokena{#1}%
+  \protected@edef\mem@a##1##2{%
+      \noexpand\unrestored@protected@xdef
+      \noexpand\@themark{{##1}{\languageensure##2}}}%
+  \mem@a{\the\@temptokena}{#3}}
+
+%======
+
+%\DeclareProcess{T1}{t1-a, t2-a}
+
+%\DeclareLanguageProcessGroup
+%\DeclareMemProcessGroup
+
+% Puesto quien decide si un grupo es language o mem es
+% lo primero, se puede reducir a una forma:
+
+%\AddMemProcess{font}{fontenc}
+%\AddLanguageProcess{text}{sigma,otro,otro} % Logical
+
+%\SetMemProcess{fontenc}{T1}
+%\SetLanguageProcess{fontenc}{T1}
+
+%\SelectProcesses % Ambos
+
+\def\DeclareLanguageProcessGroup{\mem@declproc\languagename}
+\def\DeclareMemProcessGroup{\mem@declproc?}
+
+\let\mem@procgroups\@empty
+
+% Añadir debug: Que muestre las definiciones, activaciones y
+% estados actuales.
+
+% The first version sorted the groups by numerical order, but
+% as the ocp mechanism already uses the number to sort them
+% (this is one of its features), I don't think this is
+% is necessary. The previous version is:
+% 
+% \def\mem@declproc#1#2#3{%
+%   \let\mem@a\@empty
+%   \@tempswatrue
+%   \def\mem@pg##1##2##3{%
+%     \if@tempswa
+%       \ifnum##2=#2\relax
+%         \Error
+%       \else\ifnum##2>#2
+%         \mem@after\mem@a{%
+%           \mem@pg{#1}{#2}{#3}\mem@pg{##1}{##2}{##3}}%
+%         \@tempswafalse
+%       \else
+%         \mem@after\mem@a{\mem@pg{##1}{##2}{##3}}%
+%       \fi\fi
+%     \else
+%       \mem@after\mem@a{\mem@pg{##1}{##2}{##3}}%
+%     \fi}%
+%     \mem@procgroups
+%     \if@tempswa
+%       \mem@after\mem@a{\mem@pg{#1}{#2}{#3}}
+%     \fi
+%     \let\mem@procgroups\mem@a}
+%
+% This version would have to be expanded in order to check
+% multiple declarations.
+%  
+% The new one is:
+
+\def\mem@declproc#1#2#3{%
+  % Multiple declarations are allowed provided they are
+  % consistent:
+  \@tempswatrue % true if to be added
+  \def\mem@pg##1##2##3{%
+    \ifnum#2=##2
+      \def\mem@a{#1{}#3}\def\mem@b{##1{}##3}%
+      \ifx\mem@a\mem@b
+        \@tempswafalse
+      \else
+        \Error
+      \fi
+    \fi
+    \def\mem@a{#3}\def\mem@b{##3}%
+    \ifx\mem@a\mem@b
+      \def\mem@a{\number#2{}#1}\def\mem@b{\number##2{}##1}%
+      \ifx\mem@a\mem@b
+        \@tempswafalse
+      \else
+        \Error
+      \fi
+    \fi}%
+  \mem@procgroups
+  \if@tempswa
+    \mem@after\mem@procgroups{\mem@pg{#1}{#2}{#3}}%
+  \fi}
+
+
+\DeclareLanguageProcessGroup{200}{charset}
+\DeclareLanguageProcessGroup{400}{unicode}
+\DeclareLanguageProcessGroup{600}{transcript}
+\DeclareLanguageProcessGroup{800}{input}
+% 1000: case
+\DeclareLanguageProcessGroup{1200}{text}
+\DeclareMemProcessGroup{1400}{font}
+
+\def\DeclareProcess#1#2{%
+  \mem@ecs\let{mem-tp-?-#1}\@empty
+  \mem@ecs\mem@lafter{mem-tp-?-#1}\mem@elt{#2}%
+  \global\mem@ecs\let{mem-tp-?-#1\expandafter}\csname mem-tp-?-#1\endcsname}
+
+% The following is variant to assign a different ocp for
+% a certain language - for example, a different uppercase
+% ocp for Turkish. To investigate if this is the right way,
+% which explain why the syntax is different
+
+\def\DeclareLanguageProcess#1#2{%
+  \mem@ecs\let{mem-tp-\languagename-#1}\@empty
+  \mem@ecs\mem@lafter{mem-tp-\languagename-#1}\mem@elt{#2}%
+  \global\mem@ecs
+    \let{mem-tp-\languagename-#1\expandafter}%
+    \csname mem-tp-\languagename-#1\endcsname}
+
+\def\mem@setproc#1#2#3{%
+  \mem@ecs\let{mem-pp-#1-#2}\@empty
+  \mem@ecs\mem@lafter{mem-pp-#1-#2}\mem@elttp{#3}%
+  \def\mem@elttp##1{%
+    %\expandafter\show\csname mem-tp-##1\endcsname
+    \@ifundefined{mem-tp-?-##1}%
+% Añadir aquí la posibilidad de un .mpd
+      {\DeclareProcess{##1}{##1}}%
+      {}}%
+  \@nameuse{mem-pp-#1-#2}}
+
+\def\SetMemProcess{\mem@setproc?}
+\def\SetLanguageProcess{\mem@setproc\languagename}
+
+% We must avoid duplicated entries, so that we can
+% add processes redundantly (for example, in 'case'):
+
+\def\mem@addproc#1#2#3{%
+  \mem@setcsvar{mem-lp-#1-#2}%
+  \def\mem@eltpp##1{,##1,}%
+  \mem@eforeach{#3}{%
+    \@expandtwoargs\in@{,##1,}{,\@nameuse{mem-lp-#1-#2},}%
+    \ifin@\else
+      \mem@ecs\mem@after{mem-lp-#1-#2}{\mem@eltpp{##1}}%
+      \@ifundefined{mem-pp-#1-##1}%
+        {\mem@setproc#1{##1}{##1}}%
+        {}%
+    \fi}}
+
+\def\AddMemProcess{\mem@addproc?}
+\def\AddLanguageProcess{\mem@addproc\languagename}
+
+\def\mem@selectprocs#1#2#3{%
+  % Make sure mem-lp-?-#3 is not undefined/relax
+  \mem@setcsvar{mem-lp-?-#3}%
+  \def\mem@eltpp##1{%
+    \@ifundefined{\mem@use{pp-}{##1}}%
+      {}%
+      {\csname\mem@use{pp-}{##1}\endcsname}}%
+  \def\mem@elttp##1{\csname\mem@use{tp-}{##1}\endcsname}%
+  % Build the ocplist name
+  \edef\mem@elt##1{\string/##1}%
+  \edef\mem@c{\csname\mem@use{lp-}{#3}\endcsname}%
+  \ifx\mem@c\@empty\else
+    \edef\mem@a{cpl-\csname\mem@use{lp-}{#3}\endcsname}%
+    \mem@debug\@ne{Processing OCP list \mem@c\space for group #3 (#2)}%
+    \@ifundefined{\mem@a}%
+      {\mem@debug\@ne{- Defining OCP list \mem@c}%
+       % Define ocps, if necessary
+       \def\mem@elt##1{%
+         \@ifundefined{ocp-##1}% <- Seleccionar el ocp correcto
+           {\mem@debug\@ne{-- Loading OCP ##1}%
+            \global\mem@ecs\ocp{ocp-##1}=##1\relax}%
+           {}}%
+       \csname\mem@use{lp-}{#3}\endcsname
+       % Build the ocplist body and define ocplist
+       \def\mem@elt##1{%
+         \addbeforeocplist #2 %
+         \@nameuse{ocp-##1}}%
+       \edef\mem@c{%
+         \global\mem@ecs\ocplist{\mem@a}%
+         \csname\mem@use{lp-}{#3}\endcsname
+         \nullocplist}%
+       \mem@c}%
+      {}%  
+    % Build \ShowProcesses data
+    \def\mem@eltpp##1{^^J(Mem) - ##1 = \csname\mem@use{pp-}{##1}\endcsname}%
+    \def\mem@elttp##1{##1 : \csname\mem@use{tp-}{##1}\endcsname}%
+    \def\mem@elt##1{##1 }%
+    \mem@eafter\mem@toshow{^^J(Mem) #2 (#3): \csname\mem@use{lp-}{#3}\endcsname}%
+    % Push the list
+    \mem@eafter\mem@topush{\mem@ecs\pushocplist{\mem@a}}%
+  \fi}
+
+\def\SelectProcesses{%
+  \mem@debug\@ne{====================}% 
+%   \ifx\languagename\@empty
+%     \mem@debug\@ne{Rebuilding processes for (no language)
+%                    on input line \the\inputlineno}% 
+%   \else
+  \mem@debug\@ne{Rebuilding processes for \languagename\space
+                 on input line \the\inputlineno}% 
+%   \fi
+  \edef\mem@toshow{%
+   (Mem) ==========================================^^J%
+   (Mem) \string\ShowProcesses\space(logical = physical : ocps)}%
+  \let\mem@frompush\mem@topush
+  \let\mem@topush\@empty
+  \let\mem@pg\mem@selectprocs
+  \mem@procgroups
+  \ifx\mem@frompush\mem@topush
+    \mem@debug\@ne{Skipping - currently active}%
+  \else
+    \clearocplists
+    \mem@debug\@ne{Activating}%
+    \mem@topush
+  \fi}
+%\ShowProcesses}
+   % Ambos
+\def\ShowProcesses{\typeout{\mem@toshow}}
+
+
+
+
+% Font processing
+% ~~~~~~~~~~~~~~~
+
+% Let's modify \selectfont. Essentialy it selects a language using
+% the current font enconding and then redefines what an encoding means.
+%
+% Automatic selection of font encoding based on fd files--if there
+% is an fd file for some combination then select it (with certain
+% preferences).  Hovever, it turns out that t1cmr exists but pointing to
+% _another_ font, and that ot1omlgc points to an ut1 encoded font.
+
+\expandafter\let\expandafter
+  \mem@selectfont\csname selectfont \endcsname
+
+\DeclareRobustCommand\selectfont{%
+  \let\mem@fencoding\f@encoding
+  \@ifundefined{\mem@@\languagename-\f@family-enc}%
+    {\mem@eforeach{\csname\mem@@\languagename-encs\endcsname}{%
+       \lowercase{\edef\mem@a{##1}}%
+       \IfFileExists{\mem@a\f@family.fd}%
+         {\@namedef{\mem@@\languagename-\f@family-enc}{##1}%
+          \@ifundefined{\mem@@ T@##1}%
+             {\global\@namedef{\mem@@ T@##1}{}%
+              \@ifundefined{T@##1}{\global\@namedef{T@##1}{}}{}%
+              \def\f@encoding{##1}%
+              \setbox\z@\vbox\bgroup % dummy box
+                \catcode`\\=0
+                \catcode`\{=1
+                \catcode`\}=2
+                \catcode`\^^M=5
+                \catcode`\ =10
+                \catcode`\^^I=10
+                \catcode`\%=14
+                \input{\mem@a.ed}%
+              \egroup}%
+             {}%
+	  \fontencoding{##1}%
+	  \SetMemProcess{fontenc}{\csname\mem@@##1-process\endcsname}%
+          \mem@lastfor}%
+         {}}%
+     \ifx\mem@forcmd\@gobble\else
+%  	\PackageError{mem}%
+%  	     {Unable to find a proper encoding for a font
+% 	     family \f@family}%
+%  	     {The list of encodings for that language [...]}%
+      \fi}%
+    {\fontencoding{\csname\mem@@\languagename-\f@family-enc\endcsname}%
+     \edef\f@encoding{\csname\mem@@\languagename-\f@family-enc\endcsname}%
+     \SetMemProcess{fontenc}{\csname\mem@@\f@encoding-process\endcsname}}%
+  % Select new process only if the encoding has changed
+  \ifx\mem@fencoding\f@encoding\else
+    \SelectProcesses
+  \fi  
+  \mem@selectfont
+  \begingroup  % ***** An input in an ocp is ignored? <<<<< 
+               % Sadly, there is a bug and it is.
+    \nfss@catcodes
+    \let\nfss@catcodes\relax
+    \@ifundefined{TS1/\f@family/m/n}%
+      {\InputIfFileExists{ts1\f@family.fd}{}{}}%
+      {}%
+  \endgroup}
+
+% \..family are modified too keep track of the
+% current family, so that if the script changes
+% the family is still the same. To be fine tuned.
+
+\DeclareRobustCommand\rmfamily
+        {\not@math@alphabet\rmfamily\mathrm
+         \let\mem@family\rmfamily
+         \fontfamily\rmdefault\selectfont}
+\DeclareRobustCommand\sffamily
+        {\not@math@alphabet\sffamily\mathsf
+         \let\mem@family\sffamily
+         \fontfamily\sfdefault\selectfont}
+\DeclareRobustCommand\ttfamily
+        {\not@math@alphabet\ttfamily\mathtt
+         \let\mem@family\ttfamily
+         \fontfamily\ttdefault\selectfont}
+
+\let\mem@family\rmfamily
+
+
+% Properties
+% ~~~~~~~~~~
+
+\def\DeclareLanguageProperty{%
+  \@ifstar{\mem@prop@s}{\mem@prop@x}}
+
+\def\mem@prop@s#1{% Implicit #2
+  \edef\mem@b{\zap@space#1 \@empty}%
+  \expandafter\def\csname\mem@@prop\languagename-\mem@b\endcsname##1}
+
+\def\mem@prop@x#1#2{%
+  \edef\mem@b{\zap@space#1 \@empty}%
+  \expandafter\def\csname\mem@@prop\languagename-\mem@b\endcsname{#2}}
+
+% There are parameters depending on both the language and the font
+% encoding.  However, they may not be known when the package is
+% loaded.  They are set with \languageproperties, but I think that's
+% not very rubust.
+%
+% Currently works as if it was in fact named \dialectproperties
+
+\def\languageproperties#1#2{%
+  \let\mem@savelang\languagename
+  \def\languagename{#1}%
+  \expandafter\edef\csname\mem@@#1-prlt\endcsname{\zap@space#2 \@empty}%
+  \mem@eforeach{\zap@space#2 \@empty}{%
+    \csname\mem@cmd{prop-}{#1}{##1}\endcsname}% %<<---remove???
+  \edef\mem@b{#1}%
+  \ifx\mem@savelang\languagename
+    \ExecuteLanguageProperties{\zap@space#2 \@empty}%
+    \mem@switchfont
+  \fi
+  \let\languagename\mem@savelang}
+
+\def\ExecuteLanguageProperties#1{%
+  \@ifundefined{\mem@@\languagename-prlt}%
+    {\let\mem@a\@empty}%
+    {\edef\mem@a{\csname\mem@@\languagename-prlt\endcsname,}}%
+  \mem@eforeach{\mem@a#1}{%
+    \def\mem@b{##1}%
+    \ifx\mem@b\@empty\else
+      \@ifundefined{\mem@use{prop-}{##1}}%
+        {% Raise error if there is no =
+         \expandafter\mem@executegen##1\\}%   ??Lo siguiente con \edef?
+        {\csname\mem@use{prop-}{##1}\endcsname}%
+    \fi}}
+
+\def\mem@executegen#1=#2\\{%
+  \csname\mem@use{prop-}{#1}\endcsname{#2}}
+
+% Properties shared by all languages as generic tools.
+% They are assigned to the ? language in the top of the
+% tree. When executed, \languagename contains the actual
+% name of the active language.
+
+\def\languagename{?}
+
+\DeclareLanguageProperty*{charset}{%
+  \@namedef{\mem@@\languagename-cset}{#1}%
+  \SetLanguageProcess{charenc}{#1}}
+
+\DeclareLanguageProperty*{hyphenation}{%
+  \def\mem@hyphenation{#1}}
+
+\DeclareLanguageProperty*{fontencs}{%
+  \mem@setencs\languagename{#1}}
+
+\DeclareLanguageProperty*{rmfamily}{%
+  \@namedef{\mem@@ font-\languagename-rmfamily}{#1}}
+
+\DeclareLanguageProperty*{sffamily}{%
+  \@namedef{\mem@@ font-\languagename-sffamily}{#1}}
+
+\DeclareLanguageProperty*{ttfamily}{%
+  \@namedef{\mem@@ font-\languagename-ttfamily}{#1}}
+
+\AddMemProcess{font}{fontenc}
+
+\AddLanguageProcess{charset}{charenc}
+%\SetLanguageProcess{charenc}{\expandafter\noexpand\@nameuse{\mem@use{}{cset}}}
+%\SetLanguageProcess{charenc}{isolat1}
+
+% Scripts
+% ~~~~~~~
+
+\def\SetLanguageScript#1{%
+  \mem@foreach{#1}{%
+    \lowercase{\edef\mem@b{##1}}%
+    \@ifundefined{\mem@@ script-##1}{\input{\mem@b.sd}}{}%
+    \def\mem@a{##1}}%  script description
+  \edef\mem@b{%
+    \noexpand\DeclareLanguageCommand{\noexpand\mem@script}{processes}{\mem@a}}%
+  \mem@b}
+
+\def\DeclareScript#1{%
+  \@namedef{\mem@@ script-#1}{}%
+  \def\mem@script{#1}%
+  \lowercase{\def\mem@b{#1}}%
+  \expandafter\let\csname\mem@@ lang-#1\endcsname\mem@b}
+
+\def\SetScriptDirection#1{%
+  \expandafter\def\csname\mem@@\mem@script-dir\endcsname{#1}}
+
+\def\mem@setencs#1#2{\@namedef{\mem@@#1-encs}{#2}}  
+
+\def\DeclareScriptSymbol#1#2{%
+  \let#1\relax
+  \newcommand{#1}{\unichar{#2}}}
+
+\def\DeclareScriptCommand#1{%
+  \let#1\relax % Implicit #1#2 etc
+  \newcommand{#1}}
+
+
+\def\scriptproperties#1#2{%
+  \mem@eforeach{\zap@space#2 \@empty}{%
+    \mem@setfamily#1\\##1\\}%
+  \long\def\mem@b{#1}% \long because \mem@script is \long!!
+  \ifx\mem@b\mem@script\mem@switchfont\fi}
+
+\def\mem@setfamily#1\\#2=#3\\{%
+   \@namedef{\mem@@ font-#1-#2}{#3}}
+
+
+% ==========================
+
+\def\SetEncodingScript#1{}%
+
+% \def\SetEncodingDirection#1{%
+%   \global\@namedef{\mem@@\f@encoding-dir}{#1}}
+
+\newcommand\SetEncodingProcess[2]{%
+  \DeclareProcess{#1}{#2}%
+  \SetMemProcess{fontenc}{#1}%
+  \global\@namedef{\mem@@\f@encoding-process}{#1}}
+
+\SetEncodingProcess{t1}{t1-dec,t1-rec,t1-com}
+%\SelectProcesses
+
+% Note the following does not switch the encoding name.
+% In other words, symbols are incorporated as part of
+% the main encoding and not as a separate encoding.
+% The final decision about what font to use is left
+% to the font encoding OCP. 
+% To be fixed.
+
+\def\SetSymbolEncodings#1{%
+  \@ifundefined{\mem@@ T@##1}%
+    {\global\@namedef{\mem@@ T@##1}{}%
+     \@ifundefined{T@##1}{\global\@namedef{T@##1}{}}{}}
+    {}}
+
+% \let\mem@textcmd\DeclareTextCommand
+% 
+% \def\DeclareEncodingSymbol#1#2{%
+%   \mem@textcmd{#1}{\f@encoding}{\unichar{#2}}}
+% 
+% \def\DeclareEncodingCommand#1{% Implicit #1#2 etc
+%   \mem@textcmd{#1}{\f@encoding}}
+
+% =============================
+
+% Charsets
+% ~~~~~~~~
+%
+% The escape char in the ASCII/Unicode charsets is used as
+% a escape with several meanings (given by the second char).
+% It is used by charset to unicode ocp's to enter a Unicode
+% value directly without conversion.
+
+{\catcode`\^^1b=11
+\catcode`\^^00=11
+\catcode`\^^01=11
+\catcode`\^^02=11
+\gdef\unichar#1{\mem@protected{^^1b^^00#1^^1b}\unichar{#1}}
+\gdef\unitext#1{\mem@protected{^^1b^^01#1^^1b}\unitext{#1}}
+\gdef\utftext#1{\mem@protected{^^1b^^02#1^^1b}\utftext{#1}}
+\gdef\utfstring#1{\mem@protected{^^1b^^02#1^^1b}\utfstring{#1}}
+}
+
+\DeclareRobustCommand\utftext[1]{{%
+  \ExecuteLanguageProperties{charset=utf8}%
+  \SelectProcesses
+  #1}}
+
+% ====================
+
+% onfss
+
+\def\onfss@symenc{TS1}
+\DeclareFontEncoding{\onfss@symenc}{}{}
+
+\DeclareRobustCommand\UseMemTextSymbol[1]{%
+  {[[#1]]\fontencoding{\onfss@symenc}\mem@selectfont\char#1 }}
+
+\DeclareRobustCommand\UseMemTextSymbol[2]{%
+  {\fontencoding{#1}\mem@selectfont\char#2 }}
+
+% \setbox\z@\hbox{\rmfamily\UseMemTextSymbol{TS1}{167}%
+%                 \sffamily\UseMemTextSymbol{TS1}{167}%
+%                 \ttfamily\UseMemTextSymbol{TS1}{167}}
+
+%================
+
+% Package options
+
+\let\PreLoadPatterns\@gobbletwo
+
+\def\SetPatterns#1#2{%
+  \expandafter\chardef
+  \csname memh@#1\endcsname=#2\relax}
+
+\def\LoadLanguage#1#2#3#4{%
+   \DeclareOption{#1}{\mem@input{#1}{#2}{#3}{#4}}}
+
+\def\mem@input#1#2#3#4{%
+  \@ifundefined{languagelist}%
+    {\edef\languagelist{#1}}%
+    {\edef\languagelist{\languagelist,#1}}%
+  \@ifundefined{memh@#1}%
+    {\expandafter\let\csname memh@#1\expandafter\endcsname
+       \csname memh@#3\endcsname%
+     \PackageInfo{mem}%
+       {#1 with #3 patterns\@gobble}}\@empty
+  \@ifundefined{\mem@@?#1}%
+    {\lowercase{\edef\mem@b{#2}}%
+     \InputIfFileExists{#2.ld}%
+       {}%
+       {\mem@error{Missing language file}}}
+    {}%   And make sure the right dialect is selected:
+  \mem@setencs{#1}{#4}%
+  \edef\languagename{#1}%
+  \mem@ecs\def{\mem@@\languagename-isocode}{#2}}
+
+\everyjob\expandafter{\the\everyjob\SetWeekDay}
+
+\def\mem@process#1=#2\mem@process{%
+  \@ifundefined{\mem@@ gopt-#1}%
+    {\mem@error{Error}}
+    {\@nameuse{\mem@@ gopt-#1}{#2}}}
+
+\@namedef{\mem@@ gopt-charset}#1{%
+  \SetMemProcess{charenc}{#1}%
+  \@namedef{\mem@@?-cset}{#1}}
+
+\SetMemProcess{charenc}{utf8}
+\@namedef{\mem@@?-cset}{utf8}
+
+\DeclareOption*{%
+  \@expandtwoargs\in@{=}{\CurrentOption}%
+  \ifin@
+    \expandafter\mem@process\CurrentOption\mem@process
+  \else
+    \mem@error{Error}%\expandafter\mem@input\CurrentOption\mem@input%
+  \fi}
+
+\input{mem.cfg}
+
+\def\mem@sel@opt{%
+  \PackageInfo{mem}%
+   {Selecting document language:\MessageBreak
+      \languagename\@gobble}%
+   \expandafter\languageset\expandafter*\expandafter
+     {\languagename}%
+   \bodydir\csname\mem@@\mem@script-dir\endcsname}
+
+\ProcessOptions*
+
+\mem@sel@opt
+
+% Select the interface
+
+\InputIfFileExists{\csname\mem@@\languagename-isocode\endcsname
+                   \csname\mem@@?-cset\endcsname.id}{}{}
+
+  % Implicit #2#3  
+\def\UseMemAccent#1{\csname mem@accent@#1\endcsname}
+
+% There are four kind of accents.
+%
+% t: Top accent is the usual accent, which
+% can be combined with the well known diatop macro
+% #2 is either c or l, if continues or it's the
+% last accent; used only in t-
+
+\def\mem@accent@t#1#2#3{% This is the well known diatop macro.
+  \if#2c%
+    \leavevmode
+      \begingroup
+      \setbox1=\hbox{{\accent#1{}}}%
+      \setbox2=\hbox{{#3{}}}%
+      \dimen0=\ifdim\wd1>\wd2\wd1\else\wd2\fi
+      \dimen1=\ht2\advance\dimen1by-1ex
+      \setbox1=\hbox to1\dimen0{\hss\accent#1\hss}%
+      \rlap{\raise1\dimen1\box1}%
+      \hbox to1\dimen0{\hss#3\hss}%
+    \endgroup
+  \else
+    \accent#1 #3%
+  \fi}
+
+% u: bot accent based on an accent, like \b
+
+\def\mem@accent@u#1#2#3{% 9
+   \hmode@bgroup
+     \o@lign{\relax#3\crcr\hidewidth\sh@ft{29}%
+     \vbox to.2ex{\hbox{\char#1}\vss}\hidewidth}%
+   \egroup}
+
+\let\mem@accent@a\mem@accent@u % to remove
+
+% b: bot accent with an "underaccent" like \c
+
+\def\mem@accent@b#1#2#3{% 11
+   \leavevmode
+   \setbox\z@\hbox{#3}%
+   \ifdim\ht\z@=1ex
+     \accent#1 #3%
+   \else
+     {\ooalign{\hidewidth\char#1\hidewidth
+        \crcr\unhbox\z@}}%
+   \fi}
+
+% c: bot accent with an "underaccent" like \c
+
+\let\mem@accent@c\mem@accent@b
+
+% p: bot accent with a puntuaction point, like \d
+	
+\def\mem@accent@p#1#2#3{%
+   \hmode@bgroup
+     \o@lign{\relax#3\crcr\hidewidth\sh@ft{10}#1\hidewidth}%
+   \egroup}
+
+% k: an special case (task: to investigate) for \k
+
+\def\mem@accent@k#1#2#3{%
+   \oalign{\null#3\crcr\hidewidth\char#1}}
+
+\def\UseMemUnichar#1{\char#1 }
+
+% ====== Verbatim
+% The following characters are used in ocp files to ensure their
+% catcode is always the same even if in verbatim mode. See mtp2ocp
+% for further details (it replaces \, {, }, etc. by the chars below).
+
+\catcode"E000=0 % \
+\catcode"E001=1 % {
+\catcode"E002=2 % }
+\catcode"E003=3 % $
+\catcode"E004=4 % &
+\catcode"E005=5 % <ret>
+\catcode"E006=6 % #
+\catcode"E007=7 % ^
+\catcode"E008=8 % _
+
+% Special chars to the PUA. This is necessary because ocp's
+% recatcode the chars.
+
+\def\#{\unichar{"E123}}
+\def\${\unichar{"E124}}
+\def\%{\unichar{"E125}}
+\def\&{\unichar{"E126}}
+\def\_{\unichar{"E15F}}
+
+% =============== Math
+
+\def\DeclareMathSymbol#1#2#3#4{%
+  \expandafter\in@\csname sym#3\expandafter\endcsname
+     \expandafter{\group@list}%
+  \ifin@
+    \begingroup
+      \if\relax\noexpand#1% is command?
+        \edef\reserved@a{\noexpand\in@{\string\mathchar}{\meaning#1}}%
+        \reserved@a
+        \ifin@
+          \expandafter\set@mathsymbol\csname sym#3\endcsname#1#2{#4}%
+          \@font@info{Redeclaring math symbol \string#1}%
+        \else
+            \expandafter\ifx
+            \csname\expandafter\@gobble\string#1\endcsname
+            \relax
+            \expandafter\set@mathsymbol\csname sym#3\endcsname#1#2{#4}%
+          \else
+            \@latex@error{Command `\string#1' already defined}\@eha
+          \fi
+        \fi
+      \else
+        \expandafter\set@mathchar\csname sym#3\endcsname#1#2{#4}%
+      \fi
+    \endgroup
+  \else
+    \@latex@error{Symbol font `#3' is not defined}\@eha
+  \fi
+}
+
+\def\mem@setmath#1#2#3#4{%
+  \count@\mathchar@type#3
+  \multiply\count@256
+  \advance\count@#1
+  \multiply\count@65536
+  \advance\count@#4
+  \global#2\count@}
+
+\def\set@mathchar#1#2{\mem@setmath{#1}{\omathcode`#2=}}
+\def\set@mathsymbol#1#2{\mem@setmath{#1}{\omathchardef#2}}
+
+\def\MemUnknownCharacter#1{%
+  \vrule width .6em
+  \PackageWarning{Mem}{Unknown character \number`#1\space}}
+
+% The original definition of \do@noligs includes a \char and
+% \char's has been always problematic in omega. Here is a
+% redefinition which uses the actual char. 2005-12-08
+
+\def\do@noligs#1{%
+  \catcode`#1\active
+  \begingroup
+    \lccode`\~`#1\relax
+    \lowercase{\endgroup
+  \def~{\leavevmode\kern\z@\expandafter\@gobble\string#1}}}
+
+\def\MemMoveOtherChar#1{\relax\expandafter\@gobble\string#1}
+
+\endinput
+%%
+%% End of file `mem.sty'.
-- 
cgit v1.2.3

