Created
April 1, 2017 04:23
-
-
Save Michael0x2a/d94c00a315076c589dbc8b838f365814 to your computer and use it in GitHub Desktop.
pgfsys-luatex.def
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 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