summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex')
-rw-r--r--graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex119
1 files changed, 119 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex b/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex
new file mode 100644
index 0000000000..5378eea470
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-periodictable/pgfPT.formatNumbers.tex
@@ -0,0 +1,119 @@
+% --------------------------------------------------------------------------------------------------
+% subfile of pgf-PeriodicTable package ----------------------------------------------------------
+% --------------------------------------------------------------------------------------------------
+% «format a number to a specific number of decimal places, performing rounding» ----------
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@dot{.}%
+\def\pgfPT@nove{9}%
+\def\pgfPT@minus{-}%
+\def\pgfPT@has@minus#1{\expandafter\pgfPT@test@has@minus#1\relax}%
+\def\pgfPT@test@has@minus#1#2\relax{%
+\edef\pgfPT@test{#1}\ifx\pgfPT@test\pgfPT@minus\relax%
+\edef\pgfPT@num@sign{-}\edef\pgfPT@thenum{#2}%
+\else%
+\edef\pgfPT@num@sign{}\edef\pgfPT@thenum{#1#2}%
+\fi}%
+% --------------------------------------------------------------------------------------------------
+% \pgfPT@formatnumber{decimal places}{number}
+\def\pgfPT@formatnumber#1#2{%
+\ifx#2\@empty\relax\else%
+\ifnum#1=-1\relax#2% print the number as-is
+\else%
+\pgfPT@counta=0\pgfPT@countb=0\pgfPT@countc=0\pgfPT@countd=0\pgfPT@tempfalse\pgfPT@foundfalse%
+\edef\pgfPT@digits@todot{}\edef\pgfPT@digits@afterdot{}%
+\pgfPT@has@minus{#2}%
+\expandafter\pgfPT@numberdecompose\pgfPT@thenum\relax%
+\ifnum\pgfPT@countb>#1\relax%
+\pgfPT@countc=\pgfPT@countb\advance\pgfPT@countc by -#1%
+\edef\pgfPT@digits@toround{\pgfPT@digits@todot\pgfPT@digits@afterdot}%
+\pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@digits@toround\relax%
+\pgfPT@temptrue\expandafter\pgfPT@number@round\pgfPT@digits@toround\relax%
+\pgfPT@temptrue\expandafter\pgfPT@str@gobbleN\pgfPT@digits@toround\relax%
+\pgfPT@temptrue\expandafter\pgfPT@str@invert\pgfPT@digits@toround\relax%
+\pgfPT@counte=#1%
+\pgfPT@temptrue\expandafter\pgfPT@str@insertdot\pgfPT@digits@toround\relax%
+\fi%
+{\pgfPT@num@sign\pgfPT@digits@todot\ifnum#1>0\relax\ifpgfPT@found.\fi\fi\pgfPT@digits@afterdot}%
+\fi\fi%
+}%
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@number@round#1#2\relax{%
+\def\pgfPT@testa{#1}\def\pgfPT@testb{#2}%
+\ifpgfPT@temp\edef\pgfPT@digits@toround{}\pgfPT@countf=0\pgfPT@counte=0\pgfPT@tempfalse\fi%
+\ifnum\pgfPT@counte<\pgfPT@countc\relax%
+\ifx\pgfPT@testa\pgfPT@nove%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround0}\pgfPT@countf=1%
+\else%
+\pgfPT@num=#1\relax%
+\ifnum\pgfPT@countf=1\relax\advance\pgfPT@num by 1\pgfPT@countf=0\fi%
+\ifnum\pgfPT@num>4\relax\pgfPT@countf=1\fi%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround\the\pgfPT@num}%
+\fi%
+\advance\pgfPT@counte by1%
+\else%
+\ifx\pgfPT@testa\pgfPT@nove%
+\ifnum\pgfPT@countf=1\relax%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround0}\pgfPT@countf=1%
+\else%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround9}\pgfPT@countf=0%
+\fi%
+\else%
+\pgfPT@num=#1\relax%
+\ifnum\pgfPT@countf=1\relax\advance\pgfPT@num by 1\pgfPT@countf=0\fi%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround\the\pgfPT@num}%
+\fi%
+\fi%
+\ifx\pgfPT@testb\pgfPT@relax%
+\ifnum\pgfPT@countf=1\relax%
+\advance\pgfPT@countd by1%
+\edef\pgfPT@digits@toround{\pgfPT@digits@toround1}%
+\fi%
+\else\pgfPT@number@round#2\relax\fi%
+}%
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@str@insertdot#1#2\relax{%
+\def\pgfPT@testa{#1}\def\pgfPT@testb{#2}%
+\ifpgfPT@temp\edef\pgfPT@digits@todot{}\edef\pgfPT@digits@afterdot{}\pgfPT@countf=0\pgfPT@tempfalse\pgfPT@foundfalse\fi%
+\ifpgfPT@found%
+\ifnum\pgfPT@counte=0\relax\edef\pgfPT@digits@afterdot{}\else%
+\ifnum\pgfPT@countf=\pgfPT@counte\relax%
+\edef\pgfPT@testb{\pgfPT@relax}%
+\else%
+\edef\pgfPT@digits@afterdot{\pgfPT@digits@afterdot#1}%
+\fi%
+\fi%
+\else%
+\ifnum\pgfPT@countf=\pgfPT@countd\relax\pgfPT@foundtrue\edef\pgfPT@digits@afterdot{\pgfPT@digits@afterdot#1}\pgfPT@countf=0\relax%
+\else\edef\pgfPT@digits@todot{\pgfPT@digits@todot#1}\fi%
+\fi%
+\advance\pgfPT@countf by 1%
+\ifx\pgfPT@testb\pgfPT@relax\else\pgfPT@str@insertdot#2\relax\fi%
+}%
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@numberdecompose#1#2\relax{%
+\def\pgfPT@testa{#1}\def\pgfPT@testb{#2}%
+\ifpgfPT@temp%
+\edef\pgfPT@digits@afterdot{\pgfPT@digits@afterdot#1}%
+\advance\pgfPT@countb by1%
+\else%
+\ifx\pgfPT@testa\pgfPT@dot\pgfPT@temptrue\pgfPT@foundtrue\advance\pgfPT@counta by-1\else%
+\edef\pgfPT@digits@todot{\pgfPT@digits@todot#1}\advance\pgfPT@countd by1\fi\fi%
+\advance\pgfPT@counta by1%
+\ifx\pgfPT@testb\pgfPT@relax\else\pgfPT@numberdecompose#2\relax\fi%
+}%
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@str@invert#1#2\relax{\def\pgfPT@testa{#1}\def\pgfPT@testb{#2}%
+\ifpgfPT@temp\edef\pgfPT@digits@toround{}\pgfPT@tempfalse\fi%
+\edef\pgfPT@digits@toround{#1\pgfPT@digits@toround}%
+\ifx\pgfPT@testb\pgfPT@relax{}\else\pgfPT@str@invert#2\relax\fi%
+}%
+% --------------------------------------------------------------------------------------------------
+\def\pgfPT@str@gobbleN#1#2\relax{%
+\def\pgfPT@testa{#1}\def\pgfPT@testb{#2}%
+\ifpgfPT@temp\edef\pgfPT@digits@toround{}\pgfPT@counte=0\pgfPT@tempfalse\fi%
+\ifnum\pgfPT@counte<\pgfPT@countc\relax%
+\advance\pgfPT@counte by 1%
+\edef\pgfPT@digits@toround{#2}\expandafter\pgfPT@str@gobbleN#2\relax%
+\fi%
+}%
+\endinput%