summaryrefslogtreecommitdiff
path: root/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex')
-rw-r--r--graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex472
1 files changed, 472 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex b/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex
new file mode 100644
index 0000000000..53b2345838
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-fill/tex/pst-fill.tex
@@ -0,0 +1,472 @@
+%%
+%% This is Package `pst-fill'
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% Herbert Voss <hvoss@tug.org>
+%% (C) 2003-2021
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-fill' is a PSTricks package for filling and tiling areas
+%%
+%% \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5,
+%% addfillstyle=boxfill](2,2){2}
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi
+\def\fileversion{1.02}
+\def\filedate{2021/10/01}
+\message{`PST-Fill' v\fileversion, \filedate\space (tvz,dg,hv)}
+\csname PSTboxfillLoaded\endcsname
+\let\PSTboxfillLoaded\endinput
+\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax
+
+\pst@addfams{pst-fill}
+\def\pst@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{%
+ \begingroup
+ \ifx\@empty#7\relax
+ \pst@dima\z@
+ \pst@dimb\z@
+ \pssetxlength\pst@dimc{#2}%
+ \pssetylength\pst@dimd{#3}%
+ \else
+ \pssetxlength\pst@dima{#2}%
+ \pssetylength\pst@dimb{#3}%
+ \pssetxlength\pst@dimc{#5}%
+ \pssetylength\pst@dimd{#6}%
+ \fi
+ \xdef\pst@tempg{%
+ \pst@dima=\number\pst@dima sp
+ \pst@dimb=\number\pst@dimb sp
+ \pst@dimc=\number\pst@dimc sp
+ \pst@dimd=\number\pst@dimd sp }%
+ \endgroup
+ \let\psk@boxfillsize\pst@tempg}
+
+\define@key[psset]{pst-fill}{boxfillsize}{%
+ \def\pst@tempg{#1}\def\pst@temph{auto}%
+ \ifx\pst@tempg\pst@temph
+ \let\psk@boxfillsize\relax
+ \else
+ \pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil
+ \fi}
+\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}}
+\define@key[psset]{pst-fill}{boxfillcolor}{\pst@getcolor{#1}\psboxfillcolor}
+\psset{boxfillcolor=black}% hv
+\define@key[psset]{pst-fill}{boxfillangle}{\pst@getangle{#1}\psk@boxfillangle}
+\psset{boxfillangle=0}
+\define@key[psset]{pst-fill}{fillsepx}{\pst@getlength{#1}\psk@fillsepx}
+\define@key[psset]{pst-fill}{fillsepy}{\pst@getlength{#1}\psk@fillsepy}
+\define@key[psset]{pst-fill}{fillsep}{%
+ \pst@getlength{#1}\psk@fillsepx%
+ \let\psk@fillsepy\psk@fillsepx}
+\psset{fillsep=2pt}
+
+\ifx\PstTiling\@undefined
+ \define@key[psset]{pst-fill}{fillcycle}{\pst@getint{#1}\psk@fillcycle}
+ \psset{fillcycle=0}
+\else
+ \define@key[psset]{pst-fill}{fillangle}{\pst@getangle{#1}\psk@boxfillangle}
+ \define@key[psset]{pst-fill}{fillsize}{%
+ \def\pst@tempg{#1}\def\pst@temph{auto}%
+ \ifx\pst@tempg\pst@temph\let\psk@boxfillsize\relax
+ \else\pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil\fi}
+ \psset{fillsep=0,fillsize=auto}
+ \define@key[psset]{pst-fill}{fillcyclex}{\pst@getint{#1}\psk@fillcyclex}
+ \define@key[psset]{pst-fill}{fillcycley}{\pst@getint{#1}\psk@fillcycley}
+ \define@key[psset]{pst-fill}{fillcycle}{%
+ \pst@getint{#1}\psk@fillcyclex\let\psk@fillcycley\psk@fillcyclex}
+ \psset{fillcycle=0}
+ \define@key[psset]{pst-fill}{fillmovex}{\pst@getlength{#1}\psk@fillmovex}
+ \define@key[psset]{pst-fill}{fillmovey}{\pst@getlength{#1}\psk@fillmovey}
+ \define@key[psset]{pst-fill}{fillmove}{%
+ \pst@getlength{#1}\psk@fillmovex\let\psk@fillmovey\psk@fillmovex}
+ \psset{fillmove=0pt}
+ \define@key[psset]{pst-fill}{fillloopaddx}{\pst@getint{#1}\psk@fillloopaddx}
+ \define@key[psset]{pst-fill}{fillloopaddy}{\pst@getint{#1}\psk@fillloopaddy}
+ \define@key[psset]{pst-fill}{fillloopadd}{%
+ \pst@getint{#1}\psk@fillloopaddx\let\psk@fillloopaddy\psk@fillloopaddx}
+ \psset{fillloopadd=0}
+%% \define@key[psset]{pst-fill}{PstDebug}{\pst@getint{#1}\psk@PstDebug}
+ \psset{PstDebug=0}
+\fi
+
+\def\pstFillSetDefaults{%
+ \psset{%
+ boxfillsize={(-15cm,-15cm)(15cm,15cm)},
+ boxfillcolor=black,
+ boxfillangle=0,
+ fillsep=2pt,
+ fillsep=0,fillsize=auto,
+ fillcycle=0,
+ fillmove=0pt,
+ fillloopadd=0,
+ PstDebug=0}%
+}
+
+
+\def\txfillDict{ fill@Dict begin }
+
+\newbox\pst@fillbox
+\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i}
+\def\psboxfill@i{\null\setbox\pst@fillbox\box\pst@hbox\ignorespaces}% \null to prevent empty page
+\def\psfs@boxfill{%
+ \ifvoid\pst@fillbox
+ \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa
+ \else
+ \ifx\psk@boxfillsize\relax \pst@AutoBoxFill
+ \else\pst@ManualBoxFill\fi
+ \fi}
+
+\def\pst@ManualBoxFill{%
+ \leavevmode
+ \begingroup
+ \pst@FlushCode
+ \begin@psclip
+ \pstVerb{clip}%
+ \expandafter\pst@AddFillBox\psk@boxfillsize
+ \end@psclip
+ \endgroup}
+
+\def\pst@FlushCode{%
+ \pst@Verb{%
+ /mtrxc CM def
+ CP CP T
+ \tx@STV
+ \psk@origin
+ \psk@swapaxes
+ \pst@newpath
+ \pst@code
+ mtrxc setmatrix
+ moveto
+ 0 setgray}%
+ \gdef\pst@code{}}
+
+\def\pst@AddFillBox#1 #2 #3 #4 {%
+ \begingroup
+ \setbox\pst@fillbox=\vbox{%
+ \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}%
+ \vskip\psk@fillsepy\p@}%
+ \psk@boxfillsize
+ \pst@cnta=\pst@dimc
+ \advance\pst@cnta-\pst@dima
+ \divide\pst@cnta\wd\pst@fillbox
+ \pst@cntb=\pst@dimd
+ \advance\pst@cntb-\pst@dimb
+ \pst@dimd=\ht\pst@fillbox
+ \divide\pst@cntb\pst@dimd
+ \def\pst@@tempA{%
+ \pst@tempg
+ \copy\pst@fillbox
+ \advance\pst@cntc\@ne
+ \ifnum\pst@cntc<\pst@cntd\expandafter\pst@@tempA\fi}%
+ \let\pst@tempg\relax
+ \pst@cntc-\tw@
+ \pst@cntd\pst@cnta
+ \setbox\pst@fillbox=\hbox to \z@{%
+ \kern\pst@dima
+ \kern-\wd\pst@fillbox
+ \pst@@tempA
+ \hss}%
+ \pst@cntd\pst@cntb
+%% DG modification begin - Dec. 11, 1997 - Patch 2
+ \ifx\PstTiling\@undefined
+ \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi
+ \else
+ \ifnum\psk@fillcyclex=\z@\pst@ManualFillCycle\fi
+ \fi
+%% DG modification end
+ \global\setbox\pst@boxg=\vbox to\z@{%
+ \offinterlineskip
+ \vss
+ \pst@@tempA
+ \vskip\pst@dimb}%
+ \endgroup
+ \setbox\pst@fillbox\box\pst@boxg
+ \pst@rotate\psk@boxfillangle\pst@fillbox
+ \box\pst@fillbox}
+
+\def\pst@ManualFillCycle{%
+ \ifx\PstTiling\@undefined
+ \pst@cntg=\psk@fillcycle
+ \else
+ \pst@cntg=\psk@fillcyclex
+ \fi
+ \pst@dimg=\wd\pst@fillbox
+ \ifnum\pst@cntg=\z@
+ \else
+ \divide\pst@dimg\pst@cntg
+ \fi
+ \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi
+ \advance\pst@cntg\m@ne
+ \pst@cnth=\pst@cntg
+ \def\pst@tempg{%
+ \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi
+ \moveright\pst@cnth\pst@dimg}}
+
+\ifx\PstTiling\@undefined
+ \pst@def{AutoFillCycle}<%
+ fill@Dict begin
+ /c ED
+ /n 0 def
+ /s {
+ /x x w c div n mul add def
+ /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def
+ } def
+ end
+ >
+\pst@def{BoxFill}<%
+ fill@Dict begin
+ gsave
+ gsave \tx@STV CM grestore dtransform CM idtransform
+ abs /h ED abs /w ED
+ pathbbox
+ h div round 2 add cvi /y2 ED
+ w div round 2 add cvi /x2 ED
+ h div round 2 sub cvi /y1 ED
+ w div round 2 sub cvi /x1 ED
+ /y2 y2 y1 sub def
+ /x2 x2 x1 sub def
+ CP
+ y1 h mul sub neg /y1 ED
+ x1 w mul sub neg /x1 ED
+ clip
+ y2 {
+ /x x1 def
+ s
+ x2 {
+ save CP x y1
+ \ifx\VTeXversion\undefined
+ \else
+ neg
+ \fi
+ T moveto Box restore
+ /x x w add def
+ } repeat
+ /y1 y1 h add def
+ } repeat
+ % Next line not useful... To see that, suppress clipping (DG)
+ CP x y1 T moveto Box
+ end
+ currentpoint currentfont grestore setfont moveto
+ >
+\else% Tiling is defined -----------------------------------
+ \pst@def{AutoFillCycleX}<
+% fill@Dict begin
+ /cX ED
+ /nX 0 def
+ /CycleX {
+ /x x w cX div nX mul add def
+ /nX nX cX abs 1 sub lt { nX 1 add } { 0 } ifelse def
+ } def
+% end
+ >
+ \pst@def{AutoFillCycleY}<%
+% fill@Dict begin
+ /cY ED
+ /mY 0 def
+ /nY 0 def
+ /CycleY {
+ /y1 y1 h cY div mY mul sub def
+ nY cY abs 1 sub lt { /nY nY 1 add def /mY 1 def }
+ { /nY 0 def /mY cY abs 1 sub neg def } ifelse
+ } def
+% end
+ >
+ \pst@def{BoxFill}<
+ \ifPSTlualatex
+ /save /gsave load def
+ /restore /grestore load def
+ fill@Dict begin
+ \fi
+ gsave
+ gsave \tx@STV CM grestore dtransform CM idtransform
+ abs /h ED abs /w ED
+ pathbbox
+ \ifPSTlualatex
+ h div 2 add cvi /y2 ED
+ w div 2 add cvi /x2 ED
+ h div 2 sub cvi /y1 ED
+ w div 2 sub cvi /x1 ED
+ \else
+ h div round 2 add cvi /y2 ED
+ w div round 2 add cvi /x2 ED
+ h div round 2 sub cvi /y1 ED
+ w div round 2 sub cvi /x1 ED
+ \fi
+ /CoefLoopX 0 def
+ /CoefLoopY 0 def
+ /CoefMoveX 0 def
+ /CoefMoveY 0 def
+ \psk@boxfillangle\space 0 ne {/CoefLoopX 8 def /CoefLoopY 8 def} if
+ \psk@fillcyclex\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if
+ \psk@fillcycley\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if
+ \psk@fillmovex\space 0 ne
+ {/CoefLoopX CoefLoopX 2 add def
+ \psk@fillmovex\space 0 gt {/CoefMoveX CoefLoopX def}
+ {/CoefMoveX CoefLoopX neg def} ifelse} if
+ \psk@fillmovey\space 0 ne
+ {/CoefLoopY CoefLoopY 2 add def
+ \psk@fillmovey\space 0 gt {/CoefMoveY CoefLoopY def}
+ {/CoefMoveY CoefLoopY neg def} ifelse} if
+ \psk@fillsepx\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if
+ \psk@fillsepy\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if
+ /CoefLoopX CoefLoopX \psk@fillloopaddx\space add def
+ /CoefLoopY CoefLoopY \psk@fillloopaddy\space add def
+ /x2 x2 x1 sub 4 sub CoefLoopX 2 mul add def
+ /y2 y2 y1 sub 4 sub CoefLoopY 2 mul add def
+ %% We must fix the origin of tiling, as it must not vary according other stuff in the page!
+ w x1 CoefLoopX add CoefMoveX add mul
+ h y1 y2 add 1 sub CoefLoopY sub CoefMoveY sub mul moveto
+ CP
+ y1 h mul sub neg /y1 ED
+ x1 w mul sub neg /x1 ED
+ \Pst@Debug 0 eq {clip} if
+ \psk@fillmovex\space \psk@fillmovey
+ gsave \tx@STV CM grestore
+ dtransform CM idtransform
+ /hmove ED /wmove ED
+ /row 0 def
+ y2 {
+ /row row 1 add def
+ /column 0 def
+ /x x1 def
+ CycleX
+ save
+ x2 {
+ /column column 1 add def
+ CycleY
+ save CP x y1
+ \ifPSTlualatex neg \fi
+ T moveto Box restore
+ /x x w add def
+ 0 hmove translate
+ } repeat
+ restore
+ /y1 y1 h add def
+ wmove 0 translate
+ } repeat
+ currentpoint
+ currentfont
+ grestore
+ setfont
+ moveto
+ \ifPSTlualatex end \fi
+ >
+\fi % edn of tiling=true
+
+\ifPSTlualatex
+ \def\pst@AutoBoxFill{%
+ \leavevmode
+ \begingroup
+ \pst@stroke
+ \pst@FlushCode
+ \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}%
+ \pstVerb{
+ \pst@dict /Box [ /gsave cvx currentpoint /translate cvx \luaPSTbox\hbox{%
+ \ifx\PstTiling\@undefined
+ \else
+ \ifx\pst@tempa\@undefined % Undefined for instance for \pscharpath
+ \else\ifx\pst@tempa\@empty\else
+ \def\pst@temph{0}%
+ \ifx\pst@tempa\pst@temph
+ \else
+ \fi
+ \fi\fi
+ \fi
+ \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}%
+ } /.TeXBox findresource /grestore cvx ] cvx def
+ \ifx\PstTiling\@undefined
+ \ifnum\psk@fillcycle=\z@
+ /s {} def
+ \else
+ \psk@fillcycle \tx@AutoFillCycle
+ \fi
+ \else
+ \ifnum\psk@fillcyclex=\z@
+ /CycleX {} def
+ \else
+ \psk@fillcyclex\space \tx@AutoFillCycleX
+ \fi
+ \ifnum\psk@fillcycley=\z@
+ /CycleY {} def
+ \else
+ \psk@fillcycley\space \tx@AutoFillCycleY
+ \fi
+ \fi
+ \pst@number{\wd\pst@fillbox}%
+ \psk@fillsepx\space add
+ \pst@number{\ht\pst@fillbox}%
+ \pst@number{\dp\pst@fillbox}%
+ \psk@fillsepy\space add add
+ \tx@BoxFill
+ end
+ }%
+ \pst@Verb{\tx@RotEnd}%
+ \endgroup}
+\else%%%%%%%%%%%%%%% latex->dvips definition
+ \def\pst@AutoBoxFill{%
+ \leavevmode
+ \begingroup
+ \pst@stroke
+ \pst@FlushCode
+ \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}%
+ \pstVerb{\pst@dict /Box \pslbrace end}%
+ \ifx\PstTiling\@undefined
+ \else
+ \ifx\pst@@tempA\@undefined % Undefined for instance for \pscharpath
+ \else\ifx\pst@@tempA\@empty\else
+ \def\pst@temph{0}%
+ \ifx\pst@@tempA\pst@temph
+ \else
+ \pstVerb{/TR {pop pop currentpoint translate \pst@@tempA\space translate } def}%
+ \fi
+ \fi\fi
+ \fi
+ \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}%
+ \ifx\PstTiling\@undefined
+ \pstVerb{%
+ tx@Dict begin \psrbrace def
+ \ifnum\psk@fillcycle=\z@
+ /s {} def
+ \else
+ \psk@fillcycle \tx@AutoFillCycle
+ \fi
+ \pst@number{\wd\pst@fillbox}%
+ \psk@fillsepx\space add
+ \pst@number{\ht\pst@fillbox}%
+ \pst@number{\dp\pst@fillbox}%
+ \psk@fillsepy\space add add
+ \tx@BoxFill
+ end}%
+ \else
+ \pstVerb{%
+ tx@Dict begin \psrbrace def
+ \ifnum\psk@fillcyclex=\z@
+ /CycleX {} def
+ \else
+ \psk@fillcyclex\space \tx@AutoFillCycleX
+ \fi
+ \ifnum\psk@fillcycley=\z@
+ /CycleY {} def
+ \else
+ \psk@fillcycley\space \tx@AutoFillCycleY
+ \fi
+ \pst@number{\wd\pst@fillbox}%
+ \psk@fillsepx\space add
+ \pst@number{\ht\pst@fillbox}%
+ \pst@number{\dp\pst@fillbox}%
+ \psk@fillsepy\space add add
+ \tx@BoxFill
+ end}%
+ \fi
+ \pst@Verb{\tx@RotEnd}%
+ \endgroup}
+\fi
+%
+\catcode`\@=\PstAtCode\relax
+\endinput
+%%
+%% End of file `pst-fill.tex'.