summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex198
1 files changed, 198 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex b/Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex
new file mode 100644
index 00000000000..07a573c54ba
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex
@@ -0,0 +1,198 @@
+% This file defines utilities common to the \pgfmath files.
+%
+% (c) 2007 Mark Wibrow
+%
+% but subject to the LaTeX Project Public License
+% (http://www.latex-project.org/lppl.txt)
+%
+% and the GNU Public License
+% (http://www.gnu.org/licenses/gpl.txt)
+%
+% Version 0.0 08/03/2007
+
+% Alias some pgf stuff, just in case it needs replacing later.
+%
+\let\pgfmath@x\pgf@x
+\let\pgfmath@xa\pgf@xa
+\let\pgfmath@xb\pgf@xb
+\let\pgfmath@xc\pgf@xc
+
+\let\pgfmath@y\pgf@y
+\let\pgfmath@ya\pgf@ya
+\let\pgfmath@yb\pgf@yb
+\let\pgfmath@yc\pgf@yc
+
+\let\c@pgfmath@counta\c@pgf@counta
+\let\c@pgfmath@countb\c@pgf@countb
+\let\c@pgfmath@countc\c@pgf@countc
+
+\let\pgfmath@ifnextchar\pgfutil@ifnextchar
+
+\let\pgfmath@tonumber\pgf@sys@tonumber
+
+\let\pgfmath@ifundefined\pgfutil@ifundefined
+
+\newif\ifpgfmath@in@
+\def\pgfmath@in@#1#2{%
+ \def\pgfmath@in@@##1#1##2##3\pgfmath@in@@{%
+ \ifx\pgfmath@in@##2\pgfmath@in@false\else\pgfmath@in@true\fi}%
+ \pgfmath@in@@#2#1\pgfmath@in@\pgfmath@in@@}
+
+% Need to redefine to something more appropriate...?
+%
+\def\pgfmath@error#1#2{\PackageError{PGF Math}{#1}{#2}}
+\def\pgfmath@warning#1#2{\PackageWarning{PGF Math}{#1}{#2}}
+
+% \pgfmath@pt
+%
+% Needed to test for 'pt' resulting from
+% expansion using \the.
+%
+{\catcode`\p=12\catcode`\t=12\gdef\PgfmaTh@PT{pt}}
+\edef\pgfmath@pt{\PgfmaTh@PT}%
+
+% \pgfmath@ifin@
+%
+% Interface for \pgfutil@in@
+%
+\def\pgfmath@ifin@#1#2{%
+ \pgfutil@in@{#1}{#2}%
+ \ifpgfutil@in@%
+ \expandafter\pgfmath@firstoftwo%
+ \else%
+ \expandafter\pgfmath@secondoftwo%
+ \fi%
+}
+
+% \pgfmath@empty
+%
+% A handy macro.
+%
+\def\pgfmath@empty{}
+
+
+% \ifpgfmath@empty
+%
+% Has #1 been let to \pgf@empty?
+%
+\def\ifpgfmath@empty#1{%
+ \ifx#1\pgfmath@empty\relax
+ \expandafter\pgfmath@firstoftwo%
+ \else%
+ \expandafter\pgfmath@secondoftwo%
+ \fi%
+}
+\def\pgfmath@firstoftwo#1#2{#1}
+\def\pgfmath@secondoftwo#1#2{#2}
+
+% \ifpgfmath@ifletto
+%
+% Has #1 been let to #2?
+%
+\def\pgfmath@ifletto#1#2{%
+ \ifx#1#2\relax%
+ \expandafter\pgfmath@firstoftwo%
+ \else%
+ \expandafter\pgfmath@secondoftwo%
+ \fi%
+}
+
+% \ifpgfmath@iflettoeither
+%
+% Has #1 been let to #2 or #3?
+%
+\def\pgfmath@iflettoeither#1#2#3{%
+ \ifx#1#2\relax%
+ \let\pgfmath@equaltoeithernext\pgfmath@firstoftwo%
+ \else%
+ \ifx#1#3\relax%
+ \let\pgfmath@equaltoeithernext\pgfmath@firstoftwo%
+ \else%
+ \let\pgfmath@equaltoeithernext\pgfmath@secondoftwo%
+ \fi%
+ \fi%
+ \pgfmath@equaltoeithernext%
+}
+
+% \pgfmath@gobbletilpgfmath@
+%
+% Gobble stream until \pgfmath@ {which is undefined}.
+%
+\def\pgfmath@gobbletilpgfmath@#1\pgfmath@{}
+\def\pgfmath@gobbleone#1{}%
+
+
+% \pgfmathloop
+%
+% A version of the standard TeX and LaTeX
+% \loop, with an additional macro \pgfmathcounter
+% (which is *not* a TeX counter) which keeps
+% track of the iterations.
+%
+\newif\ifpgfmathcontinueloop
+\def\pgfmathloop#1\repeatpgfmathloop{%
+ \def\pgfmathcounter{1}%
+ \def\pgfmath@iterate{%
+ #1\relax%
+ {% Do this inside a group, just in case...
+ \c@pgfmath@counta=\pgfmathcounter%
+ \advance\c@pgfmath@counta by1\relax%
+ \xdef\pgfmathloop@temp{\the\c@pgfmath@counta}%
+ }%
+ \edef\pgfmathcounter{\pgfmathloop@temp}%
+ \expandafter\pgfmath@iterate\fi}%
+ \pgfmath@iterate\let\pgfmath@iterate=\relax}
+\let\repeatpgfmathloop=\fi
+
+
+% \pgfmath@returnone
+%
+% \edef \pfgmathresult to the value of #1 after the end
+% of a group.
+%
+% #1 - a dimension/count/skip register or a macro
+% representing a number or dimension.
+%
+\def\pgfmath@returnone#1{%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \pgfmath@x#1pt\relax\pgfmath@%
+ \xdef\pgfmath@resulttemp{\pgf@sys@tonumber{\pgfmath@x}}%
+ \gdef\pgfmath@returnone@{%
+ \edef\pgfmathresult{\pgfmath@resulttemp}%
+ }%
+ \aftergroup\pgfmath@returnone@}
+
+
+% \pgfmath@returntwo
+%
+% \edef \pfgmathresultx to the value of #1, and
+% \pgfmathresulty to the value of #2, after the end
+% of a group.
+%
+% #1 - a dimension/count/skip register or a macro
+% representing a number or dimension.
+%
+% #2 - a dimension/count/skip register or a macro
+% representing a number or dimension.
+%
+\def\pgfmath@returntwo#1#2{%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \pgfmath@x#1pt\relax\pgfmath@%
+ \xdef\pgfmath@resulttempx{\pgf@sys@tonumber{\pgfmath@x}}%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \pgfmath@x#2pt\relax\pgfmath@%
+ \xdef\pgfmath@resulttempx{\pgf@sys@tonumber{\pgfmath@x}}%
+ \gdef\pgfmath@returntwo@{%
+ \edef\pgfmathresultx{\pgfmath@resulttempx}%
+ \edef\pgfmathresulty{\pgfmath@resulttempy}%
+ }%
+ \aftergroup\pgfmath@returntwo@}
+
+% \pgfmath@smuggleone
+%
+% Summgle a macro outside a group.
+%
+\def\pgfmath@smuggleone#1{%
+ \xdef\pgfmath@smuggleditem{#1}%
+ \gdef\pgfmath@@smuggleone{\edef#1{\pgfmath@smuggleditem}}%
+ \aftergroup\pgfmath@@smuggleone} \ No newline at end of file