Current File : //usr/share/texlive/texmf-dist/tex/generic/pgf/libraries/shapes/pgflibraryshapes.multipart.code.tex |
% Copyright 2018 by Till Tantau and Mark Wibrow
%
% 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{pgflibraryshapes.multipart.code.tex}
\newbox\pgfnodepartlowerbox
%
% A circle that is split in the middle into an upper and a lower part.
%
% This node consists of two parts: The upper (main) part is shown in
% the upper half of the circle. The second part is the (optional)
% lower part.
%
% Parts: text, lower
\pgfdeclareshape{circle split}
{%
%
% Node parts
%
\nodeparts{text,lower}%
%
% Anchors
%
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/inner ysep}}%
\pgf@y=-\pgf@y%
\advance\pgf@y by-\dp\pgfnodeparttextbox%
\advance\pgf@y by-.5\pgflinewidth%
}%
\savedanchor\loweranchor{%
\pgf@x=-.5\wd\pgfnodepartlowerbox%
\advance\pgf@x by.5\wd\pgfnodeparttextbox%
\pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/inner ysep}}%
\pgf@y=-2\pgf@y%
\advance\pgf@y by-\ht\pgfnodepartlowerbox%
\advance\pgf@y by-.5\pgflinewidth%
\advance\pgf@y by-\dp\pgfnodeparttextbox%
\advance\pgf@y by-.5\pgflinewidth%
}%
\saveddimen\radius{%
%
% Calculate ``height radius''
%
%\pgf@ya=.5\ht\pgfnodeparttextbox%
% \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
% \advance\pgf@ya by.5\ht\pgfnodepartlowerbox%
% \advance\pgf@ya by.5\dp\pgfnodepartlowerbox%
% \advance\pgf@ya by.5\pgflinewidth%
%
% MW: Suggested correction for above calculation: Use the tallest box * 2.
%
\pgf@ya=.5\ht\pgfnodeparttextbox%
\advance\pgf@ya by.5\dp\pgfnodeparttextbox%
\pgf@yb=.5\ht\pgfnodepartlowerbox%
\advance\pgf@yb by.5\dp\pgfnodepartlowerbox%
\ifdim\pgf@ya>\pgf@yb\relax%
\pgf@ya2.0\pgf@ya\relax%
\else%
\pgf@ya2.0\pgf@yb\relax%
\fi%
\advance\pgf@ya by.5\pgflinewidth%
\pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@ya by2\pgf@yb%
%
% Calculate ``width radius''
%
\pgf@xa=.5\wd\pgfnodeparttextbox%
\ifdim\pgf@xa<.5\wd\pgfnodepartlowerbox%
\pgf@xa=.5\wd\pgfnodepartlowerbox%
\fi%
\pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@xa by\pgf@xb%
%
% Calculate length of radius vector:
%
\pgf@process{\pgfpointnormalised{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
\ifdim\pgf@x>\pgf@y%
\c@pgf@counta=\pgf@x%
\ifnum\c@pgf@counta=0\relax%
\else%
\divide\c@pgf@counta by 255\relax%
\pgf@xa=16\pgf@xa\relax%
\divide\pgf@xa by\c@pgf@counta%
\pgf@xa=16\pgf@xa\relax%
\fi%
\else%
\c@pgf@counta=\pgf@y%
\ifnum\c@pgf@counta=0\relax%
\else%
\divide\c@pgf@counta by 255\relax%
\pgf@ya=16\pgf@ya\relax%
\divide\pgf@ya by\c@pgf@counta%
\pgf@xa=16\pgf@ya\relax%
\fi%
\fi%
\pgf@x=\pgf@xa%
%
% If necessary, adjust radius so that the size requirements are
% met:
%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}%
\ifdim\pgf@x<.5\pgf@xb%
\pgf@x=.5\pgf@xb%
\fi%
\ifdim\pgf@x<.5\pgf@yb%
\pgf@x=.5\pgf@yb%
\fi%
%
% Now, add larger of outer separations.
%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\ifdim\pgf@xb<\pgf@yb%
\advance\pgf@x by\pgf@yb%
\else%
\advance\pgf@x by\pgf@xb%
\fi%
}%
%
% Anchors
%
\inheritanchorborder[from=circle]%
\inheritanchor[from=circle]{north}%
\inheritanchor[from=circle]{north west}%
\inheritanchor[from=circle]{north east}%
\inheritanchor[from=circle]{center}%
\inheritanchor[from=circle]{west}%
\inheritanchor[from=circle]{east}%
\inheritanchor[from=circle]{mid}%
\inheritanchor[from=circle]{mid west}%
\inheritanchor[from=circle]{mid east}%
\inheritanchor[from=circle]{base}%
\inheritanchor[from=circle]{base west}%
\inheritanchor[from=circle]{base east}%
\inheritanchor[from=circle]{south}%
\inheritanchor[from=circle]{south west}%
\inheritanchor[from=circle]{south east}%
\anchor{lower}{\loweranchor}%
%
% Background path
%
\inheritbackgroundpath[from=circle]%
\beforebackgroundpath{
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
\ifdim\pgf@xb<\pgf@yb%
\advance\pgfutil@tempdima by-\pgf@yb%
\else%
\advance\pgfutil@tempdima by-\pgf@xb%
\fi%
\advance\pgfutil@tempdima by-.5\pgflinewidth%
\pgfsetshortenstart{0pt}%
\pgfsetshortenend{0pt}%
\pgfsetarrows{-}%
\pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpoint{-1\pgfutil@tempdima}{0pt}}}%
\pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}}%
\pgfusepath{stroke}%
}%
}%
%
% A circle that is split diagonally into an upper and a lower part.
%
% Parts: text, lower
\pgfdeclareshape{circle solidus}{%
% Node parts
\nodeparts{text,lower}%
% Anchors
% solidus slants at 45 degrees
% text placement minimizes the required radius,
% this is achieved placing the "outer" corner
% of each box in the line orthogonal to the
% solidus which passes through circle center
\savedanchor\centerpoint{%
\pgf@x=0.5\wd\pgfnodeparttextbox%
\advance\pgf@x by0.5\dp\pgfnodeparttextbox%
\advance\pgf@x by0.5\ht\pgfnodeparttextbox%
\pgf@y=-\pgf@x%
\advance\pgf@y by\ht\pgfnodeparttextbox%
\advance\pgf@x by0.3536\pgflinewidth%
\advance\pgf@y by-0.3536\pgflinewidth%
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x by\pgf@xa%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y by-\pgf@ya%
}%
\savedanchor\loweranchor{%
\pgf@x=0.5\wd\pgfnodeparttextbox%
\advance\pgf@x by0.5\dp\pgfnodeparttextbox%
\advance\pgf@x by0.5\ht\pgfnodeparttextbox%
\pgf@y=-\pgf@x%
\advance\pgf@y by\ht\pgfnodeparttextbox%
\advance\pgf@x by0.5\ht\pgfnodepartlowerbox%
\advance\pgf@x by0.5\dp\pgfnodepartlowerbox%
\advance\pgf@x by-0.5\wd\pgfnodepartlowerbox%
\advance\pgf@y by-0.5\ht\pgfnodepartlowerbox%
\advance\pgf@y by0.5\dp\pgfnodepartlowerbox%
\advance\pgf@y by-0.5\wd\pgfnodepartlowerbox%
\advance\pgf@x by0.7071\pgflinewidth%
\advance\pgf@y by-0.7071\pgflinewidth%
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/inner xsep}}%
\advance\pgf@x by2\pgf@xa%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y by-2\pgf@ya%
}%
\saveddimen\radius{%
% "top" radius
\pgf@x=\ht\pgfnodeparttextbox%
\advance\pgf@x by\dp\pgfnodeparttextbox%
\advance\pgf@x by\wd\pgfnodeparttextbox%
% "bottom" radius
\pgf@y=\ht\pgfnodepartlowerbox%
\advance\pgf@y by\dp\pgfnodepartlowerbox%
\advance\pgf@y by\wd\pgfnodepartlowerbox%
% use the larger
\ifdim\pgf@x<\pgf@y%
\pgf@x=\pgf@y%
\fi%
\pgf@x=0.7071\pgf@x%
% add spacings
\advance\pgf@x by0.5\pgflinewidth%
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/inner xsep}}%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/inner ysep}}%
\pgfmathaddtolength{\pgf@x}{veclen(2\pgf@xa,2\pgf@ya)}%
% If necessary, adjust radius so that the size requirements are
% met:
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/minimum width}}%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/minimum height}}%
\ifdim\pgf@x<.5\pgf@xa%
\pgf@x=.5\pgf@xa%
\fi%
\ifdim\pgf@x<.5\pgf@ya%
\pgf@x=.5\pgf@ya%
\fi%
% Now, add larger of outer separations.
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/outer ysep}}%
\ifdim\pgf@xa<\pgf@ya%
\advance\pgf@x by\pgf@ya%
\else%
\advance\pgf@x by\pgf@xa%
\fi%
}%
% Anchors
\inheritanchorborder[from=circle]%
\inheritanchor[from=circle]{north}%
\inheritanchor[from=circle]{north west}%
\inheritanchor[from=circle]{north east}%
\inheritanchor[from=circle]{center}%
\inheritanchor[from=circle]{west}%
\inheritanchor[from=circle]{east}%
\inheritanchor[from=circle]{mid}%
\inheritanchor[from=circle]{mid west}%
\inheritanchor[from=circle]{mid east}%
\inheritanchor[from=circle]{base}%
\inheritanchor[from=circle]{base west}%
\inheritanchor[from=circle]{base east}%
\inheritanchor[from=circle]{south}%
\inheritanchor[from=circle]{south west}%
\inheritanchor[from=circle]{south east}%
\anchor{lower}{\loweranchor}%
% Background path
\inheritbackgroundpath[from=circle]%
\beforebackgroundpath{%
\pgfutil@tempdima=\radius%
\pgfmathsetlength{\pgf@xa}{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathsetlength{\pgf@ya}{\pgfkeysvalueof{/pgf/outer ysep}}%
\ifdim\pgf@xa<\pgf@ya%
\advance\pgfutil@tempdima by-\pgf@ya%
\else%
\advance\pgfutil@tempdima by-\pgf@xa%
\fi%
\advance\pgfutil@tempdima by-.5\pgflinewidth%
\pgfsetshortenstart{0pt}%
\pgfsetshortenend{0pt}%
\pgfsetarrows{-}%
% solidus slants at 45 degrees and its length is
% the golden section of the diameter
\pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpoint{-0.437\pgfutil@tempdima}{-0.437\pgfutil@tempdima}}}%
\pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpoint{0.437\pgfutil@tempdima}{0.437\pgfutil@tempdima}}}%
\pgfusepath{stroke}%
}%
}%
\def\pgf@lib@sh@newbox{\csname newbox\endcsname}% Get round outer.
\def\pgf@lib@sh@toalpha#1{%
\ifcase#1\relax%
\or one\or two\or three\or four\or five\or six\or seven\or eight\or nine\or ten%
\or eleven\or twelve\or thirteen\or fourteen\or fifteen%
\or sixteen\or seventeen\or eighteen\or nineteen\or twenty%
\else%
twenty%
\fi%
}%
\def\pgf@lib@sh@getalpha#1#2{\expandafter\edef\expandafter#1\expandafter{\pgf@lib@sh@toalpha{#2}}}%
\newbox\pgfnodeparttwobox
\newbox\pgfnodepartthreebox
\newbox\pgfnodepartfourbox
\let\pgfnodepartonebox=\pgfnodeparttextbox
\let\pgfnodepartsecondbox=\pgfnodeparttwobox
\let\pgfnodepartthirdbox=\pgfnodepartthreebox
\let\pgfnodepartfourthbox=\pgfnodepartfourbox
\def\pgf@lib@sh@allocateboxes#1{%
\c@pgf@counta=#1\relax%
\pgfmathloop%
\ifnum\c@pgf@counta>4\relax%
\pgfutil@ifundefined{pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box}%
{%
\expandafter\pgf@lib@sh@newbox\csname pgfnodepart\pgf@lib@sh@toalpha{\c@pgf@counta}box\endcsname%
}%
{}%
\advance\c@pgf@counta by-1\relax%
\repeatpgfmathloop%
}%
\def\pgf@lib@sh@rs@lefttext{left}%
\def\pgf@lib@sh@rs@righttext{right}%
\def\pgf@lib@sh@rs@centertext{center}%
\def\pgf@lib@sh@rs@bottomtext{bottom}%
\def\pgf@lib@sh@rs@toptext{top}%
\def\pgf@lib@sh@rs@basetext{base}%
\def\pgf@lib@sh@rs@nonetext{none}%
\newif\ifpgfrectanglesplithorizontal
\newif\ifpgfrectanglesplitdrawsplits\pgfrectanglesplitdrawsplitstrue
\newif\ifpgfrectanglesplitignoreemptyparts
\newif\ifpgfrectanglesplitusecustomfill
\let\pgf@lib@sh@rs@every@emptypart=\pgfutil@empty
\let\pgf@lib@sh@rs@every@part=\pgfutil@empty
\def\pgf@lib@sh@rs@list@fill{none}%
\pgfkeys{/pgf/.cd,
rectangle split parts/.initial=4,
rectangle split part align/.initial=center,
rectangle split horizontal/.is if=pgfrectanglesplithorizontal,
rectangle split ignore empty parts/.is if=pgfrectanglesplitignoreemptyparts,
rectangle split empty part width/.code={%
\pgfmathsetlength\pgf@x{#1}
\edef\pgf@lib@sh@rs@temp{\noexpand\vrule width\the\pgf@x height0ptdepth0pt\relax}%
\def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
\expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
\expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
},%
rectangle split empty part width=1ex,
rectangle split empty part height/.code={%
\pgfmathsetlength\pgf@x{#1}
\edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight\the\pgf@x depth0pt\relax}%
\def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
\expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
\expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
},%
rectangle split empty part height=1ex,
rectangle split empty part depth/.code={%
\pgfmathsetlength\pgf@x{#1}
\edef\pgf@lib@sh@rs@temp{\noexpand\vrule width0ptheight0ptdepth\the\pgf@x\relax}%
\def\pgf@lib@sh@rs@@temp{\def\pgf@lib@sh@rs@every@emptypart}%
\expandafter\expandafter\expandafter\pgf@lib@sh@rs@@temp\expandafter\expandafter\expandafter{%
\expandafter\pgf@lib@sh@rs@every@emptypart\pgf@lib@sh@rs@temp}%
},%
rectangle split empty part depth=0ex,
rectangle split every empty part/.store in=\pgf@lib@sh@rs@every@emptypart,
rectangle split part fill/.code=\def\pgf@lib@sh@rs@list@fill{#1}\pgfrectanglesplitusecustomfilltrue,
rectangle split uses custom fill/.is if=pgfrectanglesplitusecustomfill,
rectangle split draw splits/.is if=pgfrectanglesplitdrawsplits,
rectangle split allocate boxes/.code=\pgf@lib@sh@allocateboxes{#1},
}%
\def\pgf@lib@sh@rs@process@list#1#2{%
\c@pgf@counta=1\relax%
\c@pgf@countb=#2\relax%
\edef\pgf@lib@sh@rs@temp{#1}%
\expandafter\pgf@lib@sh@rs@@process@list\pgf@lib@sh@rs@temp,\pgf@stop,
}%
\def\pgf@lib@sh@rs@@process@list{%
\pgfutil@ifnextchar x{\pgf@lib@sh@rs@@@process@list}%
{\pgf@lib@sh@rs@@@process@list}
}%
\def\pgf@lib@sh@rs@@@process@list#1,{%
\ifx#1\pgf@stop%
\let\pgf@next\pgf@lib@sh@rs@@@@process@list%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\c@pgf@counta}%
\def\pgf@lib@sh@rs@lastalign{#1}%
\pgfutil@namedef{pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item}{#1}%
\let\pgf@next\pgf@lib@sh@rs@@process@list%
\advance\c@pgf@counta by1\relax%
\fi%
\pgf@next}%
\def\pgf@lib@sh@rs@@@@process@list{%
\pgfmathloop%
\ifnum\c@pgf@counta>\c@pgf@countb%
\else%
\expandafter\edef\csname pgf@lib@sh@rs@\pgf@lib@sh@toalpha{\c@pgf@counta}@item\endcsname%
{\pgf@lib@sh@rs@lastalign}%
\advance\c@pgf@counta by1\relax%
\repeatpgfmathloop%
}%
\pgf@lib@sh@allocateboxes{20}%
\pgfdeclareshape{rectangle split}{%
\savedmacro\rectanglesplitparameters{%
\pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/rectangle split parts}}%
\edef\parts{\the\c@pgf@counta}%
\addtosavedmacro\parts%
%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
\edef\innerxsep{\the\pgf@x}%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
\edef\innerysep{\the\pgf@y}%
%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
\edef\outerxsep{\the\pgf@x}%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
\edef\outerysep{\the\pgf@y}%
\addtosavedmacro\outerxsep%
\addtosavedmacro\outerysep%
%
\pgf@x=0pt\relax% Widest box.
\pgf@y=0pt\relax% Tallest box.
%
\pgfutil@tempdima=0pt\relax% Maximum box height.
\pgfutil@tempdimb=0pt\relax% Maximum box depth.
%
% Get the dimensions of the boxes...
%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\let\expandafter\pgf@lib@sh@box\expandafter=%
\csname pgfnodepart\pgf@lib@sh@rs@number box\endcsname%
\pgf@xa=\wd\pgf@lib@sh@box%
\pgf@ya=\ht\pgf@lib@sh@box%
\pgf@yb=\dp\pgf@lib@sh@box%
%
% Test to see if the box is empty...
%
\expandafter\def\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname{\relax}%
\ifdim\pgf@xa=0pt\relax%
\ifdim\pgf@ya=0pt\relax%
\ifdim\pgf@yb=0pt\relax%
%
% ...It is. So...
%
\ifpgfrectanglesplitignoreemptyparts%
%
% ...flag this if we are ignoring parts...
%
\expandafter\let\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
\else%
%
% ...otherwise insert the code for every empty part.
%
\setbox\pgf@lib@sh@box=\hbox{{\pgf@lib@sh@rs@every@emptypart}}%
\pgf@xa=\wd\pgf@lib@sh@box%
\pgf@ya=\ht\pgf@lib@sh@box%
\pgf@yb=\dp\pgf@lib@sh@box%
\fi%
\fi%
\fi%
\fi%
\expandafter\edef\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname{\the\pgf@xa}%
\expandafter\edef\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname{\the\pgf@ya}%
\expandafter\edef\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname{\the\pgf@yb}%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname%
%
% ...saving the widest box...
%
\ifdim\pgf@xa>\pgf@x%
\pgf@x=\pgf@xa%
\fi%
%
% ...the maximum height and depth...
%
\ifdim\pgf@ya>\pgfutil@tempdima%
\pgfutil@tempdima=\pgf@ya%
\fi%
\ifdim\pgf@yb>\pgfutil@tempdimb%
\pgfutil@tempdimb=\pgf@yb%
\fi%
%
% ...and the tallest box.
%
\pgf@yc=\pgfutil@tempdima%
\advance\pgf@yc by\pgfutil@tempdimb%
\ifdim\pgf@yc>\pgf@y%
\pgf@y=\pgf@yc%
\fi%
\repeatpgfmathloop%
%
\edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
\edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/minimum width}}%
\advance\pgf@x by-\innerxsep\relax%
\advance\pgf@x by-\innerxsep\relax%
\pgf@xa=\pgf@x%
\advance\pgf@xa by-\pgf@lib@sh@rs@max@width\relax%
\ifdim\pgf@xa>0pt\relax%
\edef\pgf@lib@sh@rs@max@width{\the\pgf@x}%
\fi%
%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
\advance\pgf@y by-\innerysep\relax%
\advance\pgf@y by-\innerysep\relax%
\pgf@ya=\pgf@y%
\advance\pgf@ya by-\pgf@lib@sh@rs@max@totalheight\relax%
\ifdim\pgf@ya>0pt\relax%
\edef\pgf@lib@sh@rs@max@totalheight{\the\pgf@y}%
\fi%
%
% Get the alignment of each node part box.
%
\pgf@lib@sh@rs@process@list{\pgfkeysvalueof{/pgf/rectangle split part align}}{\parts}%
%
% Are we splitting horizontally or vertically?
%
\ifpgfrectanglesplithorizontal%
%
% Calculate the origins of each node part box.
%
\pgf@x=0pt\relax%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\ifpgfrectanglesplitignoreemptyparts%
\expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
\pgf@lib@sh@rs@lastanchor%
\fi%
\fi%
%
% Adjust for alignment.
%
\expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
\pgf@lib@sh@rs@bottomtext%
\pgf@y=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
\else%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
\pgf@lib@sh@rs@toptext%
\pgf@y=-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@y by\pgf@lib@sh@rs@max@totalheight\relax%
\else%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
\pgf@lib@sh@rs@basetext%
\pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
\advance\pgf@y by-\pgfutil@tempdima%
\advance\pgf@y by\pgfutil@tempdimb%
\divide\pgf@y by2\relax%
\else%
\pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
\advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@y by\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
\divide\pgf@y by2\relax%
\fi%
\fi%
\fi%
%
% Re-adjust as the first box is at the origin.
%
\ifnum\pgfmathcounter=1\relax%
\edef\pgf@lib@sh@rs@yoffset{\the\pgf@y}%
\pgf@y=0pt\relax%
\pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
\addtosavedmacro\pgf@lib@sh@rs@anchor@one%
\let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
\let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
\else
\advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
\advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
\advance\pgf@x by\innerxsep\relax%
\advance\pgf@x by\pgflinewidth%
\advance\pgf@x by\innerxsep\relax%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
\expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\fi%
\fi%
\repeatpgfmathloop%
%
% Calculate some anchors.
%
\pgfextract@process\northeast{%
\pgf@lib@sh@rs@lastanchor%
\advance\pgf@x by\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
\advance\pgf@x by\innerxsep\relax%
\advance\pgf@x by\outerxsep\relax%
\pgf@y=\pgf@lib@sh@rs@max@totalheight\relax%
\advance\pgf@y by-\pgf@lib@sh@rs@yoffset\relax%
\advance\pgf@y by\innerysep\relax%
\advance\pgf@y by\outerysep\relax%
}%
\addtosavedmacro\northeast%
\pgfextract@process\southwest{%
\pgf@lib@sh@rs@anchor@one%
\advance\pgf@x by-\innerxsep\relax%
\advance\pgf@x by-\outerxsep\relax%
\pgf@y=-\pgf@lib@sh@rs@yoffset\relax%
\advance\pgf@y by-\innerysep\relax%
\advance\pgf@y by-\outerysep\relax%
}%
\addtosavedmacro\southwest%
%
\pgfextract@process\centerpoint{%
\pgfpointadd{\southwest}{\northeast}%
\divide\pgf@x by2\relax%
\divide\pgf@y by2\relax%
}%
\addtosavedmacro\centerpoint%
%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\else%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\pgf@xa=\pgf@x%
\pgf@xb=\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@xa by0.5\pgf@xb%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname{%
\southwest%
\pgf@x=\pgf@xa%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname{%
\northeast%
\pgf@x=\pgf@xa%
}%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @north\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @south\endcsname%
\ifnum\pgfmathcounter=\parts%
\else%
\advance\pgf@xa by0.5\pgf@xb%
\advance\pgf@xa by\innerxsep\relax%
\advance\pgf@xa by.5\pgflinewidth%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname{%
\southwest%
\pgf@x=\pgf@xa%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname{%
\northeast%
\pgf@x=\pgf@xa%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
\centerpoint%
\pgf@x=\pgf@xa%
}%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
\fi%
\fi%
\repeatpgfmathloop%
\else%
%
% Calculate the origins of each node part box.
%
\pgf@y=0pt\relax%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=\pgfutil@empty%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\ifpgfrectanglesplitignoreemptyparts%
\expandafter\let\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname=%
\pgf@lib@sh@rs@lastanchor%
\fi%
\fi%
%
% Adjust for alignment.
%
\expandafter\ifx\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
\pgf@lib@sh@rs@lefttext%
\pgf@x=0pt\relax%
\else%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname%
\pgf@lib@sh@rs@righttext%
\pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
\else%
\pgf@x=-\csname pgf@lib@sh@rs@width@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@x by\pgf@lib@sh@rs@max@width\relax%
\divide\pgf@x by2\relax%
\fi%
\fi%
%
% Re-adjust as the first box is at the origin.
%
\ifnum\pgfmathcounter=1\relax%
\edef\pgf@lib@sh@rs@xoffset{\the\pgf@x}%
\pgf@x=0pt\relax%
\pgfextract@process\pgf@lib@sh@rs@anchor@one{}%
\addtosavedmacro\pgf@lib@sh@rs@anchor@one%
\let\pgf@lib@sh@rs@lastanchor=\pgf@lib@sh@rs@anchor@one%
\let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
\else
\advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
\advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
\advance\pgf@y by-\innerysep\relax%
\advance\pgf@y by-\pgflinewidth%
\advance\pgf@y by-\innerysep\relax%
\advance\pgf@y by-\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname{}%
\expandafter\let\expandafter\pgf@lib@sh@rs@lastanchor\expandafter=%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\let\pgf@lib@sh@rs@lastnumber=\pgf@lib@sh@rs@number%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\fi%
\fi%
\repeatpgfmathloop%
%
% Calculate some anchors.
%
\pgfextract@process\northeast{%
\pgf@x=\pgf@lib@sh@rs@max@width\relax%
\advance\pgf@x by-\pgf@lib@sh@rs@xoffset\relax%
\advance\pgf@x by\innerxsep\relax%
\advance\pgf@x by\outerxsep\relax%
\pgf@y=\pgf@lib@sh@rs@height@one\relax%
\advance\pgf@y by\innerysep\relax%
\advance\pgf@y by\outerysep\relax%
\advance\pgf@y by.5\pgflinewidth%
}%
\addtosavedmacro\northeast%
\pgfextract@process\southwest{%
\pgf@lib@sh@rs@lastanchor%
\pgf@x=-\pgf@lib@sh@rs@xoffset\relax%
\advance\pgf@x by-\innerxsep\relax%
\advance\pgf@x by-\outerxsep\relax%
\advance\pgf@y by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@lastnumber\endcsname\relax%
\advance\pgf@y by-\innerysep\relax%
\advance\pgf@y by-\outerysep\relax%
\advance\pgf@y by-.5\pgflinewidth%
}%
\addtosavedmacro\southwest%
%
\pgfextract@process\centerpoint{%
\pgfpointadd{\southwest}{\northeast}%
\divide\pgf@x by2\relax%
\divide\pgf@y by2\relax%
}%
\addtosavedmacro\centerpoint%
%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\else%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\pgf@ya=\csname pgf@lib@sh@rs@height@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@y by0.5\pgf@ya%
\pgf@ya=\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@y by-0.5\pgf@ya%
\pgf@ya=\pgf@y%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname{%
\southwest%
\pgf@y=\pgf@ya%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname{%
\northeast%
\pgf@y=\pgf@ya%
}%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @east\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @west\endcsname%
\ifnum\pgfmathcounter=\parts%
\else%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number\endcsname%
\pgf@ya=\pgf@y%
\advance\pgf@ya by-\csname pgf@lib@sh@rs@depth@\pgf@lib@sh@rs@number\endcsname\relax%
\advance\pgf@ya by-\innerysep\relax%
\advance\pgf@ya by-.5\pgflinewidth%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname{%
\southwest%
\pgf@y=\pgf@ya%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname{%
\northeast%
\pgf@y=\pgf@ya%
}%
\expandafter\pgfextract@process\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname{%
\centerpoint%
\pgf@y=\pgf@ya%
}%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
\expandafter\addtosavedmacro\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split\endcsname%
\fi%
\fi%
\repeatpgfmathloop%
\fi%
}%
\savedanchor\basepoint{%
\pgf@x=0.5\wd\pgfnodeparttextbox%
\pgf@y=0pt\relax%
}%
\savedanchor\midpoint{%
\pgf@x=0.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{+0.5ex}%
}%
\anchor{center}{%
\rectanglesplitparameters%
\centerpoint%
}%
\anchor{base}{\basepoint}%
\anchor{base east}{%
\rectanglesplitparameters%
\northeast%
\pgf@y=0pt\relax%
}%
\anchor{base west}{%
\rectanglesplitparameters%
\southwest%
\pgf@y=0pt\relax%
}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{%
\rectanglesplitparameters%
\northeast%
\pgf@xa=\pgf@x%
\midpoint%
\pgf@x=\pgf@xa%
}%
\anchor{mid west}{%
\rectanglesplitparameters%
\southwest%
\pgf@xa=\pgf@x%
\midpoint%
\pgf@x=\pgf@xa%
}%
\anchor{north}{%
\rectanglesplitparameters%
\centerpoint%
\pgf@xa=\pgf@x%
\northeast%
\pgf@x=\pgf@xa%
}%
\anchor{south}{%
\rectanglesplitparameters%
\centerpoint%
\pgf@xa=\pgf@x%
\southwest%
\pgf@x=\pgf@xa%
}%
\anchor{east}{%
\rectanglesplitparameters%
\centerpoint%
\pgf@ya=\pgf@y%
\northeast%
\pgf@y=\pgf@ya%
}%
\anchor{west}{%
\rectanglesplitparameters%
\centerpoint%
\pgf@ya=\pgf@y%
\southwest%
\pgf@y=\pgf@ya%
}%
\anchor{north east}{%
\rectanglesplitparameters%
\northeast%
}%
\anchor{north west}{%
\rectanglesplitparameters%
\northeast%
\pgf@ya=\pgf@y%
\southwest%
\pgf@y=\pgf@ya%
}%
\anchor{south west}{%
\rectanglesplitparameters%
\southwest%
}%
\anchor{south east}{%
\rectanglesplitparameters%
\southwest%
\pgf@ya=\pgf@y%
\northeast%
\pgf@y=\pgf@ya%
}%
\behindbackgroundpath{%
\ifpgfrectanglesplitusecustomfill%
\pgf@lib@sh@rs@process@list{\pgf@lib@sh@rs@list@fill}{\parts}%
{%
\ifpgfrectanglesplithorizontal%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
\csname pgf@anchor@rectangle split@south west\endcsname%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
\ifnum\pgfmathcounter=\parts%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
\csname pgf@anchor@rectangle split@north east\endcsname%
\else%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split north\endcsname%
\fi%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\else%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
\else%
\pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
\pgf@lib@sh@rs@fill@bottomleft%
\advance\pgf@y by\outerysep\relax%
\ifnum\pgfmathcounter=1\relax%
\advance\pgf@x by\outerxsep\relax%
\fi%
}%
\pgfextract@process\pgf@lib@sh@rs@fill@topright{%
\pgf@lib@sh@rs@fill@topright%
\advance\pgf@y by-\outerysep\relax%
\ifnum\pgfmathcounter=\parts\relax%
\advance\pgf@x by-\outerxsep\relax%
\fi%
}%
\ifnum\pgfmathcounter>1\relax%
\begingroup\pgfsetcornersarced{\pgfpointorigin}%
\fi%
\pgfpathmoveto{%
\pgf@lib@sh@rs@fill@topright%
\pgf@xa=\pgf@x%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@x=\pgf@xa%
}%
\pgfpathlineto{\pgf@lib@sh@rs@fill@bottomleft}%
\pgfpathlineto{%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@xa=\pgf@x%
\pgf@lib@sh@rs@fill@topright%
\pgf@x=\pgf@xa%
}%
\ifnum\pgfmathcounter>1\relax%
\endgroup%
\fi%
\ifnum\pgfmathcounter<\parts%
\begingroup\pgfsetcornersarced{\pgfpointorigin}%
\fi%
\pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
\pgfpathclose%
\ifnum\pgfmathcounter<\parts%
\endgroup%
\fi%
\pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
\pgfusepath{fill}%
\fi%
\fi%
\pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@ya=\pgf@y%
\pgf@lib@sh@rs@fill@topright%
\pgf@y=\pgf@ya%
\advance\pgf@y by-\outerysep%
}%
\repeatpgfmathloop%
\else%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@topright\expandafter=%
\csname pgf@anchor@rectangle split@north east\endcsname%
\pgfmathloop%
\ifnum\pgfmathcounter>\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
\ifnum\pgfmathcounter=\parts%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
\csname pgf@anchor@rectangle split@south west\endcsname%
\else%
\expandafter\let\expandafter\pgf@lib@sh@rs@fill@bottomleft\expandafter=%
\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space split west\endcsname%
\fi%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\else%
\expandafter\ifx\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname\pgf@lib@sh@rs@nonetext%
\else%
\pgfextract@process\pgf@lib@sh@rs@fill@bottomleft{%
\pgf@lib@sh@rs@fill@bottomleft%
\advance\pgf@x by\outerxsep\relax%
\ifnum\parts=1\relax%
\advance\pgf@y by\outerysep\relax%
\else%
\ifnum\pgfmathcounter=\parts
\advance\pgf@y by\outerysep\relax%
\fi%
\fi%
}%
\pgfextract@process\pgf@lib@sh@rs@fill@topright{%
\pgf@lib@sh@rs@fill@topright%
\advance\pgf@x by-\outerxsep\relax%
\ifnum\parts=1\relax%
\advance\pgf@y by-\outerysep\relax%
\else%
\ifnum\pgfmathcounter=1\relax%
\advance\pgf@y by-\outerysep\relax%
\fi%
\fi%
}%
\pgfpathmoveto{\pgf@lib@sh@rs@fill@bottomleft}%
\ifnum\pgfmathcounter>1\relax%
\begingroup\pgfsetcornersarced{\pgfpointorigin}%
\fi%
\pgfpathlineto{%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@xa=\pgf@x%
\pgf@lib@sh@rs@fill@topright%
\pgf@x=\pgf@xa%
}%
\pgfpathlineto{\pgf@lib@sh@rs@fill@topright}%
\ifnum\pgfmathcounter>1\relax%
\endgroup%%
\fi%
\ifnum\pgfmathcounter<\parts%
\begingroup\pgfsetcornersarced{\pgfpointorigin}%
\fi%
\pgfpathlineto{%
\pgf@lib@sh@rs@fill@topright%
\pgf@xa=\pgf@x%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@x=\pgf@xa%
}%
\pgfpathclose%
\ifnum\pgfmathcounter<\parts%
\endgroup%
\fi%
\pgfsetfillcolor{\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}%
\pgfusepath{fill}%
\fi%
\fi%
\pgfextract@process\pgf@lib@sh@rs@fill@topright{%
\pgf@lib@sh@rs@fill@topright%
\pgf@xa=\pgf@x%
\pgf@lib@sh@rs@fill@bottomleft%
\pgf@x=\pgf@xa%
\advance\pgf@x by\outerxsep\relax%
}%
\repeatpgfmathloop%
\fi%
}%
\fi%
}%
\backgroundpath{%
\begingroup%
\pgfextract@process\southwest{%
\southwest%
\advance\pgf@x by\outerxsep\relax%
\advance\pgf@y by\outerysep\relax%
}%
\pgfextract@process\northeast{%
\northeast%
\advance\pgf@x by-\outerxsep\relax%
\advance\pgf@y by-\outerysep\relax%
}%
\pgfpathrectangle{\southwest}{\pgfpointdiff{\southwest}{\northeast}}%
\endgroup%
\ifpgfrectanglesplitdrawsplits%
\pgfmathloop%
\ifnum\pgfmathcounter=\parts%
\else%
\pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
%
\expandafter\ifx\csname pgf@lib@sh@rs@empty@\pgf@lib@sh@rs@number\endcsname\pgfutil@empty%
\else%
\pgfpathmoveto{%
\ifpgfrectanglesplithorizontal%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@north\endcsname%
\advance\pgf@y by-\outerysep\relax%
\else%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@east\endcsname%
\advance\pgf@x by-\outerxsep\relax%
\fi%
}%
\pgfpathlineto{%
\ifpgfrectanglesplithorizontal%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@south\endcsname%
\advance\pgf@y by\outerysep\relax%
\else%
\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@number @split@west\endcsname%
\advance\pgf@x by\outerxsep\relax%
\fi%
}%
\fi%
\repeatpgfmathloop%
\fi%
}%
\anchorborder{%
\pgfutil@tempdima\pgf@x%
\pgfutil@tempdimb\pgf@y%
\rectanglesplitparameters%
\pgfpointdiff{\southwest}{\northeast}%
\pgf@x.5\pgf@x%
\pgf@y.5\pgf@y%
\edef\pgf@marshall{%
\noexpand\pgfpointborderrectangle{%
\noexpand\pgfqpoint{\the\pgfutil@tempdima}{\the\pgfutil@tempdimb}%
}%
{%
\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}%
}%
}%
\pgf@marshall%
\pgf@xa\pgf@x%
\pgf@ya\pgf@y%
\centerpoint%
\advance\pgf@x\pgf@xa%
\advance\pgf@y\pgf@ya%
}%
%
% Hackery to install the correct number of node parts.
%
\expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@rectangle split\endcsname{%
\let\pgf@lib@sh@rs@temp=\pgfutil@empty%
\pgfmathloop%
\ifnum\pgfmathcounter=\parts%
\expandafter\edef\csname pgf@sh@boxes@rectangle split\endcsname%
{\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter}}%
\else%
\edef\pgf@lib@sh@rs@temp{\pgf@lib@sh@rs@temp\pgf@lib@sh@toalpha{\pgfmathcounter},}%
\repeatpgfmathloop%
}%
}%
\pgfutil@for\pgf@lib@sh@rs@temp:={one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty}\do{%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp}{\noexpand\pgf@lib@sh@rs@anchor@one}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split}%
{\noexpand\centerpoint}%
{\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split north\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north}%
{\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
{\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@north\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split south\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south}%
{\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@south\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space north\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north}%
{\noexpand\csname pgf@anchor@rectangle split@north\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @north\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space south\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south}%
{\noexpand\csname pgf@anchor@rectangle split@south\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @south\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split east\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east}%
{\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
{\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@east\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space split west\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west}%
{\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @split@west\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space east\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east}%
{\noexpand\csname pgf@anchor@rectangle split@east\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @east\noexpand\endcsname}%
}%
\expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@temp\space west\endcsname{%
\noexpand\rectanglesplitparameters%
\noexpand\pgfutil@ifundefined{pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west}%
{\noexpand\csname pgf@anchor@rectangle split@west\noexpand\endcsname}%
{\noexpand\csname pgf@lib@sh@rs@anchor@\pgf@lib@sh@rs@temp @west\noexpand\endcsname}%
}%
}%
\pgfutil@namelet{pgf@anchor@rectangle split@text east}{pgf@anchor@rectangle split@one east}%
\pgfutil@namelet{pgf@anchor@rectangle split@text west}{pgf@anchor@rectangle split@one west}%
\pgfutil@namelet{pgf@anchor@rectangle split@text split}{pgf@anchor@rectangle split@one split}%
\pgfutil@namelet{pgf@anchor@rectangle split@text split east}{pgf@anchor@rectangle split@one split east}%
\pgfutil@namelet{pgf@anchor@rectangle split@text split west}{pgf@anchor@rectangle split@one split west}%
\pgfutil@namelet{pgf@anchor@rectangle split@second}{pgf@anchor@rectangle split@two}%
\pgfutil@namelet{pgf@anchor@rectangle split@second east}{pgf@anchor@rectangle split@two east}%
\pgfutil@namelet{pgf@anchor@rectangle split@second west}{pgf@anchor@rectangle split@two west}%
\pgfutil@namelet{pgf@anchor@rectangle split@second split}{pgf@anchor@rectangle split@two split}%
\pgfutil@namelet{pgf@anchor@rectangle split@second split east}{pgf@anchor@rectangle split@two split east}%
\pgfutil@namelet{pgf@anchor@rectangle split@second split west}{pgf@anchor@rectangle split@two split west}%
\pgfutil@namelet{pgf@anchor@rectangle split@third}{pgf@anchor@rectangle split@three}%
\pgfutil@namelet{pgf@anchor@rectangle split@third east}{pgf@anchor@rectangle split@three east}%
\pgfutil@namelet{pgf@anchor@rectangle split@third west}{pgf@anchor@rectangle split@three west}%
\pgfutil@namelet{pgf@anchor@rectangle split@third split}{pgf@anchor@rectangle split@three split}%
\pgfutil@namelet{pgf@anchor@rectangle split@third split east}{pgf@anchor@rectangle split@three split east}%
\pgfutil@namelet{pgf@anchor@rectangle split@third split west}{pgf@anchor@rectangle split@three split west}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth}{pgf@anchor@rectangle split@four}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth east}{pgf@anchor@rectangle split@four east}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth west}{pgf@anchor@rectangle split@four west}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth split}{pgf@anchor@rectangle split@four split}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth split east}{pgf@anchor@rectangle split@four split east}%
\pgfutil@namelet{pgf@anchor@rectangle split@fourth split west}{pgf@anchor@rectangle split@four split west}%
% Shape: ellipse split.
%
\pgfdeclareshape{ellipse split}{%
\nodeparts{text,lower}%
\savedanchor\radii{%
\pgfmathsetlength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
\pgf@y2.0\pgf@y%
\advance\pgf@y.5\pgflinewidth%
\pgf@xa.5\wd\pgfnodeparttextbox%
\pgf@xb.5\wd\pgfnodepartlowerbox%
\advance\pgf@xa\pgf@x%
\advance\pgf@xb\pgf@x%
\pgf@ya\ht\pgfnodeparttextbox%
\advance\pgf@ya\dp\pgfnodeparttextbox%
\pgf@yb\ht\pgfnodepartlowerbox%
\advance\pgf@yb\dp\pgfnodepartlowerbox%
\advance\pgf@ya\pgf@y%
\advance\pgf@yb\pgf@y%
\ifdim\pgf@xa>\pgf@xb%
\pgf@x1.414213\pgf@xa%
\else%
\pgf@x1.414213\pgf@xb%
\fi%
\ifdim\pgf@ya>\pgf@yb%
\pgf@y1.414213\pgf@ya%
\else%
\pgf@y1.414213\pgf@yb%
\fi%
\pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
\pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
\ifdim\pgf@x<.5\pgf@xa%
\pgf@x.5\pgf@xa%
\fi%
\ifdim\pgf@y<.5\pgf@ya%
\pgf@y.5\pgf@ya%
\fi%
\pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
}%
\savedanchor\lower{%
\pgf@x-.5\wd\pgfnodepartlowerbox%
\advance\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}%
\pgf@y-2.0\pgf@y%
\advance\pgf@y-\pgflinewidth%
\advance\pgf@y-\dp\pgfnodeparttextbox%
\advance\pgf@y-\ht\pgfnodepartlowerbox%
}%
\savedanchor\centerpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{-\pgfkeysvalueof{/pgf/inner ysep}}%
\advance\pgf@y-\dp\pgfnodeparttextbox%
\advance\pgf@y-.5\pgflinewidth%
}%
\savedanchor\basepoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgf@y0pt\relax%
}%
\savedanchor\midpoint{%
\pgf@x.5\wd\pgfnodeparttextbox%
\pgfmathsetlength\pgf@y{.5ex}%
}%
\anchor{center}{\centerpoint}%
\anchor{lower}{\lower}%
\anchor{mid}{\midpoint}%
\anchor{mid east}{\radii\pgf@xa\pgf@x\midpoint\advance\pgf@x\pgf@xa}%
\anchor{mid west}{\radii\pgf@xa\pgf@x\midpoint\advance\pgf@x-\pgf@xa}%
\anchor{base}{\basepoint}%
\anchor{base east}{\radii\pgf@xa\pgf@x\basepoint\advance\pgf@x\pgf@xa}%
\anchor{base west}{\radii\pgf@xa\pgf@x\basepoint\advance\pgf@x-\pgf@xa}%
\anchor{north}{\pgfpointadd{\centerpoint}{\radii\pgf@x0pt}}%
\anchor{south}{\pgfpointadd{\centerpoint}{\radii\pgf@x0pt\pgf@y-\pgf@y}}%
\anchor{east}{\pgfpointadd{\centerpoint}{\radii\pgf@y0pt}}%
\anchor{west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-\pgf@x\pgf@y0pt}}%
\anchor{north west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-0.707106\pgf@x\pgf@y0.707106\pgf@y}}%
\anchor{south west}{\pgfpointadd{\centerpoint}{\radii\pgf@x-0.707106\pgf@x\pgf@y-0.707106\pgf@y}}%
\anchor{north east}{\pgfpointadd{\centerpoint}{\radii\pgf@x0.707106\pgf@x\pgf@y0.707106\pgf@y}}%
\anchor{south east}{\pgfpointadd{\centerpoint}{\radii\pgf@x0.707106\pgf@x\pgf@y-0.707106\pgf@y}}%
\backgroundpath{%
\radii%
\pgfmathaddtolength\pgf@x{-\pgfkeysvalueof{/pgf/outer xsep}}%
\pgfmathaddtolength\pgf@y{-\pgfkeysvalueof{/pgf/outer ysep}}%
\pgfutil@tempdima\pgf@x%
\pgfutil@tempdimb\pgf@y%
\pgfpathellipse{\centerpoint}{\pgfqpoint{\the\pgfutil@tempdima}{0pt}}{\pgfqpoint{0pt}{\the\pgfutil@tempdimb}}%
\pgfpathmoveto{\centerpoint\advance\pgf@x-\pgfutil@tempdima}%
\pgfpathlineto{\centerpoint\advance\pgf@x\pgfutil@tempdima}%
}%
\anchorborder{%
\pgfextract@process\externalpoint{}%
\radii%
\edef\pgf@marshal{%
\noexpand\pgfpointadd{\noexpand\pgfpointborderellipse{\noexpand\externalpoint}%
{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}}{\noexpand\centerpoint}%
}%
\pgf@marshal%
}%
}%
\endinput