summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty')
-rw-r--r--Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty584
1 files changed, 320 insertions, 264 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty b/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty
index 20f5ef0e689..3098ffaefca 100644
--- a/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty
+++ b/Master/texmf-dist/tex/latex/oberdiek/attachfile2.sty
@@ -8,7 +8,7 @@
%%
%% This is a generated file.
%%
-%% Copyright (C) 2005-2009 by
+%% Copyright (C) 2005-2010 by
%% Heiko Oberdiek <heiko.oberdiek at googlemail.com>
%%
%% This work may be distributed and/or modified under the
@@ -28,139 +28,142 @@
%% This work consists of the main source file attachfile2.dtx
%% and the derived files
%% attachfile2.sty, attachfile2.pdf, attachfile2.ins, attachfile2.drv,
-%% atfidvips.def, atfipdftex.def, pdfatfi.pl.
+%% atfi-dvips.def, atfi-pdftex.def, atfi-dvipdfmx.def,
+%% pdfatfi.pl.
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{attachfile2}%
- [2009/09/25 v2.5 attach files into PDF (HO)]%
-\RequirePackage{ifpdf}
+ [2010/09/27 v2.6 attach files into PDF (HO)]%
+\RequirePackage{ifpdf}[2009/04/10]
+\RequirePackage{ifxetex}
+\RequirePackage{ifluatex}[2009/04/10]
\RequirePackage{keyval}
\RequirePackage{color}
-\RequirePackage{kvoptions}[2006/08/17]
+\RequirePackage{infwarerr}[2010/04/08]
+\RequirePackage{ltxcmds}[2010/04/26]
+\RequirePackage{kvoptions}[2009/07/21]
+\RequirePackage{pdftexcmds}[2010/04/01]
\RequirePackage{pdfescape}[2007/11/11]
-
-
\RequirePackage{hyperref}
\RequirePackage{hycolor}[2008/07/29]
-
-
-\def\atfi@hexdigit#1{%
- \ifcase#1%
- 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or
- a\or b\or c\or d\or e\or f%
- \fi
-}
-\def\atfi@hexchar#1{%
- \atfi@hexdigit{\numexpr\dimexpr.0625\dimexpr`#1sp\relax\relax\relax}%
- \atfi@hexdigit{%
- \numexpr`#1-16*\dimexpr.0625\dimexpr`#1sp\relax\relax\relax
+\ltx@IfUndefined{pdfmatch}{%
+ \def\atfi@Match#1#2#3#4#5{}%
+}{%
+ \def\atfi@Match#1#2#3{%
+ \begingroup
+ \edef\^{\ltx@backslashchar\string^}%
+ \edef\.{\ltx@backslashchar.}%
+ \let\#\ltx@hashchar
+ \edef\[{\ltx@backslashchar[}% ]]
+ \edef\${\ltx@backslashchar$}%
+ \let\%\ltx@percentchar
+ \edef\&{\string&}%
+ \edef\({\ltx@backslashchar(}%
+ \edef\){\ltx@backslashchar)}%
+ \edef\|{\ltx@backslashchar|}%
+ \edef\*{\ltx@backslashchar*}%
+ \edef\+{\ltx@backslashchar+}%
+ \edef\?{\ltx@backslashchar?}%
+ \edef\{{\ltx@backslashchar\ltx@leftbracechar}%
+ \edef\}{\ltx@rightbracechar}%
+ \edef\\{\ltx@backslashchar\ltx@backslashchar}%
+ \edef\~{\string~}%
+ \ifcase\pdfmatch#3{#2}{#1} %
+ \endgroup
+ \expandafter\ltx@secondoftwo
+ \or
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \else
+ \atfi@Warning{%
+ Internal error: Wrong pattern!\MessageBreak
+ --> #2 <--\MessageBreak
+ Pattern check ignored%
+ }%
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \fi
+ }%
+ \def\atfi@PatToken{%
+ [%
+ -% first character
+ !%
+ \#$\%\&'%
+ \*\+\.%
+ 0-9%
+ A-Z%
+ \^_`%
+ a-z%
+ \{\}\|\~%
+ ]+%
+ }%
+ \begingroup
+ \lccode64=13 % @
+ \lowercase{\endgroup
+ \def\atfi@CR{@}%
+ }%
+ \def\atfi@PatQuotedString{%
+ "%
+ ([^"\\\atfi@CR]|\\.)*%
+ "%
+ }%
+ \ltx@ifpackagelater{ltxcmds}{2010/09/11}{}{%
+ \begingroup
+ \lccode`0=`\{\relax
+ \lowercase{\endgroup
+ \def\ltx@leftbracechar{0}%
+ }%
+ \begingroup
+ \lccode`0=`\}\relax
+ \lowercase{\endgroup
+ \def\ltx@rightbracechar{0}%
+ }%
}%
}
-\def\atfi@tohex#1{%
- \ifx\relax#1%
- \else
- \atfi@hexchar{#1}%
- \expandafter\atfi@tohex
- \fi
-}
-
-
-\def\atfi@converttoname#1#2{%
- \edef#1{#2}%
- \@onelevel@sanitize#1%
- \edef#1{\expandafter\atfi@spacetoother#1 \relax}%
- \edef#1{\expandafter\atfi@converttokens#1\relax}%
+\def\atfi@Warning{\PackageWarning{attachfile2}}
+\SetupKeyvalOptions{%
+ family=AtFi,%
+ prefix=atfi@%
}
-
-\edef\atfi@hash{\string#}%
-\catcode`\ =12\relax%
-\def\atfi@space{ }%
-\catcode`\ =10\relax%
-
-\def\atfi@spacetoother#1 #2\relax{%
- #1%
- \ifx\\#2\\%
+\def\atfi@setup{\setkeys{AtFi}}
+\DeclareBoolOption{draft}
+\DeclareComplementaryOption{final}{draft}
+\def\atfi@mimetype{}
+\define@key{AtFi}{mimetype}{%
+ \edef\atfi@mimetype{#1}%
+ \ifx\atfi@mimetype\ltx@empty
\else
- \atfi@space
- \@ReturnAfterFi{%
- \atfi@spacetoother #2\relax
+ \atfi@Match\atfi@mimetype{%
+ ^(application|audio|image|model|text|video|x-\atfi@PatToken)%
+ /%
+ ([a-z\-\+_\.0-9]+)%
+ (; ?\atfi@PatToken=(\atfi@PatToken|\atfi@PatQuotedString))*$%
+ }{icase}{}{%
+ \atfi@Warning{%
+ Invalid value `\atfi@mimetype'\MessageBreak
+ of option `mimetype'.\MessageBreak
+ Value is discarded%
+ }%
+ \let\atfi@mimetype\ltx@empty
}%
\fi
-}
-\long\def\@ReturnAfterFi#1\fi{\fi#1}
-
-\def\atfi@converttokens#1{%
- \ifx\relax#1%
+ \ifx\atfi@mimetype\ltx@empty
\else
- \ifnum`#1<33 %
- \ifcase`#1%
- % drop illegal zero
- \else
- \atfi@hash\atfi@hexchar#1%
- \fi
- \else
- \ifnum`#1>126 %
- \atfi@hash\atfi@hexchar#1%
- \else
- \ifnum`#1=40 % (
- \atfi@hash 28%
- \else\ifnum`#1=41 % )
- \atfi@hash 29%
- \else\ifnum`#1=60 % <
- \atfi@hash 3c%
- \else\ifnum`#1=62 % >
- \atfi@hash 3e%
- \else\ifnum`#1=91 % [
- \atfi@hash 5b%
- \else\ifnum`#1=93 % ]
- \atfi@hash 5d%
- \else\ifnum`#1=123 % {
- \atfi@hash 7b%
- \else\ifnum`#1=125 % }
- \atfi@hash 7d%
- \else\ifnum`#1=47 % /
- \atfi@hash 2f%
- \else\ifnum`#1=37 % %
- \atfi@hash 25%
- \else
- #1%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \fi
- \fi
- \expandafter\atfi@converttokens
+ \EdefEscapeName\atfi@mimetype{\atfi@mimetype}%
+ \edef\atfi@mimetype{/Subtype/\atfi@mimetype}%
\fi
}
-
-
-\newif\ifatfi@draft
-\let\atfi@finaltrue\atfi@draftfalse
-\let\atfi@finalfalse\atfi@drafttrue
-\define@key{AtFi}{final}[true]{%
- \csname atfi@final#1\endcsname
-}
-\define@key{AtFi}{draft}[true]{%
- \csname atfi@draft#1\endcsname
-}
-
-\def\atfi@mimetype{}
-\define@key{AtFi}{mimetype}{%
- \atfi@converttoname\atfi@mimetype{#1}%
- \edef\atfi@mimetype{/Subtype/\atfi@mimetype}%
-}
-
\define@key{AtFi}{icon}{%
\def\atfi@icon{/Name/#1}%
\def\atfi@icon@icon{#1}%
}
-\setkeys{AtFi}{icon=PushPin}
-
+\atfi@setup{icon=PushPin}
\define@key{AtFi}{color}{%
\HyColor@AttachfileColor{#1}%
\atfi@color@tex\atfi@color@inline\atfi@color@annot
{attachfile2}{color}%
}
-\setkeys{AtFi}{color=1 0.9255 0.7765}
-
+\atfi@setup{color=1 0.9255 0.7765}
\def\atfi@pad@ii#1{%
\ifnum#1>9 %
\number#1%
@@ -168,7 +171,7 @@
0\number#1%
\fi%
}
-\let\atfi@timezone\@empty
+\let\atfi@timezone\ltx@empty
\define@key{AtFi}{timezone}{\def\atfi@timezone{#1}}
\edef\atfi@time{\the\time}
\def\atfi@hours{%
@@ -191,105 +194,138 @@
\EdefEscapeString\atfi@date{#1}%
\edef\atfi@date{/M(\atfi@date)}%
}
-
-\let\atfi@annotname\@empty
-\define@key{AtFi}{annotname}{%
- \atfi@pdfstringdef\atfi@annotname{#1}%
- \edef\atfi@annotname{/NM(\atfi@annotname)}%
-}
-
\DeclareRobustCommand{\atfi@pdfstringdef}[2]{%
\pdfstringdef\atfi@temp@string{#2}%
\edef#1{\atfi@temp@string}%
}
-
+\def\atfi@NoValue{\NoValue}
+\def\atfi@DefNoValueName#1#2#3{%
+ \def#1{#3}%
+ \ifx#1\atfi@NoValue
+ \let#1\ltx@empty
+ \else
+ \atfi@pdfstringdef#1{#1}%
+ \edef#1{/#2(#1)}%
+ \fi
+}
+\let\atfi@annotname\ltx@empty
+\define@key{AtFi}{annotname}[\NoValue]{%
+ \atfi@DefNoValueName\atfi@annotname{NM}{#1}%
+}
\def\atfi@author{}
-\define@key{AtFi}{author}{%
- \atfi@pdfstringdef\atfi@author{#1}%
- \edef\atfi@author{/T(\atfi@author)}%
+\define@key{AtFi}{author}[\NoValue]{%
+ \atfi@DefNoValueName\atfi@author{T}{#1}%
}
-
\def\atfi@description{}
-\define@key{AtFi}{description}{%
- \atfi@pdfstringdef\atfi@description{#1}%
- \edef\atfi@description{/Contents(\atfi@description)}%
+\define@key{AtFi}{description}[\NoValue]{%
+ \atfi@DefNoValueName\atfi@description{Contents}{#1}%
}
-
\def\atfi@subject{}
-\define@key{AtFi}{subject}{%
- \atfi@pdfstringdef\atfi@subject{#1}%
- \edef\atfi@subject{/Subj(\atfi@subject)}%
-}
-
-\newif\ifatfi@print
-\atfi@printtrue
-\define@key{AtFi}{print}[true]{\csname atfi@print#1\endcsname}
-
-\newif\ifatfi@zoom
-\atfi@zoomtrue
-\define@key{AtFi}{zoom}[true]{\csname atfi@zoom#1\endcsname}
-
-\newif\ifatfi@appearance
-\atfi@appearancetrue
-\define@key{AtFi}{appearance}[true]{%
- \csname atfi@appearance#1\endcsname
+\define@key{AtFi}{subject}[\NoValue]{%
+ \atfi@DefNoValueName\atfi@subject{Subj}{#1}%
}
-
-\def\atfi@scale{1}
-\define@key{AtFi}{scale}[1]{%
- \def\atfi@scale{#1}%
-}
-
+\DeclareBoolOption[true]{print}
+\DeclareBoolOption[true]{zoom}
+\DeclareBoolOption[true]{appearance}
+\DeclareStringOption[1]{scale}
\def\atfi@ucfilespec{}
\define@key{AtFi}{ucfilespec}[1]{%
\def\atfi@ucfilespec{#1}%
- \ifx\atfi@ucfilespec\@empty
+ \ifx\atfi@ucfilespec\ltx@empty
\else
\atfi@pdfstringdef\atfi@ucfilespec{#1}%
\fi
}
-
-\newif\ifatfi@nofiles
-\atfi@nofilesfalse
-\define@key{AtFi}{nofiles}[true]{%
- \csname atfi@nofiles#1\endcsname
-}
-
-\let\atfi@driver\@empty
+\DeclareBoolOption{nofiles}
+\let\atfi@driver\ltx@empty
\def\atfi@driver@pdftex{pdftex}
\def\atfi@driver@dvips{dvips}
-
-\define@key{AtFi}{pdftex}[true]{%
+\def\atfi@driver@dvipdfmx{dvipdfmx}
+\DeclareVoidOption{pdftex}{%
\let\atfi@driver\atfi@driver@pdftex
}
-\define@key{AtFi}{dvips}[true]{%
+\DeclareVoidOption{dvips}{%
\let\atfi@driver\atfi@driver@dvips
}
-
+\DeclareVoidOption{dvipdfmx}{%
+ \let\atfi@driver\atfi@driver@dvipdfmx
+}
+\DeclareVoidOption{xetex}{%
+ \let\atfi@driver\atfi@driver@dvipdfmx
+}
+\DeclareStringOption{driverfallback}
\DeclareRobustCommand{\attachfilesetup}[1]{\setkeys{AtFi}{#1}}
-
+\DeclareLocalOptions{%
+ annotname,%
+ appearance,%
+ author,%
+ color,%
+ date,%
+ description,%
+ icon,%
+ mimetype,%
+ nofiles,%
+ print,%
+ scale,%
+ subject,%
+ timezone,%
+ ucfilespec,%
+ zoom,%
+}
\InputIfFileExists{attachfile.cfg}{}{}
-
-\ProcessKeyvalOptions{AtFi}
-
-
+\ProcessKeyvalOptions*
+\def\atfi@DisableOption{%
+ \DisableKeyvalOption[action=error,package=attachfile2]{AtFi}%
+}
\ifpdf
% ignoring other driver options
\let\atfi@driver\atfi@driver@pdftex
\else
- \ifx\atfi@driver\@empty
- \PackageWarningNoLine{attachfile2}{%
- Driver is not specified,\MessageBreak
- enforce draft settings%
- }%
- \atfi@drafttrue
+ \ifx\atfi@driver\atfi@driver@pdftex
+ \let\atfi@driver\ltx@empty
+ \PackageError{attachfile2}{%
+ Wrong driver option `pdftex',\MessageBreak
+ because pdfTeX in PDF mode is not detected%
+ }\@ehc
+ \fi
+ \ifxetex
+ \let\atfi@driver\atfi@driver@dvipdfmx
+ \else
+ \ifx\atfi@driver\ltx@empty
+ \ifx\atfi@driverfallback\ltx@empty
+ \else
+ \expandafter\let\expandafter\atfi@driver
+ \csname atfi@driver@\atfi@driverfallback\endcsname
+ \ifx\atfi@driver\atfi@driver@dvips
+ \else
+ \ifx\atfi@driver\atfi@driver@dvipdfmx
+ \else
+ \let\atfi@driver\ltx@empty
+ \PackageWarningNoLine{attachfile2}{%
+ Option `driverfallback' with unsupported\MessageBreak
+ DVI driver (\atfi@driverfallback)%
+ }%
+ \fi
+ \fi
+ \fi
+ \ifx\atfi@driver\ltx@empty
+ \PackageWarningNoLine{attachfile2}{%
+ Driver is not specified,\MessageBreak
+ enforce draft settings%
+ }%
+ \atfi@drafttrue
+ \fi
+ \fi
\fi
\fi
-
-
+\atfi@DisableOption{pdftex}
+\atfi@DisableOption{dvips}
+\atfi@DisableOption{dvipdfmx}
+\atfi@DisableOption{xetex}
+\atfi@DisableOption{driverfallback}
\DeclareRobustCommand{\notextattachfile}[2][]{%
\begingroup
- \setkeys{AtFi}{#1}%
+ \atfi@setup{#1}%
\ifatfi@print
\leavevmode
\begingroup
@@ -297,12 +333,13 @@
#2\strut
\endgroup
\else
- \setbox0=\hbox{#2\strut}%
+ \sbox\ltx@zero{#2\strut}%
\makebox[\wd0]{}%
\fi
\endgroup
}
-
+\atfi@DisableOption{draft}%
+\atfi@DisableOption{final}%
\ifatfi@draft
\def\atfi@dummy@pushpin{%
\raisebox{-1.25bp}{\parbox[b][14bp]{24bp}{}}%
@@ -316,13 +353,9 @@
\DeclareRobustCommand{\attachfile}[2][]{%
\noattachfile[{#1}]%
}%
- \expandafter\endinput
+ \expandafter\endinput
\fi
-
-
-\input{atfi\atfi@driver.def}
-
-
+\input{atfi-\atfi@driver.def}
\def\atfi@acroGraph@data{%
\atfi@GSAVE
0.5 \atfi@SETGRAYFILL
@@ -521,13 +554,11 @@
\atfi@STROKE
\atfi@GRESTORE
}
-\DeclareRobustCommand{\atfi@acroTag}{%
+\def\atfi@acroTag{%
\raisebox{-1.6bp}{\parbox[b][17bp]{25bp}{%
\rule{0pt}{0pt}\atfi@literal{\atfi@acroTag@data}}%
}%
}
-
-
\def\attachfile@timezone#1{%
\ifx\\#1\\%
% no timezone information given
@@ -536,58 +567,92 @@
\fi
}
\newcommand*{\attachfile@file}[2][]{%
- \ifx\\#2\\%
+ \EdefUnescapeHex\atfi@filename{#2}%
+ \ifx\atfi@filename\ltx@empty
\PackageError{attachfile2}{Empty file name}\@ehc
\else
- \edef\atfi@restore{\uccode0=\the\uccode0 \relax}%
- \let\atfi@filename\@empty
- \atfi@getfilename#2\relax\relax
- \atfi@restore
\@namedef{atfi@file@\atfi@filename}{#1}%
\fi
}
-\begingroup
- \catcode0=12 %
- \gdef\atfi@getfilename#1#2{%
- \ifx\relax#1%
- \else
- \uccode0=\numexpr 16*\atfi@hexnum{#1} + \atfi@hexnum{#2}\relax
- \uppercase{%
- \edef\atfi@filename{%
- \atfi@filename^^@%
- }%
- }%
- \expandafter\atfi@getfilename
- \fi
- }%
-\endgroup
-\def\atfi@hexnum#1{%
- \ifnum`#1<58 %
- \numexpr `#1-48\relax
- \else
- \numexpr `#1-87\relax
- \fi
-}
-
\InputIfFileExists{\jobname.atfi}{}{}%
-
\newif\ifatfi@checksum
\define@key{AtFi@file}{CheckSum}{%
\atfi@checksumtrue
\edef\atfi@params{\atfi@params/CheckSum<#1>}%
}
\newif\ifatfi@creationdate
+\define@key{AtFi@file}{CreationDateTZ}{%
+ \ifatfi@creationdate
+ \else
+ \atfi@creationdatetrue
+ \edef\atfi@params{%
+ \atfi@params
+ /CreationDate(#1)%
+ }%
+ \fi
+}
\define@key{AtFi@file}{CreationDate}{%
- \atfi@creationdatetrue
- \edef\atfi@params{\atfi@params/CreationDate(D:#1\atfi@timezone)}%
+ \ifatfi@creationdate
+ \else
+ \atfi@creationdatetrue
+ \edef\atfi@params{%
+ \atfi@params
+ /CreationDate(#1\atfi@timezone)%
+ }%
+ \fi
}
\newif\ifatfi@moddate
+\define@key{AtFi@file}{ModDateTZ}{%
+ \ifatfi@moddate
+ \else
+ \atfi@moddatetrue
+ \edef\atfi@params{%
+ \atfi@params
+ /ModDate(#1)%
+ }%
+ \fi
+}
\define@key{AtFi@file}{ModDate}{%
- \atfi@moddatetrue
- \edef\atfi@params{\atfi@params/ModDate(D:#1\atfi@timezone)}%
+ \ifatfi@moddate
+ \else
+ \atfi@moddatetrue
+ \edef\atfi@params{%
+ \atfi@params
+ /ModDate(D:#1\atfi@timezone)%
+ }%
+ \fi
}
-
-
+\let\atfi@temp\ltx@one
+\ltx@IfUndefined{pdf@filesize}{%
+ \let\atfi@temp\ltx@zero
+}{}
+\ltx@IfUndefined{pdf@filemoddate}{%
+ \let\atfi@temp\ltx@zero
+}{}
+\ltx@IfUndefined{pdf@filemdfivesum}{%
+ \let\atfi@temp\ltx@zero
+}{}
+\ifcase\atfi@temp
+ \let\atfi@pdftexdata\ltx@gobble
+\or
+ \def\atfi@pdftexdata#1{%
+ \edef\atfi@temp{\pdf@filesize{#1}}%
+ \ifx\atfi@temp\ltx@empty
+ \else
+ \setkeys{AtFi@file}{Size=\atfi@temp}%
+ \edef\atfi@temp{\pdf@filemoddate{#1}}%
+ \ifx\atfi@temp\ltx@empty
+ \else
+ \setkeys{AtFi@file}{ModDateTZ=\atfi@temp}%
+ \fi
+ \edef\atfi@temp{\pdf@filemdfivesum{#1}}%
+ \ifx\atfi@temp\ltx@empty
+ \else
+ \setkeys{AtFi@file}{CheckSum=\atfi@temp}%
+ \fi
+ \fi
+ }%
+\fi
\if@filesw
\else
\atfi@nofilestrue
@@ -597,7 +662,7 @@
File `\jobname.atfi' will not be written because of\MessageBreak
\string\nofiles\space or option `nofiles'%
}%
- \let\atfi@writefile\@gobble
+ \let\atfi@writefile\ltx@gobble
\else
\newwrite\atfi@stream
\immediate\openout\atfi@stream=\jobname.atfi\relax
@@ -606,78 +671,66 @@
}%
\def\atfi@writefile#1{%
\begingroup
- \def\file{#1}%
- \@onelevel@sanitize\file
- \edef\file{\@firstofone{\expandafter\atfi@replace\file} \@nil}%
- \edef\file{\expandafter\atfi@tohex\file\relax}%
+ \EdefEscapeHex\atfi@temp{#1}%
\immediate\write\atfi@stream{%
\string\attachfile@file[%
- \@ifundefined{atfi@file@#1}{}{\@nameuse{atfi@file@#1}}%
- ]{\file}%
+ \ltx@ifundefined{atfi@file@#1}{}{\@nameuse{atfi@file@#1}}%
+ ]{\atfi@temp}%
}%
\endgroup
}%
\fi
-
+\atfi@DisableOption{nofiles}
\def\atfi@attachfile#1#2{%
- \@ifundefined{atfi@fileobj@#2}{%
+ \ltx@IfUndefined{atfi@fileobj@#2}{%
\atfi@writefile{#2}%
}{%
% don't need duplicates
}%
- \setkeys{AtFi}{#1}%
+ \atfi@setup{#1}%
\atfi@embedfile{#2}%
\atfi@set@appearance@icon
\atfi@flags@to@int
\atfi@insert@file@annot{#2}%
\endgroup
}
-
-
-\def\atfi@replace#1 #2\@nil{%
- #1%
- \ifx\\#2\\%
- \else
- \atfi@space
- \@ReturnAfterFi{%
- \atfi@replace#2\@nil
- }%
- \fi
-}%
-
-\long\def\@ReturnAfterFi#1\fi{\fi#1}
-
-
\newlength{\atfi@appearancewidth}
\newlength{\atfi@appearanceheight}
\newlength{\atfi@appearancedepth}
\newsavebox{\atfi@appearancebox}
-
\def\atfi@set@appearance@icon{%
- \@ifundefined{atfi@appobj@\atfi@icon@icon}{%
- \savebox{\atfi@appearancebox}{\@nameuse{atfi@acro\atfi@icon@icon}}%
- \expandafter\xdef\csname atfi@appwidth@\atfi@icon@icon\endcsname{%
+ \ltx@IfUndefined{atfi@appobj@\atfi@icon@icon}{%
+ \savebox{\atfi@appearancebox}{%
+ \@nameuse{atfi@acro\atfi@icon@icon}%
+ }%
+ \expandafter
+ \xdef\csname atfi@appwidth@\atfi@icon@icon\endcsname{%
\the\wd\atfi@appearancebox
}%
- \expandafter\xdef\csname atfi@appheight@\atfi@icon@icon\endcsname{%
+ \expandafter
+ \xdef\csname atfi@appheight@\atfi@icon@icon\endcsname{%
\the\ht\atfi@appearancebox
}%
- \expandafter\xdef\csname atfi@appdepth@\atfi@icon@icon\endcsname{%
+ \expandafter
+ \xdef\csname atfi@appdepth@\atfi@icon@icon\endcsname{%
\the\dp\atfi@appearancebox
}%
\atfi@xform@icon
- \global\expandafter\let\csname atfi@appobj@\atfi@icon@icon\endcsname
+ \global\expandafter\let
+ \csname atfi@appobj@\atfi@icon@icon\endcsname
\atfi@appearanceobj
}{%
}%
% optimization: \setlength dropped
- \atfi@appearancewidth=\@nameuse{atfi@appwidth@\atfi@icon@icon}\relax
- \atfi@appearanceheight=\@nameuse{atfi@appheight@\atfi@icon@icon}\relax
- \atfi@appearancedepth=\@nameuse{atfi@appdepth@\atfi@icon@icon}\relax
+ \atfi@appearancewidth=%
+ \@nameuse{atfi@appwidth@\atfi@icon@icon}\relax
+ \atfi@appearanceheight=%
+ \@nameuse{atfi@appheight@\atfi@icon@icon}\relax
+ \atfi@appearancedepth=%
+ \@nameuse{atfi@appdepth@\atfi@icon@icon}\relax
\expandafter\let\expandafter\atfi@appearanceobj
\csname atfi@appobj@\atfi@icon@icon\endcsname
}
-
\def\atfi@set@appearance#1{%
\savebox{\atfi@appearancebox}{#1}%
\atfi@appearancewidth=\wd\atfi@appearancebox
@@ -685,7 +738,6 @@
\atfi@appearancedepth=\dp\atfi@appearancebox
\atfi@xform
}
-
\newcounter{atfi@flags}
\DeclareRobustCommand{\atfi@flags@to@int}{%
\setcounter{atfi@flags}{0}%
@@ -697,13 +749,17 @@
\addtocounter{atfi@flags}{8}%
\fi%
}
-
\def\atfi@textattachfile#1#2{%
\endgroup
\atfi@textattachfile@i{#1}{#2}%
}
\def\atfi@textattachfile@i#1#2#3{%
- \setkeys{AtFi}{#1}%
+ \ltx@IfUndefined{atfi@fileobj@#2}{%
+ \atfi@writefile{#2}%
+ }{%
+ % don't need duplicates
+ }%
+ \atfi@setup{#1}%
\atfi@embedfile{#2}%
\atfi@set@appearance{%
\leavevmode
@@ -716,7 +772,6 @@
\atfi@insert@file@annot{#2}%
\endgroup
}
-
\DeclareRobustCommand{\attachfile}[1][]{%
\begingroup
\let\do\@makeother
@@ -736,10 +791,11 @@
}
\DeclareRobustCommand{\noattachfile}[1][]{%
\begingroup
- \setkeys{AtFi}{#1}%
+ \atfi@setup{#1}%
\atfi@set@appearance@icon
\ifatfi@print
- \expandafter\atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname
+ \expandafter
+ \atfi@refxform\csname atfi@appobj@\atfi@icon@icon\endcsname
\else
\makebox[\atfi@appearancewidth]{}%
\fi