summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost/metauml/util_commons.mp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/metapost/metauml/util_commons.mp')
-rw-r--r--Master/texmf-dist/metapost/metauml/util_commons.mp139
1 files changed, 139 insertions, 0 deletions
diff --git a/Master/texmf-dist/metapost/metauml/util_commons.mp b/Master/texmf-dist/metapost/metauml/util_commons.mp
new file mode 100644
index 00000000000..b333ee57a5a
--- /dev/null
+++ b/Master/texmf-dist/metapost/metauml/util_commons.mp
@@ -0,0 +1,139 @@
+% MetaUtil, an easier MetaPost life
+% Copyright (C) 2005 Ovidiu Gheorghies
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program; if not, write to the Free Software
+% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+if known _util_commons_mp:
+ expandafter endinput
+fi;
+_util_commons_mp:=1;
+
+input util_log;
+
+vardef lmax(text items)=
+ log "finding lmax of items " & str items;
+ save current, nItems;
+ numeric current, nItems;
+ nItems := 0;
+ current:= 0;
+
+ for item = items:
+ log nItems;
+ log item;
+
+ if nItems = 0:
+ current := item;
+ else:
+ current := max(current)(item);
+ fi;
+ nItems := nItems + 1;
+ endfor;
+
+ current
+enddef;
+
+vardef lmin(text items)=
+ save current, nItems;
+ numeric current, nItems;
+ nItems := 0;
+ current:= 0;
+
+ for item = items:
+ if nItems = 0:
+ current := item;
+ else:
+ current := min(current)(item);
+ fi;
+ nItems := nItems + 1;
+ endfor;
+
+ current
+enddef;
+
+def max(text a)(text b)=
+ if (a > b): a%
+ else:b%
+ fi;
+enddef;
+
+def min(text a)(text b)=
+ if (a < b): a%
+ else:b%
+ fi;
+enddef;
+
+vardef ensurePict(text pictOrText)(expr font, scale) =
+ save p; picture p;
+ if picture pictOrText: p=pictOrText
+ else: p = pictOrText infont font scaled scale
+ fi;
+ p
+enddef;
+
+def pictHeight(text obj) =
+ (ypart (urcorner obj) - ypart (llcorner obj))
+enddef;
+
+def pictWidth(text obj) =
+ (xpart (urcorner obj) - xpart (llcorner obj))
+enddef;
+
+vardef listArray(text array)(text nElements)=
+ save objEnum;
+ string objEnum;
+ objEnum := "";
+
+ for i = 0 upto nElements-1:
+ if i>0:
+ objEnum := objEnum & ", ";
+ fi;
+ objEnum := objEnum & (str array) & (decimal i);
+ endfor;
+
+ objEnum
+enddef;
+
+vardef enumToString(text enumeration)(expr prefix)=
+ save ret, firstVar;
+ string ret;
+ ret := "";
+
+ numeric firstVar;
+ firstVar := 1;
+
+ forsuffixes v = enumeration:
+ if firstVar = 0:
+ ret := ret & ",";
+ else:
+ firstVar := 0;
+ fi;
+
+ ret := ret & prefix & (str v);
+ endfor;
+
+ ret
+enddef;
+
+def _dx(text pA)(text pB) =
+ (xpart(pB)-xpart(pA))
+enddef;
+
+def _dy(text pA, pB) =
+ (ypart(pB)-ypart(pA))
+enddef;
+
+def _length(text pA)(text pB) =
+ sqrt (_dx(pA)(pB)*_dx(pA)(pB) + _dy(pA)(pB)*_dy(pA)(pB))
+enddef;