summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/memoize
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-01-03 21:18:51 +0000
committerKarl Berry <karl@freefriends.org>2024-01-03 21:18:51 +0000
commit1e7f7766f2fd93956c4b9bbb7c91ea1f682cef47 (patch)
tree547c621d1f24f92f9f003cbfe9e4508d44111bba /Master/texmf-dist/tex/latex/memoize
parent9fe5b3b4175b31a43a984d069b3aaae580e130a7 (diff)
memoize (3jan24)
git-svn-id: svn://tug.org/texlive/trunk@69285 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/memoize')
-rw-r--r--Master/texmf-dist/tex/latex/memoize/memoizable.sty13
-rw-r--r--Master/texmf-dist/tex/latex/memoize/memoize.sty401
-rw-r--r--Master/texmf-dist/tex/latex/memoize/nomemoize.sty41
3 files changed, 291 insertions, 164 deletions
diff --git a/Master/texmf-dist/tex/latex/memoize/memoizable.sty b/Master/texmf-dist/tex/latex/memoize/memoizable.sty
index 1b3da7cb3c8..dcf74a4765d 100644
--- a/Master/texmf-dist/tex/latex/memoize/memoizable.sty
+++ b/Master/texmf-dist/tex/latex/memoize/memoizable.sty
@@ -24,16 +24,9 @@
%%
%% The files belonging to this work and covered by LPPL are listed in
%% (<texmf>/doc/generic/memoize/)FILES.
-\ProvidesPackage{memoizable}[2023/10/10 v1.0.0 A programmer's stub for Memoize]
-\@ifpackageloaded{memoize}%
-{\endinput}{}
-\@ifpackageloaded{nomemoize}%
-{\endinput}{}%
-\def\mmzset#1{\ignorespaces}
-\def\nommzkeys{\pgfqkeys{/mmz}}
-\pgfqkeys{/mmz}{.unknown/.code={\pgfkeysdef{\pgfkeyscurrentkey}{}}}
-\newif\ifmemoize
-\newcommand\IfMemoizing[2][]{\@secondoftwo}
+\ProvidesPackage{memoizable}[2024/1/02 v1.1.0 A programmer's stub for Memoize]
+\RequirePackage{pgfkeys}
+\input memoizable.code.tex
\endinput
%%
%% End of file `memoizable.sty'.
diff --git a/Master/texmf-dist/tex/latex/memoize/memoize.sty b/Master/texmf-dist/tex/latex/memoize/memoize.sty
index b0cf09962e4..936dae64ef2 100644
--- a/Master/texmf-dist/tex/latex/memoize/memoize.sty
+++ b/Master/texmf-dist/tex/latex/memoize/memoize.sty
@@ -24,8 +24,7 @@
%%
%% The files belonging to this work and covered by LPPL are listed in
%% (<texmf>/doc/generic/memoize/)FILES.
-\ProvidesPackage{memoize}[2023/10/10 v1.0.0 Fast and flexible externalization]
-\RequirePackage{pgfopts} % pgfkeys-based package options
+\ProvidesPackage{memoize}[2024/1/02 v1.1.0 Fast and flexible externalization]
\RequirePackage{etoolbox}
\ifdefined\luatexversion
\directlua{memoize = {}}
@@ -49,8 +48,14 @@
}%
}
\RequirePackage{advice}
-\@ifpackageloaded{nomemoize}%
-{%
+\def\ifmmz@loadstatus#1{%
+ \ifnum#1=0\csname mmz@loadstatus\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\ifmmz@loadstatus{3}{%
\PackageError{memoize}{Cannot load the package, as "nomemoize" is already
loaded. Memoization will NOT be in effect}{Packages "memoize" and
"nomemoize" are mutually exclusive, please load either one or the other.}%
@@ -58,8 +63,7 @@
\ProcessPgfPackageOptions{/memoize/package options}
\endinput
}{}%
-\@ifpackageloaded{memoizable}%
-{%
+\ifmmz@loadstatus{2}{%
\PackageError{memoize}{Cannot load the package, as "memoizable" is already
loaded}{Package "memoizable" is loaded by packages which support
memoization. Memoize must be loaded before all such packages. The
@@ -73,8 +77,10 @@
\ProcessPgfPackageOptions{/memoize/package options}
\endinput
}{}%
+\ifmmz@loadstatus{1}{\endinput}{}%
+\def\mmz@loadstatus{1}%
\def\filetotoks#1#2{%
- \immediate\openin0{#2}%
+ \immediate\mmz@openin0{#2}%
#1={}%
\loop
\unless\ifeof0
@@ -83,6 +89,8 @@
\repeat
\immediate\closein0
}
+\let\mmz@openin\openin
+\let\mmz@openout\openout
\newif\ifmmz@temp
\newtoks\mmz@temptoks
\newbox\mmz@box
@@ -98,6 +106,7 @@
disable/.code=\memoizefalse,
},
enable,
+ options/.style={#1},
}
\def\mmz@mode@normal{0}
\def\mmz@mode@readonly{1}
@@ -109,69 +118,83 @@
recompile/.code={\let\mmz@mode\mmz@mode@recompile},
}
\mmzset{%
- path/.code={\pgfqkeys{/mmz/path}{#1}},
- path/.cd,
- relative/.is if=mmz@relativepath,
- dir/.store in=\mmz@dir,
- dir/.value required,
- prefix/.store in=\mmz@prefix,
- prefix/.value required,
-}
-\newif\ifmmz@relativepath
+ prefix/.code={\mmz@parse@prefix{#1}},
+}
+\begingroup
+\catcode`\/=12
+\gdef\mmz@parse@prefix#1{%
+ \edef\mmz@prefix{\detokenize\expandafter{\expanded{#1}}}%
+ \def\mmz@prefix@dir{}%
+ \def\mmz@prefix@name{}%
+ \expandafter\mmz@parse@prefix@i\mmz@prefix/\mmz@eov
+}
+\gdef\mmz@parse@prefix@i#1/#2{%
+ \ifx\mmzeov#2%
+ \def\mmz@prefix@name{#1}%
+ \else
+ \appto\mmz@prefix@dir{#1/}%
+ \expandafter\mmz@parse@prefix@i\expandafter#2%
+ \fi
+}
+\endgroup
\mmzset{%
begindocument/.append style={
- path/.append code=\mmz@maybe@mkmemodir\mmz@record@prefix,
+ prefix/.append code=\mmz@maybe@mkmemodir\mmz@record@prefix,
},
begindocument/.append code=\mmz@maybe@mkmemodir,
}
-\def\mmz@dir@path{\ifmmz@relativepath.\fi/\mmz@dir}
-\def\mmz@prefix@path{\mmz@dir@path/\mmz@prefix}
\mmzset{
mkdir/.is if=mmz@mkdir,
- mkdir command/.code={\def\mmz@mkdir@command##1{#1}},
- mkdir command={mkdir "#1"},
+ mkdir command/.store in=\mmz@mkdir@command,
+ mkdir command={},
}
\newif\ifmmz@mkdir
+\mmz@mkdirtrue
\def\mmz@maybe@mkmemodir{%
\ifmmz@mkdir
- \pdf@system{\mmz@mkdir@command{\mmzOutputDirectory\mmz@dir@path}}%
+ \ifdefempty\mmz@mkdir@command{}{%
+ \ifdefempty\mmz@prefix@dir{}{%
+ \mmz@remove@quotes{\mmz@prefix@dir}\mmz@temp
+ \pdf@system{\mmz@mkdir@command\space"\mmz@temp"}%
+ }%
+ }%
\fi
}
\mmzset{%
- memo dir/.style={
- mkdir,
- path={
- relative,
- dir={#1.memo.dir},
- prefix={},
- },
- },
- memo dir/.default=\mmzUnquote\jobname,
- no memo dir/.style={
- mkdir=false,
- path={
- relative,
- dir={},
- prefix={#1.},
- },
- },
- no memo dir/.default=\mmzUnquote\jobname,
+ memo dir/.style={prefix={#1.memo.dir/}},
+ memo dir/.default=\jobname,
+ no memo dir/.style={prefix={#1.}},
+ no memo dir/.default=\jobname,
no memo dir,
}
-\def\mmzUnquote#1{\expanded{\noexpand\mmz@unquote#1}\mmz@unquote@end}
-\def\mmz@unquote#1{%
- \ifx\mmz@unquote@end#1%
+\def\mmz@remove@quotes#1#2{%
+ \def\mmz@remove@quotes@end{\let#2\mmz@temp}%
+ \def\mmz@temp{}%
+ \expanded{%
+ \noexpand\mmz@remove@quotes@i
+ \detokenize\expandafter{\expanded{#1}}%
+ "\noexpand\mmz@eov
+ }%
+}
+\def\mmz@remove@quotes@i{%
+ \CollectArgumentsRaw
+ {\collargsBraceCollectedfalse
+ \collargsNoDelimiterstrue
+ \collargsAppendPostwrap{{##1}}%
+ }%
+ {u"u\mmz@eov}%
+ \mmz@remove@quotes@ii
+}
+\def\mmz@remove@quotes@ii#1#2{%
+ \appto\mmz@temp{#1}%
+ \ifx&#2&%
+ \mmz@remove@quotes@end
+ \expandafter\@gobble
\else
- \ifx"#1%
- \expandafter\expandafter\expandafter\mmz@unquote@quotes
- \else
- \expandafter\expandafter\expandafter\mmz@unquote@noquotes
- \expandafter\expandafter\expandafter#1%
- \fi
+ \expandafter\@firstofone
\fi
+ {\mmz@remove@quotes@i#2\mmz@eov}%
}
-\def\mmz@unquote@quotes#1"\mmz@unquote@end{#1}
-\def\mmz@unquote@noquotes#1\mmz@unquote@end{#1}
\newif\ifmmz@ignorespaces
\mmzset{
ignore spaces/.is if=mmz@ignorespaces,
@@ -388,12 +411,13 @@
\gtoksapp\mmzCMemo{\global\mmzUnmemoizabletrue}%
\mmz@write@cmemo
\mmz@trace@endmemoize@unmemoizable
- \PackageWarning{memoize}{Marking this code as unmemoizable}%
+ \PackageInfo{memoize}{Marking this code as unmemoizable}%
\else
\ifmmz@abort
\mmz@trace@endmemoize@aborted
- \PackageWarning{memoize}{Memoization was aborted}%
- \mmz@write@empty@cmemo
+ \PackageInfo{memoize}{Memoization was aborted}%
+ \mmz@compute@context@mdfivesum
+ \mmz@write@cmemo
\else
\mmz@compute@context@mdfivesum
\mmz@write@cmemo
@@ -487,7 +511,7 @@
\fi
}
\def\mmz@Ifmemoizing@nogrouplevel{0\relax\relax\fi\iftrue}
-\def\mmz@trace#1{\immediate\write16{[tracing memoize] #1}}
+\def\mmz@trace#1{\advice@typeout{[tracing memoize] #1}}
\def\mmz@trace@context{\mmz@trace{\space\space
Context: "\expandonce{\mmz@context@key}" --> \mmz@context@mdfivesum}}
\def\mmz@trace@Memoize@on{%
@@ -600,22 +624,23 @@
},
clear context/.value forbidden,
meaning to context/.code={\forcsvlist\mmz@mtoc{#1}},
- csname meaning to context/.code={\mmz@mtoc@cs{#1}},
- key meaning to context/.code={\forcsvlist\mmz@mtoc\mmz@mtoc@keycmd{#1}},
+ csname meaning to context/.code={\mmz@mtoc@csname{#1}},
+ key meaning to context/.code={%
+ \forcsvlist\mmz@mtoc\mmz@mtoc@keycmd{#1}},
key value to context/.code={\forcsvlist\mmz@mtoc@key{#1}},
- /handlers/.meaning to context/.code={%
- \expanded{\noexpand\mmz@mtoc@cs{pgfk@\pgfkeyscurrentpath/.@cmd}}},
+ /handlers/.meaning to context/.code={\expanded{%
+ \noexpand\mmz@mtoc@csname{pgfk@\pgfkeyscurrentpath/.@cmd}}},
/handlers/.value to context/.code={%
- \expanded{\noexpand\mmz@mtoc@cs{pgfk@\pgfkeyscurrentpath}}},
+ \expanded{\noexpand\mmz@mtoc@csname{pgfk@\pgfkeyscurrentpath}}},
}
\def\mmz@mtoc#1{%
\collargs@cs@cases{#1}%
{\mmz@mtoc@cmd{#1}}%
{\mmz@mtoc@error@notcsorenv{#1}}%
{%
- \mmz@mtoc@cs{%
+ \mmz@mtoc@csname{%
#1}%
- \mmz@mtoc@cs{%
+ \mmz@mtoc@csname{%
end%
#1}%
}%
@@ -624,19 +649,20 @@
\begingroup
\escapechar=-1
\expandafter\endgroup
- \expandafter\mmz@mtoc@cs\expandafter{\string#1}%
+ \expandafter\mmz@mtoc@csname\expandafter{\string#1}%
}
-\def\mmz@mtoc@cs#1{%
+\def\mmz@mtoc@csname#1{%
\pgfkeysvalueof{/mmz/context/.@cmd}%
- \expandafter\string\csname#1\endcsname={\expandafter\meaning\csname#1\endcsname}%
+ \detokenize{#1}={\expandafter\meaning\csname#1\endcsname}%
\pgfeov
}
-\def\mmz@mtoc@key#1{\mmz@mtoc@cs{pgfk@#1}}
-\def\mmz@mtoc@key#1{\mmz@mtoc@cs{pgfk@#1/.@cmd}}
+\def\mmz@mtoc@key#1{\mmz@mtoc@csname{pgfk@#1}}
+\def\mmz@mtoc@keycmd#1{\mmz@mtoc@csname{pgfk@#1/.@cmd}}
\def\mmz@mtoc@error@notcsorenv#1{%
- \PackageError{memoize}{'\detokenize{#1}' passed to key 'meaning to context' is neither a command nor an environment}{}%
+ \PackageError{memoize}{'\detokenize{#1}' passed to key 'meaning to context'
+ is neither a command nor an environment}{}%
}
-\def\mmz@cmemo@path{\mmz@prefix@path\mmz@code@mdfivesum.memo}
+\def\mmz@cmemo@path{\mmz@prefix\mmz@code@mdfivesum.memo}
\newtoks\mmzCMemo
\mmzset{%
include source in cmemo/.is if=mmz@include@source,
@@ -644,7 +670,7 @@
\newif\ifmmz@include@source
\mmz@include@sourcetrue
\def\mmz@write@cmemo{%
- \immediate\openout\mmz@out{\mmz@cmemo@path}%
+ \immediate\mmz@openout\mmz@out{\mmz@cmemo@path}%
\immediate\write\mmz@out{\noexpand\mmzMemo}%
\immediate\write\mmz@out{%
\global\mmzContextExtra{\the\mmzContextExtra}\collargs@percentchar
@@ -657,10 +683,6 @@
\immediate\closeout\mmz@out
\pgfkeysalso{/mmz/record/new cmemo={\mmz@cmemo@path}}%
}
-\def\mmz@write@empty@cmemo{%
- \immediate\openout\mmz@out{\mmz@cmemo@path}%
- \immediate\closeout\mmz@out
-}
\let\mmzSource\endinput
\def\mmz@process@cmemo{%
\mmz@trace@process@cmemo
@@ -692,7 +714,7 @@
\xdef\mmz@context@mdfivesum{\pdf@mdfivesum{\expandonce\mmz@context@key}}%
}
\def\mmz@ccmemo@path{%
- \mmz@prefix@path\mmz@code@mdfivesum-\mmz@context@mdfivesum.memo}
+ \mmz@prefix\mmz@code@mdfivesum-\mmz@context@mdfivesum.memo}
\newtoks\mmzCCMemo
\newif\ifmmz@include@context
\mmzset{%
@@ -703,7 +725,7 @@
direct ccmemo input/.is if=mmz@direct@ccmemo@input,
}
\def\mmz@write@ccmemo{%
- \immediate\openout\mmz@out{\mmz@ccmemo@path}%
+ \immediate\mmz@openout\mmz@out{\mmz@ccmemo@path}%
\begingroup
\the\mmz@ccmemo@resources
\endgroup
@@ -723,7 +745,7 @@
\string\mmzResource{\mmz@extern@name}\collargs@percentchar}%
}
\def\mmzResource#1{%
- \ifnum0\pdf@filesize{\mmz@dir@path/#1}=0
+ \ifnum0\pdf@filesize{\mmz@prefix@dir/#1}=0
\ifmmz@direct@ccmemo@input
\let\mmzMemo\endinput
\else
@@ -784,11 +806,11 @@
}
\newcount\mmz@seq
\def\mmz@extern@basename{%
- \mmz@prefix\mmz@code@mdfivesum-\mmz@context@mdfivesum
+ \mmz@prefix@name\mmz@code@mdfivesum-\mmz@context@mdfivesum
\ifnum\mmz@seq>0 -\the\mmz@seq\fi
}
\def\mmz@extern@name{\mmz@extern@basename.pdf}
-\def\mmz@extern@basepath{\mmz@dir@path/\mmz@extern@basename}
+\def\mmz@extern@basepath{\mmz@prefix@dir\mmz@extern@basename}
\def\mmz@extern@path{\mmz@extern@basepath.pdf}
\mmzset{
padding left/.store in=\mmz@padding@left,
@@ -870,8 +892,10 @@
\endgroup
\global\advance\mmzExternPages1
\edef\externbasepath{\mmz@extern@basepath}%
- \edef\pagenumber{\the\numexpr\mmzRegularPages
- +\mmzExternPages+\mmzExtraPages}%
+ \edef\pagenumber{%
+ \the\numexpr\mmzRegularPages
+ +\mmzExternPages+\mmzExtraPages
+ }%
\mmzset{record/new extern/.expanded=\mmz@extern@path}%
\global\advance\mmz@seq1
}
@@ -903,7 +927,7 @@
enddocument/afterlastpage/.append code={%
\ifnum\mmzExternPages>0
\PackageWarning{memoize}{The compilation produced \the\mmzExternPages\space
- new extern\ifnum\mmzExternPages>1 s\fi.}%
+ new extern\ifnum\mmzExternPages>1 s\fi}%
\fi
},
}
@@ -982,7 +1006,7 @@
\mmzset{
extract/.estore in=\mmz@extraction@method,
extract/.value required,
- begindocument/.append style={extract/.code=\mmz@preamble@only@warning},
+ begindocument/.append style={extract/.code=\mmz@preamble@only@error},
extract/perl/.code={%
\mmz@clear@extraction@log
\pdf@system{%
@@ -990,13 +1014,12 @@
\mmzvalueof{perl extraction options}%
}%
\mmz@check@extraction@log{perl}%
- \def\mmz@mkdir@command##1{\mmzvalueof{perl extraction command}\space --mkdir "##1"}%
+ \def\mmz@mkdir@command{\mmzvalueof{perl extraction command} --mkdir}%
},
perl extraction command/.initial=memoize-extract.pl,
- perl extraction options/.initial={%
- -e -l "\mmzOutputDirectory\mmzUnquote\jobname.mmz.log" -w
- "\string\PackageWarning{memoize (perl-based extraction)}{\string\warningtext}"
- "\mmzOutputDirectory\mmzUnquote\jobname.mmz"
+ perl extraction options/.initial={\space
+ -F latex
+ \jobname\space
},
extract=perl,
extract/python/.code={%
@@ -1006,23 +1029,22 @@
\mmzvalueof{python extraction options}%
}%
\mmz@check@extraction@log{python}%
- \def\mmz@mkdir@command##1{\mmzvalueof{python extraction command}\space --mkdir "##1"}%
+ \def\mmz@mkdir@command{\mmzvalueof{python extraction command} --mkdir}%
},
python extraction command/.initial=memoize-extract.py,
- python extraction options/.initial={%
- -e -l "\mmzOutputDirectory\mmzUnquote\jobname.mmz.log" -w
- "\string\PackageWarning{memoize (python-based extraction)}{\string\warningtext}"
- "\mmzOutputDirectory\mmzUnquote\jobname.mmz"
+ python extraction options/.initial={\space
+ -F latex
+ \jobname\space
},
}
-\def\mmz@preamble@only@warning{%
- \PackageWarning{memoize}{%
+\def\mmz@preamble@only@error{%
+ \PackageError{memoize}{%
Ignoring the invocation of "\pgfkeyscurrentkey".
- This key may only be executed in the preamble}%
+ This key may only be executed in the preamble}{}%
}
\def\mmz@clear@extraction@log{%
\begingroup
- \immediate\openout0{\mmzUnquote\jobname.mmz.log"}%
+ \immediate\mmz@openout0{\jobname.mmz.log}%
\immediate\closeout0
\endgroup
}
@@ -1033,14 +1055,16 @@
\@input{\jobname.mmz.log}%
\ifmmz@temp \else \mmz@extraction@error \fi \endgroup }
\def\mmz@extraction@error{%
- \PackageWarning{memoize}{Extraction of externs from document "\mmzUnquote\jobname.pdf"
- using method "\extractionmethod" was unsuccessful. Have you set the
- shell escape mode as suggested in chapter 1 of the manual?}{}}
+ \PackageError{memoize}{Extraction of externs from document
+ "\jobname.pdf" using method "\extractionmethod" was
+ unsuccessful}{The extraction script "\mmzvalueof{\extractionmethod\space
+ extraction command}" wasn't executed or didn't finish execution
+ properly.}}
\mmzset{
record/.style={%
record/begin/.append style={
/mmz/record/#1/begin/.try,
- /mmz/record/#1/prefix/.try/.expanded=\mmz@prefix@path,
+ /mmz/record/#1/prefix/.try/.expanded=\mmz@prefix,
},
record/prefix/.append style={/mmz/record/#1/prefix/.try={##1}},
record/new extern/.append style={/mmz/record/#1/new extern/.try={##1}},
@@ -1066,7 +1090,7 @@
}
}
\def\mmz@record@prefix{%
- \mmzset{/mmz/record/prefix/.expanded=\mmz@prefix@path}%
+ \mmzset{/mmz/record/prefix/.expanded=\mmz@prefix}%
}
\mmzset{
no record,
@@ -1077,7 +1101,7 @@
\mmzset{
record/mmz/begin/.code={%
\newwrite\mmz@mmzout
- \immediate\openout\mmz@mmzout{\jobname.mmz}%
+ \immediate\mmz@openout\mmz@mmzout{\jobname.mmz}%
},
record/mmz/prefix/.code={%
\immediate\write\mmz@mmzout{\noexpand\mmzPrefix{#1}}%
@@ -1112,7 +1136,7 @@
bat=memoize-extract.\jobname.bat,
record/sh/begin/.code={%
\newwrite\mmz@shout
- \immediate\openout\mmz@shout{\mmz@shname}%
+ \immediate\mmz@openout\mmz@shout{\mmz@shname}%
},
record/sh/new extern/.code={%
\begingroup
@@ -1124,7 +1148,7 @@
},
record/bat/begin/.code={%
\newwrite\mmz@batout
- \immediate\openout\mmz@batout{\mmz@batname}%
+ \immediate\mmz@openout\mmz@batout{\mmz@batname}%
},
record/bat/new extern/.code={%
\begingroup
@@ -1145,7 +1169,7 @@
record/makefile/begin/.code={%
\newwrite\mmz@makefileout
\newtoks\mmz@makefile@externs
- \immediate\openout\mmz@makefileout{\mmz@makefilename}%
+ \immediate\mmz@openout\mmz@makefileout{\mmz@makefilename}%
\immediate\write\mmz@makefileout{.DEFAULT_GOAL = externs}%
\immediate\write\mmz@makefileout{.PHONY: externs}%
},
@@ -1192,11 +1216,11 @@
}
\def\mmz@pageextraction@error{%
\PackageError{memoize}{Extraction of extern page \pagenumber\space from
- document "\mmzUnquote\jobname.pdf" using method "\extractionmethod" was unsuccessful.
- Have you set the shell escape mode as suggested in chapter 1 of the
- manual?}{If "\mmzvalueof{tex extraction command}" was executed,
- shell escape mode is not the problem, and inspecting "\externbasepath.log"
- might give you a clue what's wrong}}
+ document "jobname.pdf" using method "\extractionmethod" was
+ unsuccessful.}{Check the log file to see if the extraction script was
+ executed at all, and if it finished successfully. You might also want to
+ inspect "\externbasepath.log", the log file of the embedded TeX compilation
+ which ran the extraction script}}
\def\mmz@tex@extraction@systemcall{%
\mmzvalueof{tex extraction command}\space
\mmzvalueof{tex extraction options}\space
@@ -1208,10 +1232,9 @@
-halt-on-error
-interaction=batchmode
-jobname "\externbasepath"
- \ifdefempty\mmzOutputDirectory{}{-output-directory "\mmzOutputDirectory"}
},
tex extraction script/.initial={%
- \def\noexpand\fromdocument{"\mmzOutputDirectory"\jobname.pdf}%
+ \def\noexpand\fromdocument{\jobname.pdf}%
\def\noexpand\pagenumber{\pagenumber}%
\def\noexpand\expectedwidth{\expectedwidth}%
\def\noexpand\expectedheight{\expectedheight}%
@@ -1272,6 +1295,7 @@
outer handler=\mmz@auto@noop@env, bailout handler=\mmz@auto@bailout},
nomemoize/.style={noop, options=disable},
replicate/.style={run if memoizing, inner handler=\mmz@auto@replicate},
+ to context/.style={run if memoizing, outer handler=\mmz@auto@tocontext},
}
\mmzset{
auto/abort/.style={run conditions=\mmzAbort},
@@ -1348,6 +1372,19 @@
\pgfqkeys{/mmz/auto/replicate}{
expanded/.code={\let\mmz@auto@replicate@expansion\@firstofone},
}
+\def\mmz@auto@tocontext{%
+ \expanded{%
+ \noexpand\pgfkeysvalueof{/mmz/context/.@cmd}%
+ original "\AdviceNamespace" csname "\AdviceCsname"={%
+ \noexpand\expanded{%
+ \noexpand\noexpand\noexpand\meaning
+ \noexpand\AdviceCsnameGetOriginal{\AdviceNamespace}{\AdviceCsname}%
+ }%
+ }%
+ }%
+ \pgfeov
+ \AdviceOriginal
+}
\mmzset{
auto/.cd,
ref/.style={outer handler=\mmz@auto@ref\mmzNoRef, run if memoizing},
@@ -1365,12 +1402,7 @@
\AdviceOriginal#2{#3}%
}
\def\mmzForceNoRef#1{%
- \ifmemoizing
- \expandafter\gtoksapp\expandafter\mmzContextExtra
- \else
- \expandafter\toksapp\expandafter\mmzContext
- \fi
- {r@#1={\csname r@#1\endcsname}}%
+ \mmz@mtoc@csname{r@#1}%
\ignorespaces
}
\def\mmzNoRef#1{%
@@ -1414,23 +1446,30 @@
\label{#1}%
\endgroup
}
+\AddToHook{shipout/before}[memoize]{\global\advance\mmzExtraPages-1\relax}
+\AddToHook{shipout/after}[memoize]{\global\advance\mmzExtraPages1\relax}
+\mmzset{auto=\DiscardShipoutBox{
+ outer handler=\global\advance\mmzExtraPages1\relax\AdviceOriginal}}
\mmzset{
begindocument/before/.append code={%
\@ifpackageloaded{tikz}{%
\input advice-tikz.code.tex
}{}%
\mmzset{%
- auto=\tikz{memoize, collector=\AdviceCollectTikZArguments},
- auto={tikzpicture}{memoize},
- auto=\pgfsys@getposition{
- run if memoizing, outer handler=\mmz@pgfsys@getposition},
- }%
- \def\mmz@pgfsys@getposition##1{%
- \expandafter\ifx\csname pgf@sys@pdf@mark@pos@##1\endcsname\relax
- \else
- \mmzAbort
- \fi
- \AdviceOriginal{##1}%
+ auto/memoize tikz/.style={
+ memoize,
+ at begin memoization=\edef\mmz@pgfpictureid{%
+ \the\pgf@picture@serial@count
+ },
+ at end memoization=\xtoksapp\mmzCCMemo{%
+ \unexpanded{%
+ \global\expandafter\advance\csname pgf@picture@serial@count\endcsname
+ }%
+ \the\numexpr\pgf@picture@serial@count-\mmz@pgfpictureid\relax\relax
+ },
+ },
+ auto=\tikz{memoize tikz, collector=\AdviceCollectTikZArguments},
+ auto={tikzpicture}{memoize tikz},
}%
},
}
@@ -1480,30 +1519,102 @@
\fi
}%
}{}}
+\AddToHook{begindocument/before}{%
+ \@ifpackageloaded{morewrites}{%
+ \def\mmz@openin#1#2{\openin#1=#2\relax}%
+ \def\mmz@openout#1#2{\openout#1=#2\relax}%
+ }{}%
+}
+\mmzset{
+ begindocument/before/.append style={%
+ auto=\blx@bbl@entry{outer handler=\mmz@biblatex@entry},
+ auto/cite/.style={run if memoizing, outer handler=\mmz@biblatex@cite},
+ auto/cites/.style={run if memoizing, outer handler=\mmz@biblatex@cites},
+ auto=\cite{cite},
+ auto=\cites{cites},
+ }%
+}
+\def\mmz@biblatex@entry#1#2\endentry{%
+ \csxdef{mmz@bbl@#1}{\pdf@mdfivesum{#2}}%
+ \AdviceOriginal{#1}#2\endentry
+}
+\def\mmz@biblatex@cite#1#{\mmz@biblatex@cite@i{#1}}
+\def\mmz@biblatex@cite@i#1#2{%
+ \forcsvlist\mmz@biblatex@cite@do@key{#2}%
+ \xtoksapp\mmzCCMemo{%
+ \noexpand\setbox0\noexpand\hbox{%
+ \expandonce\AdviceOriginal\unexpanded{#1}{#2}%
+ }}%
+ \AdviceOriginal#1{#2}%
+}
+\def\mmz@biblatex@cite@do@key#1{%
+ \mmz@mtoc@csname{mmz@bbl@#1}%
+ \ifcsdef{mmz@bbl@#1}{}{\mmzAbort}%
+}
+\def\mmz@biblatex@cites{%
+ \mmz@temptoks{}%
+ \mmz@biblatex@cites@i
+}
+\def\mmz@biblatex@cites@i{%
+ \futurelet\mmz@temp\mmz@biblatex@cites@ii
+}
+\def\mmz@biblatex@cites@ii{%
+ \mmz@tempfalse
+ \ifx\mmz@temp\bgroup
+ \mmz@temptrue
+ \else
+ \ifx\mmz@temp[%]
+ \mmz@temptrue
+ \fi
+ \fi
+ \ifmmz@temp
+ \expandafter\mmz@biblatex@cites@iii
+ \else
+ \expandafter\mmz@biblatex@cites@z
+ \fi
+}
+\def\mmz@biblatex@cites@iii#1#{\mmz@biblatex@cites@iv{#1}}
+\def\mmz@biblatex@cites@iv#1#2{%
+ \forcsvlist\mmz@biblatex@cite@do@key{#2}%
+ \toksapp\mmz@temptoks{#1{#2}}%
+ \mmz@biblatex@cites@i
+}
+\def\mmz@biblatex@cites@z{%
+ \xtoksapp\mmzCCMemo{%
+ \noexpand\setbox0\noexpand\hbox{%
+ \expandonce\AdviceOriginal\the\mmz@temptoks
+ }}%
+ \expandafter\AdviceOriginal\the\mmz@temptoks
+}
\AddToHook{begindocument/before}{\mmzset{begindocument/before}}
\AddToHook{begindocument}{\mmzset{begindocument}}
\AddToHook{begindocument/end}{\mmzset{begindocument/end}}
\AddToHook{enddocument/afterlastpage}{\mmzset{enddocument/afterlastpage}}
+\mmzset{extract/no/.code={}}
\InputIfFileExists{memoize.cfg}{}{}
+\let\mmz@initial@extraction@method\mmz@extraction@method
+\DeclareUnknownKeyHandler[mmz]{%
+ \expanded{\noexpand\pgfqkeys{/mmz}{#1\IfBlankF{#2}{={#2}}}}}
+\ProcessKeyOptions[mmz]
\mmzset{
- extract/no/.code={},
- output-directory/.store in=\mmzOutputDirectory,
+ extract/.is choice,
+ extract/.default=\mmz@extraction@method,
+ extract/.append style={
+ extract/.code={\PackageError{memoize}{Key "extract" was invoked twice.}{In
+ principle, externs should be extracted only once. If you really want
+ to extract again, execute "extract/<method>".}},
+ },
+ /utils/exec={\pgfkeysgetvalue{/mmz/extract/.@cmd}\mmz@temp@extract},
+ extract=\mmz@extraction@method,
}
-\ProcessPgfPackageOptions{/mmz}
-\ifdefined\mmzOutputDirectory
-\else
- \def\mmzOutputDirectory{}%
+\def\mmz@temp{no}
+\ifx\mmz@extraction@method\mmz@temp
+ \pgfkeyslet{/mmz/extract/.@cmd}\mmz@temp@extract
+ \let\mmz@extraction@method\mmz@initial@extraction@method
\fi
-\mmzset{output directory/.code={\PackageError{memoize}{Key "output-directory"
- may only be used as a package option}{}}}
-\mmzset{
- extract/\mmz@extraction@method,
- extract/.code={\PackageError{memoize}{Key "extract" is only allowed as a
- package option.}{If you really want to extract in the preamble, execute
- "extract/<method>".}},
-}
+\let\mmz@temp@extract\relax
\ifnum\pdf@draftmode=1
- \PackageWarning{memoize}{No memoization will be performed in the draft mode}%
+ \PackageWarning{memoize}{No externalization will be performed in the draft mode}%
\fi
\endinput
%%
diff --git a/Master/texmf-dist/tex/latex/memoize/nomemoize.sty b/Master/texmf-dist/tex/latex/memoize/nomemoize.sty
index e553a61e6e8..bfe7ef87af3 100644
--- a/Master/texmf-dist/tex/latex/memoize/nomemoize.sty
+++ b/Master/texmf-dist/tex/latex/memoize/nomemoize.sty
@@ -24,18 +24,21 @@
%%
%% The files belonging to this work and covered by LPPL are listed in
%% (<texmf>/doc/generic/memoize/)FILES.
-\ProvidesPackage{nomemoize}[2023/10/10 v1.0.0 A no-op stub for Memoize]
-\RequirePackage{pgfopts} % pgfkeys-based package options
-\pgfkeys{/memoize/package options/.unknown/.code={}}
-\ProcessPgfPackageOptions{/memoize/package options}
-\@ifpackageloaded{memoize}
-{%
+\ProvidesPackage{nomemoize}[2024/1/02 v1.1.0 A no-op stub for Memoize]
+\RequirePackage{pgfkeys}
+\def\ifmmz@loadstatus#1{%
+ \ifnum#1=0\csname mmz@loadstatus\endcsname\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\ifmmz@loadstatus{1}{%
\PackageError{nomemoize}{Cannot load the package, as "memoize" is already
loaded; memoization will remain in effect}{Packages "memoize" and
"nomemoize" are mutually exclusive, please load either one or the other.}%
\endinput }{}%
-\@ifpackageloaded{memoizable}%
-{%
+\ifmmz@loadstatus{2}{%
\PackageError{nomemoize}{Cannot load the package, as "memoizable" is already
loaded}{Package "memoizable" is loaded by packages which support
memoization. (No)Memoize must be loaded before all such packages. The
@@ -47,6 +50,8 @@
of that package.}%
\endinput
}{}%
+\ifmmz@loadstatus{3}{\endinput}{}%
+\def\mmz@loadstatus{3}%
\def\mmzset#1{\ignorespaces}
\def\nommzkeys{\pgfqkeys{/mmz}}
\pgfqkeys{/mmz}{.unknown/.code={\pgfkeysdef{\pgfkeyscurrentkey}{}}}
@@ -70,9 +75,27 @@
\let\endmemoize\endnomemoize
\newif\ifmemoizing
\newif\ifinmemoize
-\newcommand\IfMemoizing[2][]{\@secondoftwo}
\def\mmznext#1{\ignorespaces}
\InputIfFileExists{memoize.cfg}{}{}
+\DeclareUnknownKeyHandler[mmz]{}
+\ProcessKeyOptions[mmz]
+\pgfkeys{%
+ /handlers/.meaning to context/.code={},
+ /handlers/.value to context/.code={},
+}
+\let\mmzAbort\relax
+\let\mmzUnmemoizable\relax
+\newcommand\IfMemoizing[2][]{\@secondoftwo}
+\let\mmzNoRef\@gobble
+\let\mmzForceNoRef\@gobble
+\newtoks\mmzContext
+\newtoks\mmzContextExtra
+\newtoks\mmzCMemo
+\newtoks\mmzCCMemo
+\newcount\mmzExternPages
+\newcount\mmzExtraPages
+\let\mmzTracingOn\relax
+\let\mmzTracingOff\relax
\endinput
%%
%% End of file `nomemoize.sty'.