%%
%% This is file `pdfrender.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pdfrender.dtx  (with options: `package')
%% 
%% This is a generated file.
%% 
%% Project: pdfrender
%% Version: 2023-12-07 v1.8
%% 
%% Copyright (C)
%%    2010 Heiko Oberdiek
%%    2016-2023 Oberdiek Package Support Group
%% 
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
%% version 1.3c of this license or (at your option) any later
%% version. This version of this license is in
%%    https://www.latex-project.org/lppl/lppl-1-3c.txt
%% and the latest version of this license is in
%%    https://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of
%% LaTeX version 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status "maintained".
%% 
%% The Current Maintainers of this work are
%% Heiko Oberdiek and the Oberdiek Package Support Group
%% https://github.com/ho-tex/pdfrender/issues
%% 
%% 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-test3.tex, pdfrender-test4.tex,
%%    pdfrender-test5.tex.
%% 
\begingroup\catcode61\catcode48\catcode32=10\relax%
  \catcode13=5 % ^^M
  \endlinechar=13 %
  \catcode35=6 % #
  \catcode39=12 % '
  \catcode44=12 % ,
  \catcode45=12 % -
  \catcode46=12 % .
  \catcode58=12 % :
  \catcode64=11 % @
  \catcode123=1 % {
  \catcode125=2 % }
  \expandafter\let\expandafter\x\csname ver@pdfrender.sty\endcsname
  \ifx\x\relax % plain-TeX, first loading
  \else
    \def\empty{}%
    \ifx\x\empty % LaTeX, first loading,
      % variable is initialized, but \ProvidesPackage not yet seen
    \else
      \expandafter\ifx\csname PackageInfo\endcsname\relax
        \def\x#1#2{%
          \immediate\write-1{Package #1 Info: #2.}%
        }%
      \else
        \def\x#1#2{\PackageInfo{#1}{#2, stopped}}%
      \fi
      \x{pdfrender}{The package is already loaded}%
      \aftergroup\endinput
    \fi
  \fi
\endgroup%
\begingroup\catcode61\catcode48\catcode32=10\relax%
  \catcode13=5 % ^^M
  \endlinechar=13 %
  \catcode35=6 % #
  \catcode39=12 % '
  \catcode40=12 % (
  \catcode41=12 % )
  \catcode44=12 % ,
  \catcode45=12 % -
  \catcode46=12 % .
  \catcode47=12 % /
  \catcode58=12 % :
  \catcode64=11 % @
  \catcode91=12 % [
  \catcode93=12 % ]
  \catcode123=1 % {
  \catcode125=2 % }
  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
    \def\x#1#2#3[#4]{\endgroup
      \immediate\write-1{Package: #3 #4}%
      \xdef#1{#4}%
    }%
  \else
    \def\x#1#2[#3]{\endgroup
      #2[{#3}]%
      \ifx#1\@undefined
        \xdef#1{#3}%
      \fi
      \ifx#1\relax
        \xdef#1{#3}%
      \fi
    }%
  \fi
\expandafter\x\csname ver@pdfrender.sty\endcsname
\ProvidesPackage{pdfrender}%
  [2023-12-07 v1.8 Access to some PDF graphics parameters (HO)]%
\begingroup\catcode61\catcode48\catcode32=10\relax%
  \catcode13=5 % ^^M
  \endlinechar=13 %
  \catcode123=1 % {
  \catcode125=2 % }
  \catcode64=11 % @
  \def\x{\endgroup
    \expandafter\edef\csname PdfRender@AtEnd\endcsname{%
      \endlinechar=\the\endlinechar\relax
      \catcode13=\the\catcode13\relax
      \catcode32=\the\catcode32\relax
      \catcode35=\the\catcode35\relax
      \catcode61=\the\catcode61\relax
      \catcode64=\the\catcode64\relax
      \catcode123=\the\catcode123\relax
      \catcode125=\the\catcode125\relax
    }%
  }%
\x\catcode61\catcode48\catcode32=10\relax%
\catcode13=5 % ^^M
\endlinechar=13 %
\catcode35=6 % #
\catcode64=11 % @
\catcode123=1 % {
\catcode125=2 % }
\def\TMP@EnsureCode#1#2{%
  \edef\PdfRender@AtEnd{%
    \PdfRender@AtEnd
    \catcode#1=\the\catcode#1\relax
  }%
  \catcode#1=#2\relax
}
\TMP@EnsureCode{10}{12}% ^^J
\TMP@EnsureCode{36}{3}% $
\TMP@EnsureCode{39}{12}% '
\TMP@EnsureCode{40}{12}% (
\TMP@EnsureCode{41}{12}% )
\TMP@EnsureCode{42}{12}% *
\TMP@EnsureCode{43}{12}% +
\TMP@EnsureCode{44}{12}% ,
\TMP@EnsureCode{45}{12}% -
\TMP@EnsureCode{46}{12}% .
\TMP@EnsureCode{47}{12}% /
\TMP@EnsureCode{58}{12}% :
\TMP@EnsureCode{59}{12}% ;
\TMP@EnsureCode{60}{12}% <
\TMP@EnsureCode{62}{12}% >
\TMP@EnsureCode{63}{12}% ?
\TMP@EnsureCode{91}{12}% [
\TMP@EnsureCode{93}{12}% ]
\TMP@EnsureCode{94}{7}% ^ (superscript)
\TMP@EnsureCode{96}{12}% `
\TMP@EnsureCode{124}{12}% |
\def\PdfRender@AtEndHook{}
\expandafter\def\expandafter\PdfRender@AtEnd\expandafter{%
  \expandafter\PdfRender@AtEndHook
  \PdfRender@AtEnd
  \endinput
}
\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
}
\PdfRender@newif{Stack}
\PdfRender@newif{Match}
\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
\ifx\pdfextension\@undefined\else
  \def\pdfcolorstackinit {\pdffeedback colorstackinit}
  \protected\def\pdfcolorstack     {\pdfextension colorstack}
  \protected\def\pdfliteral        {\pdfextension literal}
\fi
\PdfRender@RequirePackage{iftex}[2019/11/07]
\PdfRender@RequirePackage{infwarerr}[2007/09/09]
\PdfRender@RequirePackage{ltxcmds}[2010/01/28]
\ifpdf
  \ltx@IfUndefined{pdfcolorstackinit}{%
    \@PackageWarning{pdfrender}{%
      Missing \string\pdfcolorstackinit
    }%
  }{%
    \PdfRender@Stacktrue
  }%
  \ltx@IfUndefined{pdfmatch}{%
    \@PackageInfoNoLine{pdfrender}{%
      \string\pdfmatch\ltx@space not found. %
      Therefore the values\MessageBreak
      of some parameters are not validated%
    }%
  }{%
    \PdfRender@Matchtrue
  }%
\else
  \@PackageWarning{pdfrender}{%
    Missing pdfTeX in PDF mode%
  }%
  \ltx@IfUndefined{newcommand}{%
    \def\pdfrender#1{}%
    \long\def\textpdfrender#1#2{#2}%
  }{%
    \newcommand*{\pdfrender}[1]{}%
    \newcommand{\textpdfrender}[2]{#2}%
  }%
  \expandafter\PdfRender@AtEnd
\fi%
\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
  }{}%
}
\def\PdfRender@NormalColorHook{}
\def\PdfRender@ColorSetGroupHook{}
\def\PdfRender@TestBox#1{%
  \setbox0=\color@hbox#1\color@endbox
}
\def\PdfRender@temp{LaTeX2e}
\ifx\PdfRender@temp\fmtname
 \expandafter \ltx@firstoftwo
\else
 \expandafter\ltx@secondoftwo
\fi
 {
   \AddToHook{cmd/normalcolor/after}{\PdfRender@NormalColorHook}
   \AddToHook{cmd/color@setgroup/after}{\PdfRender@NormalColorHook}
 }
 {
   \ltx@ifundefined{normalcolor}
    {%
      \gdef\normalcolor{\PdfRender@NormalColorHook}%
    }
    {%
      \ltx@GlobalAppendToMacro\normalcolor{%
            \PdfRender@NormalColorHook}%
    }%
  \ltx@GlobalAppendToMacro\color@setgroup{%
          \PdfRender@ColorSetGroupHook
        }%
 }
\PdfRender@RequirePackage{kvsetkeys}[2010/01/28]
\def\PdfRender@texorpdfstring{%
  \ltx@IfUndefined{texorpdfstring}\ltx@firstoftwo\texorpdfstring
}
\ltx@IfUndefined{DeclareRobustCommand}%
\ltx@firstoftwo\ltx@secondoftwo
{%
  \def\pdfrender#1%
}{%
  \newcommand{\pdfrender}{}%
  \DeclareRobustCommand*{\pdfrender}[1]%
}%
{%
  \PdfRender@texorpdfstring{%
    \global\let\PdfRender@FillColor\ltx@empty
    \global\let\PdfRender@StrokeColor\ltx@empty
    \kvsetkeys{PDFRENDER}{#1}%
    \PdfRender@SetColor
  }{}%
}
\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}%
}
\PdfRender@newif{Values}
\def\PdfRender@NewClassValues#1#2#3#4{%
  \PdfRender@Valuestrue
  \PdfRender@NewClass{#1}{#2}{#3}{#4}{}%
}
\def\PdfRender@NewClass#1#2#3#4#5{%
  \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
  \ifPdfRender@Stack
    \expandafter\edef\csname PdfRender@Init#1\endcsname{%
      \global\chardef
      \expandafter\noexpand\csname PdfRender@Stack#1\endcsname=%
          \noexpand\pdfcolorstackinit page direct{%
            \noexpand#3%
            \expandafter\noexpand\csname PdfRender@Default#1\endcsname
          }\relax
      \noexpand\@PackageInfo{pdfrender}{%
        New color stack `#1' = \noexpand\number
        \expandafter\noexpand\csname PdfRender@Stack#1\endcsname
      }%
      \gdef\expandafter\noexpand\csname PdfRender@Init#1\endcsname{}%
    }%
    \expandafter\edef\csname PdfRender@Set#1\endcsname{%
      \expandafter\noexpand\csname PdfRender@Init#1\endcsname
      \noexpand\pdfcolorstack
      \expandafter\noexpand\csname PdfRender@Stack#1\endcsname
      push{%
        #3{\expandafter\noexpand\csname PdfRender@Current#1\endcsname}%
      }%
      \noexpand\aftergroup
      \expandafter\noexpand\csname PdfRender@Reset#1\endcsname
    }%
    \expandafter\edef\csname PdfRender@Reset#1\endcsname{%
      \expandafter\noexpand\csname PdfRender@Init#1\endcsname
      \noexpand\pdfcolorstack
      \expandafter\noexpand\csname PdfRender@Stack#1\endcsname
      pop\relax
    }%
  \else
    \expandafter\edef\csname PdfRender@Set#1\endcsname{%
      \noexpand\pdfliteral direct{%
        #3{\expandafter\noexpand\csname PdfRender@Current#1\endcsname}%
      }%
      \noexpand\aftergroup
      \expandafter\noexpand\csname PdfRender@Reset#1\endcsname
    }%
    \expandafter\edef\csname PdfRender@Reset#1\endcsname{%
      \noexpand\pdfliteral direct{%
        #3{\expandafter\noexpand\csname PdfRender@Current#1\endcsname}%
      }%
    }%
  \fi
  \expandafter\edef\csname PdfRender@Normal#1\endcsname{%
    \let
    \expandafter\noexpand\csname PdfRender@Current#1\endcsname
    \expandafter\noexpand\csname PdfRender@Default#1\endcsname
    \noexpand\PdfRender@Set{#1}%
  }%
  \expandafter\ltx@GlobalAppendToMacro\expandafter\PdfRender@NormalColorHook
  \expandafter{%
    \csname PdfRender@Normal#1\endcsname
  }%
  \ltx@GlobalAppendToMacro\PdfRender@ColorSetGroupHook{%
    \PdfRender@Set{#1}%
  }%
  \ifPdfRender@Values
    \kv@parse@normalized{#4}{%
      \expandafter\let\csname PdfRender@#1@\kv@key\endcsname\kv@key
      \ifx\kv@value\relax
      \else
        \expandafter\let\csname PdfRender@#1@\kv@value\endcsname\kv@key
      \fi
      \ltx@gobbletwo
    }%
    \PdfRender@define@key{PDFRENDER}{#1}{%
      \global\csname PdfRender@Active#1true\endcsname
      \def\PdfRender@Current{##1}%
      \PdfRender@SetValidateValues{#1}%
    }%
    \PdfRender@Valuesfalse
  \else
    \PdfRender@define@key{PDFRENDER}{#1}{%
      \global\csname PdfRender@Active#1true\endcsname
      \expandafter\def\csname PdfRender@Current#1\endcsname{##1}%
      \ltx@IfUndefined{PdfRender@PostProcess#1}{%
      }{%
        \csname PdfRender@PostProcess#1\endcsname
      }%
      \PdfRender@SetValidate{#1}{#4}{#5}%
    }%
  \fi
}%
\ltx@IfUndefined{define@key}{%
  \def\PdfRender@define@key#1#2{%
    \expandafter\def\csname KV@#1@#2\endcsname##1%
  }%
}{%
  \let\PdfRender@define@key\define@key
}
\def\PdfRender@Set#1{%
  \csname ifPdfRender@Active#1\endcsname
    \csname PdfRender@Set#1\expandafter\endcsname
  \fi
}
\def\PdfRender@Reset#1{%
  \csname ifPdfRender@Active#1\endcsname
    \csname PdfRender@Reset#1\expandafter\endcsname
  \fi
}
\def\PdfRender@ErrorInvalidValue#1{%
  \PackageError{pdfrender}{%
    Ignoring parameter setting for `#1'\MessageBreak
    because of invalid value %
    `\csname PdfRender@Current#1\endcsname'%
  }\@ehc
  \expandafter\let\csname PdfRender@Current#1\endcsname\ltx@empty
}%
\ifPdfRender@Match
  \def\PdfRender@SetValidate#1#2#3{%
    \ifnum\pdfmatch{^(#2)$}{\csname PdfRender@Current#1\endcsname}=1 %
      \csname PdfRender@Set#1\expandafter\endcsname
    \else
      \PdfRender@ErrorInvalidValue{#1}%
    \fi
  }%
\else
  \def\PdfRender@SetValidate#1#2#3{%
    \expandafter\let\expandafter\PdfRender@Current
    \csname PdfRender@Current#1\endcsname
    #3%
    \ifx\PdfRender@Current\@empty
      \PdfRender@ErrorInvalidValue{#1}%
    \else
      \csname PdfRender@Set#1\expandafter\endcsname
    \fi
  }%
\fi
\def\PdfRender@SetValidateValues#1{%
  \ltx@IfUndefined{PdfRender@#1@\PdfRender@Current}{%
    \expandafter\let\csname PdfRender@Current#1\endcsname
                    \PdfRender@Current
    \PdfRender@ErrorInvalidValue{#1}%
  }{%
    \expandafter\edef\csname PdfRender@Current#1\endcsname{%
      \csname PdfRender@#1@\PdfRender@Current\endcsname
    }%
    \csname PdfRender@Set#1\endcsname
  }%
}
\def\PdfRender@OpValue#1#2{#2\ltx@space#1}%
\def\PdfRender@OpName#1#2{/#2\ltx@space#1}%
\PdfRender@NewClassValues{TextRenderingMode}%
                      {0}%
                      {\PdfRender@OpValue{Tr}}{%
  0=Fill,%
  1=Stroke,%
  2=FillStroke,%
  3=Invisible,%
  4=FillClip,%
  5=StrokeClip,%
  6=FillStrokeClip,%
  7=Clip,%
}%
\PdfRender@NewClass{LineWidth}{1}{\PdfRender@OpValue{w}}{%
  [0-9]+\string\.?[0-9]*|\string\.[0-9]+%
}{}%
\ltx@IfUndefined{dimexpr}{%
  \def\PdfRender@dimexpr{}%
}{%
  \let\PdfRender@dimexpr\dimexpr
}
\def\PdfRender@PostProcessLineWidth{%
  \begingroup
  \afterassignment\PdfRender@@PostProcessLineWidth
  \dimen0=\PdfRender@dimexpr\PdfRender@CurrentLineWidth bp %
  \PdfRender@let\PdfRender@relax\PdfRender@relax
}
\let\PdfRender@let\let
\let\PdfRender@relax\relax
\def\PdfRender@@PostProcessLineWidth#1\PdfRender@let{%
  \ifx\\#1\\%
    \endgroup
  \else
    \dimen0=.996264\dimen0 % 72/72.27
    \edef\x{\endgroup
      \def\noexpand\PdfRender@CurrentLineWidth{%
        \strip@pt\dimen0%
      }%
    }%
    \expandafter\x
  \fi
}
\PdfRender@NewClassValues{LineCapStyle}{0}{\PdfRender@OpValue{J}}{%
  0=Butt,%
  1=Round,%
  2=ProjectingSquare,%
}%
\PdfRender@NewClassValues{LineJoinStyle}{0}{\PdfRender@OpValue{j}}{%
  0=Miter,%
  1=Round,%
  2=Bevel,%
}%
\PdfRender@NewClass{MiterLimit}{10}{\PdfRender@OpValue{M}}{%
  [0-9]*[1-9][0-9]*\string\.?[0-9]*|%
  [0-9]*\string\.?[0-9]*[1-9][0-9]*%
}{}%
\PdfRender@NewClass{Flatness}{0}{\PdfRender@OpValue{i}}{%
  100(\string\.0*)?|[0-9][0-9](\string\.[0-9]*)?|\string\.[0-9]+%
}{}%
\PdfRender@NewClass{LineDashPattern}{[]0}{\PdfRender@OpValue{d}}{%
  \string\[%
  ( ?([0-9]+\string\.?[0-9]*|\string\.[0-9]+) ?)*%
  \string\] ?%
  ([0-9]+\string\.?[0-9]*|\string\.[0-9]+)%
}{}%
\PdfRender@NewClassValues{RenderingIntent}%
                      {RelativeColorimetric}%
                      {\PdfRender@OpName{ri}}{%
  AbsoluteColorimetric,%
  RelativeColorimetric,%
  Saturation,%
  Perceptual,%
}%
\PdfRender@define@key{PDFRENDER}{FillColor}{%
  \begingroup
    \def\PdfRender@Color{#1}%
    \ifx\PdfRender@Color\ltx@empty
      \global\let\PdfRender@FillColor\ltx@empty
    \else
      \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
}
\PdfRender@define@key{PDFRENDER}{StrokeColor}{%
  \begingroup
    \def\PdfRender@Color{#1}%
    \ifx\PdfRender@Color\ltx@empty
      \global\let\PdfRender@StrokeColor\ltx@empty
    \else
      \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
}
\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
}
\def\PdfRender@TryColor{%
  \@ifnextchar[\color\PdfRender@@TryColor
}
\def\PdfRender@@TryColor#1\ltx@empty{%
  \expandafter\color\expandafter{\PdfRender@Color}%
}
\def\PdfRender@SetColor{%
  \chardef\PdfRender@NeedsCurrentColor=0 %
  \ifx\PdfRender@FillColor\ltx@empty
    \ifx\PdfRender@StrokeColor\ltx@empty
    \else
      \edef\PdfRender@CurrentColor{%
        \noexpand\PdfRender@FillColor\ltx@space\PdfRender@StrokeColor
      }%
      \chardef\PdfRender@NeedsCurrentColor=1 %
    \fi
  \else
    \ifx\PdfRender@StrokeColor\ltx@empty
      \edef\PdfRender@CurrentColor{%
        \PdfRender@FillColor\ltx@space\noexpand\PdfRender@StrokeColor
      }%
      \chardef\PdfRender@NeedsCurrentColor=2 %
    \else
      \edef\current@color{%
        \PdfRender@FillColor\ltx@space\PdfRender@StrokeColor
      }%
      \set@color
    \fi
  \fi
  \ifnum\PdfRender@NeedsCurrentColor=1 %
    \PdfRender@GetFillColor
    \ifx\PdfRender@FillColor\ltx@empty
      \@PackageWarning{pdfrender}{%
        Cannot extract current fill color%
      }%
    \else
      \edef\current@color{\PdfRender@CurrentColor}%
      \set@color
    \fi
  \else
    \ifnum\PdfRender@NeedsCurrentColor=2 %
      \PdfRender@GetStrokeColor
      \ifx\PdfRender@StrokeColor\ltx@empty
        \@PackageWarning{pdfrender}{%
          Cannot extract current stroke color%
        }%
      \else
        \edef\current@color{\PdfRender@CurrentColor}%
        \set@color
      \fi
    \fi
  \fi
}
\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
  (.*)$%
}
\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
  (.*)$%
}
\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
}
\def\PdfRender@GetFillColor{%
  \global\let\PdfRender@FillColor\ltx@empty
  \begingroup
    \ifPdfRender@Match
      \let\PdfRender@Pattern\PdfRender@PatternFillColor
      \edef\PdfRender@String{\ltx@space\current@color\ltx@space}%
      \PdfRender@MatchPattern\PdfRender@FillColor
    \else
      \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
}
\def\PdfRender@GetStrokeColor{%
  \global\let\PdfRender@StrokeColor\ltx@empty
  \begingroup
    \ifPdfRender@Match
      \let\PdfRender@Pattern\PdfRender@PatternStrokeColor
      \edef\PdfRender@String{\ltx@space\current@color\ltx@space}%
      \PdfRender@MatchPattern\PdfRender@StrokeColor
    \else
      \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
}
\ifPdfRender@Match
  \expandafter\PdfRender@AtEnd
\fi%
\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
  }%
}
\def\PdfRender@FilterOp#1#2{%
  \expandafter\PdfRender@@FilterOp\expandafter#1\expandafter#2%
      \current@color\PdfRender@OP{}{}%
}
\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
}
\PdfRender@AtEnd%
%% \section{Installation}
\endinput
%%
%% End of file `pdfrender.sty'.
