summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/metapost
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-02-03 22:45:55 +0000
committerKarl Berry <karl@freefriends.org>2019-02-03 22:45:55 +0000
commitc5d84d1a3ab85b1f314ff62717a7af3c6b75c7af (patch)
tree26333edc4a6082f37d75349f84eded8dbc0d5aef /Master/texmf-dist/metapost
parent2dcfe2f07af05124d5ebee4672d67d7eeae7af60 (diff)
metauml (3feb19)
git-svn-id: svn://tug.org/texlive/trunk@49923 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/metapost')
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml.mp19
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_activity.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_base.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_behavioral_common.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_class.mp412
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_class_assoc.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_class_clipart.mp163
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_class_relations.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_component.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_component_relations.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_defaults.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_instance.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_links.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_note.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_package.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_package_relations.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_paths.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_skin_simple.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_state.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_stereotype.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_templates.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_usecase.mp26
-rw-r--r--Master/texmf-dist/metapost/metauml/metauml_usecase_clipart.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/util_commons.mp22
-rw-r--r--Master/texmf-dist/metapost/metauml/util_group.mp82
-rw-r--r--Master/texmf-dist/metapost/metauml/util_infrastructure.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/util_log.mp20
-rw-r--r--Master/texmf-dist/metapost/metauml/util_margins.mp18
-rw-r--r--Master/texmf-dist/metapost/metauml/util_object.mp62
-rw-r--r--Master/texmf-dist/metapost/metauml/util_picture.mp53
-rw-r--r--Master/texmf-dist/metapost/metauml/util_picture_stack.mp62
-rw-r--r--Master/texmf-dist/metapost/metauml/util_positioning.mp20
-rw-r--r--Master/texmf-dist/metapost/metauml/util_shade.mp18
33 files changed, 469 insertions, 904 deletions
diff --git a/Master/texmf-dist/metapost/metauml/metauml.mp b/Master/texmf-dist/metapost/metauml/metauml.mp
index 997728450b2..95748cf7678 100644
--- a/Master/texmf-dist/metapost/metauml/metauml.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_mp:
expandafter endinput
@@ -51,7 +37,6 @@ inputonce metauml_note;
inputonce metauml_stereotype;
-inputonce metauml_class_clipart;
inputonce metauml_class;
inputonce metauml_instance;
inputonce metauml_class_relations;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_activity.mp b/Master/texmf-dist/metapost/metauml/metauml_activity.mp
index 7843b1da91c..79ac5042e29 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_activity.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_activity.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_activity_mp:
expandafter endinput
@@ -95,10 +81,10 @@ vardef EActivity@#(text _info)(text contents)=
enddef;
vardef Activity_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Activity " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
PictureStack_layout.@#stack;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_base.mp b/Master/texmf-dist/metapost/metauml/metauml_base.mp
index e269fb34ec9..22f73d3906b 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_base.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_base.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2006 Ovidiu Gheorghies, Radu-George Radulescu
-%
-% 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.
+% Copyright 2006 2015 Ovidiu Gheorghies, Radu-George Radulescu
+% Licensed under the Apache License, Version 2.0.
if known _metauml_base_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_behavioral_common.mp b/Master/texmf-dist/metapost/metauml/metauml_behavioral_common.mp
index 271597027b3..190980eb690 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_behavioral_common.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_behavioral_common.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_behavioral_common_mp:
expandafter endinput
@@ -71,10 +57,10 @@ vardef Begin@#=
enddef;
vardef Begin_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Begin " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
@#width = @#info.diameter;
@#height = @#info.diameter;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_class.mp b/Master/texmf-dist/metapost/metauml/metauml_class.mp
index f99b134c0d4..c3ac333b214 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_class.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_class.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_class_mp:
expandafter endinput
@@ -24,12 +10,12 @@ _metauml_class_mp:=1;
% The guard values (such as _metauml_mp) do ensure that the file isn't loaded multiple times,
% but this macro makes sure that MetaPost won't try to load the file and display a message for that.
def inputonce text libraryFile=
- if not known scantokens ("_" & str libraryFile & "_mp"):
- %includeonce% show "Loading " & str libraryFile;
- scantokens ("input " & str libraryFile);
- else:
- %includeonce% show str libraryFile & " already loaded.";
- fi;
+ if not known scantokens ("_" & str libraryFile & "_mp"):
+ %includeonce% show "Loading " & str libraryFile;
+ scantokens ("input " & str libraryFile);
+ else:
+ %includeonce% show str libraryFile & " already loaded.";
+ fi;
enddef;
inputonce metauml_defaults;
@@ -39,86 +25,106 @@ inputonce util_picture;
inputonce util_picture_stack;
inputonce util_shade;
-string accessPublic, accessProtected, accessPrivate;
-accessPublic:="+";
-accessProtected:="#";
-accessPrivate:="-";
+string visibilityPublic, visibilityProtected, visibilityPrivate, visibilityPackage;
+visibilityPublic:="+";
+visibilityProtected:="#";
+visibilityPrivate:="-";
+visibilityPackage:="~";
+
+string metauml_private_abstractMarker, metauml_private_staticMarker;
+metauml_private_abstractMarker := "@abstract";
+metauml_private_staticMarker := "@static";
+
+def abstract expr methodName= metauml_private_abstractMarker&methodName enddef;
+def static expr featureName= metauml_private_staticMarker&featureName enddef;
+
+def metauml_private_isAbstract(expr name) = (substring (0, 9) of name = metauml_private_abstractMarker) enddef;
+def metauml_private_isStatic(expr name) = (substring (0, 7) of name = metauml_private_staticMarker) enddef;
+def metauml_private_stripStatic(expr name) = substring (7,infinity) of name enddef;
+def metauml_private_stripAbstract(expr name) = substring (9,infinity) of name enddef;
vardef ClassInfo@#=
attributes(@#);
- var(numeric) featureAccessSpacing, accessWidth, accessHeight;
var(color) foreColor, borderColor;
+ var(string) featureVisibilityMode;
FontInfo.@#nameFont(metauml_defaultFont, defaultscale);
-
- FontInfo.@#attributeFont (metauml_defaultFont, defaultscale);
- FontInfo.@#methodFont (metauml_defaultFont, defaultscale);
+ FontInfo.@#featureFont (metauml_defaultFont, defaultscale);
FontInfo.@#stereotypeFont(metauml_defaultFont, .7);
ShadeInfo.@#iShade;
- @#featureAccessSpacing := 2;
- @#accessWidth := 7;
- @#accessHeight := 6.75;
+ @#featureVisibilityMode := "individual"; % "none", "grouped"
@#foreColor := .9white;
@#borderColor := black;
PictureInfo.@#iName (2, 2, 1, 3)(@#nameFont);
+ @#iName.ignoreNegativeBase := 1;
- PictureInfo.@#iStereotype(2, -5, 2, 2)(@#stereotypeFont);
- PictureInfo.@#iAttribute (2, 2, 1.25, 0)(@#attributeFont);
- PictureInfo.@#iMethod (2, 2, 1.25, 0)(@#methodFont);
+ PictureInfoCopy.@#iNameAbstract(@#iName);
+ @#iNameAbstract.iFont.name := metauml_defaultFontOblique;
+
+ PictureInfo.@#iStereotype(2, 2, 2, 2)(@#stereotypeFont);
+ @#iStereotypeStack.iPict.ignoreNegativeBase := 1;
PictureStackInfo.@#iStereotypeStack(2, 2, 1, 1)(5.5)(@#iStereotype);
- PictureStackInfo.@#iAttributeStack (2, 2, 2.5, 2)(10.5)(@#iAttribute); % 8.5
- PictureStackInfo.@#iMethodStack (2, 2, 2.5, 2)(10.5)(@#iMethod);
- @#iAttributeStack.iPict.bottom := 2;
- %@#iAttributeStack.iPict.boxed := 1;
- @#iMethodStack.iPict.bottom := 2;
- %@#iMethodStack.iPict.boxed := 1;
- LockInfo.@#iLock(@#accessWidth, @#accessHeight, .6, .15, .55, .4white, .6white, .7white, .3white);
+ PictureInfo.@#iFeature (2, 2, 1.25, 0)(@#featureFont);
- @#iName.ignoreNegativeBase := 1;
- @#iAttributeStack.iPict.ignoreNegativeBase := 1;
- @#iMethodStack.iPict.ignoreNegativeBase := 1;
- @#iStereotypeStack.iPict.ignoreNegativeBase := 1;
+ PictureInfoCopy.@#iFeatureAbstract (@#iFeature);
+ @#iFeatureAbstract.iFont.name := metauml_defaultFontOblique;
+
+ PictureInfoCopy.@#iFeatureStatic (@#iFeature);
+ @#iFeatureStatic.textDecoration := "underline";
+
+ PictureStackInfo.@#iFeatureStack (2, 2, 2.5, 2)(10.5)(@#iFeature);
+ PictureStackInfoCopy.@#iAttributeStack(@#iFeatureStack);
+ PictureStackInfoCopy.@#iMethodStack(@#iFeatureStack);
+
+ @#iFeatureStack.iPict.bottom := 2;
+ @#iFeatureStack.iPict.ignoreNegativeBase := 1;
+
+ PictureStackInfoCopy.@#iAttributeVisibilityStack (@#iFeatureStack);
+ PictureStackInfoCopy.@#iMethodVisibilityStack (@#iFeatureStack);
+
+ @#iAttributeVisibilityStack.right := 0;
+ @#iMethodVisibilityStack.right := 0;
enddef;
vardef ClassInfoCopy@#(text src)=
log "ClassInfoCopy: Copying class";
attributes(@#);
- var(numeric) featureAccessSpacing, accessWidth, accessHeight;
+ var(numeric) featureVisibilitySpacing, visibilityWidth, visibilityHeight;
var(color) foreColor, borderColor;
+ var(string) featureVisibilityMode;
FontInfoCopy.@#nameFont(src.nameFont);
-
- FontInfoCopy.@#attributeFont(src.attributeFont);
- FontInfoCopy.@#methodFont(src.methodFont);
+ FontInfoCopy.@#featureFont(src.featureFont);
FontInfoCopy.@#stereotypeFont(src.stereotypeFont);
ShadeInfoCopy.@#iShade(src.iShade);
- @#featureAccessSpacing := src.featureAccessSpacing;
- @#accessWidth := src.accessWidth;
- @#accessHeight := src.accessHeight;
-
@#foreColor := src.foreColor;
@#borderColor := src.borderColor;
- PictureInfoCopy.@#iName (src.iName);
+ PictureInfoCopy.@#iName (src.iName);
+ PictureInfoCopy.@#iNameAbstract (src.iNameAbstract);
PictureInfoCopy.@#iStereotype(src.iStereotype);
- PictureInfoCopy.@#iAttribute (src.iAttribute);
- PictureInfoCopy.@#iMethod (src.iMethod);
+ PictureInfoCopy.@#iFeature (src.iFeature);
+ PictureInfoCopy.@#iFeatureAbstract (src.iFeatureAbstract);
+ PictureInfoCopy.@#iFeatureStatic (src.iFeatureStatic);
PictureStackInfoCopy.@#iStereotypeStack(src.iStereotypeStack);
+ PictureStackInfoCopy.@#iFeatureStack (src.iFeatureStack);
PictureStackInfoCopy.@#iAttributeStack (src.iAttributeStack);
PictureStackInfoCopy.@#iMethodStack (src.iMethodStack);
+ PictureStackInfoCopy.@#iAttributeVisibilityStack (src.iAttributeVisibilityStack);
+ PictureStackInfoCopy.@#iMethodVisibilityStack (src.iMethodVisibilityStack);
- LockInfoCopy.@#iLock(src.iLock);
+ @#featureVisibilityMode := src.featureVisibilityMode;
enddef;
ClassInfo.iClass;
@@ -136,7 +142,8 @@ iInterface.iAttributeStack.top := 0;
iInterface.iAttributeStack.bottom := 0;
iInterface.iName.iFont.name := metauml_defaultFontOblique;
-ClassInfoCopy.iAbstractClass(iInterface);
+ClassInfoCopy.iAbstractClass(iClass);
+iAbstractClass.iName.iFont.name := metauml_defaultFontOblique;
%
% CLASS
@@ -146,19 +153,30 @@ vardef defClass@#(expr pname) =
@#className := "Class";
string @#name;
- @#name = pname;
+ boolean @#isAbstract;
+
+ @#isAbstract := metauml_private_isAbstract(pname);
+ if @#isAbstract:
+ @#name = metauml_private_stripAbstract(pname);
+ else:
+ @#name = pname;
+ fi
numeric @#nStereotypes;
string @#stereotypes[];
string @#attributes[];
- string @#attributesAccess[];
+ string @#attributesVisibility[];
+ boolean @#attributesIsStatic[];
string @#methods[];
- string @#methodsAccess[];
+ string @#methodsVisibility[];
+ boolean @#methodsIsStatic[];
+ boolean @#methodsIsAbstract[];
numeric @#nAttrs;
numeric @#nMethods;
+ numeric @#nStereotypes;
@#nStereotypes := 0;
@#nAttrs := 0;
@@ -166,56 +184,86 @@ vardef defClass@#(expr pname) =
enddef;
vardef addAttribute@#(expr pcontent) =
- string access;
- access := substring(0,1) of pcontent;
- if (not (access = accessPublic)) and
- (not (access = accessPrivate)) and
- (not (access = accessProtected)):
-
- @#.attributes[@#.nAttrs] := pcontent;
- @#.attributesAccess[@#.nAttrs] := accessProtected;
+ string visibility;
+ string attribute;
+
+ attribute := pcontent;
+
+ @#attributesIsStatic[@#nAttrs] := metauml_private_isStatic(attribute);
+ if @#attributesIsStatic[@#nAttrs]:
+ attribute := metauml_private_stripStatic(attribute);
+ fi
+
+ visibility := substring(0,1) of attribute;
+ if (not (visibility = visibilityPublic)) and
+ (not (visibility = visibilityPrivate)) and
+ (not (visibility = visibilityProtected)) and
+ (not (visibility = visibilityPackage)):
+
+ @#.attributes[@#.nAttrs] := attribute;
+ @#.attributesVisibility[@#.nAttrs] := visibilityPackage;
else:
save from;
from := 1;
- if (substring(1,2) of pcontent) = " ": from := 2; fi;
+ if (substring(1,2) of attribute) = " ": from := 2; fi;
- @#.attributes[@#.nAttrs] := substring(from, infinity) of pcontent;
- @#.attributesAccess[@#.nAttrs] := access;
+ @#.attributes[@#.nAttrs] := substring(from, infinity) of attribute;
+ @#.attributesVisibility[@#.nAttrs] := visibility;
fi;
@#.nAttrs := @#.nAttrs + 1;
enddef;
vardef addMethod@#(expr pcontent) =
- string access;
- access := substring(0,1) of pcontent;
- if (not (access = accessPublic)) and
- (not (access = accessPrivate)) and
- (not (access = accessProtected)):
-
- @#.methods[@#.nMethods] := pcontent;
- @#.methodsAccess[@#.nMethods] := accessProtected;
+ string visibility;
+ string method;
+
+ method := pcontent;
+
+ @#methodsIsStatic[@#nMethods] := metauml_private_isStatic(method);
+ if @#methodsIsStatic[@#nMethods]:
+ method := metauml_private_stripStatic(method);
+ fi
+
+ @#methodsIsAbstract[@#nMethods] := metauml_private_isAbstract(method);
+ if @#methodsIsAbstract[@#nMethods]:
+ method := metauml_private_stripAbstract(method);
+ @#isAbstract := true;
+ fi
+
+ visibility := substring(0,1) of method;
+ if (not (visibility = visibilityPublic)) and
+ (not (visibility = visibilityPrivate)) and
+ (not (visibility = visibilityProtected)) and
+ (not (visibility = visibilityPackage)):
+
+ @#.methods[@#.nMethods] := method;
+ @#.methodsVisibility[@#.nMethods] := visibilityPackage;
else:
- @#.methods[@#.nMethods] := substring(1, 999) of pcontent;
- @#.methodsAccess[@#.nMethods] := access;
+ save from;
+ from := 1;
+ if (substring(1,2) of method) = " ": from := 2; fi;
+
+ @#.methods[@#.nMethods] := substring(from, infinity) of method;
+ @#.methodsVisibility[@#.nMethods] := visibility;
fi;
@#.nMethods := @#.nMethods + 1;
enddef;
vardef classStereotype@#(expr pcontent) =
- @#stereotypes[@#nStereotypes] := pcontent;
- @#nStereotypes := @#nStereotypes + 1;
+ show "Macro classStereotype is deprecated, use Class_stereotypes instead.";
+ Class_stereotypes.@#(pcontent);
enddef;
vardef classStereotypes@#(text stereotypes)=
- for stereotype = stereotypes:
- classStereotype@#(stereotype);
- endfor;
+ show "Macro classStereotypes is deprecated, use Class_stereotypes instead.";
+ Class_stereotypes.@#(stereotypes);
enddef;
vardef EClass@#(text _info)(expr name)(text attributes)(text methods)=
log "EClass begin: " & str @#;
+
defClass@#(name);
log "Copying class info";
@@ -263,87 +311,126 @@ vardef Class_border@#=
objectBox(@#)
enddef;
+vardef Class_noVisibilityMarkers@#=
+ @#info.featureVisibilityMode := "none";
+enddef;
+
vardef Class_layout@# =
- if @#layedout = 1:
+ if @#laidout = 1:
log "Class " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Class layout: " & (str @#);
- @#maxFeatureWidth := 0;
-
EPictureStack.@#stereotypeStack(@#info.iStereotypeStack)
(scantokens listArray(@#stereotypes)(@#nStereotypes))("vcenterbase");
- EPicture.@#namePict(@#info.iName)(@#name);
+ if (@#isAbstract):
+ EPicture.@#namePict(@#info.iNameAbstract)(@#name);
+ else:
+ EPicture.@#namePict(@#info.iName)(@#name);
+ fi;
+
+ layoutObjects(@#stereotypeStack, @#namePict);
+
+ % Define attributes
+
+ def metauml_private_attributeStyleSupplier(expr i)=
+ if @#attributesIsStatic[i]: @#info.iFeatureStatic
+ else: @#info.iFeature
+ fi
+ enddef;
+
+ @#info.iAttributeStack.childStyleSupplier := "metauml_private_attributeStyleSupplier";
+
EPictureStack.@#attributeStack(@#info.iAttributeStack)
(scantokens listArray(@#attributes)(@#nAttrs))("vleftbase");
+
+ if @#info.featureVisibilityMode = "individual":
+ vardef joinCallbackAttributesVisibility@#=
+ setObjectJoin(pb.bottom = @#.attributeStack.pict[index].bottom; pb.midx = pa.midx);
+ setObjectJoinFirst(pa.bottom = @#.attributeStack.pict[index].bottom);
+ enddef;
+
+ EPictureStack.@#attributeVisibilityStack(@#info.iAttributeVisibilityStack)
+ (scantokens listArray(@#attributesVisibility)(@#nAttrs))
+ ("joinCallbackAttributesVisibility." & (str @#));
+ elseif @#info.featureVisibilityMode = "none":
+ EPicture.@#attributeVisibilityStack(iPictNoMargins)("");
+ else:
+ show "Unknown feature visibility mode", @#featureVisibilityMode;
+ 1=2;
+ fi;
+
+ % Define methods
+
+ def metauml_private_methodStyleSupplier(expr i)=
+ if @#methodsIsStatic[i]: @#info.iFeatureStatic
+ elseif @#methodsIsAbstract[i]: @#info.iFeatureAbstract
+ else: @#info.iFeature
+ fi
+ enddef;
+
+ @#info.iMethodStack.childStyleSupplier := "metauml_private_methodStyleSupplier";
+
EPictureStack.@#methodStack(@#info.iMethodStack)
(scantokens listArray(@#methods)(@#nMethods))("vleftbase");
- layoutObjects(@#stereotypeStack, @#namePict, @#attributeStack, @#methodStack);
+ if @#info.featureVisibilityMode = "individual":
+ vardef joinCallbackMethodsVisibility@#=
+ setObjectJoin(pb.bottom = @#.methodStack.pict[index].bottom; pb.midx = pa.midx);
+ setObjectJoinFirst(pa.bottom = @#.methodStack.pict[index].bottom);
+ enddef;
+
+ EPictureStack.@#methodVisibilityStack(@#info.iMethodVisibilityStack)
+ (scantokens listArray(@#methodsVisibility)(@#nMethods))
+ ("joinCallbackMethodsVisibility." & (str @#));
+ elseif @#info.featureVisibilityMode = "none":
+ EPicture.@#methodVisibilityStack(iPictNoMargins)("");
+ else:
+ show "Unknown feature visibility mode", @#featureVisibilityMode;
+ 1=2;
+ fi;
+
+ % Integrate components
+ show layoutObjects(@#attributeStack, @#methodStack);
+ layoutObjects(@#attributeStack, @#methodStack);
+
+ @#attributeStack.left = @#methodStack.left;
+ @#methodStack.top = @#attributeStack.bottom;
- log "Computing maxFeatureWidth";
- log @#stereotypeStack.width;
- log @#namePict.width;
- log @#attributeStack.width;
- log @#methodStack.width;
- log "...";
- @#maxFeatureWidth := lmax(@#stereotypeStack.width, @#namePict.width,
- @#attributeStack.width, @#methodStack.width);
- log "Done computing maxFeatureWidth";
+ layoutObjects(@#attributeVisibilityStack, @#methodVisibilityStack);
- log "max feature width: " & decimal @#maxFeatureWidth;
+ @#attributeVisibilityStack.midx = @#methodVisibilityStack.midx;
- @#namePict.midx = @#midx;
- @#stereotypeStack.midx = @#namePict.midx;
+ if (@#.nMethods = 0) or (@#info.featureVisibilityMode="none"):
+ @#methodVisibilityStack.top = @#methodStack.top;
+ fi;
+ if (@#.nAttrs = 0) or (@#info.featureVisibilityMode="none"):
+ @#attributeVisibilityStack.top = @#attributeStack.top;
+ fi;
- @#stereotypeStack.top = @#top;
- @#namePict.top = @#stereotypeStack.bottom;
- @#attributeStack.top = @#namePict.bottom;
- @#methodStack.top = @#attributeStack.bottom;
+ EGroup.@#visibilityStacks(iGroupNoMargins)(@#attributeVisibilityStack, @#methodVisibilityStack);
+
+ EGroup.@#featureStacks(iGroupNoMargins)(@#attributeStack, @#methodStack);
- @#attributeStack.left = @#methodStack.left =
- @#left + @#info.accessWidth + @#info.featureAccessSpacing;
+ layoutObjects(@#visibilityStacks, @#featureStacks);
- @#width = @#maxFeatureWidth + @#info.accessWidth + @#info.featureAccessSpacing;
- @#bottom = @#methodStack.bottom;
+ @#visibilityStacks.right = @#featureStacks.left;
- log "Class layout done...";
- fi;
-enddef;
-
-vardef Class_paintAccess@#(expr _access, _se) =
- save lock;
- ELock.lock(@#info.iLock)(_access);
- lock.se = _se;
- drawObject(lock);
-enddef;
+ EGroup.@#featureGroup(iGroupNoMargins)(@#visibilityStacks, @#featureStacks);
-vardef Class_drawFeatures@#=
- log "Drawing stereotypes";
- drawObject(@#stereotypeStack);
+ topToBottom(0)(@#stereotypeStack, @#namePict, @#featureGroup);
- log "Drawing name";
- drawObject(@#namePict);
- log "Drawing attribute stack";
- drawObject(@#attributeStack);
+ EGroup.@#all(iGroupNoMargins)(@#stereotypeStack, @#namePict, @#featureGroup);
- log "Drawing method stack";
- drawObject(@#methodStack);
+ layoutObjects(@#all);
- log "********************************** Drawing access locks";
- for i = 0 upto @#nAttrs-1:
- log @#attributesAccess[i];
- Class_paintAccess@#(@#attributesAccess[i],
- @#attributeStack.pict[i].sw + (-@#info.featureAccessSpacing, @#info.iAttributeStack.iPict.bottom));
- endfor;
+ @#.nw = @#all.nw;
+ @#.se = @#all.se;
- for i = 0 upto @#nMethods-1:
- log @#methodsAccess[i];
- Class_paintAccess@#(@#methodsAccess[i],
- @#methodStack.pict[i].sw + (-@#info.featureAccessSpacing, @#info.iMethodStack.iPict.bottom));
- endfor;
+ log "Class layout for " & (str @#) & " done...";
+ fi;
enddef;
vardef Class_paintSkin@# =
@@ -351,31 +438,48 @@ vardef Class_paintSkin@# =
nameAttributeY := @#attributeStack.top;
attributeMethodY := @#methodStack.top;
- %fill Class_border.@# shifted (@#info.shade,-@#info.shade)
- % withcolor .7white withpen currentpen scaled 1;
- drawObjectShade(@#);
+ drawObjectShade(@#);
- fill Class_border.@# withcolor @#info.foreColor;
- draw Class_border.@# withcolor @#info.borderColor;
+ fill Class_border.@# withcolor @#info.foreColor;
+ draw Class_border.@# withcolor @#info.borderColor;
- draw (xpart @#nw, nameAttributeY)--(xpart @#se, nameAttributeY) withcolor @#info.borderColor;
- draw (xpart @#nw, attributeMethodY)--(xpart @#se, attributeMethodY) withcolor @#info.borderColor;
+ draw (xpart @#nw, nameAttributeY)--(xpart @#se, nameAttributeY) withcolor @#info.borderColor;
+ draw (xpart @#nw, attributeMethodY)--(xpart @#se, attributeMethodY) withcolor @#info.borderColor;
enddef;
vardef Class_draw@#=
- log "draw class begin...";
+ log "Class_draw begin " & @#;
Class_layout.@#;
objectEnsurePositioning.@#;
Class_paintSkin.@#;
- Class_drawFeatures.@#;
+
+ drawObjects(@#all);
+ log "Class_draw end " & @#;
enddef;
vardef Class_setDebugMode@#=
@#.info.iName.boxed := 1;
+
+ @#.info.iFeature.boxed := 1;
+ @#.info.iFeatureStatic.boxed := 1;
+ @#.info.iFeatureAbstract.boxed := 1;
+
@#.info.iStereotypeStack.boxed := 1;
@#.info.iStereotypeStack.iPict.boxed := 1;
@#.info.iAttributeStack.boxed := 1;
@#.info.iAttributeStack.iPict.boxed := 1;
@#.info.iMethodStack.boxed := 1;
@#.info.iMethodStack.iPict.boxed := 1;
+
+ @#.info.iAttributeVisibilityStack.boxed := 1;
+ @#.info.iAttributeVisibilityStack.iPict.boxed := 1;
+ @#.info.iMethodVisibilityStack.boxed := 1;
+ @#.info.iMethodVisibilityStack.iPict.boxed := 1;
+enddef;
+
+vardef Class_stereotypes@#(text _stereotypes)=
+ for stereotype = _stereotypes:
+ @#stereotypes[@#nStereotypes] := stereotype;
+ @#nStereotypes := @#nStereotypes + 1;
+ endfor;
enddef;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_class_assoc.mp b/Master/texmf-dist/metapost/metauml/metauml_class_assoc.mp
index fb7786b8794..720117fc90b 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_class_assoc.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_class_assoc.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_class_assoc_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_class_clipart.mp b/Master/texmf-dist/metapost/metauml/metauml_class_clipart.mp
deleted file mode 100644
index faa175494e8..00000000000
--- a/Master/texmf-dist/metapost/metauml/metauml_class_clipart.mp
+++ /dev/null
@@ -1,163 +0,0 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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 _metauml_class_clipart_mp:
- expandafter endinput
-fi;
-_metauml_class_clipart_mp:=1;
-
-% Sadly, this copy of the macro is needed to prevent multiple file loads being shown by MetaPost.
-% The guard values (such as _metauml_mp) do ensure that the file isn't loaded multiple times,
-% but this macro makes sure that MetaPost won't try to load the file and display a message for that.
-def inputonce text libraryFile=
- if not known scantokens ("_" & str libraryFile & "_mp"):
- %includeonce% show "Loading " & str libraryFile;
- scantokens ("input " & str libraryFile);
- else:
- %includeonce% show str libraryFile & " already loaded.";
- fi;
-enddef;
-
-inputonce util_log;
-
-%%
-%% This file contains various drawing which can be used in
-%% UML class diagrams
-%%
-
-vardef LockInfo@#(expr _width, _height, _y, _d, _span, _faceColor, _topColor, _rightColor, _lockColor)=
- numeric @#y, @#d, @#span, @#width, @#height;
- color @#faceColor, @#topColor, @#rightColor, @#lockColor;
-
- @#width := _width;
- @#height := _height;
-
- @#heightRatio := _y;
- @#depthRatio := _d;
- @#span := _span;
-
- @#faceColor := _faceColor;
- @#topColor := _topColor;
- @#rightColor := _rightColor;
- @#lockColor := _lockColor;
-enddef;
-
-vardef LockInfoCopy@#(text src)=
- LockInfo@#(src.width, src.height, src.heightRatio, src.depthRatio, src.span,
- src.faceColor, src.topColor, src.rightColor, src.lockColor);
-enddef;
-
-LockInfo.iLock(8, 8, .55, .15, .55, .4white, .6white, .7white, .3white);
-
-def lockLockPen=pencircle scaled .8pt enddef;
-def lockLockTension=tension(1) enddef;
-
-vardef ELock@#(text lockInfo)(expr how)=
- ObjectEquations(@#);
- @#className := "Lock";
-
- generic_declare(path) _n.pFace, _n.pRight, _n.pTop;
- generic_declare(path) _n.pLock;
- generic_declare(string) _n.mode;
-
- LockInfoCopy.@#info(lockInfo);
-
- @#height = @#info.height;
- @#width = @#info.width;
-
- @#mode := how;
-
- log "ELock completed";
-enddef;
-
-vardef Lock@#(expr how)=
- ELock@#(iLock)(how);
-enddef;
-
-vardef Lock_draw@#=
- log "Drawing lock";
- log @#nw;
- log @#se;
- generic_declare(numeric) _n.depth,_n.ya, _n.xa;
-
- @#depth = @#info.width * @#info.depthRatio;
- @#ya = ypart @#nw - @#height * @#info.heightRatio;
- @#xa = xpart @#se - @#depth;
-
- @#pFace = (xpart @#nw, @#ya) -- (@#xa, @#ya) -- (@#xa, ypart @#se) -- (xpart @#nw, ypart @#se) -- cycle;
- @#pRight = (@#xa, ypart @#se) -- (xpart @#se, ypart @#se + @#depth) --
- (xpart @#se, @#ya + @#depth) -- (@#xa, @#ya) -- cycle;
- @#pTop = (@#xa, @#ya) -- (xpart @#se, @#ya + @#depth) --
- (xpart @#nw + @#depth, @#ya + @#depth) -- (xpart @#nw, @#ya) -- cycle;
-
- save myMode; string myMode;
- myMode = "base";
- if ((@#mode="private") or (@#mode="-")):
- myMode := "closed";
- elseif ((@#mode="protected") or (@#mode="#")):
- myMode := "opened";
- fi;
-
- if myMode="closed":
- log "Closed!";
- generic_declare(pair) _n.A, _n.B, _n.C, _n.M;
- generic_declare(numeric) _n.span;
- @#span = @#info.span * @#width;
-
- @#M = ((xpart @#se + xpart @#nw) / 2, @#ya + @#depth/2);
- log @#M;
- @#A = (xpart @#M - (@#span / 2), ypart @#M);
- log @#A;
- @#B = (xpart @#M + (@#span / 2), ypart @#M);
- log @#B;
- @#C = (xpart @#M, ypart @#nw);
- log @#C;
- linecap:=butt;
-
- @#pLock = @#A {curl 0}..lockLockTension .. @#C .. lockLockTension .. {curl 0} @#B;
- %withcolor @#info.lockColor withpen lockLockPen;
- elseif myMode="opened":
- log "Opened!";
-
- generic_declare(pair) _n.A, _n.B, _n.C, _n.M;
- generic_declare(numeric) _n.span;
- @#span = @#info.span * @#width;
-
- @#M = ((xpart @#se + xpart @#nw) / 2, @#ya + @#depth/2);
- @#A = (xpart @#M - (@#span / 2), ypart @#M) + (0, @#height/3);
- @#B = (xpart @#M + (@#span / 2), ypart @#M);
- @#C = (xpart @#M, ypart @#nw);
- log @#M, @#A, @#B, @#C;
-
- linecap:=butt;
-
- @#pLock = @#A {curl 0}..lockLockTension .. @#C .. lockLockTension .. {curl 0} @#B;
- %withcolor @#info.lockColor withpen lockLockPen;
- fi;
-
- fill @#pFace withcolor @#info.faceColor;
- fill @#pRight withcolor @#info.rightColor;
- fill @#pTop withcolor @#info.topColor;
-
- if not ((myMode = "opened") or (myMode="closed")):
- log "No lock to draw...";
- else:
- draw @#pLock withcolor @#info.lockColor withpen lockLockPen;
- fi;
-enddef;
-
-
diff --git a/Master/texmf-dist/metapost/metauml/metauml_class_relations.mp b/Master/texmf-dist/metapost/metauml/metauml_class_relations.mp
index 00306bd3882..0379aceecac 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_class_relations.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_class_relations.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_class_relations_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_component.mp b/Master/texmf-dist/metapost/metauml/metauml_component.mp
index d0d531d872c..c124f771108 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_component.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_component.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2006 Radu-George Radulescu, 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.
+% Copyright 2006 2015 Radu-George Radulescu, Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_component_mp:
expandafter endinput
@@ -108,10 +94,10 @@ vardef EComponent@#(text _info)(text contents)(text _subItems)=
enddef;
vardef Component_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Component '" & (str @#) & "' has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Component layout: '" & (str @#) & "'";
log "Component name layout '" & (str @#) & "'...";
diff --git a/Master/texmf-dist/metapost/metauml/metauml_component_relations.mp b/Master/texmf-dist/metapost/metauml/metauml_component_relations.mp
index 3c8f68c225e..e6800a2acb5 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_component_relations.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_component_relations.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2006 Radu-George Radulescu, 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.
+% Copyright 2006 2015 Radu-George Radulescu, Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_component_relations_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_defaults.mp b/Master/texmf-dist/metapost/metauml/metauml_defaults.mp
index db1183a52bf..228df4c48c0 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_defaults.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_defaults.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_defaults_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_instance.mp b/Master/texmf-dist/metapost/metauml/metauml_instance.mp
index cbe3b64f611..543920eb49b 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_instance.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_instance.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2005 Radu-George Radulescu
-%
-% 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.
+% Copyright 2005 2015 Radu-George Radulescu
+% Licensed under the Apache License, Version 2.0.
if known _metauml_instance_mp:
expandafter endinput
@@ -131,10 +117,10 @@ vardef Instance_border@#=
enddef;
vardef Instance_layout@# =
- if @#layedout = 1:
+ if @#laidout = 1:
log "Instance " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Instance layout: " & (str @#);
@#maxFeatureWidth := 0;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_links.mp b/Master/texmf-dist/metapost/metauml/metauml_links.mp
index 3b54368012b..06a9dbabba5 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_links.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_links.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
% A LinkStructure is used to compute the relevant elements
% of a link, such as what is the main path of the link and
diff --git a/Master/texmf-dist/metapost/metauml/metauml_note.mp b/Master/texmf-dist/metapost/metauml/metauml_note.mp
index c0f1252cbf2..083b686f65e 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_note.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_note.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_note_mp:
expandafter endinput
@@ -109,10 +95,10 @@ vardef ENote@#(text _info)(text contents)=
enddef;
vardef Note_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Note " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Note layout: " & (str @#);
PictureStack_layout.@#stack;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_package.mp b/Master/texmf-dist/metapost/metauml/metauml_package.mp
index 8394efcaf2a..2e76c41fd12 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_package.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_package.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2006 Radu-George Radulescu, 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.
+% Copyright 2006 2015 Radu-George Radulescu, Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_package_mp:
expandafter endinput
@@ -115,10 +101,10 @@ vardef EPackage@#(text _info)(text contents)(text _subItems)=
enddef;
vardef Package_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Package '" & (str @#) & "' has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Package layout: '" & (str @#) & "'";
log "Package name layout '" & (str @#) & "'...";
diff --git a/Master/texmf-dist/metapost/metauml/metauml_package_relations.mp b/Master/texmf-dist/metapost/metauml/metauml_package_relations.mp
index 5b740c0557f..87f1cc4dd11 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_package_relations.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_package_relations.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% Copyright (C) 2006 Radu-George Radulescu
-%
-% 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.
+% Copyright 2006 2015 Radu-George Radulescu
+% Licensed under the Apache License, Version 2.0.
if known _metauml_package_relations_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_paths.mp b/Master/texmf-dist/metapost/metauml/metauml_paths.mp
index d0fc27bb332..d93832fd0f1 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_paths.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_paths.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_paths_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_skin_simple.mp b/Master/texmf-dist/metapost/metauml/metauml_skin_simple.mp
index afafe88fab8..3225eb8fc3b 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_skin_simple.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_skin_simple.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
%% Usage of skins
%%
diff --git a/Master/texmf-dist/metapost/metauml/metauml_state.mp b/Master/texmf-dist/metapost/metauml/metauml_state.mp
index fb9875e262a..08b5d3be244 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_state.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_state.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_state_mp:
expandafter endinput
@@ -119,10 +105,10 @@ vardef State_internalTransitions@#(text transitions)=
enddef;
vardef State_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "State '" & (str @#) & "' has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "State layout: '" & (str @#) & "'";
EPictureStack.@#internalTransitionsStack(@#info.iStack)
diff --git a/Master/texmf-dist/metapost/metauml/metauml_stereotype.mp b/Master/texmf-dist/metapost/metauml/metauml_stereotype.mp
index 64beff494d8..9251c308339 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_stereotype.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_stereotype.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_stereotype_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/metauml_templates.mp b/Master/texmf-dist/metapost/metauml/metauml_templates.mp
index 4ce5fc44e78..940377bc202 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_templates.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_templates.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_templates_mp:
expandafter endinput
@@ -96,10 +82,10 @@ vardef ClassTemplate@#(text templates)(text theClass)=
enddef;
vardef Template_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Template " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Template layout: " & (str @#);
PictureStack_layout.@#elementsStack;
fi;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_usecase.mp b/Master/texmf-dist/metapost/metauml/metauml_usecase.mp
index e9edf9471b2..f9c666abf3f 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_usecase.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_usecase.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _metauml_usecase_mp:
expandafter endinput
@@ -82,10 +68,10 @@ vardef Actor_setDebugMode@#=
enddef;
vardef Actor_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Actor " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Actor layout: " & (str @#);
Human_layout.@#human;
PictureStack_layout.@#nameStack;
@@ -172,10 +158,10 @@ vardef EUsecase@#(text _info)(text contents)=
enddef;
vardef Usecase_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Usecase " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
EPictureStack.@#nameStack(@#info.iNameStack)(scantokens listArray(@#lines)(@#nLines))("vcenterbase");
PictureStack_layout.@#nameStack;
diff --git a/Master/texmf-dist/metapost/metauml/metauml_usecase_clipart.mp b/Master/texmf-dist/metapost/metauml/metauml_usecase_clipart.mp
index a4750b5f52f..3344454bc43 100644
--- a/Master/texmf-dist/metapost/metauml/metauml_usecase_clipart.mp
+++ b/Master/texmf-dist/metapost/metauml/metauml_usecase_clipart.mp
@@ -1,19 +1,5 @@
-% MetaUML, a MetaPost library for typesetting exquisite UML diagrams.
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
%%
%% This file contains various drawings which can be used in
@@ -92,10 +78,10 @@ vardef Human@#=
enddef;
vardef Human_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "Human " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
log "Human layout: " & (str @#);
attributes(@#);
diff --git a/Master/texmf-dist/metapost/metauml/util_commons.mp b/Master/texmf-dist/metapost/metauml/util_commons.mp
index 1229da6b025..3ff7f06e833 100644
--- a/Master/texmf-dist/metapost/metauml/util_commons.mp
+++ b/Master/texmf-dist/metapost/metauml/util_commons.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_commons_mp:
expandafter endinput
@@ -74,13 +60,13 @@ vardef lmin(text items)=
current
enddef;
-def max(text a)(text b)=
+def _max(text a)(text b)=
if (a > b): a%
else:b%
fi;
enddef;
-def min(text a)(text b)=
+def _min(text a)(text b)=
if (a < b): a%
else:b%
fi;
diff --git a/Master/texmf-dist/metapost/metauml/util_group.mp b/Master/texmf-dist/metapost/metauml/util_group.mp
index 1a3380c9f5c..7dad82ba023 100644
--- a/Master/texmf-dist/metapost/metauml/util_group.mp
+++ b/Master/texmf-dist/metapost/metauml/util_group.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_group_mp:
expandafter endinput
@@ -57,6 +43,7 @@ vardef GroupInfoCopy@#(text src)=
enddef;
GroupInfo.iGroup(2, 2, 2, 2);
+GroupInfo.iGroupNoMargins(0, 0, 0, 0);
GroupInfoCopy.iGroupBoxed(iGroup);
iGroupBoxed.boxed := 1;
@@ -88,19 +75,22 @@ vardef Group@#(text objects)=
enddef;
vardef Group_layout@#=
- if @#layedout = 0:
+ if @#laidout = 0:
log "Needing layout for group " & (str @#);
- @#layedout := 1;
+ @#laidout := 1;
+
+ log "Calling layout for objects in group '" & (str @#) & "' .";
+ log " Objects are: '" & @#objectsAsString & "'.";
if (@#objectsAsString = ""):
+ log "Empty layout begin";
@#width = @#info.left + @#info.right;
@#height = @#info.top + @#info.bottom;
+ log "Empty layout end";
else:
- log "Calling layout for objects group '" & (str @#) & "' ...";
- log " object are: '" & @#objectsAsString & "'.";
-
+ log "Layout with content";
layoutObjects(scantokens @#objectsAsString);
- log "All objects in group '" & (str @#) & "' are now layed out.";
+ log "All objects in group '" & (str @#) & "' are now laid out.";
% As already tested, @#objectsAsString must be <> "".
% See page 53, User's manual for MetaPost
@@ -108,51 +98,57 @@ vardef Group_layout@#=
% executed, with the loop index parameter set to
% the empty suffix" (!)
- log "Proceeding to finding min/max x/y of objects:";
- log " " & @#objectsAsString;
+ log "Group_layout: finding min/max x/y of objects:" & @#objectsAsString;
__objectIndex := 0;
forsuffixes obj__ = scantokens @#objectsAsString:
if __objectIndex = 0:
- log "First object " & str obj__;
+ log "Group_layout: first object " & str obj__ & ", initial minx, maxx, miny, maxy follow.";
@#minx := obj__.left;
- log @#maxx;
- log obj__.right;
@#maxx := obj__.right;
- log @#maxx;
@#miny := obj__.bottom;
@#maxy := obj__.top;
+ log @#minx;
+ log @#maxx;
+ log @#miny;
+ log @#maxy;
__objectIndex := __objectIndex + 1;
else:
- log "Current object " & str obj__;
+ log "Group_layout: current object " & str obj__;
- log "comparing(min)";
+ log "comparing minx";
log @#minx;
- log @#obj__.left;
- @#minx := min(@#minx)(obj__.left);
+ log obj__.left;
+ @#minx := min(@#minx, obj__.left);
- log "comparing(max)";
+ log "comparing maxx";
log @#maxx;
- log @#obj__.right;
- @#maxx := max(@#maxx)(obj__.right);
+ log obj__.right;
+ @#maxx := max(@#maxx, obj__.right);
- log "comparing(min)";
+ log "comparing miny";
log @#miny;
- log @#obj__.bottom;
- @#miny := min(@#miny)(obj__.bottom);
+ log obj__.bottom;
+ @#miny := min(@#miny, obj__.bottom);
- log "comparing(max)";
+ log "comparing maxy";
log @#maxy;
- log @#obj__.top;
- @#maxy := max(@#maxy)(obj__.top);
+ log obj__.top;
+ @#maxy := max(@#maxy, obj__.top);
__objectIndex := __objectIndex + 1;
fi;
endfor;
- log "... done iterating";
- log "maxx = ";
+ log "Group_layout: finding min/max x/y: done.";
+ log @#minx;
log @#maxx;
+ log @#miny;
+ log @#maxy;
+
+ log "Group_layout: about to set nw, se";
+ log @#nw;
+ log @#se;
@#nw = (@#minx - @#info.left, @#maxy + @#info.top);
@#se = (@#maxx + @#info.right, @#miny - @#info.bottom);
diff --git a/Master/texmf-dist/metapost/metauml/util_infrastructure.mp b/Master/texmf-dist/metapost/metauml/util_infrastructure.mp
index 457f6bf89ca..8e6c2ed05d7 100644
--- a/Master/texmf-dist/metapost/metauml/util_infrastructure.mp
+++ b/Master/texmf-dist/metapost/metauml/util_infrastructure.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_infrastructure_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/util_log.mp b/Master/texmf-dist/metapost/metauml/util_log.mp
index d7adb3c8589..61c86ec8d6c 100644
--- a/Master/texmf-dist/metapost/metauml/util_log.mp
+++ b/Master/texmf-dist/metapost/metauml/util_log.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
%%% if known _util_log_mp:
%%% expandafter endinput
@@ -38,7 +24,7 @@ enddef;
def log text txt=
if (util_log_defaultlevel <= util_log_thresholdlevel):
- %includeonce% show txt
+ show txt
else:
% do nothing
fi;
diff --git a/Master/texmf-dist/metapost/metauml/util_margins.mp b/Master/texmf-dist/metapost/metauml/util_margins.mp
index 508a0e6bb44..7b014ee9e7d 100644
--- a/Master/texmf-dist/metapost/metauml/util_margins.mp
+++ b/Master/texmf-dist/metapost/metauml/util_margins.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_margins_mp:
expandafter endinput
diff --git a/Master/texmf-dist/metapost/metauml/util_object.mp b/Master/texmf-dist/metapost/metauml/util_object.mp
index 52f932ddc34..fbc569dd6fe 100644
--- a/Master/texmf-dist/metapost/metauml/util_object.mp
+++ b/Master/texmf-dist/metapost/metauml/util_object.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_object_mp:
expandafter endinput
@@ -48,9 +34,9 @@ def ObjectEquations(suffix $)=
var(picture) pict;
var(string) className;
- var(numeric) layedout, drawn;
+ var(numeric) laidout, drawn;
- $.layedout := 0;
+ $.laidout := 0;
$.drawn := 0;
$.left = xpart $.nw = xpart $.sw;
@@ -86,7 +72,7 @@ vardef objectBorder(suffix @#)=
save methodName;
string methodName;
methodName := @#className & "_border";
- log "invoking " & methodName & " arg=" & str @#;
+ log "objectBorder: invoking " & methodName & " arg=" & str @#;
scantokens (methodName).@#
enddef;
@@ -105,7 +91,7 @@ vardef layoutObject(suffix @#)=
save methodName;
string methodName;
methodName := @#className & "_layout";
- log "invoking " & methodName & " arg=" & str @#;
+ log "layoutObject: invoking " & methodName & " arg=" & str @#;
scantokens (methodName).@#;
enddef;
@@ -114,7 +100,7 @@ vardef drawObject(suffix @#)=
save methodName;
string methodName;
methodName := @#className & "_draw";
- log "invoking " & methodName & " arg=" & str @#;
+ log "drawObject: invoking " & methodName & " arg=" & str @#;
scantokens (methodName).@#;
enddef;
@@ -141,12 +127,13 @@ vardef drawObjectAt(suffix @#)(text eq)=
enddef;
vardef layoutObjects(text objects)=
- log "Layout objects...";
+ log "layoutObjects: begin";
forsuffixes o = objects:
if (str o) <> "":
layoutObject(o);
fi;
endfor;
+ log "layoutObjects: end";
enddef;
vardef drawObjects(text objects)=
@@ -176,17 +163,29 @@ enddef;
%% joinObjects (p, q, r);
%%
def joinObjects(text pictures)=
- save skipFirstPicture;
- skipFirstPicture := 1;
+ log "joinObjects: call started.";
+
+ save _index;
+ _index := 0;
forsuffixes p=pictures:
- if skipFirstPicture=0:
- objectDoJoin(previousPic, p);
+ exitif (str p) = "";
+ if _index=0:
+ log " joinObjects: calling join for first object.";
+ log _index;
+ log p;
+ objectDoJoinFirst(p)(_index);
else:
- % first picture is skipped
- skipFirstPicture := 0;
+ log " joinObjects: calling join for next object.";
+ log _index;
+ log p;
+ objectDoJoin(previousPic, p)(_index);
fi;
+
+ _index := _index + 1;
def previousPic=p enddef;
endfor;
+
+ log "joinObjects: call ended."
enddef;
%%
@@ -207,7 +206,12 @@ enddef;
%% setPictureJoin(pa.ne = pb.nw);
%%
def setObjectJoin(text eq)=
- def objectDoJoin(suffix pa, pb)=eq enddef;
+ def objectDoJoin(suffix pa, pb)(expr index)=eq; enddef;
+ def objectDoJoinFirst(suffix pa)(expr index)= log " objectDoJoinFirst: NOP"; enddef;
+enddef;
+
+def setObjectJoinFirst(text eq)=
+ def objectDoJoinFirst(suffix pa)(expr index)=eq; enddef;
enddef;
%%
diff --git a/Master/texmf-dist/metapost/metauml/util_picture.mp b/Master/texmf-dist/metapost/metauml/util_picture.mp
index b148f04857e..85ce68f7d41 100644
--- a/Master/texmf-dist/metapost/metauml/util_picture.mp
+++ b/Master/texmf-dist/metapost/metauml/util_picture.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_picture_mp:
expandafter endinput
@@ -91,13 +77,15 @@ vardef PictureInfo@#(expr pleft, pright, ptop, pbottom)(text pfont)=
%%
var(numeric) fixedWidth, fixedHeight;
- %% Controls how the contents of the picture is to be alligned relatively
- %% to the picture margins. Can be one of "left", "centered", defaults to
+ %% Controls how the contents of the picture is to be aligned relatively
+ %% to the picture margins. Can be one of "left", "centered", and defaults to
%% "left". The "centered" setting is useful for Picture-s whose fixedWidth
%% is set to a given value.
%%
var(string) halign, valign;
-
+
+ var(string) textDecoration;
+
@#boxed := 0;
@#borderColor := blue;
@@ -108,7 +96,9 @@ vardef PictureInfo@#(expr pleft, pright, ptop, pbottom)(text pfont)=
@#halign := "left";
@#valign := "bottom";
-
+
+ @#textDecoration := "none";
+
Margins.@#(pleft, pright, ptop, pbottom);
FontInfoCopy.@#iFont(pfont);
@@ -120,7 +110,8 @@ vardef PictureInfoCopy@#(text src)=
@#boxed := src.boxed;
@#borderColor := src.borderColor;
@#ignoreNegativeBase := src.ignoreNegativeBase;
-
+ @#textDecoration := src.textDecoration;
+
@#fixedWidth := src.fixedWidth;
@#fixedHeight := src.fixedHeight;
@@ -136,6 +127,7 @@ vardef PictureInfo_toString@#=
enddef;
PictureInfo.iPict(2, 2, 2, 2)(iFont);
+PictureInfo.iPictNoMargins(0, 0, 0, 0)(iFont);
PictureInfoCopy.iPictBoxed(iPict);
iPictBoxed.boxed := 1;
@@ -182,12 +174,12 @@ enddef;
%% Lays out the Picture.
%%
vardef Picture_layout@# =
- if @#layedout = 1:
- log "Picture " & str @# & " already layed out.";
+ if @#laidout = 1:
+ log "Picture " & str @# & " already laid out.";
else:
log "Laying out " & (str @#);
- @#layedout := 1;
+ @#laidout := 1;
if known @#contentAsPicture:
log "Content is known to be a picture";
@@ -225,7 +217,7 @@ vardef Picture_layout@# =
elseif @#info.halign = "center":
xdelta__ := (@#width-pictWidth(@#pict))/2;
else:
- 2 = 3; % throw exception illegal value for @#info.hallign
+ 2 = 3; % throw exception illegal value for @#info.halign
fi;
if @#info.valign = "bottom":
@@ -233,7 +225,7 @@ vardef Picture_layout@# =
elseif @#info.valign = "center":
ydelta__ := (@#height-pictHeight(@#pict))/2 - @#negativeBase + negativeBaseAdjustement__;
else:
- 2 = 3; % throw exception illegal value for @#info.vallign
+ 2 = 3; % throw exception illegal value for @#info.valign
fi;
@#contentShift = @#sw + (xdelta__, ydelta__);
@@ -249,6 +241,15 @@ vardef Picture_draw@# =
draw @#pict shifted @#contentShift;
+ if (@#info.textDecoration = "underline"):
+ save ydelta, height;
+ height := pictHeight(@#pict) - @#negativeBase;
+
+ ydelta := @#info.bottom - @#negativeBase - 0.8;
+
+ draw @#sw + (@#info.left, ydelta) -- @#se + (-@#info.right, ydelta) withcolor black withpen pencircle scaled 0.2bp;
+ fi;
+
if (@#info.boxed = 1):
draw objectBox(@#) withcolor @#info.borderColor;
fi;
diff --git a/Master/texmf-dist/metapost/metauml/util_picture_stack.mp b/Master/texmf-dist/metapost/metauml/util_picture_stack.mp
index e1a1a51bfba..edade327ef8 100644
--- a/Master/texmf-dist/metapost/metauml/util_picture_stack.mp
+++ b/Master/texmf-dist/metapost/metauml/util_picture_stack.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_picture_stack_mp:
expandafter endinput
@@ -44,32 +30,36 @@ inputonce util_log;
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-vardef PictureStackInfo@#(expr pleft, pright, ptop, pbottom)(text pspacing)(text ppictInfo)=
+%% Style for a stack of child pictures with the given margins, spacing between children, and a common child style.
+%% If child style supplier @#childStyleSupplier is set, it takes precedence over the common child style.
+%% The child style supplier must be the name of a macro taking a child index as an argument and returning a child style.
+vardef PictureStackInfo@#(expr marginLeft, marginRight, marginTop, marginBottom)(text _spacing)(text _childStyle)=
attributes(@#);
var(numeric) boxed;
var(color) borderColor;
-
- var(numeric) left, right, top, bottom;
var(numeric) spacing;
+ var(string) childStyleSupplier;
- Margins@#(pleft, pright, ptop, pbottom);
+ Margins@#(marginLeft, marginRight, marginTop, marginBottom);
- @#spacing := pspacing;
+ @#spacing := _spacing;
@#boxed := 0;
@#borderColor := green;
- PictureInfoCopy.@#iPict(ppictInfo);
+ @#childStyleSupplier := "";
+
+ PictureInfoCopy.@#iPict(_childStyle);
enddef;
vardef PictureStackInfoCopy@#(text src)=
PictureStackInfo@#(src.left, src.right, src.top, src.bottom)(src.spacing)(src.iPict);
+ @#childStyleSupplier := src.childStyleSupplier;
@#boxed := src.boxed;
@#borderColor := src.borderColor;
enddef;
-log "*** Creating iStack...";
PictureStackInfo.iStack(2, 2, 2, 2)(2)(iPict);
vardef EPictureStack@#(text pictStackInfo)(text thePictures)(text how)=
@@ -81,14 +71,23 @@ vardef EPictureStack@#(text pictStackInfo)(text thePictures)(text how)=
attributes(@#);
var(numeric) nItems;
var(numeric) minx, miny, maxx, maxy;
- var(string) picturesAsString;
- var(string) joinMethod;
-
- @#joinMethod := how;
+ var(string) picturesAsString;
+ %var(text) joinMethod;
+
+ string @#joinMethod;
+
+ %@#joinMethod := str how;
+ for l=how:
+ @#joinMethod := l;
+ endfor;
@#nItems := 0;
for p=thePictures:
- EPicture.@#pict[@#nItems](@#info.iPict)(p);
+ if (@#info.childStyleSupplier <> ""):
+ EPicture.@#pict[@#nItems](scantokens (@#info.childStyleSupplier)(@#nItems))(p);
+ else:
+ EPicture.@#pict[@#nItems](@#info.iPict)(p);
+ fi;
@#nItems := @#nItems + 1;
endfor;
@@ -105,10 +104,10 @@ vardef PictureStack@#(text thePictures)(text how)=
enddef;
vardef PictureStack_layout@#=
- if @#layedout = 1:
+ if @#laidout = 1:
log "PictureStack " & (str @#) & " has already been layed out";
else:
- @#layedout := 1;
+ @#laidout := 1;
layoutObjects(scantokens @#picturesAsString);
@@ -124,6 +123,9 @@ vardef PictureStack_layout@#=
setObjectJoin(pa.midx=pb.midx; pa.bottom = pb.bottom + @#info.spacing);
elseif @#joinMethod = "vrightbase":
setObjectJoin(pa.right=pb.right; pa.bottom = pb.bottom + @#info.spacing);
+ else:
+ setObjectJoin(pa.c = pb.c); % By default, stack objects on top of each other.
+ scantokens @#joinMethod;
fi;
joinObjects(scantokens @#picturesAsString);
diff --git a/Master/texmf-dist/metapost/metauml/util_positioning.mp b/Master/texmf-dist/metapost/metauml/util_positioning.mp
index 758ab63afda..9f32a0a54e5 100644
--- a/Master/texmf-dist/metapost/metauml/util_positioning.mp
+++ b/Master/texmf-dist/metapost/metauml/util_positioning.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_positioning_mp:
expandafter endinput
@@ -97,7 +83,7 @@ vardef align(suffix theString, extremityNew, extremityOld)
string objectsAsString__;
objectsAsString__ := enumToString(objects)("");
- log "Alligning '" & objectsAsString__ & "' at " & str theString;
+ log "Aligning '" & objectsAsString__ & "' at " & str theString;
log sign;
if (objectsAsString__ = ""):
diff --git a/Master/texmf-dist/metapost/metauml/util_shade.mp b/Master/texmf-dist/metapost/metauml/util_shade.mp
index f8c7b1bdcdb..b5231164b91 100644
--- a/Master/texmf-dist/metapost/metauml/util_shade.mp
+++ b/Master/texmf-dist/metapost/metauml/util_shade.mp
@@ -1,19 +1,5 @@
-% 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.
+% Copyright 2005 2015 Ovidiu Gheorghies
+% Licensed under the Apache License, Version 2.0.
if known _util_shade_mp:
expandafter endinput