diff options
author | Karl Berry <karl@freefriends.org> | 2010-01-28 23:02:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-01-28 23:02:21 +0000 |
commit | 35aaa338a3a95a725bc3961cc689b9262164c6a1 (patch) | |
tree | 743f8583aa149845bbbb4e597230c1f33d5fdb2c /Master/texmf-dist/source/latex/oberdiek/pdfrender.dtx | |
parent | a30dc652eb93949bfefbdb8f7a536f185cd10377 (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.dtx | 712 |
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 |