summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-01-28 23:02:21 +0000
committerKarl Berry <karl@freefriends.org>2010-01-28 23:02:21 +0000
commit35aaa338a3a95a725bc3961cc689b9262164c6a1 (patch)
tree743f8583aa149845bbbb4e597230c1f33d5fdb2c /Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx
parenta30dc652eb93949bfefbdb8f7a536f185cd10377 (diff)
oberdiek update (28jan10)
git-svn-id: svn://tug.org/texlive/trunk@16857 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx')
-rw-r--r--Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx712
1 files changed, 605 insertions, 107 deletions
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
%</driver>
% \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
%</test2>
% \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}
+%</test3>
+% \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}
+%</test4>
+% \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
+%</test5>
+% \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