From 35aaa338a3a95a725bc3961cc689b9262164c6a1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 28 Jan 2010 23:02:21 +0000 Subject: oberdiek update (28jan10) git-svn-id: svn://tug.org/texlive/trunk@16857 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/latex/oberdiek/etexcmds.dtx | 46 +- .../texmf-dist/source/latex/oberdiek/grffile.dtx | 83 ++- Master/texmf-dist/source/latex/oberdiek/ifpdf.dtx | 38 +- .../texmf-dist/source/latex/oberdiek/kvsetkeys.dtx | 28 +- .../texmf-dist/source/latex/oberdiek/ltxcmds.dtx | 325 +++++++++- .../texmf-dist/source/latex/oberdiek/oberdiek.ins | 2 +- .../texmf-dist/source/latex/oberdiek/oberdiek.tex | 14 +- .../texmf-dist/source/latex/oberdiek/pdfrender.dtx | 712 +++++++++++++++++---- 8 files changed, 1063 insertions(+), 185 deletions(-) (limited to 'Master/texmf-dist/source/latex') diff --git a/Master/texmf-dist/source/latex/oberdiek/etexcmds.dtx b/Master/texmf-dist/source/latex/oberdiek/etexcmds.dtx index 9d7f48115da..ea7e6b55713 100644 --- a/Master/texmf-dist/source/latex/oberdiek/etexcmds.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/etexcmds.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2007 by Heiko Oberdiek +% Copyright (C) 2007, 2010 by Heiko Oberdiek % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -77,7 +77,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO)} +\Msg{* Package: etexcmds 2010/01/28 v1.3 Prefix for e-TeX command names (HO)} \Msg{************************************************************************} \keepsilent @@ -88,7 +88,7 @@ This is a generated file. -Copyright (C) 2007 by Heiko Oberdiek +Copyright (C) 2007, 2010 by Heiko Oberdiek This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -155,7 +155,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{etexcmds.drv}% - [2007/12/12 v1.2 Prefix for e-TeX command names (HO)]% + [2010/01/28 v1.3 Prefix for e-TeX command names (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \begin{document} @@ -164,7 +164,7 @@ and the derived files % % \fi % -% \CheckSum{490} +% \CheckSum{514} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -185,7 +185,7 @@ and the derived files % \GetFileInfo{etexcmds.drv} % % \title{The \xpackage{etexcmds} package} -% \date{2007/12/12 v1.2} +% \date{2010/01/28 v1.3} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -304,7 +304,7 @@ and the derived files \fi \expandafter\x\csname ver@etexcmds.sty\endcsname \ProvidesPackage{etexcmds}% - [2007/12/12 v1.2 Prefix for e-TeX command names (HO)] + [2010/01/28 v1.3 Prefix for e-TeX command names (HO)] % \end{macrocode} % % \subsection{Catcodes} @@ -345,6 +345,26 @@ and the derived files \escapechar=92 % backslash % \end{macrocode} % +% \subsection{Provide \cs{newif}} +% +% \begin{macro}{\etexcmds@newif} +% \begin{macrocode} +\def\etexcmds@newif#1{% + \expandafter\edef\csname etex@#1false\endcsname{% + \let + \expandafter\noexpand\csname ifetex@#1\endcsname + \noexpand\iffalse + }% + \expandafter\edef\csname etex@#1true\endcsname{% + \let + \expandafter\noexpand\csname ifetex@#1\endcsname + \noexpand\iftrue + }% + \csname etex@#1false\endcsname +} +% \end{macrocode} +% \end{macro} +% % \subsection{Load package \xpackage{infwarerr}} % % \begin{macrocode} @@ -360,7 +380,7 @@ and the derived files % % \begin{macro}{\ifetex@unexpanded} % \begin{macrocode} -\newif\ifetex@unexpanded +\etexcmds@newif{unexpanded} % \end{macrocode} % \end{macro} % @@ -404,7 +424,7 @@ and the derived files % % \begin{macro}{\ifetex@expanded} % \begin{macrocode} -\newif\ifetex@expanded +\etexcmds@newif{expanded} % \end{macrocode} % \end{macro} % @@ -558,7 +578,7 @@ and the derived files % \begin{macrocode} %<*test3> \NeedsTeXFormat{LaTeX2e} -\ProvidesFile{etexcmds-test3.tex}[2007/12/12 v1.2 Test file for LaTeX] +\ProvidesFile{etexcmds-test3.tex}[2010/01/28 v1.3 Test file for LaTeX] \RequirePackage{etexcmds} \makeatletter \edef\x{\string\unexpanded} @@ -574,7 +594,7 @@ and the derived files % \begin{macrocode} %<*test4> \NeedsTeXFormat{LaTeX2e} -\ProvidesFile{etexcmds-test4.tex}[2007/12/12 v1.2 Test file for LaTeX] +\ProvidesFile{etexcmds-test4.tex}[2010/01/28 v1.3 Test file for LaTeX] \documentclass{article} \usepackage{m-pictex} \def\normalwritestatus#1#2{% @@ -800,6 +820,10 @@ and the derived files % \item % \cs{etex@expanded} added. % \end{Version} +% \begin{Version}{2010/01/28 v1.3} +% \item +% Compatibility to iniTeX\ added. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/Master/texmf-dist/source/latex/oberdiek/grffile.dtx b/Master/texmf-dist/source/latex/oberdiek/grffile.dtx index abe16548837..b7a20b32b74 100644 --- a/Master/texmf-dist/source/latex/oberdiek/grffile.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/grffile.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2006-2009 by Heiko Oberdiek +% Copyright (C) 2006-2010 by Heiko Oberdiek % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -70,7 +70,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: grffile 2009/09/25 v1.10 Extended file name support for graphics (HO)} +\Msg{* Package: grffile 2010/01/28 v1.11 Extended file name support for graphics (HO)} \Msg{************************************************************************} \keepsilent @@ -81,7 +81,7 @@ This is a generated file. -Copyright (C) 2006-2009 by Heiko Oberdiek +Copyright (C) 2006-2010 by Heiko Oberdiek This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -141,7 +141,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{grffile.drv}% - [2009/09/25 v1.10 Extended file name support for graphics (HO)]% + [2010/01/28 v1.11 Extended file name support for graphics (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \begin{document} @@ -150,7 +150,7 @@ and the derived files % % \fi % -% \CheckSum{561} +% \CheckSum{596} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -171,7 +171,7 @@ and the derived files % \GetFileInfo{grffile.drv} % % \title{The \xpackage{grffile} package} -% \date{2009/09/25 v1.10} +% \date{2010/01/28 v1.11} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -379,7 +379,7 @@ and the derived files %<*package> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{grffile}% - [2009/09/25 v1.10 Extended file name support for graphics (HO)]% + [2010/01/28 v1.11 Extended file name support for graphics (HO)]% % \end{macrocode} % % \subsection{Catcode stuff} @@ -576,31 +576,50 @@ and the derived files }{% }% } -\def\grffile@IfFileExists#1{% - \expandafter\expandafter\expandafter - \ifx\expandafter\expandafter\expandafter\\\pdf@filesize{#1}\\% - \let\reserved@a\@secondoftwo - \ifx\input@path\@undefined +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdf@filesize\endcsname\relax + \begingroup + \let\on@line\@empty + \PackageInfo{grffile}{% + \string\grffile@IfFileExists\space without space support,% + \MessageBreak + because pdfTeX's \string\pdffilesize\space is not available% + }% + \endgroup + \def\grffile@IfFileExists#1{% + \IfFileExists{#1}{% + \let\grffile@IFE@next\@firstoftwo + }{% + \let\grffile@IFE@next\@secondoftwo + }% + \grffile@IFE@next + }% +\else + \def\grffile@IfFileExists#1{% + \expandafter\expandafter\expandafter + \ifx\expandafter\expandafter\expandafter\\\pdf@filesize{#1}\\% + \let\reserved@a\@secondoftwo + \ifx\input@path\@undefined + \else + \expandafter\@tfor\expandafter\reserved@b\expandafter + :\expandafter=\input@path\do{% + \expandafter\expandafter\expandafter + \ifx\expandafter\expandafter\expandafter + \\\pdf@filesize{\reserved@b#1}\\% + \else + \edef\grffile@file@found{\reserved@b#1}% + \let\reserved@a\@firstoftwo + \@break@tfor + \fi + }% + \fi + \expandafter\reserved@a \else - \expandafter\@tfor\expandafter\reserved@b\expandafter - :\expandafter=\input@path\do{% - \expandafter\expandafter\expandafter - \ifx\expandafter\expandafter\expandafter - \\\pdf@filesize{\reserved@b#1}\\% - \else - \edef\grffile@file@found{\reserved@b#1}% - \let\reserved@a\@firstoftwo - \@break@tfor - \fi - }% + \edef\grffile@file@found{#1}% + \expandafter\@firstoftwo \fi - \expandafter\reserved@a - \else - \edef\grffile@file@found{#1}% - \expandafter\@firstoftwo - \fi -} - + }% +\fi \def\grffile@Ginclude@graphics#1{% \begingroup \ifgrffile@space @@ -1013,6 +1032,10 @@ showpage % Rewrite of `multidot' algorithm to fix a problem % (`multidot' with \cs{graphicspath}). % \end{Version} +% \begin{Version}{2010/01/28 v1.11} +% \item +% Undefined \cs{pdf@filesize} fixed. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/Master/texmf-dist/source/latex/oberdiek/ifpdf.dtx b/Master/texmf-dist/source/latex/oberdiek/ifpdf.dtx index 702ee8971df..e6dcf239ddd 100644 --- a/Master/texmf-dist/source/latex/oberdiek/ifpdf.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/ifpdf.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2001, 2005-2009 by +% Copyright (C) 2001, 2005-2010 by % Heiko Oberdiek % % This work may be distributed and/or modified under the @@ -73,7 +73,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: ifpdf 2009/04/10 v2.0 Provides the ifpdf switch (HO)} +\Msg{* Package: ifpdf 2010/01/28 v2.1 Provides the ifpdf switch (HO)} \Msg{************************************************************************} \keepsilent @@ -84,7 +84,7 @@ This is a generated file. -Copyright (C) 2001, 2005-2009 by +Copyright (C) 2001, 2005-2010 by Heiko Oberdiek This work may be distributed and/or modified under the @@ -147,7 +147,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{ifpdf.drv}% - [2009/04/10 v2.0 Provides the ifpdf switch (HO)]% + [2010/01/28 v2.1 Provides the ifpdf switch (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \begin{document} @@ -156,7 +156,7 @@ and the derived files % % \fi % -% \CheckSum{473} +% \CheckSum{511} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -177,7 +177,7 @@ and the derived files % \GetFileInfo{ifpdf.drv} % % \title{The \xpackage{ifpdf} package} -% \date{2009/04/10 v2.0} +% \date{2010/01/28 v2.1} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -389,7 +389,7 @@ and the derived files \fi \expandafter\x\csname ver@ifpdf.sty\endcsname \ProvidesPackage{ifpdf}% - [2009/04/10 v2.0 Provides the ifpdf switch (HO)] + [2010/01/28 v2.1 Provides the ifpdf switch (HO)] % \end{macrocode} % % \subsection{Catcodes} @@ -514,9 +514,25 @@ and the derived files % % \begin{macro}{\ifpdf} % Create and set the switch. \cs{newif} initializes the -% switch with \cs{iffalse}. +% switch with \cs{iffalse}. \cs{newif} is \cs{outer} +% in \plainTeX. % \begin{macrocode} -\newif\ifpdf +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname newif\endcsname\relax + \edef\pdffalse{% + \let + \expandafter\noexpand\csname ifpdf\endcsname + \expandafter\noexpand\csname iffalse\endcsname + }% + \edef\pdftrue{% + \let + \expandafter\noexpand\csname ifpdf\endcsname + \expandafter\noexpand\csname iftrue\endcsname + }% + \pdffalse +\else + \csname newif\expandafter\endcsname\csname ifpdf\endcsname +\fi % \end{macrocode} % Test \cs{pdfoutput}. Is it defined and different from % \cs{relax}? Someone could have used \LaTeX\ internal @@ -917,6 +933,10 @@ and the derived files % \item % Checks, whether \cs{pdfoutput} was changed. % \end{Version} +% \begin{Version}{2010/01/28 v2.1} +% \item +% Compatibility to ini\TeX\ added. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx b/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx index 558a80dbd22..2aa69241c60 100644 --- a/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/kvsetkeys.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2006, 2007, 2009 by +% Copyright (C) 2006, 2007, 2009, 2010 by % Heiko Oberdiek % % This work may be distributed and/or modified under the @@ -78,7 +78,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: kvsetkeys 2009/12/22 v1.7 Key value parser (HO)} +\Msg{* Package: kvsetkeys 2010/01/28 v1.8 Key value parser (HO)} \Msg{************************************************************************} \keepsilent @@ -89,7 +89,7 @@ This is a generated file. -Copyright (C) 2006, 2007, 2009 by +Copyright (C) 2006, 2007, 2009, 2010 by Heiko Oberdiek This work may be distributed and/or modified under the @@ -158,7 +158,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{kvsetkeys.drv}% - [2009/12/22 v1.7 Key value parser (HO)]% + [2010/01/28 v1.8 Key value parser (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \begin{document} @@ -167,7 +167,7 @@ and the derived files % % \fi % -% \CheckSum{1101} +% \CheckSum{1109} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -188,7 +188,7 @@ and the derived files % \GetFileInfo{kvsetkeys.drv} % % \title{The \xpackage{kvsetkeys} package} -% \date{2009/12/22 v1.7} +% \date{2010/01/28 v1.8} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -546,7 +546,7 @@ and the derived files \fi \expandafter\x\csname ver@kvsetkeys.sty\endcsname \ProvidesPackage{kvsetkeys}% - [2009/12/22 v1.7 Key value parser (HO)] + [2010/01/28 v1.8 Key value parser (HO)] % \end{macrocode} % % \begin{macrocode} @@ -594,7 +594,13 @@ and the derived files \input etexcmds.sty\relax \else \RequirePackage{infwarerr}[2007/09/09]% - \RequirePackage{etexcmds}[2007/09/09]% + \RequirePackage{etexcmds}[2010/01/28]% +\fi +% \end{macrocode} +% +% \begin{macrocode} +\expandafter\ifx\csname toks@\endcsname\relax + \toksdef\toks@=0 % \fi % \end{macrocode} % @@ -1150,7 +1156,7 @@ $ \expandafter\ifx\csname KV@#1@#2@default\endcsname\relax \makeatletter \chardef\KVS@TestMode=1 % \makeatother -\usepackage{kvsetkeys}[2009/12/22] +\usepackage{kvsetkeys}[2010/01/28] %\let\unexpanded\SavedUnexpanded \usepackage{qstest} \IncludeTests{*} @@ -1640,6 +1646,10 @@ $ \expandafter\ifx\csname KV@#1@#2@default\endcsname\relax % \item % Internal optimization (\cs{KVS@CommaSpace}, \dots, \cs{KVS@EqualsSpace}). % \end{Version} +% \begin{Version}{2010/01/28 v1.8} +% \item +% Compatibility to ini\TeX\ added. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/Master/texmf-dist/source/latex/oberdiek/ltxcmds.dtx b/Master/texmf-dist/source/latex/oberdiek/ltxcmds.dtx index 9fca42f980f..505a8f99320 100644 --- a/Master/texmf-dist/source/latex/oberdiek/ltxcmds.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/ltxcmds.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -% Copyright (C) 2009 by Heiko Oberdiek +% Copyright (C) 2009, 2010 by Heiko Oberdiek % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -73,7 +73,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: ltxcmds 2009/12/12 v1.1 LaTeX kernel commands for general use (HO)} +\Msg{* Package: ltxcmds 2010/01/28 v1.2 LaTeX kernel commands for general use (HO)} \Msg{************************************************************************} \keepsilent @@ -84,7 +84,7 @@ This is a generated file. -Copyright (C) 2009 by Heiko Oberdiek +Copyright (C) 2009, 2010 by Heiko Oberdiek This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either @@ -147,7 +147,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{ltxcmds.drv}% - [2009/12/12 v1.1 LaTeX kernel commands for general use (HO)]% + [2010/01/28 v1.2 LaTeX kernel commands for general use (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \usepackage{zref-savepos} @@ -157,7 +157,7 @@ and the derived files % % \fi % -% \CheckSum{409} +% \CheckSum{569} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -178,7 +178,7 @@ and the derived files % \GetFileInfo{ltxcmds.drv} % % \title{The \xpackage{ltxcmds} package} -% \date{2009/12/12 v1.1} +% \date{2010/01/28 v1.2} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -288,6 +288,91 @@ and the derived files % The local context discards the side effect of \cs{csname} % and let the command undefined after the expansion step. % +% \subsection{Stripping} +% +% \begin{declcs}{ltx@RemovePrefix}\\ +% \cs{ltx@StripPrefix} +% \end{declcs} +% All tokens up to and including the next available character +% `\textgreater' are thrown away. Usually it is used to strip +% the first part of the output of the commands \cs{meaning} +% or \cs{pdflastmatch}. Macro \cs{ltx@RemovePrefix} +% has the same meaning as \LaTeX's \cs{strip@prefix}, whereas +% macro \cs{ltx@StripPrefix} expands the next token +% once before stripping the prefix. +% +% \subsection{File management} +% +% All macros in this section are expandable like +% the counterparts of the \LaTeX\ kernel. Also they +% can be used after the preamble. +% +% \subsubsection{File extensions} +% +% \begin{declcs}{ltx@clsextension}\\ +% \cs{ltx@pkgextension} +% \end{declcs} +% If \cs{@clsextension}\slash\cs{@pkgextension} exists then +% \cs{ltx@clsextension}\slash\cs{ltx@pkgextension} +% returns this macro, otherwise the result is |cls|\slash|sty|. +% +% \subsubsection{Load check} +% +% \begin{declcs}{ltx@ifclassloaded} \M{class} \M{yes} \M{no}\\ +% \cs{ltx@ifpackageloaded} \M{package} \M{yes} \M{no} +% \end{declcs} +% If the \meta{class}\slash\meta{package} are loaded the +% macros \cs{ltx@ifclassloaded}\slash\cs{ltx@ifpackageloaded} +% call the \meta{yes} argument. Otherwise \meta{no} is executed. +% Both \meta{class} and \meta{package} are specified without +% extension. +% +% \begin{declcs}{ltx@iffileloaded} \M{file} \M{yes} \M{no} +% \end{declcs} +% If \LaTeX's \cs{ProvidesFile} macro was called before +% using \meta{file} as argument, then \cs{ltx@iffileloaded} +% calls \meta{yes}, otherwise \meta{no}. +% Therefore it is possible +% that the \meta{file} is loaded, but \meta{no} is executed because +% of a missing \cs{ProvidesFile}. The \LaTeX\ kernel does not have +% a counterpart of \cs{ltx@iffileloaded}. +% +% Note that the file name used in \cs{ProvidesFile} and +% \cs{ltx@iffileloaded} must match. For example, if \TeX's +% default extension \xext{.tex} was given in the first command, +% then it must also specified in the latter command and vice versa. +% +% \subsubsection{Version date check} +% +% \begin{declcs}{ltx@ifclasslater} \M{class} \M{date} \M{yes} \M{no}\\ +% \cs{ltx@ifpackagelater} \M{package} \M{date} \M{yes} \M{no}\\ +% \cs{ltx@iffilelater} \M{file} \M{date} \M{yes} \M{no} +% \end{declcs} +% If a \cs{ProvidesClass}\slash\cs{ProvidesPackage}\slash +% \cs{ProvidesFile} command with exact the same class\slash package\slash +% file was executed before with an optional +% argument that starts with a \LaTeX\ version date, then +% this version date is compared with the argument \meta{date}. +% If they are equal or if the version date is the later date, +% then \meta{yes} is called. In all other cases \meta{no} is executed. +% +% A \LaTeX\ date has the format |YYYY/MM/DD| with |YYYY| as year +% with four digits, |MM| as month with two digits and |DD| as day +% with two digits. If \pdfTeX's \cs{pdfmatch} is available, then +% it is used to detect the version date, to reject invalid +% date formats and to reject some invalid dates. +% Dates before 1994/01/01 are always invalid, because version +% dates are introduced with \LaTeXe\ in 1994. +% +% \subsection{Macro additions} +% +% \begin{declcs}{ltx@GlobalAppendToMacro} \M{cmd} \M{addition}\\ +% \cs{ltx@LocalAppendToMacro} \M{cmd} \M{addition} +% \end{declcs} +% The \meta{addition} is appended to the parameterless macro \meta{cmd}. +% If \meta{cmd} is undefined or has the meaning \cs{relax}, then +% it will be initialized as empty macro before. +% % \StopEventually{ % } % @@ -363,7 +448,7 @@ and the derived files \fi \expandafter\x\csname ver@ltxcmds.sty\endcsname \ProvidesPackage{ltxcmds}% - [2009/12/12 v1.1 LaTeX kernel commands for general use (HO)] + [2010/01/28 v1.2 LaTeX kernel commands for general use (HO)] % \end{macrocode} % % \begin{macrocode} @@ -371,7 +456,7 @@ and the derived files \catcode123 1 % { \catcode125 2 % } \def\x{\endgroup - \expandafter\edef\csname ltx@AtEnd\endcsname{% + \expandafter\edef\csname LTXcmds@AtEnd\endcsname{% \catcode35 \the\catcode35\relax \catcode64 \the\catcode64\relax \catcode123 \the\catcode123\relax @@ -384,14 +469,25 @@ and the derived files \catcode123 1 % { \catcode125 2 % } \def\TMP@EnsureCode#1#2{% - \edef\ltx@AtEnd{% - \ltx@AtEnd + \edef\LTXcmds@AtEnd{% + \LTXcmds@AtEnd \catcode#1 \the\catcode#1\relax }% \catcode#1 #2\relax } +\TMP@EnsureCode{40}{12}% ( +\TMP@EnsureCode{41}{12}% ) +\TMP@EnsureCode{45}{12}% - +\TMP@EnsureCode{46}{12}% . +\TMP@EnsureCode{47}{12}% / +\TMP@EnsureCode{60}{12}% < \TMP@EnsureCode{61}{12}% = +\TMP@EnsureCode{62}{12}% > +\TMP@EnsureCode{91}{12}% [ \TMP@EnsureCode{96}{12}% ` +\TMP@EnsureCode{93}{12}% ] +\TMP@EnsureCode{94}{12}% ^ (superscript) (!) +\TMP@EnsureCode{124}{12}% | % \end{macrocode} % % \subsection{Argument killers} @@ -566,8 +662,203 @@ and the derived files } % \end{macrocode} % +% \subsection{Stripping} +% +% \begin{macro}{\ltx@RemovePrefix} +% \begin{macrocode} +\def\ltx@RemovePrefix#1>{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ltx@StripPrefix} % \begin{macrocode} -\ltx@AtEnd +\def\ltx@StripPrefix{% + \expandafter\ltx@RemovePrefix +} +% \end{macrocode} +% \end{macro} +% +% \subsection{File management} +% +% \subsubsection{File extensions} +% +% \begin{macro}{\ltx@clsextension} +% \begin{macrocode} +\def\ltx@clsextension{% + \ltx@ifundefined{@clsextension}{cls}\@clsextension +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@pkgextension} +% \begin{macrocode} +\def\ltx@pkgextension{% + \ltx@ifundefined{@pkgextension}{sty}\@pkgextension +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Load check} +% +% \begin{macro}{\ltx@iffileloaded} +% \begin{macrocode} +\def\ltx@iffileloaded#1{% + \ltx@ifundefined{ver@#1}\ltx@secondoftwo\ltx@firstoftwo +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@ifclassloaded} +% \begin{macrocode} +\def\ltx@ifclassloaded#1{% + \ltx@iffileloaded{#1.\ltx@clsextension}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@ifpackageloaded} +% \begin{macrocode} +\def\ltx@ifpackageloaded#1{% + \ltx@iffileloaded{#1.\ltx@pkgextension}% +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Version date check} +% +% \begin{macro}{\ltx@iffilelater} +% \begin{macrocode} +\def\ltx@iffilelater#1#2{% + \ltx@iffileloaded{#1}{% + \expandafter\LTXcmds@IfLater\expandafter{% + \number + \expandafter\expandafter\expandafter\LTXcmds@ParseVersion + \expandafter\expandafter\expandafter{% + \csname ver@#1\endcsname + }% + \expandafter}\expandafter{% + \number + \expandafter\LTXcmds@ParseVersion\expandafter{#2}% + }% + }\ltx@secondoftwo +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\LTXcmds@IfLater} +% \begin{macrocode} +\def\LTXcmds@IfLater#1#2{% + \ifcase 0% + \ifnum#1<19940101 % + \else + \ifnum#2<19940101 % + \else + \ifnum#2>#1 % + \else + 1% + \fi + \fi + \fi + \ltx@space + \expandafter\ltx@secondoftwo + \else + \expandafter\ltx@firstoftwo + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@ifclasslater} +% \begin{macrocode} +\def\ltx@ifclasslater#1{% + \ltx@ifclasslater{#1.\ltx@clsextension}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@ifpackagelater} +% \begin{macrocode} +\def\ltx@ifpackagelater#1{% + \ltx@iffilelater{#1.\ltx@pkgextension}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\ltx@IfUndefined{pdfmatch}{% +% \end{macrocode} +% \begin{macro}{\LTXcmds@ParseVersion} +% \begin{macrocode} + \def\LTXcmds@ParseVersion#1{% + \LTXcmds@@ParseVersion#10000/00/00\@nil + }% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\LTXcmds@@ParseVersion} +% \begin{macrocode} + \def\LTXcmds@@ParseVersion#1#2#3#4/#5#6/#7#8#9\@nil{% + #1#2#3#4#5#6#7#8% + }% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +}{% +% \end{macrocode} +% \begin{macro}{\LTXcmds@ParseVersion} +% \begin{macrocode} + \def\LTXcmds@ParseVersion#1{% + \ifnum\pdfmatch{% + ^% + (199[4-9]|[2-9][0-9][0-9][0-9])/% + (0[1-9]|1[0-2])/% + (0[1-9]|[1-2][0-9]|3[0-1])% + }{#1}=1 % + \ltx@StripPrefix\pdflastmatch1 % + \ltx@StripPrefix\pdflastmatch2 % + \ltx@StripPrefix\pdflastmatch3 % + \else + 0% + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Macro additions} +% +% \begin{macro}{\ltx@GlobalAppendToMacro} +% \begin{macrocode} +\def\ltx@GlobalAppendToMacro#1#2{% + \ifx\ltx@undefined#1% + \let#1\ltx@empty + \else + \ifx\relax#1% + \let#1\ltx@empty + \fi + \fi + \begingroup + \toks0\expandafter{#1#2}% + \xdef#1{\the\toks0}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ltx@LocalAppendToMacro} +% \begin{macrocode} +\def\ltx@LocalAppendToMacro#1#2{% + \global\let\LTXcmds@gtemp#1% + \ifx\ltx@undefined\LTXcmds@gtemp + \global\let\LTXcmds@gtemp\ltx@empty + \else + \ifx\relax\LTXcmds@gtemp + \global\letLTXcmds@gtemp\ltx@empty + \fi + \fi + \begingroup + \toks0\expandafter{\LTXcmds@gtemp#2}% + \xdef\LTXcmds@gtemp{\the\toks0}% + \endgroup + \let#1\LTXcmds@gtemp +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\LTXcmds@AtEnd % % \end{macrocode} % @@ -854,6 +1145,18 @@ and the derived files % \item % \cs{ltx@IfUndefined} added. % \end{Version} +% \begin{Version}{2010/01/28 v1.2} +% \item +% \cs{ltx@RemovePrefix} and \cs{ltx@StripPrefix} added. +% \item +% \cs{ltx@ifclassloaded}, \cs{ltx@ifpackageloaded}, +% \cs{ltx@iffileloaded}, +% \cs{ltx@ifclasslater}, \cs{ltx@ifpackagelater}, +% \cs{ltx@iffilelater}, +% \cs{ltx@clsextension}, \cs{ltx@pkgextension} added. +% \item +% \cs{ltx@GlobalAppendMacro}, \cs{ltx@LocalAppendMacro} added. +% \end{Version} % \end{History} % % \PrintIndex diff --git a/Master/texmf-dist/source/latex/oberdiek/oberdiek.ins b/Master/texmf-dist/source/latex/oberdiek/oberdiek.ins index 2b52a62cfc7..4c351d34bc4 100644 --- a/Master/texmf-dist/source/latex/oberdiek/oberdiek.ins +++ b/Master/texmf-dist/source/latex/oberdiek/oberdiek.ins @@ -1,5 +1,5 @@ % oberdiek.ins -% 2010/01/26 +% 2010/01/28 % % Copyright (C) 1999, 2001, 2006 by % Heiko Oberdiek diff --git a/Master/texmf-dist/source/latex/oberdiek/oberdiek.tex b/Master/texmf-dist/source/latex/oberdiek/oberdiek.tex index ad95a6d4d65..6f6da96a85f 100644 --- a/Master/texmf-dist/source/latex/oberdiek/oberdiek.tex +++ b/Master/texmf-dist/source/latex/oberdiek/oberdiek.tex @@ -6,7 +6,7 @@ \newcommand*{\Subject}{CTAN:\CTANdir} \newcommand*{\Author}{Heiko Oberdiek} \newcommand*{\Email}{oberdiek@uni-freiburg.de} -\newcommand*{\Date}{2010/01/26} +\newcommand*{\Date}{2010/01/28} % Copyright (C) 2006 by % Heiko Oberdiek @@ -205,7 +205,7 @@ [\entrysep] \entry{epstopdf}{2009/10/17}{2.4}{Conversion with epstopdf on the fly}% [\entrysep] -\entry{etexcmds}{2007/12/12}{1.2}{Prefix for e-TeX command names}% +\entry{etexcmds}{2010/01/28}{1.3}{Prefix for e-TeX command names}% [\entrysep] \entry{flags}{2007/09/30}{0.4}{Flag setting in bit fields}% [\entrysep] @@ -213,7 +213,7 @@ [\entrysep] \entry{grfext}{2007/09/30}{1.0}{Managing graphics extensions}% [\entrysep] -\entry{grffile}{2009/09/25}{1.10}{Extended file name support for graphics}% +\entry{grffile}{2010/01/28}{1.11}{Extended file name support for graphics}% [\entrysep] \entry{holtxdoc}{2009/12/02}{0.13}{Private additional ltxdoc support}% [\entrysep] @@ -237,7 +237,7 @@ [\entrysep] \entry{ifluatex}{2009/04/17}{1.2}{Provides the ifluatex switch}% [\entrysep] -\entry{ifpdf}{2009/04/10}{2.0}{Provides the ifpdf switch}% +\entry{ifpdf}{2010/01/28}{2.1}{Provides the ifpdf switch}% [\entrysep] \entry{ifvtex}{2008/11/04}{1.4}{Switches for detecting VTeX and its modes}% [\entrysep] @@ -249,13 +249,13 @@ [\entrysep] \entry{kvoptions}{2009/12/08}{3.6}{Keyval support for \LaTeX{} options}% [\entrysep] -\entry{kvsetkeys}{2009/12/22}{1.7}{Key value parser}% +\entry{kvsetkeys}{2010/01/28}{1.8}{Key value parser}% [\entrysep] \entry{letltxmacro}{2008/06/24}{1.3}{Let assignment for \LaTeX{} macros}% [\entrysep] \entry{listingsutf8}{2007/11/11}{1.1}{Adding support for UTF-8 to listings}% [\entrysep] -\entry{ltxcmds}{2009/12/12}{1.1}{\LaTeX{} kernel commands for general use}% +\entry{ltxcmds}{2010/01/28}{1.2}{\LaTeX{} kernel commands for general use}% [\entrysep] \entry{luacolor}{2009/04/10}{1.1}{Coloring based on LuaTeX's node attributes}% [\entrysep] @@ -285,7 +285,7 @@ [\entrysep] \entry{pdflscape}{2008/08/11}{0.10}{Landscape pages in PDF}% [\entrysep] -\entry{pdfrender}{2010/01/26}{1.0}{Access to some PDF graphics parameters}% +\entry{pdfrender}{2010/01/28}{1.2}{Access to some PDF graphics parameters}% [\entrysep] \entry{pdftexcmds}{2009/12/12}{0.7}{Utility functions of pdfTeX for LuaTeX}% [\entrysep] diff --git a/Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx b/Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx index 24de571dbaf..8eb438234c5 100644 --- a/Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx +++ b/Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx @@ -16,10 +16,15 @@ % % This Current Maintainer of this work is Heiko Oberdiek. % +% The Base Interpreter refers to any `TeX-Format', +% because some files are installed in TDS:tex/generic//. +% % This work consists of the main source file pdfrender.dtx % and the derived files % pdfrender.sty, pdfrender.pdf, pdfrender.ins, pdfrender.drv, -% pdfrender-test1.tex, pdfrender-test2.tex. +% pdfrender-test1.tex, pdfrender-test2.tex, +% pdfrender-test3.tex, pdfrender-test4.tex, +% pdfrender-test5.tex. % % Distribution: % CTAN:macros/latex/contrib/oberdiek/pdfrender.dtx @@ -52,10 +57,13 @@ % pdflatex pdfrender.dtx % % Installation: -% TDS:tex/latex/oberdiek/pdfrender.sty +% TDS:tex/generic/oberdiek/pdfrender.sty % TDS:doc/latex/oberdiek/pdfrender.pdf % TDS:doc/latex/oberdiek/test/pdfrender-test1.tex % TDS:doc/latex/oberdiek/test/pdfrender-test2.tex +% TDS:doc/latex/oberdiek/test/pdfrender-test3.tex +% TDS:doc/latex/oberdiek/test/pdfrender-test4.tex +% TDS:doc/latex/oberdiek/test/pdfrender-test5.tex % TDS:source/latex/oberdiek/pdfrender.dtx % %<*ignore> @@ -71,7 +79,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: pdfrender 2010/01/26 v1.0 Access to some PDF graphics parameters (HO)} +\Msg{* Package: pdfrender 2010/01/28 v1.2 Access to some PDF graphics parameters (HO)} \Msg{************************************************************************} \keepsilent @@ -98,10 +106,15 @@ This work has the LPPL maintenance status "maintained". This Current Maintainer of this work is Heiko Oberdiek. +The Base Interpreter refers to any `TeX-Format', +because some files are installed in TDS:tex/generic//. + This work consists of the main source file pdfrender.dtx and the derived files pdfrender.sty, pdfrender.pdf, pdfrender.ins, pdfrender.drv, - pdfrender-test1.tex, pdfrender-test2.tex. + pdfrender-test1.tex, pdfrender-test2.tex, + pdfrender-test3.tex, pdfrender-test4.tex, + pdfrender-test5.tex. \endpreamble \let\MetaPrefix\DoubleperCent @@ -109,11 +122,14 @@ and the derived files \generate{% \file{pdfrender.ins}{\from{pdfrender.dtx}{install}}% \file{pdfrender.drv}{\from{pdfrender.dtx}{driver}}% - \usedir{tex/latex/oberdiek}% + \usedir{tex/generic/oberdiek}% \file{pdfrender.sty}{\from{pdfrender.dtx}{package}}% \usedir{doc/latex/oberdiek/test}% \file{pdfrender-test1.tex}{\from{pdfrender.dtx}{test1}}% \file{pdfrender-test2.tex}{\from{pdfrender.dtx}{test2}}% + \file{pdfrender-test3.tex}{\from{pdfrender.dtx}{test3}}% + \file{pdfrender-test4.tex}{\from{pdfrender.dtx}{test4}}% + \file{pdfrender-test5.tex}{\from{pdfrender.dtx}{test5}}% } \obeyspaces @@ -143,7 +159,7 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{pdfrender.drv}% - [2010/01/26 v1.0 Access to some PDF graphics parameters (HO)]% + [2010/01/28 v1.2 Access to some PDF graphics parameters (HO)]% \documentclass{ltxdoc} \usepackage{holtxdoc}[2008/08/11] \usepackage{longtable} @@ -154,7 +170,7 @@ and the derived files % % \fi % -% \CheckSum{958} +% \CheckSum{1393} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -175,7 +191,7 @@ and the derived files % \GetFileInfo{pdfrender.drv} % % \title{The \xpackage{pdfrender} package} -% \date{2010/01/26 v1.0} +% \date{2010/01/28 v1.2} % \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}} % % \maketitle @@ -205,6 +221,19 @@ and the derived files % add its own hooks of its parameters. Therefore \LaTeX3 should % generalize \LaTeXe's color interface. % +% \subsection{Usage} +% +% In \LaTeX\ the package is loaded as normal package. Options +% are not defined for this package. +% \begin{quote} +% |\usepackage{pdfrender}| +% \end{quote} +% +% This package can also be used in \plainTeX\ and even ini\TeX: +% \begin{quote} +% |input pdfrender.sty| +% \end{quote} +% % \subsection{Macros} % % \begin{declcs}{pdfrender} \M{key value list} @@ -309,6 +338,8 @@ and the derived files % automatically added. However package \xpackage{calc} is not % supported. % \item[\xoption{FillColor}, \xoption{StrokeColor}:] +% Package \xpackage{color} or \xpackage{xcolor} must be loaded +% before these options can be used (since version 1.2). % \LaTeX's color support sets both colors at the same time % to the same value. However parameter \xoption{TextRenderingMode} % offers the value \texttt{FillStroke} that makes only sense, if @@ -408,7 +439,7 @@ and the derived files \fi \expandafter\x\csname ver@pdfrender.sty\endcsname \ProvidesPackage{pdfrender}% - [2010/01/26 v1.0 Access to some PDF graphics parameters (HO)] + [2010/01/28 v1.2 Access to some PDF graphics parameters (HO)] % \end{macrocode} % % \begin{macrocode} @@ -457,25 +488,73 @@ and the derived files \TMP@EnsureCode{94}{7}% ^ (superscript) \TMP@EnsureCode{96}{12}% ` \TMP@EnsureCode{124}{12}% | -\g@addto@macro\PdfRender@AtEnd{\endinput} +\def\PdfRender@AtEndHook{} +\expandafter\def\expandafter\PdfRender@AtEnd\expandafter{% + \expandafter\PdfRender@AtEndHook + \PdfRender@AtEnd + \endinput +} % \end{macrocode} % % \subsection{Look for \pdfTeX, its mode and features} % +% \begin{macro}{\PdfRender@newif} +% \begin{macrocode} +\def\PdfRender@newif#1{% + \expandafter\edef\csname PdfRender@#1true\endcsname{% + \let + \expandafter\noexpand\csname ifPdfRender@#1\endcsname + \noexpand\iftrue + }% + \expandafter\edef\csname PdfRender@#1false\endcsname{% + \let + \expandafter\noexpand\csname ifPdfRender@#1\endcsname + \noexpand\iffalse + }% + \csname PdfRender@#1false\endcsname +} +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\ifPdfRender@Stack} % \begin{macrocode} -\newif\ifPdfRender@Stack +\PdfRender@newif{Stack} % \end{macrocode} % \end{macro} % \begin{macro}{\ifPdfRender@Match} % \begin{macrocode} -\newif\ifPdfRender@Match +\PdfRender@newif{Match} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PdfRender@RequirePackage} +% \begin{macrocode} +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname RequirePackage\endcsname\relax + \def\PdfRender@RequirePackage#1[#2]{% + \expandafter\def\expandafter\PdfRender@AtEndHook\expandafter{% + \PdfRender@AtEndHook + \ltx@ifpackagelater{#1}{#2}{}{% + \@PackageWarningNoLine{pdfrender}{% + You have requested version\MessageBreak + `#2' of package `#1',\MessageBreak + but only version\MessageBreak + `\csname ver@#1.\ltx@pkgextension\endcsname'\MessageBreak + is available% + }% + }% + }% + \input #1.sty\relax + }% +\else + \let\PdfRender@RequirePackage\RequirePackage +\fi % \end{macrocode} % \end{macro} % \begin{macrocode} -\RequirePackage{ifpdf}[2009/04/10] -\RequirePackage{infwarerr}[2007/09/09] -\RequirePackage{ltxcmds}[2009/12/12] +\PdfRender@RequirePackage{ifpdf}[2010/01/28] +\PdfRender@RequirePackage{infwarerr}[2007/09/09] +\PdfRender@RequirePackage{ltxcmds}[2010/01/28] % \end{macrocode} % % \begin{macrocode} @@ -501,52 +580,219 @@ and the derived files Missing pdfTeX in PDF mode% }% % \end{macrocode} +% \begin{macrocode} + \ltx@IfUndefined{newcommand}{% +% \end{macrocode} +% \begin{macro}{\pdfrender} +% \begin{macrocode} + \def\pdfrender#1{}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\textpdfrender} +% \begin{macrocode} + \long\def\textpdfrender#1#2{#2}% +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + }{% +% \end{macrocode} % \begin{macro}{\pdfrender} % \begin{macrocode} - \newcommand*{\pdfrender}[1]{}% + \newcommand*{\pdfrender}[1]{}% % \end{macrocode} % \end{macro} % \begin{macro}{\textpdfrender} % \begin{macrocode} - \newcommand{\textpdfrender}[2]{#2}% + \newcommand{\textpdfrender}[2]{#2}% % \end{macrocode} % \end{macro} % \begin{macrocode} + }% \expandafter\PdfRender@AtEnd \fi % \end{macrocode} % -% \subsection{Macros for \pdfTeX\ in PDF mode} +% \subsection{Enable color support of \LaTeX} % % \begin{macrocode} -\RequirePackage{color} -\RequirePackage{keyval} -\RequirePackage{kvsetkeys}[2009/07/19] +\ltx@ifpackageloaded{color}{}{% + \def\color@setgroup{\begingroup\set@color}% + \let\color@begingroup\begingroup + \def\color@endgroup{\endgraf\endgroup}% + \def\color@hbox{\hbox\bgroup\color@begingroup}% + \def\color@vbox{\vbox\bgroup\color@begingroup}% + \def\color@endbox{\color@endgroup\egroup}% + \ltx@ifundefined{bgroup}{% + \let\bgroup={\let\egroup=}% + }{}% + \ltx@ifundefined{endgraf}{% + \let\endgraf=\par + }{}% +} % \end{macrocode} -% \begin{macro}{\pdfrender} +% +% \subsection{Hook into \cs{normalcolor}} +% +% The problem is that packages \xpackage{color} and \xpackage{xcolor} +% each overwrite \cs{normalcolor}. For example, after the package +% loading order \xpackage{color}, \xpackage{pdfrender} and \xpackage{xcolor} +% the patched version of \cs{normalcolor} is overwritten by +% package \xpackage{xcolor}. Also using \cs{AtBeginDocument} for +% patching is not enough. If package \xpackage{hyperref} is loaded +% later, it might load package \xpackage{color} using \cs{AtBeginDocument}. +% \begin{macro}{\PdfRender@NormalColorHook} % \begin{macrocode} -\newcommand*{\pdfrender}[1]{% - \global\let\PdfRender@FillColor\ltx@empty - \global\let\PdfRender@StrokeColor\ltx@empty - \setkeys{PDFRENDER}{#1}% - \PdfRender@SetColor +\def\PdfRender@NormalColorHook{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@ColorSetGroupHook} +% \begin{macrocode} +\def\PdfRender@ColorSetGroupHook{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@TestBox} +% \begin{macrocode} +\def\PdfRender@TestBox#1{% + \setbox0=\color@hbox#1\color@endbox } % \end{macrocode} % \end{macro} -% \begin{macro}{\textpdfrender} +% \begin{macro}{\PdfRender@PatchNormalColor} % \begin{macrocode} -\newcommand{\textpdfrender}[2]{% +\def\PdfRender@PatchNormalColor{% + \ltx@ifundefined{normalcolor}{% + \gdef\normalcolor{\PdfRender@NormalColorHook}% + }{% + \begingroup + \def\PdfRender@NormalColorHook{\let\PdfRender@temp=Y}% + \PdfRender@TestBox{% + \let\set@color\relax + \normalcolor + \ifx\PdfRender@temp Y% + \else + \ltx@GlobalAppendToMacro\normalcolor{% + \PdfRender@NormalColorHook + }% + \fi + }% + \endgroup + }% + \ifx\@nodocument\relax + \global\let\PdfRender@PatchNormalColor\relax + \fi +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@PatchColorSetGroup} +% \begin{macrocode} +\def\PdfRender@PatchColorSetGroup{% \begingroup - \pdfrender{#1}% - #2% + \def\PdfRender@ColorSetGroupHook{\let\PdfRender@temp=Y}% + \PdfRender@TestBox{% + \let\set@color\relax + \color@setgroup\color@endgroup + \ifx\PdfRender@temp Y% + \else + \ltx@GlobalAppendToMacro\color@setgroup{% + \PdfRender@ColorSetGroupHook + }% + \fi + }% \endgroup + \ifx\@nodocument\relax + \global\let\PdfRender@PatchColorSetGroup\relax + \fi +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@PatchColor} +% \begin{macrocode} +\def\PdfRender@PatchColor{% + \PdfRender@PatchNormalColor + \PdfRender@PatchColorSetGroup +} +% \begin{macrocode} +\PdfRender@PatchColor +\ltx@IfUndefined{AtBeginDocument}{}{% + \AtBeginDocument{\PdfRender@PatchColor}% +} +% \end{macrocode} +% \cs{AfterPackage} is provided by package \xpackage{scrlfile}. +% \begin{macrocode} +\ltx@IfUndefined{AfterPackage}{% +}{% + \AfterPackage{color}{\PdfRender@PatchColor}% + \AfterPackage{xcolor}{\PdfRender@PatchColor}% + \AfterPackage{etoolbox}{% + \AfterEndPreamble{\PdfRender@PatchColor}% + }% +}% +% \end{macrocode} +% \cs{AfterEndPreamble} is provided by package \xpackage{etoolbox}. +% \begin{macrocode} +\ltx@IfUndefined{AfterEndPreamble}{% +}{% + \AfterEndPreamble{\PdfRender@PatchColor}% +}% +% \end{macrocode} +% \end{macro} + +% +% \begin{macrocode} +\PdfRender@RequirePackage{kvsetkeys}[2010/01/28] +% \end{macrocode} +% \begin{macro}{\PdfRender@texorpdfstring} +% \begin{macrocode} +\def\PdfRender@texorpdfstring{% + \ltx@IfUndefined{texorpdfstring}\ltx@firstoftwo\texorpdfstring +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pdfrender} +% \begin{macrocode} +\ltx@IfUndefined{DeclareRobustCommand}% +\ltx@firstoftwo\ltx@secondoftwo +{% + \def\pdfrender#1% +}{% + \newcommand{\pdfrender}{}% + \DeclareRobustCommand*{\pdfrender}[1]% +}% +{% + \PdfRender@texorpdfstring{% + \PdfRender@PatchNormalColor + \global\let\PdfRender@FillColor\ltx@empty + \global\let\PdfRender@StrokeColor\ltx@empty + \kvsetkeys{PDFRENDER}{#1}% + \PdfRender@SetColor + }{}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\textpdfrender} +% \begin{macrocode} +\ltx@IfUndefined{DeclareRobustCommand}% +\ltx@firstoftwo\ltx@secondoftwo +{% + \long\def\textpdfrender#1#2% +}{% + \newcommand{\textpdfrender}{}% + \DeclareRobustCommand{\textpdfrender}[2]% +}% +{% + \PdfRender@texorpdfstring{% + \begingroup + \pdfrender{#1}% + #2% + \endgroup + }{#2}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\ifPdfRender@Values} % \begin{macrocode} -\newif\ifPdfRender@Values +\PdfRender@newif{Values} % \end{macrocode} % \end{macro} % \begin{macro}{\PdfRender@NewClassValues} @@ -560,7 +806,7 @@ and the derived files % \begin{macro}{\PdfRender@NewClass} % \begin{macrocode} \def\PdfRender@NewClass#1#2#3#4#5{% - \expandafter\newif\csname ifPdfRender@Active#1\endcsname + \PdfRender@newif{Active#1}% \expandafter\def\csname PdfRender@Default#1\endcsname{#2}% \expandafter\let\csname PdfRender@Current#1\expandafter\endcsname \csname PdfRender@Default#1\endcsname @@ -614,11 +860,11 @@ and the derived files \expandafter\noexpand\csname PdfRender@Default#1\endcsname \noexpand\PdfRender@Set{#1}% }% - \expandafter\g@addto@macro\expandafter\normalcolor + \expandafter\ltx@GlobalAppendToMacro\expandafter\PdfRender@NormalColorHook \expandafter{% \csname PdfRender@Normal#1\endcsname }% - \g@addto@macro\color@setgroup{% + \ltx@GlobalAppendToMacro\PdfRender@ColorSetGroupHook{% \PdfRender@Set{#1}% }% \ifPdfRender@Values @@ -630,14 +876,14 @@ and the derived files \fi \ltx@gobbletwo }% - \define@key{PDFRENDER}{#1}[1]{% + \PdfRender@define@key{PDFRENDER}{#1}{% \global\csname PdfRender@Active#1true\endcsname \def\PdfRender@Current{##1}% \PdfRender@SetValidateValues{#1}% }% \PdfRender@Valuesfalse \else - \define@key{PDFRENDER}{#1}[1]{% + \PdfRender@define@key{PDFRENDER}{#1}{% \global\csname PdfRender@Active#1true\endcsname \expandafter\def\csname PdfRender@Current#1\endcsname{##1}% \ltx@IfUndefined{PdfRender@PostProcess#1}{% @@ -650,6 +896,17 @@ and the derived files }% % \end{macrocode} % \end{macro} +% \begin{macro}{\PdfRender@define@key} +% \begin{macrocode} +\ltx@IfUndefined{define@key}{% + \def\PdfRender@define@key#1#2{% + \expandafter\def\csname KV@#1@#2\endcsname##1% + }% +}{% + \let\PdfRender@define@key\define@key +} +% \end{macrocode} +% \end{macro} % \begin{macro}{\PdfRender@Set} % \begin{macrocode} \def\PdfRender@Set#1{% @@ -757,7 +1014,7 @@ and the derived files \def\PdfRender@PostProcessLineWidth{% \begingroup \afterassignment\PdfRender@@PostProcessLineWidth - \dimen@=\PdfRender@dimexpr\PdfRender@CurrentLineWidth bp % + \dimen0=\PdfRender@dimexpr\PdfRender@CurrentLineWidth bp % \PdfRender@let\PdfRender@relax\PdfRender@relax } \let\PdfRender@let\let @@ -766,10 +1023,10 @@ and the derived files \ifx\\#1\\% \endgroup \else - \dimen@=.996264\dimen@ % 72/72.27 + \dimen0=.996264\dimen0 % 72/72.27 \edef\x{\endgroup \def\noexpand\PdfRender@CurrentLineWidth{% - \strip@pt\dimen@ + \strip@pt\dimen0% }% }% \expandafter\x @@ -811,45 +1068,65 @@ and the derived files % \subsection{Fill and stroke color support} % % \begin{macrocode} -\define@key{PDFRENDER}{FillColor}{% +\PdfRender@define@key{PDFRENDER}{FillColor}{% \begingroup \def\PdfRender@Color{#1}% \ifx\PdfRender@Color\ltx@empty \global\let\PdfRender@FillColor\ltx@empty \else - \sbox0{% - \expandafter\PdfRender@TryColor\PdfRender@Color\ltx@empty - \PdfRender@GetFillColor - \ifx\PdfRender@FillColor\ltx@empty - \@PackageWarning{pdfrender}{% - Cannot extract fill color\MessageBreak - from value `#1'% - }% - \fi + \PdfRender@ColorAvailable{% + \PdfRender@TestBox{% + \expandafter\PdfRender@TryColor\PdfRender@Color\ltx@empty + \PdfRender@GetFillColor + \ifx\PdfRender@FillColor\ltx@empty + \@PackageWarning{pdfrender}{% + Cannot extract fill color\MessageBreak + from value `#1'% + }% + \fi + }% }% \fi \endgroup } -\define@key{PDFRENDER}{StrokeColor}{% +\PdfRender@define@key{PDFRENDER}{StrokeColor}{% \begingroup \def\PdfRender@Color{#1}% \ifx\PdfRender@Color\ltx@empty \global\let\PdfRender@StrokeColor\ltx@empty \else - \sbox0{% - \expandafter\PdfRender@TryColor\PdfRender@Color\ltx@empty - \PdfRender@GetStrokeColor - \ifx\PdfRender@StrokeColor\ltx@empty - \@PackageWarning{pdfrender}{% - Cannot extract stroke color\MessageBreak - from value `#1'% - }% - \fi + \PdfRender@ColorAvailable{% + \PdfRender@TestBox{% + \expandafter\PdfRender@TryColor\PdfRender@Color\ltx@empty + \PdfRender@GetStrokeColor + \ifx\PdfRender@StrokeColor\ltx@empty + \@PackageWarning{pdfrender}{% + Cannot extract stroke color\MessageBreak + from value `#1'% + }% + \fi + }% }% \fi \endgroup } % \end{macrocode} +% \begin{macro}{\PdfRender@ColorAvailable} +% \begin{macrocode} +\def\PdfRender@ColorAvailable{% + \@ifundefined{set@color}{% + \@PackageError{pdfrender}{% + Ignoring color options, because neither\MessageBreak + package `color' nor package `xcolor' is loaded% + }\@ehc + \global\let\PdfRender@ColorAvailable\ltx@gobble + }{% + \global\let\PdfRender@ColorAvailable\ltx@firstofone + }% + \PdfRender@ColorAvailable +} +% \end{macrocode} +% \end{macro} % \begin{macro}{\PdfRender@TryColor} % \begin{macrocode} \def\PdfRender@TryColor{% @@ -915,35 +1192,70 @@ and the derived files } % \end{macrocode} % \end{macro} +% \begin{macro}{\PdfRender@PatternFillColor} +% \begin{macrocode} +\edef\PdfRender@PatternFillColor{ % space + (% + [0-9\string\.]+ g|% + [0-9\string\.]+ [0-9\string\.]+ [0-9\string\.]+ rg|% + [0-9\string\.]+ [0-9\string\.]+ % + [0-9\string\.]+ [0-9\string\.]+ k% + ) % space + (.*)$% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@PatternStrokeColor} +% \begin{macrocode} +\edef\PdfRender@PatternStrokeColor{ % space + (% + [0-9\string\.]+ G|% + [0-9\string\.]+ [0-9\string\.]+ [0-9\string\.]+ RG|% + [0-9\string\.]+ [0-9\string\.]+ % + [0-9\string\.]+ [0-9\string\.]+ K% + ) % space + (.*)$% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@MatchPattern} +% \begin{macrocode} +\def\PdfRender@MatchPattern#1{% + \ifnum\pdfmatch{\PdfRender@Pattern}{\PdfRender@String}=1 % + \xdef#1{% + \expandafter\strip@prefix\pdflastmatch 1% + }% + \edef\PdfRender@String{% + \expandafter\strip@prefix\pdflastmatch 2% + }% + \ifx\PdfRender@String\ltx@empty + \else + \expandafter\expandafter\expandafter\PdfRender@MatchPattern + \expandafter\expandafter\expandafter#1% + \fi + \fi +} +% \end{macrocode} +% \end{macro} % \begin{macro}{\PdfRender@GetFillColor} % \begin{macrocode} \def\PdfRender@GetFillColor{% \global\let\PdfRender@FillColor\ltx@empty \begingroup \ifPdfRender@Match - \edef\current@color{\ltx@space\current@color\ltx@space}% - \ifnum\pdfmatch{ % - (% - [0-9\string\.]+ g|% - [0-9\string\.]+ [0-9\string\.]+ [0-9\string\.]+ rg|% - [0-9\string\.]+ [0-9\string\.]+ % - [0-9\string\.]+ [0-9\string\.]+ k% - )% - }{\current@color}=1 % - \xdef\PdfRender@FillColor{% - \expandafter\strip@prefix\pdflastmatch 1% - }% - \fi + \let\PdfRender@Pattern\PdfRender@PatternFillColor + \edef\PdfRender@String{\ltx@space\current@color\ltx@space}% + \PdfRender@MatchPattern\PdfRender@FillColor \else -% Using the method of Rolf Niepraschk. - \edef\x{% - \lowercase{% - \xdef\noexpand\PdfRender@FillColor{% - \current@color - }% - }% - }% - \x + \edef\current@color{\current@color\ltx@space}% + \let\PdfRender@OP\relax + \PdfRender@FindOp{g}0% + \PdfRender@FindOp{G}1% + \PdfRender@FindOp{rg}0% + \PdfRender@FindOp{RG}1% + \PdfRender@FindOp{k}0% + \PdfRender@FindOp{K}1% + \PdfRender@FilterOp 0\PdfRender@FillColor \fi \endgroup } @@ -955,34 +1267,71 @@ and the derived files \global\let\PdfRender@StrokeColor\ltx@empty \begingroup \ifPdfRender@Match - \edef\current@color{\ltx@space\current@color\ltx@space}% - \ifnum\pdfmatch{ % - (% - [0-9\string\.]+ G|% - [0-9\string\.]+ [0-9\string\.]+ [0-9\string\.]+ RG|% - [0-9\string\.]+ [0-9\string\.]+ % - [0-9\string\.]+ [0-9\string\.]+ K% - )% - }{\current@color}=1 % - \xdef\PdfRender@StrokeColor{% - \expandafter\strip@prefix\pdflastmatch 1% - }% - \fi + \let\PdfRender@Pattern\PdfRender@PatternStrokeColor + \edef\PdfRender@String{\ltx@space\current@color\ltx@space}% + \PdfRender@MatchPattern\PdfRender@StrokeColor \else -% Using the method of Rolf Niepraschk. - \edef\x{% - \uppercase{% - \xdef\noexpand\PdfRender@StrokeColor{% - \current@color - }% - }% - }% - \x + \edef\current@color{\current@color\ltx@space}% + \let\PdfRender@OP\relax + \PdfRender@FindOp{g}0% + \PdfRender@FindOp{G}1% + \PdfRender@FindOp{rg}0% + \PdfRender@FindOp{RG}1% + \PdfRender@FindOp{k}0% + \PdfRender@FindOp{K}1% + \PdfRender@FilterOp 1\PdfRender@StrokeColor \fi \endgroup } % \end{macrocode} % \end{macro} +% \begin{macrocode} +\ifPdfRender@Match + \expandafter\PdfRender@AtEnd +\fi +% \end{macrocode} +% \begin{macro}{\PdfRender@FindOp} +% \begin{macrocode} +\def\PdfRender@FindOp#1#2{% + \def\PdfRender@temp##1 #1 ##2\@nil{% + ##1% + \ifx\\##2\\% + \expandafter\@gobble + \else + \PdfRender@OP{#1}#2% + \expandafter\@firstofone + \fi + {% + \PdfRender@temp##2\@nil + }% + }% + \edef\current@color{% + \@firstofone{\expandafter\PdfRender@temp\current@color} #1 \@nil + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@FilterOp} +% \begin{macrocode} +\def\PdfRender@FilterOp#1#2{% + \expandafter\PdfRender@@FilterOp\expandafter#1\expandafter#2% + \current@color\PdfRender@OP{}{}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PdfRender@@FilterOp} +% \begin{macrocode} +\def\PdfRender@@FilterOp#1#2#3\PdfRender@OP#4#5{% + \ifx\\#4#5\\% + \else + \ifnum#1=#5 % + \xdef#2{#3 #4}% + \fi + \expandafter\PdfRender@@FilterOp\expandafter#1\expandafter#2% + \fi +} +% \end{macrocode} +% \end{macro} % % \begin{macrocode} \PdfRender@AtEnd @@ -1083,9 +1432,10 @@ and the derived files % \begin{macrocode} %<*test2> \NeedsTeXFormat{LaTeX2e} -\ProvidesFile{pdfrender-test2.tex}[2010/01/26] +\ProvidesFile{pdfrender-test2.tex}[2010/01/28] \documentclass{article} -\usepackage{pdfrender}[2010/01/26] +\usepackage{color} +\usepackage{pdfrender}[2010/01/28] \begin{document} Hello World \newpage @@ -1117,6 +1467,133 @@ Stop % % \end{macrocode} % +% \subsection{Further tests} +% +% Robustness and bookmarks. +% \begin{macrocode} +%<*test3> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{pdfrender-test3.tex}[2010/01/28] +\documentclass{article} +\usepackage{pdfrender}[2010/01/28] +\usepackage{hyperref} +\usepackage{bookmark} +\begin{document} +\tableofcontents +\section{% + \textpdfrender{% + TextRenderingMode=1,% + LineCapStyle=2,% + LineJoinStyle=1,% + MiterLimit=1.2,% + LineDashPattern=[2 2]0,% + RenderingIntent=Saturation,% + }{Hello World}% +} +\end{document} +% +% \end{macrocode} +% +% Color algorithm if \cs{pdfmatch} is not available. +% \begin{macrocode} +%<*test4> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{pdfrender-test4.tex}[2010/01/28] +\documentclass[12pt]{article} +\usepackage{pdfrender}[2010/01/28] +\usepackage{color} +\usepackage{qstest} +\IncludeTests{*} +\LogTests{log}{*}{*} +\makeatletter +\newcommand*{\CheckColor}[1]{% + \Expect{#1}*{\current@color}% +} +\makeatother +\begin{document} + \begin{qstest}{color}{color}% + \CheckColor{0 g 0 G}% + \Huge\bfseries + \noindent + \textpdfrender{% + TextRenderingMode=2,% + LineWidth=.5,% + FillColor=yellow,% + StrokeColor=blue,% + }{% + \CheckColor{0 0 1 0 k 0 0 1 RG}% + Blue(Yellow)\\% + \textpdfrender{% + FillColor=green,% + }{% + \CheckColor{0 1 0 rg 0 0 1 RG}% + Blue(Green)% + }\\% + \CheckColor{0 0 1 0 k 0 0 1 RG}% + Blue(Yellow)\\% + \textpdfrender{% + StrokeColor=red,% + }{% + \CheckColor{0 0 1 0 k 1 0 0 RG}% + Red(Yellow)% + }\\% + \CheckColor{0 0 1 0 k 0 0 1 RG}% + Blue(Yellow) % + }% + \end{qstest}% + \begin{qstest}{colorlast}{colorlast}% + \makeatletter + \def\Test#1#2#3{% + \begingroup + \def\current@color{#1}% + \textpdfrender{#2}{% + \CheckColor{#3}% + }% + \endgroup + }% + \Test{1 g 0 0 1 RG 0 0 1 0 k 0.5 G}% + {StrokeColor=green}% + {0 0 1 0 k 0 1 0 RG}% + \Test{1 g 0 0 1 RG 0 0 1 0 k 0.5 G}% + {FillColor=red}% + {1 0 0 rg 0.5 G}% + \end{qstest}% +\end{document} +% +% \end{macrocode} +% +% \subsection{Compatibility with \plainTeX} +% +% \begin{macrocode} +%<*test5> +\pdfoutput=1 % +\hsize=6.5in +\vsize=8.9in +\pdfpagewidth=\hsize +\pdfpageheight=\vsize +\parfillskip=0pt plus 1fil\relax +\input pdfrender.sty\relax +\catcode`\{=1 % +\catcode`\}=2 % +\let\OrgMakeFootLine\makefootline +\def\makefootline{% + \begingroup\normalcolor\OrgMakeFootLine\endgroup +} +\font\f=ec-lmr10 scaled 3000\relax +\f +Before % +\textpdfrender{% + TextRenderingMode=1,% + LineWidth=.1,% +}{Hello\par\vfill\penalty-10000 World} % +After % +\par +\vfill +\penalty-10000 % +\csname @@end\endcsname\end +% +% \end{macrocode} +% % \section{Installation} % % \subsection{Download} @@ -1176,10 +1653,13 @@ Stop % \begin{quote} % \def\t{^^A % \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} -% pdfrender.sty & tex/latex/oberdiek/pdfrender.sty\\ +% pdfrender.sty & tex/generic/oberdiek/pdfrender.sty\\ % pdfrender.pdf & doc/latex/oberdiek/pdfrender.pdf\\ % test/pdfrender-test1.tex & doc/latex/oberdiek/test/pdfrender-test1.tex\\ % test/pdfrender-test2.tex & doc/latex/oberdiek/test/pdfrender-test2.tex\\ +% test/pdfrender-test3.tex & doc/latex/oberdiek/test/pdfrender-test3.tex\\ +% test/pdfrender-test4.tex & doc/latex/oberdiek/test/pdfrender-test4.tex\\ +% test/pdfrender-test5.tex & doc/latex/oberdiek/test/pdfrender-test5.tex\\ % pdfrender.dtx & source/latex/oberdiek/pdfrender.dtx\\ % \end{tabular}^^A % }^^A @@ -1342,6 +1822,24 @@ Stop % \item % The first version. % \end{Version} +% \begin{Version}{2010/01/27 v1.1} +% \item +% Macros \cs{pdfrender} and \cs{textpdfrender} are made robust. +% \item +% Color extraction rewritten for the case that \cs{pdfmatch} +% is not available. This fixes wrong color assigments in +% case of nesting. +% \item +% Color extraction of case \cs{pdfmatch} is fixed +% for the case that the color string contains several +% fill or several stroke operations. +% \end{Version} +% \begin{Version}{2010/01/28 v1.2} +% \item +% Dependency from package \xpackage{color} is removed. +% \item +% Compatibility for \plainTeX\ and even ini\TeX\ added. +% \end{Version} % \end{History} % % \PrintIndex -- cgit v1.2.3