diff options
Diffstat (limited to 'Master/texmf-dist/metapost/metauml/util_commons.mp')
-rw-r--r-- | Master/texmf-dist/metapost/metauml/util_commons.mp | 139 |
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; |