diff options
Diffstat (limited to 'graphics/pgf/base/tex/generic/utilities/pgfutil-context.def')
-rw-r--r-- | graphics/pgf/base/tex/generic/utilities/pgfutil-context.def | 373 |
1 files changed, 373 insertions, 0 deletions
diff --git a/graphics/pgf/base/tex/generic/utilities/pgfutil-context.def b/graphics/pgf/base/tex/generic/utilities/pgfutil-context.def new file mode 100644 index 0000000000..eddab09aba --- /dev/null +++ b/graphics/pgf/base/tex/generic/utilities/pgfutil-context.def @@ -0,0 +1,373 @@ +% Copyright 2019 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. +% +% Adapted for colors and pdf resources by Hans Hagen. There can be a few more +% optimizations but they are not critital. + +\pgfutil@format@is@contexttrue + + +% The aux files, needed for reading back coordinates +\def\pgfutil@aux@read@hook{% + \pgfutil@IfFileExists{\jobname.pgf}{\input \jobname.pgf\relax}{} + \csname newwrite\endcsname\pgfutil@auxout + \immediate\csname openout\endcsname\pgfutil@auxout\jobname.pgf\relax +} +\def\pgfutil@writetoaux#1{\write\pgfutil@auxout{#1}} + +% XColor-like support for ConTeXt + +\def\pgfutil@definecolor#1#2#3{\csname pgfutil@emu@#2\endcsname{#1}#3\@nil} + +\def\pgfutil@emu@rgb#1#2,#3,#4\@nil{\expandafter\def\csname\string\color@#1\endcsname{\xcolor@{}{}{rgb}{#2,#3,#4}}} +\def\pgfutil@emu@gray#1#2\@nil{\expandafter\def\csname\string\color@#1\endcsname{\xcolor@{}{}{rgb}{#2,#2,#2}}} +\def\pgfutil@emu@cmyk#1#2,#3,#4,#5\@nil{\expandafter\def\csname\string\color@#1\endcsname{\xcolor@{}{}{cmyk}{#2,#3,#4,#5}}} + + +% no need for x colors (users can load it if needed) +%\pgfutil@definecolor{white}{gray}{1} +%\pgfutil@definecolor{black}{gray}{0} +%\pgfutil@definecolor{gray}{gray}{0.5} +%\pgfutil@definecolor{red}{rgb}{1,0,0} +%\pgfutil@definecolor{green}{rgb}{0,1,0} +%\pgfutil@definecolor{blue}{rgb}{0,0,1} +%\pgfutil@definecolor{cyan}{rgb}{0,1,1} +%\pgfutil@definecolor{magenta}{rgb}{1,0,1} +%\pgfutil@definecolor{yellow}{rgb}{1,1,0} +%\pgfutil@definecolor{orange}{rgb}{1,0.5,0} +%\pgfutil@definecolor{violet}{rgb}{0.5,0,0.5} +%\pgfutil@definecolor{purple}{rgb}{0.75,0,0.25} +%\pgfutil@definecolor{brown}{rgb}{0.75,0.5,0.25} + +\def\pgfutil@color#1{% + \pgfutil@colorlet{.}{#1}% + \pgfsysprotocol@getcurrentprotocol\pgfutil@emu@temp% + {% + \pgfsysprotocol@setcurrentprotocol\pgfutil@empty% + \pgfsysprotocol@bufferedtrue% + \pgfsetcolor{.}% + \expandafter\pgfsys@outerinvoke\expandafter{\pgfsysprotocol@currentprotocol}% + }% + \pgfsysprotocol@setcurrentprotocol\pgfutil@emu@temp% + \aftergroup\pgfutil@reset@color% +} + +\def\pgfutil@extractcolorspec#1#2{% + \def#2{{#1}}% +} + +\def\pgfutil@convertcolorspec#1#2#3{% + \edef#3{\expandafter\expandafter\expandafter\pgfutil@emu@select\csname\string\color@#1\endcsname}% +} + +\def\pgfutil@doifcolorelse#1#2#3{% + \expandafter\ifx\csname\string\color@#1\endcsname\relax% + \doifcolorelse{#1}{\let\pgf@next=\pgfutil@firstoftwo}{\let\pgf@next=\pgfutil@secondoftwo}% + \else + \let\pgf@next=\pgfutil@firstoftwo% + \fi% + \pgf@next{#2}{#3}% +} + +\def\pgfutil@reset@color{% + \pgfsysprotocol@getcurrentprotocol\pgfutil@emu@temp% + {% + \pgfsysprotocol@setcurrentprotocol\pgfutil@empty% + \pgfsysprotocol@bufferedtrue% + \pgfsetcolor{.}% + \expandafter\pgfsys@outerinvoke\expandafter{\pgfsysprotocol@currentprotocol}% + }% + \pgfsysprotocol@setcurrentprotocol\pgfutil@emu@temp% +} + +\expandafter\def\csname\string\color@.\endcsname{\xcolor@{}{}{rgb}{0,0,0}} + +\def\pgfutil@colorlet#1#2{% + \edef\pgf@marshal{#2}% + \expandafter\pgfutil@in@\expandafter!\expandafter{\pgf@marshal}% + \ifpgfutil@in@% + % compute mixture + {% + \expandafter\pgfutil@emu@mix\pgf@marshal!white!\@nil% + \xdef\pgf@marshal{\noexpand\def\expandafter\noexpand\csname\string\color@#1\endcsname{% + \noexpand\xcolor@{}{}{rgb}{\pgf@sys@tonumber\pgf@xa,\pgf@sys@tonumber\pgf@xb,\pgf@sys@tonumber\pgf@xc}}}% + }% + \pgf@marshal% + \else% + \expandafter\ifx\csname\string\color@#2\endcsname\relax% + \pgfutil@registercolor{#2}% + \fi% + \edef\pgf@marshal{\noexpand\let\expandafter\noexpand\csname\string\color@#1\endcsname=% + \expandafter\noexpand\csname\string\color@#2\endcsname}% + \pgf@marshal% + \fi% +} + +\def\pgfutil@emu@mix#1!#2!#3!#4\@nil{% + \expandafter\ifx\csname\string\color@#1\endcsname\relax% + \pgfutil@registerrgb{#1}% + \fi% + \expandafter\ifx\csname\string\color@#3\endcsname\relax% + \pgfutil@registerrgb{#3}% + \fi% + \expandafter\expandafter\expandafter\pgfutil@emu@unpack\csname\string\color@#1\endcsname% + \pgf@ya=\pgf@xa% + \pgf@yb=\pgf@xb% + \pgf@yc=\pgf@xc% + \expandafter\expandafter\expandafter\pgfutil@emu@unpack\csname\string\color@#3\endcsname% + \c@pgf@counta=#2\relax% + \c@pgf@countb=100\relax% + \advance\c@pgf@countb by-\c@pgf@counta\relax% + \pgf@xa=\c@pgf@countb\pgf@xa% + \advance\pgf@xa by\c@pgf@counta\pgf@ya% + \divide\pgf@xa by 100\relax% + \pgf@xb=\c@pgf@countb\pgf@xb% + \advance\pgf@xb by\c@pgf@counta\pgf@yb% + \divide\pgf@xb by 100\relax% + \pgf@xc=\c@pgf@countb\pgf@xc% + \advance\pgf@xc by\c@pgf@counta\pgf@yc% + \divide\pgf@xc by 100\relax% +} + +\def\pgfutil@emu@unpack#1#2#3#4#5{% + \pgfutil@emu@@unpack#5\@nil% +} + +\def\pgfutil@emu@@unpack#1,#2,#3\@nil{% + \pgf@xa=#1pt% + \pgf@xb=#2pt% + \pgf@xc=#3pt% +} + +\def\pgfutil@emu@select#1#2#3#4#5{#5} + +\def\XC@tgt@mod#1{#1} +\def\XC@sdef#1#2{\edef#1{#2}} +\def\XC@mod@cmyk{cmyk} +\def\XC@mod@rgb{rgb} + +% goody + +\let\colorlet=\pgfutil@colorlet + +% latex stuff + +\newskip\pgfutil@flushglue +\pgfutil@flushglue=0pt plus 1fil + + +% pgfutil@minipage + +\def\pgfutil@minipage[#1]#2{% + \hbox to#2\bgroup + \hsize=#2\relax + \vbox\bgroup + \noindentation +} + +\def\pgfutil@endminipage{% + \egroup + \egroup +} + +% global colors + +\let\pgfutil@globalcolorsfalse\relax +\let\pgfutil@globalcolorstrue \relax + +% font stuff + +\def\pgfutil@font@tiny {\tfxx} +\def\pgfutil@font@scriptsize {\tfxx} +\def\pgfutil@font@footnotesize{\tfx} +\def\pgfutil@font@small {\tfx} +\def\pgfutil@font@normalsize {\tf} +\def\pgfutil@font@large {\tfa} +\def\pgfutil@font@Large {\tfb} +\def\pgfutil@font@huge {\tfc} +\def\pgfutil@font@Huge {\tfc} +\def\pgfutil@font@itshape {\it} +\def\pgfutil@font@bfseries {\bf} +\def\pgfutil@font@normalfont {\tf} +\def\pgfutil@selectfont {\tf} + +% registers + +\newcount\pgfutil@tempcnta +\newcount\pgfutil@tempcntb + +\newbox \pgfutil@tempboxa + +\newbox \pgfutil@voidb@x +\newtoks \pgfutil@toks@ + +\let\pgfmath@tempdima\pgfutil@tempdima +\let\pgfmath@tempdima\pgfutil@tempdima +\let\pgfmath@tempcnta\pgfutil@tempcnta +\let\pgfmath@tempcntb\pgfutil@tempcntb + +% module stuff + +\def\pgfutil@usemodule#1{\usemodule[#1]} + +% more adaptions + +\let\pgfutil@insertatbegincurrentpagefrombox\flushatshipout +\let\pgfutil@insertatbegincurrentpage \flushatshipout +\def\pgfutil@insertatbegineverypage #1{\appendtoks#1\to\everyshipout} % space removed after #1 + +\let\pgfutil@setuppdfresources \relax + +\doifmodeelse {mkiv} { + + \def\pgfutil@guessdriver{\def\pgfsysdriver{pgfsys-luatex.def}} + + \def\pgfutil@driver@if@in#1#2{% + \edef\pgf@marshal{\noexpand\pgfutil@in@{#1}{\preloadedspecials}}% + \pgf@marshal + \ifpgfutil@in@ + \def\pgfsysdriver{#2}% + \fi + } + + \def\pgf@sys@pdf@pdfbackendset@one#1#2% + {\normalexpanded{\noexpand\pgf@sys@pdf@pdfbackendset@two\noexpand#1#2\relax}} + + \def\pgf@sys@pdf@pdfbackendset@two#1/#2 #3\relax + {#1{#2}{#3}} + + \def\pgf@sys@pdf@addtopageresource@pattern {\pgf@sys@pdf@pdfbackendset@one\pdfbackendsetpattern} + \def\pgf@sys@pdf@addtopageresource@colorspace{\pgf@sys@pdf@pdfbackendset@one\pdfbackendsetcolorspace} + \def\pgf@sys@pdf@addtopageresource@extgstate {\pgf@sys@pdf@pdfbackendset@one\pdfbackendsetextgstate} + \def\pgf@sys@pdf@possible@resources {\pdfbackendcurrentresources} + \def\pgf@sys@pdf@check@resources {} + + \let\pgfutil@registercolor\pgf@context@registercolor + \let\pgfutil@registerrgb \pgf@context@registerrgb + \let\pgfutil@registercmyk \pgf@context@registercmyk + \let\pgfutil@registergray \pgf@context@registergray + +} { + \def\pgf@sys@pdf@addtopageresource@extgstate {\appendtoPDFdocumentextgstates } + \def\pgf@sys@pdf@addtopageresource@colorspace {\appendtoPDFdocumentcolorspaces} + \def\pgf@sys@pdf@addtopageresource@pattern {\appendtoPDFdocumentpatterns } + \def\pgf@sys@pdf@possible@resources {\currentPDFresources} + \def\pgf@sys@pdf@check@resources {} + + + \ifx\pdfoutput\undefined\newcount\pdfoutput\fi + \ifx\pdfoutput\relax \newcount\pdfoutput\fi + + \def\pgfutil@guessdriver{ + \ifx\XeTeXversion\@undefined + \ifx\preloadedspecials\@undefined% + \ifcase\pdfoutput% + \def\pgfsysdriver{pgfsys-dvips.def}% + \else% + \def\pgfsysdriver{pgfsys-pdftex.def}% pdfTeX & LuaTeX + \fi% + \else% + \pgfutil@driver@if@in{postscript}{pgfsys-dvips.def} + \pgfutil@driver@if@in{tpd}{pgfsys-pdftex.def} + \pgfutil@driver@if@in{dpm}{pgfsys-dvipdfm.def} + \pgfutil@driver@if@in{dpx}{pgfsys-dvipdfmx.def} + \pgfutil@driver@if@in{xetex}{pgfsys-xetex.def} + \ifx\pgfsysdriver\relax% + \PackageWarning{pgf}{I was not able to discern the driver, the + preloaded specials were \preloadedspecials. I am going to use + pgfsys-dvips.def}% + \def\pgfsysdriver{pgfsys-dvips.def} + \fi% + \fi + \else + \def\pgfsysdriver{pgfsys-xetex.def}% should be right + \fi + } + + \def\pgfutil@driver@if@in#1#2{% + \edef\pgf@marshal{\noexpand\pgfutil@in@{#1}{\preloadedspecials}}% + \pgf@marshal + \ifpgfutil@in@ + \def\pgfsysdriver{#2}% + \fi + } + + % The cmyk part is from Joseph Wright. + % See tex.stackexchange.com/questions/27952/cmyk-context-colors-in-tikz + \def\pgfutil@registercolor#1{% + \edef\pgf@temp{\PDFcolor{#1}}% + \edef\pgf@marshal{\noexpand\pgfutil@in@{rg}{\pgf@temp}}% + \pgf@marshal + \ifpgfutil@in@ + \expandafter\pgfutil@context@parse@rgb\pgf@temp\pgf@stop{#1}% + \else + \edef\pgf@marshal{\noexpand\pgfutil@in@{g}{\pgf@temp}}% + \pgf@marshal + \ifpgfutil@in@ + \expandafter\pgfutil@context@parse@gray\pgf@temp\pgf@stop{#1}% + \else + \edef\pgf@marshal{\noexpand\pgfutil@in@{k}{\pgf@temp}}% + \pgf@marshal + \ifpgfutil@in@ + \expandafter\pgfutil@context@parse@cmyk\pgf@temp\pgf@stop{#1}% + \else + \pgferror{Color #1 has an unsupported color model.}% + \pgfutil@definecolor{#1}{gray}{0}% + \fi + \fi + \fi + } + + \def\pgfutil@context@parse@gray#1 g#2\pgf@stop#3{% + \pgfutil@definecolor{#3}{gray}{#1} + } + + \def\pgfutil@context@parse@rgb#1 #2 #3 rg#4\pgf@stop#5{% + \pgfutil@definecolor{#5}{rgb}{#1,#2,#3} + } + + \def\pgfutil@context@parse@cmyk#1 #2 #3 #4k#5\pgf@stop #6{% + \pgfutil@definecolor{#6}{cmyk}{#1,#2,#3,#4}% + } + + \def\pgfutil@emu@cmyk#1#2,#3,#4,#5\@nil{% + \expandafter\def\csname\string\color@#1\endcsname + {\xcolor@{}{}{cmyk}{#2,#3,#4,#5}}% + } + + \let\pgfutil@registerrgb \pgfutil@registercolor + \let\pgfutil@registercmyk \pgfutil@registercolor + \let\pgfutil@registergray \pgfutil@registercolor + + +} + +\let\pgf@sys@addpdfresource@extgs@plain \pgf@sys@pdf@addtopageresource@extgstate +\let\pgf@sys@addpdfresource@patterns@plain \pgf@sys@pdf@addtopageresource@pattern +\let\pgf@sys@addpdfresource@colorspaces@plain\pgf@sys@pdf@addtopageresource@colorspace +\let\pgf@sys@pdf@check@resources@plain \pgf@sys@pdf@check@resources + +\pgf@sys@addpdfresource@colorspaces@plain{/pgfprgb [/Pattern /DeviceRGB]} + +% do something at the end of a job + +\appendtoks \the\pgfutil@everybye \to \everybye + +\long\def\AtBeginDocument#1{\appendtoks#1\to\everystarttext}% + +% pgfcalendar uses translations + +\def\pgfutil@translate#1{#1} % \translate works very different in ConTeXt + +% e-TeX primitives + +\let\pgfutil@protected\normalprotected +\let\pgfutil@unexpanded\normalunexpanded + +\endinput |