Skip to content

Instantly share code, notes, and snippets.

@Michael0x2a
Created April 1, 2017 04:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Michael0x2a/d94c00a315076c589dbc8b838f365814 to your computer and use it in GitHub Desktop.
Save Michael0x2a/d94c00a315076c589dbc8b838f365814 to your computer and use it in GitHub Desktop.
pgfsys-luatex.def
% Copyright 2006 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/systemlayer/pgfsys-luatex.def,v 1.35 2014/10/11 09:23:31 vibrovski Exp $
% Driver commands for pdf
%
% Load common pdf commands:
%
\input pgfsys-common-pdf.def
%
% pdftex-specific stuff:
%
\def\pgfsys@invoke#1{\pdfextension literal{#1}}
% Synced hboxes
\def\pgfsys@hboxsynced#1{%
{%
\pgfsys@beginscope%
\setbox\pgf@hbox=\hbox{%
\hskip\pgf@pt@x%
\raise\pgf@pt@y\hbox{%
\pgf@pt@x=0pt%
\pgf@pt@y=0pt%
\pgflowlevelsynccm%
\pgfsys@hbox#1}%
\hss%
}%
\wd\pgf@hbox=0pt%
\ht\pgf@hbox=0pt%
\dp\pgf@hbox=0pt%
\box\pgf@hbox%
\pgfsys@endscope%
}%
}
\def\pgfsys@imagesuffixlist{.pdf:.jpg:.jpeg:.png:}
\def\pgfsys@defineimage{% width, height, page number
\ifx\pgf@imagewidth\pgfutil@empty\else\edef\pgf@imagewidth{ width \pgf@imagewidth }\fi%
\ifx\pgf@imageheight\pgfutil@empty\else\edef\pgf@imageheight{ height \pgf@imageheight }\fi%
\ifx\pgf@imagepage\pgfutil@empty\else\edef\pgf@imagepage{ page \pgf@imagepage }\fi%
\ifx\saveimageresource\@undefined% old version of lualatex
\ifx\pgf@imagepage\pgfutil@empty\else%
\pgfwarning{Page selection not supported. Ignoring page selection}%
\fi%
\setbox\pgfutil@tempboxa=\hbox{%
\pdfimage \pgf@imageheight \pgf@imagewidth {\pgf@filename}}%
\pdfform\pgfutil@tempboxa%
\edef\pgf@image{\noexpand\pdfrefform\the\pdflastform}%
\else% new version
{\saveimageresource \pgf@imageheight \pgf@imagewidth attr
{/Interpolate \pgf@imageinterpolate\space\pgf@imagemask} \pgf@imagepage
{\pgf@filename}}%
\edef\pgf@image{\noexpand\useimageresource\the\lastsavedimageresourceindex}%
\fi
}%
\def\pgfsys@definemask#1{%
\ifx\pgf@maskmatte\pgfutil@empty%
\else%
\edef\pgf@maskmatte{/Matte [\pgf@maskmatte]}%
\fi%
\edef\pgf@attr{{\pgf@maskmatte\space /Decode [1 0]}}%
\immediate\saveimageresource attr \pgf@attr {\pgf@filename}%
\edef\pgf@mask{/SMask \the\lastsavedimageresourceindex\space 0 R}%
}
\def\pgfsys@horishading#1#2#3{%
{%
\pgf@parsefunc{#3}%
\pgfmathparse{#2}%
\setbox\pgfutil@tempboxa=\hbox to\pgf@max{\vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
\pgf@process{\pgfpoint{\pgf@max}{#2}}%
\immediate\saveboxresource resources {%
/Shading << /Sh << /ShadingType 2
/ColorSpace /DeviceRGB
/Domain [\pgf@pdfparseddomain]
/Coords [\pgf@doma\space0 \pgf@domb\space0]
/Function \pgf@pdfparsedfunction
/Extend [false false] >> >>}\pgfutil@tempboxa% <<
\expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
}%
}
\def\pgfsys@vertshading#1#2#3{%
{%
\pgf@parsefunc{#3}%
\pgfmathparse{#2}%
\setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{\vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
\pgf@process{\pgfpoint{#2}{\pgf@max}}%
\immediate\saveboxresource resources {%
/Shading << /Sh << /ShadingType 2
/ColorSpace /DeviceRGB
/Domain [\pgf@pdfparseddomain]
/Coords [0 \pgf@doma\space0 \pgf@domb]
/Function \pgf@pdfparsedfunction
/Extend [false false] >> >>}\pgfutil@tempboxa% <<
\expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
}%
}
\def\pgfsys@radialshading#1#2#3{%
{%
\pgf@parsefunc{#3}%
\setbox\pgfutil@tempboxa=\hbox to2\pgf@max{\vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
\pgf@process{#2}%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
\advance\pgf@xa by \pgf@x%
\advance\pgf@ya by \pgf@y%
\pgf@sys@bp@correct{\pgf@x}%
\pgf@sys@bp@correct{\pgf@y}%
\pgf@sys@bp@correct{\pgf@xa}%
\pgf@sys@bp@correct{\pgf@ya}%
\immediate\saveboxresource resources {%
/Shading << /Sh << /ShadingType 3
/ColorSpace /DeviceRGB
/Domain [\pgf@pdfparseddomain]
/Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya} \pgf@doma\space \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y} \pgf@domb]
/Function \pgf@pdfparsedfunction
/Extend [true false] >> >>}\pgfutil@tempboxa% <<
\expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
}%
}%
\def\pgfsys@functionalshading#1#2#3#4{%
{%
\pgf@process{#2}%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\pgf@process{#3}%
\pgf@xb=\pgf@x%
\pgf@yb=\pgf@y%
\advance\pgf@x by-\pgf@xa%
\advance\pgf@y by-\pgf@ya%
\setbox\pgfutil@tempboxa=\hbox to\pgf@x{\vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
\pgf@sys@bp@correct{\pgf@xa}%
\pgf@sys@bp@correct{\pgf@ya}%
\pgf@sys@bp@correct{\pgf@xb}%
\pgf@sys@bp@correct{\pgf@yb}%
\pgf@xc=-\pgf@xa%
\pgf@yc=-\pgf@ya%
% Now build the function
\pdfextension obj
stream
attr
{
/FunctionType 4
/Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}]
/Range [0 1 0 1 0 1]
}
{{#4}}%
\edef\pgf@temp@num{\the\numexpr\pdffeedback lastobj\relax}%
\saveboxresource resources {%
/Shading << /Sh << /ShadingType 1
/ColorSpace /DeviceRGB
/Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space\pgf@sys@tonumber{\pgf@yc}]
/Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}]
/Function \pgf@temp@num\space 0 R
>> >>}\pgfutil@tempboxa% <<
\expandafter\xdef\csname @pgfshading#1!\endcsname{%
\leavevmode%
\noexpand\useboxresource\the\lastsavedboxresourceindex%
\noexpand\pdfextension refobj \pgf@temp@num%
}%
}%
}
% Patterns
\def\pgfsys@declarepattern#1#2#3#4#5#6#7#8#9{%
% Start building the pattern dictionary:
\pgf@xa=#2\relax%
\pgf@ya=#3\relax%
\pgf@xb=#4\relax%
\pgf@yb=#5\relax%
\pgf@xc=#6\relax%
\pgf@yc=#7\relax%
\pgf@sys@bp@correct\pgf@xa%
\pgf@sys@bp@correct\pgf@ya%
\pgf@sys@bp@correct\pgf@xb%
\pgf@sys@bp@correct\pgf@yb%
\pgf@sys@bp@correct\pgf@xc%
\pgf@sys@bp@correct\pgf@yc%
% Now create the pattern object:
\immediate\pdfextension obj stream
attr
{
/Type /Pattern
/PatternType 1
/PaintType \ifnum#9=0 2 \else 1 \fi
/TilingType 1
/BBox [\pgf@sys@tonumber\pgf@xa\space\pgf@sys@tonumber\pgf@ya\space\pgf@sys@tonumber\pgf@xb\space\pgf@sys@tonumber\pgf@yb]
/XStep \pgf@sys@tonumber\pgf@xc\space
/YStep \pgf@sys@tonumber\pgf@yc\space
/Resources << >> %<<
}
{#8}%
\pgfutil@addpdfresource@patterns{/pgfpat#1\space \the\numexpr\pdffeedback lastobj\relax\space 0 R}%
}
\def\pgfsys@setpatternuncolored#1#2#3#4{%
\pgfsysprotocol@literal{/pgfprgb cs #2 #3 #4 /pgfpat#1\space scn}%
}
\def\pgfsys@setpatterncolored#1{%
\pgfsysprotocol@literal{/Pattern cs /pgfpat#1\space scn}%
}
% System layer for meta patterns
% Takes 15(!) arguments
% #1 pattern name
% #2 #3 bounding box lower left
% #4 #5 bounding box upper right
% #6 #7 tile size
% #8 #9 #10 #11 #12 #13 transformation matrix
% #14 protocoled text
% #15 pattern type
\def\pgfsys@declarepattern@meta#1#2#3#4#5#6#7{%
% Start building the pattern dictionary:
\pgf@xa=#2\relax%
\pgf@ya=#3\relax%
\pgf@xb=#4\relax%
\pgf@yb=#5\relax%
\pgf@xc=#6\relax%
\pgf@yc=#7\relax%
\pgf@sys@bp@correct\pgf@xa%
\pgf@sys@bp@correct\pgf@ya%
\pgf@sys@bp@correct\pgf@xb%
\pgf@sys@bp@correct\pgf@yb%
\pgf@sys@bp@correct\pgf@xc%
\pgf@sys@bp@correct\pgf@yc%
\pgfsys@@declarepattern@meta{#1}}
\def\pgfsys@@declarepattern@meta#1#2#3#4#5#6#7#8#9{%
\pgfutil@tempdima=#6\relax%
\pgfutil@tempdimb=#7\relax%
\pgf@sys@bp@correct\pgf@xa%
\pgf@sys@bp@correct\pgf@ya%
% Now create the pattern object:
\immediate\pdfextension obj stream
attr
{
/Type /Pattern
/PatternType 1
/PaintType \ifnum#9=0 2 \else 1 \fi
/TilingType 1
/BBox [\pgf@sys@tonumber\pgf@xa\space\pgf@sys@tonumber\pgf@ya\space\pgf@sys@tonumber\pgf@xb\space\pgf@sys@tonumber\pgf@yb]
/XStep \pgf@sys@tonumber\pgf@xc\space
/YStep \pgf@sys@tonumber\pgf@yc\space
/Matrix [#2\space#3\space#4\space#5\space\pgf@sys@tonumber\pgfutil@tempdima\space\pgf@sys@tonumber\pgfutil@tempdimb]
/Resources << >> %<<
}
{#8}%
\pgfutil@addpdfresource@patterns{/pgfpat#1\space \the\numexpr\pdffeedback lastobj\relax\space 0 R}%
}
\def\pgfsys@papersize#1#2{\pageheight#2\relax\pagewidth#1\relax}
\def\pgfsys@global@papersize#1#2{\global\pageheight#2\relax\global\pagewidth#1\relax}
\ifx\paperheight\@undefined
\def\pgfsys@thepageheight{\pageheight}
\def\pgfsys@thepagewidth{\pagewidth}
\fi
%
% Position tracking
%
\def\pgfsys@markposition#1{%
\savepos%
\edef\pgf@temp{#1}%
\expandafter\pgfutil@writetoaux\expandafter{%
\expandafter\noexpand\expandafter\pgfsyspdfmark\expandafter{\pgf@temp}{\the\lastxpos}{\the\lastypos}}%
}
\def\pgfsyspdfmark#1#2#3{%
\expandafter\gdef\csname pgf@sys@pdf@mark@pos@#1\endcsname{\pgfqpoint{#2sp}{#3sp}}%
\pgfutil@check@rerun{#1}{{#2}{#3}}%
}
\def\pgfsys@getposition#1#2{%
\edef\pgf@marshal{\let\noexpand#2=\expandafter\noexpand\csname pgf@sys@pdf@mark@pos@#1\endcsname}%
\pgf@marshal%
}
\def\pgf@sys@pdf@mark@pos@pgfpageorigin{\pgfqpoint{\hoffset}{\voffset}}
%
% Opacity masks
%
\def\pgfsys@fadingfrombox#1#2{%
{%
\pgf@sys@pdf@check@resources%
\pgf@x=-.5\wd#2%
\pgf@y=-.5\ht#2%
\advance\pgf@y by.5\dp#2%
\expandafter\xdef\csname pgfsmasktrans@#1\endcsname{%
\noexpand\pgftransformcm{1}{0}{0}{1}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}%
\saveboxresource resources { \pgf@sys@pdf@possible@resources } #2%
\expandafter\xdef\csname pgfsmaskxform@#1\endcsname{\the\lastsavedboxresourceindex}%
}%
}
\def\pgfsys@usefading#1#2#3#4#5#6#7{%
\expandafter\ifx\csname pgfsmaskxform@#1\endcsname\relax%
\pgferror{Undefined fading '#1'}%
\else%
{%
\expandafter\ifx\csname pgfsmaks@#1\endcsname\relax%
\pgf@sys@pdf@install@mask{#1}%
\fi%
\pgftransformreset%
\pgftransformcm{#2}{#3}{#4}{#5}{\pgfpoint{#6}{#7}}%
\csname pgfsmasktrans@#1\endcsname%
{%
\pgflowlevelsynccm%
\pgfsys@invoke{/pgfsmask\csname pgfsmask@#1\endcsname\space gs}%
}%
\pgftransforminvert%
\pgflowlevelsynccm%
}%
\fi
}
\def\pgf@sys@pdf@install@mask#1{%
\setbox\pgfutil@tempboxa=\hbox{\useboxresource\csname pgfsmaskxform@#1\endcsname}
\immediate\saveboxresource%
attr {
/Group
<<
/S /Transparency
/CS /DeviceGray
>>
}% <<
\pgfutil@tempboxa%
\pgfutil@addpdfresource@extgs{%
/pgfsmask\the\lastsavedboxresourceindex\space
<<
/SMask
<<
/S /Luminosity
/G \the\lastsavedboxresourceindex\space 0 R
>>
>> } %<<
\expandafter\xdef\csname pgfsmask@#1\endcsname{\the\lastsavedboxresourceindex}%
}
%
% Transparency groups
%
\def\pgfsys@transparencygroupfrombox#1{%
\pgf@sys@pdf@check@resources%
\saveboxresource
attr { /Group << /S /Transparency
/I \ifpgfsys@transparency@group@isolated true \else false \fi
/K \ifpgfsys@transparency@group@knockout true \else false \fi >> } %<<
resources { \pgf@sys@pdf@possible@resources }
#1%
\setbox#1=\hbox{\useboxresource\lastsavedboxresourceindex}%
}
%
% Resource management
%
\def\pgf@sys@setuppdfresources@plain{%
% This command will setup pdf resource in plain and in latex
% mode. ConTeXt has its own handler
% Page resources (they are kept in objects and only written at the
% very end)
\pdfextension obj reserveobjnum \edef\pgf@sys@pdf@extgs@objnum{\the\numexpr\pdffeedback lastobj\relax}
\pdfextension obj reserveobjnum \edef\pgf@sys@pdf@pattern@objnum{\the\numexpr\pdffeedback lastobj\relax}
\pdfextension obj reserveobjnum \edef\pgf@sys@pdf@colrospaces@objnum{\the\numexpr\pdffeedback lastobj\relax}
\def\pgf@sys@pdf@possible@resources{%
/ColorSpace \pgf@sys@pdf@colrospaces@objnum\space 0 R
/Pattern \pgf@sys@pdf@pattern@objnum\space 0 R
/ExtGState \pgf@sys@pdf@extgs@objnum\space 0 R
}
\let\pgf@sys@pdf@check@resources=\relax%
\def\pgf@sys@pdf@install@pageresources{
{
\edef\temp{
\pgf@sys@pdf@possible@resources
}
\expandafter\global\expandafter\pdfvariable pageresources\expandafter{\temp}
}
}
\pgf@sys@pdf@install@pageresources
\expandafter\pgfutil@everybye\expandafter{%
\the\pgfutil@everybye%
\immediate \pdfextension obj useobjnum \pgf@sys@pdf@extgs@objnum {<<\pgf@sys@pgf@resource@list@extgs>>}%<<
\immediate \pdfextension obj useobjnum \pgf@sys@pdf@pattern@objnum {<<\pgf@sys@pgf@resource@list@patterns>>}%<<
\immediate \pdfextension obj useobjnum \pgf@sys@pdf@colrospaces@objnum {<<\pgf@sys@pgf@resource@list@colorspaces>>}%<<
}
\let\pgf@sys@pgf@resource@list@extgs=\pgfutil@empty%
\let\pgf@sys@pgf@resource@list@patterns=\pgfutil@empty%
\let\pgf@sys@pgf@resource@list@colorspaces=\pgfutil@empty%
\def\pgf@sys@addpdfresource@extgs@plain##1{\xdef\pgf@sys@pgf@resource@list@extgs{\pgf@sys@pgf@resource@list@extgs\space##1}}
\def\pgf@sys@addpdfresource@patterns@plain##1{\xdef\pgf@sys@pgf@resource@list@patterns{\pgf@sys@pgf@resource@list@patterns\space##1}}
\def\pgf@sys@addpdfresource@colorspaces@plain##1{\xdef\pgf@sys@pgf@resource@list@colorspaces{\pgf@sys@pgf@resource@list@colorspaces\space##1}}
}
\pgfutil@setuppdfresources % possibly call the above
\pgfutil@addpdfresource@colorspaces{ /pgfprgb [/Pattern /DeviceRGB] }
\def\pgfsys@color@unstacked#1{%
\pdfextension literal{\csname\string\color@#1\endcsname}%
}
\endinput
%%% Local Variables:
%%% mode: latex
%%% End:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment