summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig')
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity.mp52
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity_diagrams.mp59
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/appetizer.mp204
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/boxes_vs_util.mp92
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class.mp95
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_association.mp72
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization.mp188
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization2.mp31
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_diagrams.mp199
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_templates.mp45
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/cliparts.mp73
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/group.mp51
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/how-links-work.mp38
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/instance.mp9
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/mptrace.tmp25
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/note.mp56
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/object_stack.mp46
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/package.mp93
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths.mp132
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths_man.mp143
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_info.mp55
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_stack.mp44
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/positioning.mp139
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/properties.mp58
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/state.mp55
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/statemachine_diagrams.mp78
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_activity.mp46
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class.mp125
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_qual_assoc.mp53
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_templates.mp62
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_font.mp91
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_group.mp60
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_instance.mp35
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lars_issues.mp94
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lowlevel.mp66
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_note.mp39
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_package.mp54
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_paths.mp38
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture.mp192
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture_stack.mp70
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_positioning.mp195
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins.mp26
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins_global_defaults.mp29
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_state.mp73
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_usecase.mp197
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase.mp43
-rw-r--r--Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase_diagrams.mp48
47 files changed, 3768 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity.mp
new file mode 100644
index 00000000000..676d1996eb1
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity.mp
@@ -0,0 +1,52 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ Begin.b;
+ End.e;
+ FlowFinal.f;
+
+ leftToRight(20)(b, e, f);
+
+ drawObjects(b, e, f);
+endfig;
+
+beginfig(2);
+ Activity.A("Learn MetaUML -",
+ "the MetaPost UML library");
+ drawObject(A);
+endfig;
+
+beginfig(3);
+ Fork.forkA("h", 50);
+ Fork.forkB("v", 20);
+
+ leftToRight(10)(forkA, forkB);
+
+ drawObjects(forkA, forkB);
+endfig;
+
+beginfig(4);
+ Branch.testA;
+
+ drawObject(testA);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity_diagrams.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity_diagrams.mp
new file mode 100644
index 00000000000..0807619acd9
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/activity_diagrams.mp
@@ -0,0 +1,59 @@
+% Part of the MetaUML manual.
+% 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.
+
+% for f in `find . | grep '.*\.[1-9]'`; do echo $f; done
+
+input metauml;
+
+beginfig(1);
+ Begin.b;
+ Activity.eat("Eat something good", "from the kitchen");
+ Branch.enough;
+ Fork.fork("h", 50);
+ Activity.read("Read a book");
+ Activity.listen("Listen to music", "(and ignore it)");
+ Fork.join("h", 50);
+ End.e;
+
+ eat.n = b.s + (0,-20);
+ enough.n = eat.s + (0,-20);
+ fork.n = enough.s + (0, -20);
+
+ read.top = listen.top = fork.bottom - 30;
+ listen.left - read.right = 10;
+ b.midx = .5[listen.left, read.right];
+
+ join.n = (b.midx, listen.bottom - 20);
+ e.n = join.s + (0, -20);
+
+ drawObjects(b, eat, enough, fork, read, listen, join, e);
+
+ clink(transition)(b, eat);
+ clink(transition)(eat, enough);
+ link(transition)(pathStepX(enough.w, eat.w, -80));
+ clink(transition)(enough, fork);
+ clink(transition)(fork, read);
+ clink(transition)(fork, listen);
+ clink(transition)(read, join);
+ clink(transition)(listen, join);
+ clink(transition)(join, e);
+
+ item(iGuard)("still hungry")(obj.se = enough.w + (-20, 0));
+ item(iGuard)("had enough")(obj.nw = enough.s + (0, -4));
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/appetizer.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/appetizer.mp
new file mode 100644
index 00000000000..6f3e794ff32
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/appetizer.mp
@@ -0,0 +1,204 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ Class.Client("Client")()();
+
+ Class.Component("Component")()
+ ("+Operation()", "+Add(Component)", "+Remove(Component)", "+GetChild(int)");
+ classStereotype.Component("<<interface>>");
+
+ Class.Leaf("Leaf")()("+Operation()");
+
+ Class.Composite("Composite")()();
+ %("+Operation()", "+Add(Component)", "+Remove(Component)", "+GetChild(int)");
+
+ leftToRight.top(30)(Client, Component);
+ leftToRight.top(20)(Leaf, Composite);
+ .5[Leaf.ne, Composite.nw] = below(Component.s, 45);
+
+ drawObjects(Client, Component, Leaf, Composite);
+
+ link(associationUni)(pathHorizontal(Client.e, Component.left));
+ link(inheritance)(pathStepY(Leaf.n, Component.s, 20));
+ link(inheritance)(pathStepY(Composite.n, Component.s, 20));
+
+ link(aggregationUni)(pathStepX(Component.e, Composite.e, 55));
+endfig;
+
+beginfig(2);
+ Begin.b;
+ Activity.eat("Eat something good", "from the kitchen");
+ Branch.enough;
+ Fork.fork("h", 50);
+ Activity.read("Read a book");
+ Activity.listen("Listen to music", "(and ignore it)");
+ Fork.join("h", 50);
+ End.e;
+
+ leftToRight.top(10)(read, listen);
+ Group.readListen(read, listen);
+
+ leftToRight(30)(b, eat);
+ topToBottom(20)(eat, enough, fork, readListen, join, e);
+
+ drawObjects(b, eat, enough, fork, readListen, join, e);
+
+ clink(transition)(b, eat);
+ clink(transition)(eat, enough);
+ link(transition)(pathStepX(enough.e, eat.e, 80));
+ clink(transition)(enough, fork);
+ clink(transition)(fork, read);
+ clink(transition)(fork, listen);
+ clink(transition)(read, join);
+ clink(transition)(listen, join);
+ clink(transition)(join, e);
+
+ item(iGuard)("still hungry")(obj.sw = enough.e + (20, 0));
+ item(iGuard)("had enough")(obj.nw = enough.s + (0, -4));
+endfig;
+
+beginfig(3);
+ Actor.user("User");
+ Actor.db("Database");
+
+ Usecase.dbquery("Query database");
+ Usecase.auth("Authenticate user");
+ Usecase.authA("Authenticate by", "username, password");
+ Usecase.authB("Authenticate by", "smartcard");
+
+ leftToRight(30)(user.human, auth, dbquery, db.human);
+ leftToRight.top(30)(authA, authB);
+ .5[authA.ne, authB.nw] = below(auth.s, 20);
+
+ drawObjects(user, auth, dbquery, db, authA, authB);
+
+ clink(inheritance)(authA, auth);
+ clink(inheritance)(authB, auth);
+ clink(association)(auth, dbquery);
+ clink(association)(user.human, auth);
+ clink(association)(dbquery, db.human);
+endfig;
+
+beginfig(4);
+ save b, e, reading, processing, composite, exit, error, result, theEnd;
+
+ Begin.b;
+ State.reading("Reading commands")();
+ State.processing("Processing commands")();
+ End.e;
+
+ State.composite("Working")(b, reading, processing, e);
+ composite.info.left := composite.info.right := 10;
+ composite.info.drawNameLine := 1;
+
+ topToBottom(20)(b, reading, processing, e);
+ drawObject(composite);
+
+ clink(transition)(b, reading);
+ clink(transition)(reading, processing);
+ clink(transition)(processing, e);
+
+ ExitPoint.exit;
+ exit.c=(composite.right, reading.midy);
+ drawObject(exit);
+ item(iAssoc)("error")(obj.nw = exit.s);
+
+ clink(transition)(reading, exit);
+
+ State.error("Preparing error report")();
+ State.result("Writing result")();
+ End.theEnd;
+
+ topToBottom(20)(error, result, theEnd);
+ leftToRight(30)(exit, error);
+
+ drawObjects(error, result, theEnd);
+
+ clink(transition)(exit, error);
+ clink(transition)(error, result);
+ clink(transition)(result, theEnd);
+
+ link(transition)(rpathHorizontal(result.w, composite.right));
+endfig;
+
+
+beginfig(5);
+ save A, B;
+
+ Note.A("An important", "UML note");
+ Note.B("Another note");
+
+ leftToRight(20)(A, B);
+ drawObjects(A, B);
+
+ clink(dashedLink)(A, B);
+endfig;
+
+beginfig(6);
+ Class.A("A")()();
+ Class.B("B")()();
+
+ Package.pA("net.foo")();
+ Package.pB("net.foo.bar")(A, B);
+
+ leftToRight(20)(A, B);
+ leftToRight(50)(pA, pB);
+
+ drawObjects(A, B, pA, pB);
+
+ clink(nest)(pB, pA);
+endfig;
+
+beginfig(7);
+ save A;
+
+ Class.A("MyClass")
+ ("attr1: int", "attr2: int")
+ ("method1(): void",
+ "method2(): void");
+
+ A.nw = (0, 0); % optional, implied
+ drawObject(A);
+endfig;
+
+beginfig(8);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ A.nw = (0,0);
+ B.e = A.w + (-20, 0);
+
+ drawObjects(A, B);
+endfig;
+
+beginfig(9);
+ save A, B;
+
+ Class.A("A")()();
+ Class.B("B")()();
+ B.e = A.w + (-20, 0);
+ drawObjects(A, B);
+ link(inheritance)(B.e -- A.w);
+endfig;
+end
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/boxes_vs_util.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/boxes_vs_util.mp
new file mode 100644
index 00000000000..985c9bb158b
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/boxes_vs_util.mp
@@ -0,0 +1,92 @@
+% Part of the MetaUML manual.
+% 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.
+
+input boxes;
+input util_commons;
+input util_object;
+input util_picture;
+
+beginfig(1);
+ boxit.a ("yummy");
+ boxit.b ("cool");
+
+ a.nw = (0,0);
+ b.sw = a.se + (10,0);
+
+ drawboxed (a, b);
+ draw a.sw -- b.se dashed evenly withpen pencircle scaled 1.1;
+
+ boxit.c ("yummy");
+ boxit.d ("cool");
+
+ c.nw = (0,-20);
+ d.sw = c.se + (10,0);
+
+ drawunboxed (c, d);
+ draw c.sw -- d.se dashed evenly withpen pencircle scaled 1.1;
+endfig;
+
+beginfig(2);
+ save a, b, c, d;
+
+ Picture.a("yummy");
+ Picture.b("cool");
+ a.info.boxed := b.info.boxed := 1;
+
+ a.nw = (0,0);
+ b.sw = a.se + (10,0);
+
+ drawObjects(a, b);
+ draw a.sw -- b.se dashed evenly withpen pencircle scaled 1.1;
+
+ Picture.c("yummy");
+ Picture.d("cool");
+
+ c.nw = (0,-20);
+ d.sw = c.se + (10,0);
+
+ drawObjects(c, d);
+ draw c.sw -- d.se dashed evenly withpen pencircle scaled 1.1;
+endfig;
+
+beginfig(3);
+ save a, b, c, d;
+
+ iPict.ignoreNegativeBase := 1;
+
+ Picture.a("yummy");
+ Picture.b("cool");
+ a.info.boxed := b.info.boxed := 1;
+
+ a.nw = (0,0);
+ b.sw = a.se + (10,0);
+
+ drawObjects(a, b);
+ draw a.sw -- b.se dashed evenly withpen pencircle scaled 1.1;
+
+ Picture.c("yummy");
+ Picture.d("cool");
+
+ c.nw = (0,-20);
+ d.sw = c.se + (10,0);
+
+ drawObjects(c, d);
+ draw c.sw -- d.se dashed evenly withpen pencircle scaled 1.1;
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class.mp
new file mode 100644
index 00000000000..8997e86295d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class.mp
@@ -0,0 +1,95 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ Class.A("Point")
+ ("#x:int", "#y:int")
+ ("+set(x:int, y:int)",
+ "+getX():int",
+ "+getY():int",
+ "-debug():void");
+ drawObject(A);
+endfig;
+
+beginfig(2);
+ save A, T;
+
+ Class.A("User")()();
+ classStereotypes.A("<<interface>>", "<<home>>");
+
+ drawObject(A);
+endfig;
+
+beginfig(3);
+ save A, T;
+
+ Class.A("Vector")()();
+ ClassTemplate.T("T", "size: int")(A);
+
+ drawObjects(A, T);
+endfig;
+
+beginfig(4);
+ link(association)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(5);
+ link(associationUni)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(6);
+ link(inheritance)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(7);
+ link(aggregation)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(8);
+ link(aggregationUni)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(9);
+ link(composition)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(10);
+ link(compositionUni)( (0,0) -- (50,0) );
+endfig;
+
+beginfig(11);
+ save A;
+ Interface.A("Observer")
+ ("+update(src:Object)");
+
+ drawObject(A);
+endfig;
+
+beginfig(12);
+ save A;
+ EClass.A(iAbstractClass)("Observable")
+ ("observers: Observer[0..*]")
+ ("+addObserver(o: Observer)",
+ "+notify()");
+
+ drawObject(A);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_association.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_association.mp
new file mode 100644
index 00000000000..2ff5037a8c8
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_association.mp
@@ -0,0 +1,72 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save P,B;
+
+ Class.P("Person")()();
+ Class.B("Bank")()();
+
+ P.nw = (0,0);
+ B.w = P.e + (50,0);
+
+ drawObjects(P, B);
+
+ drawRelation(association)(P.e -- B.w);
+
+ item.assocName(iAssoc)("works for")(assocName.s = .5[P.e,B.w]);
+
+ draw assocName.n -- (assocName.n + (20,20));
+ label.urt("association name" infont "tyxtt", assocName.n + (20,20));
+endfig;
+
+beginfig(2);
+ save P,C;
+
+ Class.P("Person")()();
+ Class.C("Company")()();
+
+ C.n = P.s + (0, -70);
+ drawObjects(P, C);
+
+ link(association)(P.s -- C.n);
+
+ item(iAssoc)("employee")(obj.nw = P.s);
+ item(iAssoc)("1..*")(obj.ne = P.s);
+
+ item(iAssoc)("employer")(obj.sw = C.n);
+ item(iAssoc)("0..*")(obj.se = C.n);
+
+ item(iAssoc)("works for")(obj.w = .5[P.s,C.n]);
+endfig;
+
+beginfig(3);
+ save F, O;
+
+ Class.F("Factory")()();
+ Class.O("Object")()();
+
+ O.n = F.s - (0, 50);
+ drawObjects(F, O);
+
+ clink(dependency)(F, O);
+ item(iStereo)("<<creates>>")(obj.w = .5[F.s,O.n])
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization.mp
new file mode 100644
index 00000000000..c6e849683c2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization.mp
@@ -0,0 +1,188 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ iClass.foreColor := (.9, .9, 0);
+
+ Class.A("A")()();
+ Class.B("B")()();
+ Class.C("C")()();
+
+ B.w = A.e + (20,0);
+ C.n = .5[A.se, B.sw] + (0, -10);
+
+ drawObjects(A, B, C);
+endfig;
+
+beginfig(2);
+ save A, B, C;
+ iClass.foreColor := (.9, .9, 0);
+
+ Class.A("A")()();
+ Class.B("B")()();
+ Class.C("C")()();
+ C.info.foreColor := (.7, .7, .9);
+ C.info.borderColor := blue;
+ C.info.iName.iFont.scale := 2;
+
+ B.w = A.e + (20,0);
+ C.n = .5[A.se, B.sw] + (0, -10);
+
+ drawObjects(A, B, C);
+endfig;
+
+beginfig(3);
+ ClassInfoCopy.iHome(iClass);
+ iHome.foreColor := (0, .9, .9);
+
+ ClassInfo.iRemote;
+ iRemote.foreColor := (.9, .9, 0);
+ iRemote.borderColor := (0, 0, .9);
+
+ save A, B, C, D;
+
+ EClass.A(iHome)("UserHome")()();
+ EClass.B(iRemote)("UserRemote")()();
+ EClass.C(iHome)("CartHome")()();
+ EClass.D(iRemote)("CartRemote")()();
+
+
+ B.nw = A.ne + (20,0);
+ D.nw = C.ne + (20,0);
+ A.bottom - C.top = 10;
+ A.left = C.left;
+
+ drawObjects(A, B, C, D);
+endfig;
+
+beginfig(4);
+ iClass.foreColor := .9white;
+ save A;
+
+ Class.A("Foo")
+ ("a: int", "b: int")
+ ("foo()", "bar()", "gar()");
+ A.info.iName.iFont.name := metauml_defaultFontBold;
+ A.info.iName.iFont.scale := 1.2;
+
+ A.info.iAttributeStack.iPict.iFont.scale := 0.8;
+ A.info.iAttributeStack.top := 10;
+ A.info.iAttributeStack.spacing := 11;
+
+ A.info.iMethodStack.iPict.iFont.scale := 2;
+ A.info.iMethodStack.spacing := 17;
+ A.info.iMethodStack.bottom := 10;
+ drawObject(A);
+endfig;
+
+%beginfig(1);
+% save Test;
+% Class.Test("Test")("n:int","a2", "a3")("aLongMethod():void");
+% %, "anotherLongMethod():void", "yetAnotherLongMethod()");
+
+% Test.sw = (0,0);
+% Class_draw.Test;
+
+% dotlabel.ulft(btex nw etex, Test.nw);
+% dotlabel.top(btex n etex, Test.n);
+% dotlabel.urt(btex ne etex, Test.ne);
+% dotlabel.urt(btex e etex, Test.e);
+% dotlabel.lrt(btex se etex, Test.se);
+% dotlabel.llft(btex s etex, Test.s);
+% dotlabel.llft(btex sw etex, Test.sw);
+% dotlabel.lft(btex w etex, Test.w);
+
+% dotlabel.ulft(btex c etex, Test.c);
+
+% draw Test.nw - (50,0) -- Test.ne + (30,0) dashed evenly;
+% label.urt(btex top etex, Test.nw - (50,0));
+
+% draw Test.sw - (50,0) -- Test.se + (30,0) dashed evenly;
+% label.lrt(btex bottom etex, Test.sw - (50,0));
+
+% draw Test.nw + (0,25) -- Test.sw - (0, 50) dashed evenly;
+% label.bot(btex left etex, Test.sw - (0,50));
+
+% draw Test.ne + (0,25) -- Test.se - (0, 50) dashed evenly;
+% label.bot(btex right etex, Test.se - (0,50));
+
+% drawdblarrow Test.nw - (40,0) -- Test.sw - (40,0);
+% label.lft(btex height etex, .5[Test.nw, Test.sw] - (40,0));
+
+% drawdblarrow Test.sw - (0,40) -- Test.se - (0,40);
+% label.bot(btex width etex, .5[Test.sw, Test.se] - (0,40));
+
+% draw Test.n -- Test.s + (0, -20) dashed evenly;
+% label.bot(btex midx etex, Test.s + (0,-20));
+
+% draw Test.w -- Test.e + (20,0) dashed evenly;
+% label.rt(btex midy etex, Test.e + (20,0));
+
+% draw Test.sw + (classLeftMargin,0) -- Test.nw + (classLeftMargin, 25) dashed evenly;
+% draw Test.se + (-classRightMargin,0) -- Test.ne + (-classRightMargin, 25) dashed evenly;
+
+% drawdblarrow Test.nw + (0,20) -- Test.nw + (classLeftMargin, 20);
+% label.top(btex classLeftMargin etex, Test.nw + (classLeftMargin/2, 25));
+
+% drawdblarrow Test.ne + (0,20) -- Test.ne + (-classRightMargin, 20);
+% label.top(btex classRightMargin etex, Test.ne + (-classLeftMargin/2, 25));
+
+% pair A,B;
+% A := ((xpart Test.ne) + 30, ypart Test.ne);
+% B := ((xpart Test.ne) + 30, ypart Test.namePict.nw);
+% draw Test.namePict.nw -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classNameBefore etex, .5[A,B]);
+
+% A := (xpart A, ypart Test.namePict.se);
+% B := (xpart A, Test.nameEndsAtY - classNameAfter);
+% draw Test.namePict.se -- A dashed evenly;
+% draw (xpart Test.namePict se, ypart B) -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classNameAfter etex, .5[A,B]);
+
+% A := B;
+% B := (xpart A, ypart Test.attributePict[0].ne);
+% draw Test.attributePict[0].ne -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classAttributesBefore etex, .5[A,B]);
+
+% A := (xpart A, ypart Test.attributePict[2].se);
+% B := A + (0, -classAttributesAfter);
+% draw Test.attributePict[2].se -- A dashed evenly;
+% draw (Test.attributePict[2].se + (0, -classAttributesAfter)) -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classAttributesAfter etex, .5[A,B]);
+
+% A := B;
+% B := (xpart A, ypart Test.methodPict[0].ne);
+% draw Test.methodPict[0].ne -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classMethodsBefore etex, .5[A,B]);
+
+% A := (xpart A, ypart Test.methodPict[0].se);
+% B := A + (0, -classMethodsAfter);
+% draw Test.methodPict[0].se -- A dashed evenly;
+% draw (Test.methodPict[0].se + (0, -classMethodsAfter)) -- B dashed evenly;
+% drawdblarrow A-(10,0) -- B-(10,0);
+% label.rt(btex classMethodsAfter etex, .5[A,B]);
+% endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization2.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization2.mp
new file mode 100644
index 00000000000..be45e95240b
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_customization2.mp
@@ -0,0 +1,31 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save Test;
+ Class.Test("TestClass")("attribute1: int","attribute2: double")
+ ("oneLongMethod(): void",
+ "anotherLongMethod(): void");
+
+ Test.nw = (0,0);
+ Class_draw.Test;
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_diagrams.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_diagrams.mp
new file mode 100644
index 00000000000..0505e3af5ef
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_diagrams.mp
@@ -0,0 +1,199 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Class.Count("Count")
+ ("#n: int")
+ ("+increase(): void",
+ "+get(): int");
+
+ %Count.nw = (0,0);
+ drawObject(Count);
+ %Class_draw.Count;
+endfig;
+
+beginfig(2);
+ Class.A("Point")
+ ("+x: int",
+ "+y: int") ();
+
+ Class.B("Circle")
+ ("radius: int")
+ ("+getRadius(): int",
+ "+setRadius(r: int):void");
+
+ A.nw = (0,0);
+ B.n = A.s - (0,45);
+ Class_draw.A;
+ Class_draw.B;
+
+ drawRelation(aggregationUni)(A.s -- B.n);
+endfig;
+
+beginfig(3);
+ Class.Test("Test")("a1","a2","a3")("aLongMethod():void");
+
+ Test.nw = (0,0);
+ Class_draw.Test;
+
+ dotlabel.ulft(btex nw etex, Test.nw);
+ dotlabel.top(btex n etex, Test.n);
+ dotlabel.urt(btex ne etex, Test.ne);
+ dotlabel.rt(btex e etex, Test.e);
+ dotlabel.lrt(btex se etex, Test.se);
+ dotlabel.bot(btex s etex, Test.s);
+ dotlabel.llft(btex sw etex, Test.sw);
+ dotlabel.lft(btex w etex, Test.w);
+
+ dotlabel.lft(btex c etex, Test.c);
+
+ draw Test.nw - (50,0) -- Test.ne + (10,0);
+ label.urt(btex top etex, Test.nw - (50,0));
+
+ draw Test.sw - (50,0) -- Test.se + (10,0);
+ label.lrt(btex bottom etex, Test.sw - (50,0));
+
+ draw Test.nw + (0,10) -- Test.sw - (0, 50);
+ label.bot(btex left etex, Test.sw - (0,50));
+
+ draw Test.ne + (0,10) -- Test.se - (0, 50);
+ label.bot(btex right etex, Test.se - (0,50));
+
+ drawarrow Test.nw - (25,0) -- Test.sw - (25,0);
+ label.lft(btex height etex, .5[Test.nw, Test.sw] - (25,0));
+
+ drawarrow Test.sw - (0,25) -- Test.se - (0,25);
+ label.bot(btex width etex, .5[Test.sw, Test.se] - (0,25));
+endfig;
+
+%newAssociationDescription.association;
+%newAssociationUniDescription.associationUni;
+%newInheritanceDescription.inheritance;
+%newAggregationDescription.aggregation;
+%newAggregationUniDescription.aggregationUni;
+%newCompositionDescription.composition;
+%newCompositionUniDescription.compositionUni;
+%newDashedLinkDescription.dashedLink;
+%newDependencyDescription.dependency;
+
+beginfig(4);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(association)(X.e -- Y.w);
+endfig;
+
+beginfig(5);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(associationUni)(X.e -- Y.w);
+endfig;
+
+beginfig(6);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(inheritance)(X.e -- Y.w);
+endfig;
+
+beginfig(7);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(aggregation)(X.e -- Y.w);
+endfig;
+
+beginfig(8);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(aggregationUni)(X.e -- Y.w);
+endfig;
+
+beginfig(9);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(composition)(X.e -- Y.w);
+endfig;
+
+beginfig(10);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(compositionUni)(X.e -- Y.w);
+endfig;
+
+beginfig(11);
+ save X, Y;
+ Class.X("X")()();
+ Class.Y("Y")()();
+
+ X.nw = (0,0);
+ Y.w = X.e + (50,0);
+ Class_draw.X;
+ Class_draw.Y;
+
+ drawRelation(dependency)(X.e -- Y.w);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_templates.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_templates.mp
new file mode 100644
index 00000000000..8ef9b4be126
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/class_templates.mp
@@ -0,0 +1,45 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Class.V("Vector")("elements: T(n)")();
+ Template.T("T", "n: int");
+ Template_attachToClass.T(V);
+
+ drawObjects(V);
+ show "-----------------------------";
+ drawObjects(T);
+endfig;
+
+beginfig(2);
+% save P,C;
+
+% newClass.P("Person")()();
+% newClass.C("Company")()();
+
+% drawClassAt.P ( P.nw = (0,0) );
+% d rawClassAt.C ( C.w = P.e + (150,0) );
+
+% drawRelation(association)(P.e -- C.w);
+
+% assocItem("employee", item.sw = P.e);
+% assocItem("works for", item.n = .5[P.e,C.w]);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/cliparts.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/cliparts.mp
new file mode 100644
index 00000000000..e84cca863f8
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/cliparts.mp
@@ -0,0 +1,73 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+%vardef Foo(text southeast)(text width)(text height)=
+% e eroare daca e 'se' pentru ca inlocuieste in
+% qqq.se
+
+vardef Foo(expr _se, _width, _height)=
+
+ Picture.ppp("foo");
+ drawObjectAt(ppp)(ppp.nw = (0,0));
+
+ save qqq;
+ Lock.qqq("base");
+ qqq.se = (0,0);
+ drawObject (qqq);
+enddef;
+
+
+beginfig(1);
+% drawLockLocked((0,10), (6,0));
+% drawLockUnlocked((50,10), (56,0));
+% drawLockBase((25,10), (31,0));
+% show w;
+
+ numeric a, b;
+ path x;
+ a= 10;
+ b = 20;
+ x = (a,a)--(b,b);
+ draw x;
+
+ Lock.lock("opened");
+ drawObjectAt(lock)(lock.nw =(0,0));
+
+ Lock.lockB("closed");
+ drawObjectAt(lockB)(lockB.nw=(20,0));
+
+ Lock.lockC("base");
+ drawObjectAt(lockC)(lockC.nw=(40,0));
+
+ ELock.otherLock(iLock)("closed");
+ drawObjectAt(otherLock)(otherLock.nw = (60,0));
+
+ LockInfo.iLockMy(30, 30, .55, .15, .55, .4white, .6white, .7white, .3white);
+ save foo;
+ ELock.foo(iLockMy)("opened");
+ foo.se = (100,0);
+ drawObject(foo);
+
+ pair q;
+ q := (30,30);
+ %Foo( q ) (20)( 20);
+ Foo( (0,0),1,3);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/group.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/group.mp
new file mode 100644
index 00000000000..0e25e58ea66
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/group.mp
@@ -0,0 +1,51 @@
+% Part of the MetaUML manual.
+% 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.
+
+input boxes;
+input util_commons;
+input util_object;
+input util_picture;
+input util_margins;
+input util_group;
+
+beginfig(1);
+ iGroup.left:=20;
+ iGroup.right:=15;
+ iGroup.boxed:=1;
+ iPict.boxed:=1;
+
+ Picture.a("yummy");
+ Picture.b("cool");
+ Picture.c("fool");
+
+ a.nw = (0,0);
+ b.nw = (20,20);
+ c.nw = (15, 40);
+
+ Group.g(a, b, c);
+
+ drawObjects(g);
+endfig;
+
+beginfig(2);
+endfig;
+
+beginfig(3);
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/how-links-work.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/how-links-work.mp
new file mode 100644
index 00000000000..c8d8500358d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/how-links-work.mp
@@ -0,0 +1,38 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ drawRelation(aggregationUni)
+ ((0,0)--(40,0));
+endfig;
+
+
+beginfig(2);
+ path myPath;
+ myPath := (0,0) -- (100,0);
+ LinkStructure.ls(myPath,
+ aggregationUni.widthA,
+ aggregationUni.widthB);
+
+ describeLinkStructure(ls);
+ drawLinkStructure(ls)(aggregationUni);
+endfig;
+
+end
+
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/instance.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/instance.mp
new file mode 100644
index 00000000000..9417224306a
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/instance.mp
@@ -0,0 +1,9 @@
+input metauml;
+
+beginfig(1);
+ Instance.order("o: Order")
+ ("name='book'", "{placed}", "{payed}");
+ drawObject(order);
+endfig;
+
+end \ No newline at end of file
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/mptrace.tmp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/mptrace.tmp
new file mode 100644
index 00000000000..95b723d1b3a
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/mptrace.tmp
@@ -0,0 +1,25 @@
+
+input metauml_note;
+input metauml_base;
+input metauml_paths;
+input metauml_links;
+input metauml_class_relations;
+
+beginfig(1);
+ Note.foo("Antananarivo", "Machupichu");
+ drawObject(foo);
+endfig;
+
+beginfig(2);
+ save foo;
+ Note.foo("Please disregard this note");
+ Note.bar("Please take the other note", "very seriously");
+
+ bar.s = foo.n + (10,20);
+ drawObjects(foo, bar);
+ clink(dashedLink)(foo, bar);
+endfig;
+
+end
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/note.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/note.mp
new file mode 100644
index 00000000000..52b5a1541bb
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/note.mp
@@ -0,0 +1,56 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Note.A("This note", "has two lines.");
+ drawObject(A);
+endfig;
+
+beginfig(2);
+ save A, C;
+ Note.A("This is a class");
+ Class.C("Object")()();
+
+ A.sw = C.ne + (20, 20);
+
+ drawObjects(A, C);
+
+ clink(dashedLink)(A, C);
+endfig;
+
+beginfig(3);
+ save C;
+ Note.nA("This is the class name");
+ Note.nB("This is a key attribute");
+ Note.nC("This is a nice method");
+
+ Class.C("Object")("+id:int")
+ ("+clone()", "+serialize()");
+
+ topToBottom.left(10)(nA, nB, nC);
+ leftToRight(10)(C, nB);
+
+ drawObjects(C, nA, nB, nC);
+
+ clink(dashedLink)(C.namePict, nA);
+ clink(dashedLink)(C.attributeStack.pict[0], nB);
+ clink(dashedLink)(C.methodStack.pict[1], nC);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/object_stack.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/object_stack.mp
new file mode 100644
index 00000000000..b9cd4d32b34
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/object_stack.mp
@@ -0,0 +1,46 @@
+% Part of the MetaUML manual.
+% 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.
+
+input boxes;
+input util_commons;
+input util_object;
+input util_picture;
+
+
+beginfig(1);
+ iPict.ignoreNegativeBase := 1;
+ iPict.boxed := 1;
+ Picture.a0("yummy");
+ Picture.a1("cool");
+ Picture.a2("fool");
+
+ a0.nw = (0,0);
+ setObjectJoin(pa.sw = pb.nw);
+
+ joinObjects(scantokens listArray(a)(3));
+ drawObjects(scantokens listArray(a)(3));
+
+endfig;
+
+beginfig(2);
+endfig;
+
+beginfig(3);
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/package.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/package.mp
new file mode 100644
index 00000000000..fbf59ddbf26
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/package.mp
@@ -0,0 +1,93 @@
+input metauml;
+input metauml_package;
+input metauml_package_relations;
+
+beginfig(1);
+ Package.P("java.lang")();
+ drawObject(P);
+endfig;
+
+beginfig(2);
+ save P;
+ Package.P("An important", "package")();
+ drawObject(P);
+endfig;
+
+beginfig(3);
+ save P;
+ Package.P("java.lang")();
+ P.info.forceEmptyContent := 1;
+ drawObject(P);
+endfig;
+
+beginfig(4);
+ save P, A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+ Package.P("net.metauml")(A, B);
+
+ leftToRight(10)(A, B);
+
+ drawObject(P);
+endfig;
+
+beginfig(5);
+ Package.X("X")();
+ Package.Y("Y")();
+
+ leftToRight(50)(X, Y);
+ drawObjects(X, Y);
+
+ link(nest)(X.e -- Y.w);
+endfig;
+
+beginfig(8);
+ Package.emptyPackage("")();
+
+ Package.nameOnlyPackage("java.sun.com")();
+
+ Class.oneClass("A class")()();
+ Package.oneClassPackage("One class package")(oneClass);
+
+ Instance.oneInstance("An instance")();
+ State.oneState("A state")();
+ Activity.oneActivity("An activity");
+ Package.multiPackage("Multipackage")(oneInstance, oneState, oneActivity);
+
+ Package.allPackage("This package contains them all")(emptyPackage, nameOnlyPackage,
+ oneClassPackage, multiPackage);
+
+ nameOnlyPackage.nw = emptyPackage.ne + (30, 0);
+ oneClassPackage.ne = emptyPackage.s - (0, 50);
+
+ multiPackage.top = oneClassPackage.top;
+ multiPackage.left = oneClassPackage.right + 20;
+
+ centered_allign_top(oneState, oneActivity)(10, below(oneInstance.s, 20));
+
+ drawObjects(allPackage);
+endfig;
+
+beginfig(8);
+ Package.nameOnlyOnTopPackage("Name on top")();
+ nameOnlyOnTopPackage.info.forceEmptyContent := 1;
+ Package.nameOnlyInMiddlePackage("By default name", "is in the middle")();
+
+ Class.cl("A class")("Attribute")("Method");
+ Package.notEmptyPackage("Contains class")(cl);
+
+ nameOnlyInMiddlePackage.n = nameOnlyOnTopPackage.s - (0, 40);
+ notEmptyPackage.w = nameOnlyInMiddlePackage.e + (80, 0);
+ drawObjects(nameOnlyOnTopPackage, nameOnlyInMiddlePackage, notEmptyPackage);
+
+ %link(import)(pathStepX(notEmptyPackage.w, nameOnlyOnTopPackage.e, -30));
+ %link(import)(pathVertical(nameOnlyInMiddlePackage.ne - (10, 0), nameOnlyOnTopPackage.bottom));
+ %link(import)(notEmptyPackage.sw -- nameOnlyInMiddlePackage.ne);
+endfig;
+
+beginfig(8);
+ link(nest)((10,10)--(30,30));
+endfig;
+
+
+end \ No newline at end of file
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths.mp
new file mode 100644
index 00000000000..06ca5761209
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths.mp
@@ -0,0 +1,132 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ pair za, zb;
+ za = (10,10);
+ zb = (10,-5);
+ path cool;
+ cool := za .. za+(20,10) ..
+ zb+(20,-20) ..
+ zb+(-10,-30) -- zb;
+ link(aggregationUni)(cool);
+endfig;
+
+beginfig(2);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ B.sw = A.ne + (10,10);
+
+ drawObjects(A, B);
+
+ link(aggregationUni)
+ (rpathManhattanX(A.e, B.s));
+ link(inheritance)
+ (pathManhattanY(A.n, B.w));
+endfig;
+
+beginfig(3);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ B.sw = A.ne + (10,10);
+
+ drawObjects(A, B);
+
+ stepX:=60;
+ link(aggregationUni)
+ (pathStepX(A.e, B.e, stepX));
+
+ stepY:=20;
+ link(inheritance)
+ (pathStepY(B.n, A.n, stepY));
+
+ pair X,Y;
+ X := A.se + (0,-30);
+ Y := X + (stepX, 0);
+ draw A.se -- X dashed evenly;
+ draw (xpart Y, ypart A.e) -- Y dashed evenly;
+ drawdblarrow X + (0,15) -- Y + (0,15);
+ label.top(btex stepX etex, .5[X,Y]);
+
+ pair X,Y;
+ X := B.n + (-70,-0);
+ Y := X + (0, stepY);
+
+ draw B.n -- X dashed evenly;
+ draw B.n + (0,stepY) -- Y dashed evenly;
+ drawdblarrow X + (15,0) -- Y + (15,0);
+ label.lft(btex stepY etex, .5[X,Y]);
+endfig;
+
+% horizontal, vertical
+beginfig(4);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")("b")();
+ Class.C("C")("foo: int")();
+
+ B.sw = A.se + (30,5);
+ C.sw = A.nw + (0, 30);
+
+ drawObjects(A, B, C);
+
+ untilX := B.left;
+ drawRelation(association)
+ (pathHorizontal(A.e, untilX));
+
+ draw B.nw -- B.sw + (0,-10) dashed evenly;
+ label.bot(btex untilX etex, B.sw + (0,-10));
+
+ untilY:= C.bottom;
+ drawRelation(association)(pathVertical(A.n, untilY));
+
+ draw C.sw -- C.sw + (-20,0) dashed evenly;
+ label.lft(btex untilY etex, C.sw + (-20,-0));
+
+endfig;
+
+beginfig(5);
+ save A,B;
+ Activity.A("A");
+ Activity.B("B");
+
+ B.nw = A.ne + (40,30);
+ drawObjects(A,B);
+
+ z = A.se + (30, -10);
+ link(transition)(pathCut(A, B)
+ (A.c -- z -- B.c));
+endfig;
+
+beginfig(6);
+ save A,B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ B.nw = A.ne + (20,30);
+ drawObjects(A,B);
+
+ clink(inheritance)(A, B);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths_man.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths_man.mp
new file mode 100644
index 00000000000..a6c502f147b
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/paths_man.mp
@@ -0,0 +1,143 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save A, B;
+ Class.A("A")("foo:int")("bar()");
+ Class.B("B")()();
+
+ A.nw = (0,0);
+ B.s = A.ne + (30,30);
+
+ Class_draw.A;
+ Class_draw.B;
+
+ drawRelation(aggregationUni)
+ (A.n ..(30,30)..B.w);
+ path cool;
+ cool := A.e .. A.e+(20,10) ..
+ B.s+(20,-40) .. B.s+(-10,-30)
+ -- B.s;
+ drawRelation(inheritance)(cool);
+endfig;
+
+beginfig(2);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ A.nw = (0,0);
+ B.sw = A.ne + (10,10);
+
+ Class_draw.A;
+ Class_draw.B;
+
+ drawRelation(aggregationUni)
+ (pathManhattanX(A.e, B.s));
+ drawRelation(inheritance)
+ (pathManhattanY(A.n, B.w));
+endfig;
+
+beginfig(3);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ A.nw = (0,0);
+ B.sw = A.ne + (10,10);
+
+ Class_draw.A;
+ Class_draw.B;
+
+ stepX:=60;
+ drawRelation(aggregationUni)
+ (pathStepX(A.e, B.e, stepX));
+
+ stepY:=20;
+ drawRelation(inheritance)
+ (pathStepY(B.n, A.n, stepY));
+
+ pair X,Y;
+ X := A.se + (0,-30);
+ Y := X + (stepX, 0);
+ draw A.se -- X dashed evenly;
+ draw (xpart Y, ypart A.e) -- Y dashed evenly;
+ drawdblarrow X + (0,15) -- Y + (0,15);
+ label.top(btex stepX etex, .5[X,Y]);
+
+ pair X,Y;
+ X := B.n + (-70,-0);
+ Y := X + (0, stepY);
+
+ draw B.n -- X dashed evenly;
+ draw B.n + (0,stepY) -- Y dashed evenly;
+ drawdblarrow X + (15,0) -- Y + (15,0);
+ label.lft(btex stepY etex, .5[X,Y]);
+endfig;
+
+beginfig(4);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")("a")();
+
+ A.nw = (0,0);
+ B.sw = A.se + (30,5);
+
+ Class_draw.A;
+ Class_draw.B;
+
+ untilX := B.left;
+ drawRelation(association)
+ (pathHorizontal(A.e, untilX));
+
+ draw B.nw -- B.sw + (0,-10) dashed evenly;
+ label.bot(btex untilX etex, B.sw + (0,-10));
+endfig;
+
+beginfig(5);
+ save A, B;
+ Class.A("A")()();
+ Class.B("B")("a")("foo()");
+
+ A.nw = (0,0);
+ B.sw = A.ne + (-20,20);
+
+ Class_draw.A;
+ Class_draw.B;
+
+ untilY:= B.bottom;
+ drawRelation(association)
+ (pathVertical(A.n, untilY));
+
+ draw B.sw -- B.sw + (-20,0) dashed evenly;
+ label.lft(btex untilY etex, B.sw + (-20,-0));
+endfig;
+
+beginfig(6);
+ save A,B;
+ Class.A("A")()();
+ Class.B("B")()();
+
+ B.nw = A.ne + (40,30);
+ drawObjects(A,B);
+
+ link(inheritance)(pathCut(A,B)(A.c -- B.c));
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_info.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_info.mp
new file mode 100644
index 00000000000..ec8ecdc3f8f
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_info.mp
@@ -0,0 +1,55 @@
+% Part of the MetaUML manual.
+% 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.
+
+input boxes;
+input util_commons;
+input util_object;
+input util_picture;
+
+PictureInfoCopy.iBig(iPict);
+iBig.left := iBig.right := 20;
+iBig.top := 10;
+iBig.bottom := 1;
+iBig.boxed := 1;
+iBig.ignoreNegativeBase := 1;
+iBig.iFont.name := defaultfont;
+iBig.iFont.scale := 3;
+
+PictureInfoCopy.iSmall(iPict);
+iSmall.boxed := 1;
+iSmall.borderColor := green;
+
+beginfig(1);
+ EPicture.a(iBig)("yummy");
+ EPicture.b(iSmall)("cool");
+% you can still modify a.info
+% and b.info if you wish.
+
+ a.nw = (0,0);
+ b.nw = a.sw + (0,-10);
+
+ drawObjects(a, b)
+endfig;
+
+beginfig(2);
+endfig;
+
+beginfig(3);
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_stack.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_stack.mp
new file mode 100644
index 00000000000..ee6e09104b7
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/picture_stack.mp
@@ -0,0 +1,44 @@
+% Part of the MetaUML manual.
+% 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.
+
+input boxes;
+input util_commons;
+input util_object;
+input util_picture;
+input util_group;
+input util_picture_stack;
+
+beginfig(1);
+ iStack.boxed := 1;
+ iStack.iPict.boxed := 1;
+ PictureStack.myStack("foo",
+ "bar: int" infont "tyxtt",
+ "cool-man-centered" infont defaultfont,
+ "nice")("vcenter");
+
+ myStack.nw = (0,0);
+ drawObject(myStack);
+endfig;
+
+beginfig(2);
+endfig;
+
+beginfig(3);
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/positioning.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/positioning.mp
new file mode 100644
index 00000000000..f98de47182f
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/positioning.mp
@@ -0,0 +1,139 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Class.A("A")()();
+ Class.B("B")()();
+ Class.C("C")()();
+ Class.Base("Base")()();
+
+
+ A.ne = B.nw - (20,0);
+ B.ne = C.nw - (20,0);
+ Base.s = B.n + (0,20);
+
+ drawObjects(Base, A, B, C);
+endfig;
+
+beginfig(2);
+ save A, B, C, Base;
+
+ Class.A("A")()();
+ Class.B("B")()();
+ Class.C("C")()();
+ Class.Base("Base")()();
+
+ leftToRight(20)(A, B, C);
+ topToBottom(20)(Base, B);
+
+ drawObjects(Base, A, B, C);
+endfig;
+
+iPict.boxed := 1;
+spacing := 5;
+string strA, strB, strC;
+strA := "a";
+strB := "...";
+strC := "Cyan";
+
+beginfig(3);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.top(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.top) -- (Z.right, X.top) dashed evenly withpen pencircle withcolor red;
+endfig;
+
+beginfig(4);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.midy(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.midy) -- (Z.right, X.midy) dashed evenly withpen pencircle withcolor red;;
+endfig;
+
+beginfig(5);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.bottom(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.bottom) -- (Z.right, X.bottom) dashed evenly withpen pencircle withcolor red;;
+endfig;
+
+beginfig(6);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.left(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.top) -- (X.left, Z.bottom) dashed evenly withpen pencircle withcolor red;;
+endfig;
+
+beginfig(7);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.midx(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.midx, X.top) -- (X.midx, Z.bottom) dashed evenly withpen pencircle withcolor red;;
+endfig;
+
+beginfig(8);
+ save A, B, C, X, Y, Z;
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.right(spacing)(X, Y, Z);
+
+ drawObjects(X, Y, Z);
+
+ draw (X.right, X.top) -- (X.right, Z.bottom) dashed evenly withpen pencircle withcolor red;;
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/properties.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/properties.mp
new file mode 100644
index 00000000000..94f71d772ea
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/properties.mp
@@ -0,0 +1,58 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ Class.Test("Test")("a1","a2","a3")("aLongMethod():void");
+
+ Test.nw = (0,0);
+ Class_draw.Test;
+
+ dotlabel.ulft(btex nw etex, Test.nw);
+ dotlabel.top(btex n etex, Test.n);
+ dotlabel.urt(btex ne etex, Test.ne);
+ dotlabel.rt(btex e etex, Test.e);
+ dotlabel.lrt(btex se etex, Test.se);
+ dotlabel.bot(btex s etex, Test.s);
+ dotlabel.llft(btex sw etex, Test.sw);
+ dotlabel.lft(btex w etex, Test.w);
+
+ dotlabel.lft(btex c etex, Test.c);
+
+ draw Test.nw - (50,0) -- Test.ne + (10,0);
+ label.urt(btex top etex, Test.nw - (50,0));
+
+ draw Test.sw - (50,0) -- Test.se + (10,0);
+ label.lrt(btex bottom etex, Test.sw - (50,0));
+
+ draw Test.nw + (0,10) -- Test.sw - (0, 50);
+ label.bot(btex left etex, Test.sw - (0,50));
+
+ draw Test.ne + (0,10) -- Test.se - (0, 50);
+ label.bot(btex right etex, Test.se - (0,50));
+
+ drawarrow Test.nw - (25,0) -- Test.sw - (25,0);
+ label.lft(btex height etex, .5[Test.nw, Test.sw] - (25,0));
+
+ drawarrow Test.sw - (0,25) -- Test.se - (0,25);
+ label.bot(btex width etex, .5[Test.sw, Test.se] - (0,25));
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/state.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/state.mp
new file mode 100644
index 00000000000..77c7691a9a2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/state.mp
@@ -0,0 +1,55 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ State.s("Take order")();
+ drawObject(s);
+endfig;
+
+beginfig(2);
+ Begin.b;
+ End.e;
+ State.c("Component")();
+ State.composite("Composite")(b, e, c);
+
+ b.midx = e.midx = c.midx;
+ c.top = b.bottom - 20;
+ e.top = c.bottom - 20;
+
+ composite.info.drawNameLine := 1;
+ drawObject(composite);
+
+ link(transition)(b.s -- c.n);
+ link(transition)(c.s -- e.n);
+endfig;
+
+beginfig(3);
+ save s;
+ State.s("An interesting state",
+ "which is worth mentioning")();
+ stateTransitions.s(
+ "OnEntry / Open eyes",
+ "OnExit / Sleep well");
+ s.info.drawNameLine := 1;
+
+ drawObject(s);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/statemachine_diagrams.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/statemachine_diagrams.mp
new file mode 100644
index 00000000000..ff93a74dd5d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/statemachine_diagrams.mp
@@ -0,0 +1,78 @@
+% Part of the MetaUML manual.
+% 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.
+
+% for f in `find . | grep '.*\.[1-9]'`; do echo $f; done
+
+input metauml;
+
+beginfig(1);
+ Begin.b;
+ State.on("On")();
+ State.off("Off")();
+ End.e;
+
+ setObjectJoin(pb.w = pa.e + (20,0));
+ joinObjects(b, on, off, e);
+ drawObjects(b, on, off, e);
+
+ clink(transition)(b, on);
+ clink(transition)(on, off);
+ clink(transition)(off, e);
+endfig;
+
+beginfig(2);
+ save b, reading, processing, e, exit;
+
+ Begin.b;
+ State.reading("Commands read")();
+ State.processing("Processing commands")();
+ End.e;
+ setObjectJoin(pb.n = pa.s + (0, -20));
+ joinObjects(b, reading, processing, e);
+
+ State.composite("Work")(b, reading, processing, e);
+ drawObject(composite);
+
+ clink(transition)(b, reading);
+ clink(transition)(reading, processing);
+ clink(transition)(processing, e);
+
+ ExitPoint.exit;
+ exit.c=(composite.right, reading.midy);
+ drawObject(exit);
+ item(iAssoc)("error")(obj.nw = exit.s);
+
+ clink(transition)(reading, exit);
+
+ State.error("Prepare error report")();
+ State.result("Display result")();
+ End.theEnd;
+
+ error.midx = result.midx = theEnd.midx = composite.right + 90;
+ error.midy = exit.midy;
+ result.midy = processing.midy;
+ theEnd.midy = e.midy;
+ drawObjects(error, result, theEnd);
+
+ clink(transition)(exit, error);
+ clink(transition)(error, result);
+ clink(transition)(result, theEnd);
+
+ link(transition)(rpathHorizontal(result.w, composite.right));
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_activity.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_activity.mp
new file mode 100644
index 00000000000..841bdb8a312
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_activity.mp
@@ -0,0 +1,46 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Begin.b;
+ End.e;
+
+ e.n = (30,30);
+ drawObject(b);
+ show "Object b drawn";
+ drawObject(e);
+
+ link(associationUni)(pathCut(b,e)(b.c--e.c));
+endfig;
+
+beginfig(2);
+ EActivity.act(iActivity)("go to school", "while singing");
+ drawObject(act);
+
+ Branch.br;
+ br.nw = (50,50);
+ drawObject(br);
+
+ Fork.fork("h",30);
+ fork.nw = (30,70);
+ drawObject(fork);
+endfig;
+
+end
+
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class.mp
new file mode 100644
index 00000000000..b807e970b57
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class.mp
@@ -0,0 +1,125 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(0);
+ show "Copying class info...";
+ ClassInfoCopy.foo(iClass);
+endfig;
+
+beginfig(1);
+ Class.P("AAA")("- noo:int", "+bar:double","c:Integer","f: int")("foo()", "bar()");
+ Class_setDebugMode.P;
+
+ P.nw=(0,0);
+ Class_draw.P;
+
+ Class.Q("AAA")("-noo:int", "+bar:double","c:Integer","f: int")("-noo()", "bar()");
+ Q.nw=P.ne + (20,0);
+ Class_draw.Q;
+endfig;
+
+beginfig(2);
+ save P, Q;
+
+ Class.P("AAA")("+ foo:int", "+bar:double","c:Integer","f: int")();
+ Class_setDebugMode.P;
+ P.nw=(0,0);
+ Class_draw.P;
+
+ Class.Q("AAA")("+ foo:int", "+bar:double","c:Integer","f: int")();
+ Q.nw=P.ne + (20,0);
+ Class_draw.Q;
+endfig;
+
+beginfig(3);
+ save P, Q;
+
+ Class.P("AAA")()();
+ Class_setDebugMode.P;
+ P.nw=(0,0);
+ Class_draw.P;
+
+ Class.Q("AAA")()();
+ Q.nw=P.ne + (20,0);
+ Class_draw.Q;
+endfig;
+
+beginfig(4);
+ save P, Q;
+
+ Class.P("AAA")()();
+ classStereotypes.P("<<ooo>>","<<home>>", "<<intergace>>");
+ Class_setDebugMode.P;
+ P.nw=(0,0);
+ Class_draw.P;
+
+
+ Class.Q("AAA")()();
+ classStereotypes.Q("<<ooo>>","<<home>>", "<<intergace>>");
+ Q.nw=P.ne + (20,0);
+ Class_draw.Q;
+endfig;
+
+beginfig(5)
+ Class.A("User")()();
+ classStereotypes.A("<<interface>>","<<home>>");
+ A.nw=(0,0);
+ drawObject(A);
+endfig;
+
+beginfig(6)
+ save A;
+ Class.A("User")()();
+ A.info.iMethodStack.left := A.info.iMethodStack.right := 50;
+ A.info.iMethodStack.top := A.info.iMethodStack.bottom := 20;
+
+ drawObject(A);
+endfig;
+
+beginfig(7)
+ save inter;
+ EClass.inter(iInterface)("Observer")()("+update(src: Object)");
+ drawObjects(inter);
+endfig;
+
+beginfig(8)
+ save inter;
+ EInterface.inter(iInterface)("Observer")("+update(src: Object)");
+ drawObjects(inter);
+endfig;
+
+beginfig(9)
+ save inter;
+ Interface.inter("Observer")("+update(src: Object)");
+ drawObjects(inter);
+endfig;
+
+beginfig(10)
+ save A;
+ EClass.A(iAbstractClass)("AbstractClass")("[]{}")("+update(src: Object)");
+ drawObjects(A);
+endfig;
+
+beginfig(11)
+ save A;
+ AbstractClass.A("AbstractClass")("[]{}")("+update(src: Object)");
+ drawObjects(A);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_qual_assoc.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_qual_assoc.mp
new file mode 100644
index 00000000000..735bba19e0d
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_qual_assoc.mp
@@ -0,0 +1,53 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save P,qa;
+
+ Class.P("Person")()();
+ QualifiedAssociation.qa("accountNumber:int", "foo: id");
+
+ P.nw = (0,0);
+ qa.n = P.s;
+
+
+ P.info.iName.left := 35;
+ P.info.iName.right := 35;
+ drawObjects(P);
+
+ drawObject(qa);
+endfig;
+
+beginfig(2);
+ save P,qa;
+
+ Class.P("Person")()();
+ QualifiedAssociation.qa("accountNumber:int", "foo: id", "foolang");
+
+ P.nw = (0,0);
+ qa.w = P.e;
+
+ P.info.shade := 0;
+ P.info.iMethodStack.top := 20;
+ drawObjects(P);
+
+ drawObject(qa);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_templates.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_templates.mp
new file mode 100644
index 00000000000..c3fc50209c8
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_class_templates.mp
@@ -0,0 +1,62 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save P,template;
+
+ Class.P("Person")()();
+ Template.template("foo", "bar");
+
+ drawObjectAt(P)(P.nw=(0,0));
+
+ Template_attachToClass.template(P);
+ drawObject(template);
+endfig;
+
+beginfig(2);
+ save P,template;
+
+ Class.P("Person")()();
+ Template.template("foo: int");
+ Template_attachToClass.template(P);
+
+ drawObjectAt(P)(P.nw=(0,0));
+ drawObject(template);
+endfig;
+
+beginfig(3);
+ save CA, TA, CB, TB, CC, TC;
+ Class.CA("VeryVeryLongClassName")()();
+ ClassTemplate.TA("int foo")(CA);
+
+ Class.CB("Shortie")("abracadabra: long long int")();
+ ClassTemplate.TB("T")(CB);
+
+ Class.CC("Shortie")("abracadabra: long long int")();
+ ClassTemplate.TC("TrulyAmazingLongTypename")(CC);
+
+ CA.s = CB.n + (0,14);
+ CB.s = CC.n + (0,14);
+
+ drawObjects(CA, TA, CB, TB, CC, TC);
+endfig;
+
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_font.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_font.mp
new file mode 100644
index 00000000000..d5fc1a7702f
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_font.mp
@@ -0,0 +1,91 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+string theFont;
+
+beginfig(1);
+ theFont := "pcrr";
+
+ boxjoin(a.sw=b.nw);
+ boxit.ff(("Font name: ( ) " & theFont) infont theFont);
+ boxit.s0("<<stereotype>>" infont theFont );
+ boxit.s1("<<a>>, <<b>>, <<c>>" infont theFont);
+ boxit.g0("[guard] " infont theFont);
+ boxit.g1("[stillhungry] closing paranthesis SHOWN after hungry !" infont theFont);
+ boxit.g2("[still hungry] closing paranthesis NOT shown after hungry !" infont theFont);
+ boxit.g3("[][][][]hm]" infont theFont);
+ boxit.c0("{constraint}" infont theFont);
+ boxit.c1("{a constraint} closing paranthesis NOT shown !" infont theFont);
+
+ drawboxed(ff, s0, s1, g0, g1, g2, g3, c0, c1);
+endfig;
+
+beginfig(2);
+ save ff,s,g,c;
+ theFont := "tyxbtt";
+
+ boxjoin(a.sw=b.nw);
+ boxit.ff(("Font name: ( ) " & theFont) infont theFont);
+ boxit.s0("<<stereotype>>" infont theFont );
+ boxit.s1("<<a>>, <<b>>, <<c>>" infont theFont);
+ boxit.g0("[guard] " infont theFont);
+ boxit.g1("[stillhungry] closing paranthesis SHOWN after hungry !" infont theFont);
+ boxit.g2("[still hungry] closing paranthesis NOT shown after hungry !" infont theFont);
+ boxit.g3("[][][][]hm]" infont theFont);
+ boxit.c0("{constraint}" infont theFont);
+ boxit.c1("{a constraint} closing paranthesis NOT shown !" infont theFont);
+
+ drawboxed(ff, s0, s1, g0, g1, g2, g3, c0, c1);
+endfig;
+
+beginfig(3);
+ picture pA, pB, pC;
+ string sA, sB, sC;
+ sA := "assembleElementLocalMatrix(k: KeyType, mat: LocalMatrixType, a: AssembleAction)";
+ sB := "assembleElementLocalMatri(k: KeyType, mat: LocalMatrixType, a: AssembleAction)";
+ sC := "assembleElntLocalMatri(k: KeyType, mat: LocalMatrixType, a: AssembleAction)";
+
+ pA := sA infont "tyxbtt";
+ pB := sB infont "tyxbtt";
+ pC := sC infont "tyxbtt";
+
+ draw pA;
+ draw pB shifted (0,-20);
+ draw pC shifted (0,-40);
+endfig;
+
+beginfig(4);
+ save ff,s,g,c;
+ theFont := "ptmr8r";
+
+ boxjoin(a.sw=b.nw);
+ boxit.ff(("Font name: ( ) " & theFont) infont theFont);
+ boxit.s0("<<stereotype>>" infont theFont );
+ boxit.s1("<<a>>, <<b>>, <<c>>" infont theFont);
+ boxit.g0("[guard] " infont theFont);
+ boxit.g1("[stillhungry] closing paranthesis SHOWN after hungry !" infont theFont);
+ boxit.g2("[still hungry] closing paranthesis NOT shown after hungry !" infont theFont);
+ boxit.g3("[][][][]hm]" infont theFont);
+ boxit.c0("{constraint}" infont theFont);
+ boxit.c1("{a constraint} closing paranthesis NOT shown !" infont theFont);
+
+ drawboxed(ff, s0, s1, g0, g1, g2, g3, c0, c1);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_group.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_group.mp
new file mode 100644
index 00000000000..17265c458b2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_group.mp
@@ -0,0 +1,60 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ save p,q,r,t,g;
+
+ EPicture.p(iPictBoxed)("p0");
+ EPicture.q(iPictBoxed)("p1");
+ p.se = q.nw;
+
+ string f;
+ f= enumToString(p,q)("");
+ show "f=" & f;
+
+ EGroup.g(iGroup)(p,q);
+ g.nw = (0,0);
+
+ drawObject(g);
+endfig;
+
+beginfig(2);
+ save g,h,p,gg;
+
+ Group.g();
+ g.info.boxed := 1;
+ g.nw = (30,30);
+ drawObject(g);
+
+ Picture.p("Test picture in group");
+ p.info.boxed := 1;
+ Group.h(p);
+ h.info.boxed := 1;
+ h.nw = (0,0);
+ drawObject(h);
+
+ Picture.v0("s"); v0.info.boxed := 1;
+ Picture.v1("s"); v1.info.boxed := 1;
+ v1.nw = v0.se + (10,10);
+ Group.gg(v0, v1); gg.info.boxed := 1;
+ gg.nw = (70,70);
+ drawObject(gg);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_instance.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_instance.mp
new file mode 100644
index 00000000000..d01ff8452e2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_instance.mp
@@ -0,0 +1,35 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ Instance.A(":Foo")("int: val1", "bool: val2");
+ Instance.B(":Bar")("very long text for testing purposes");
+ Instance.C("s: Student")("line1", "line2", "line3", "line4", "line5");
+ Instance.D("Example")("small");
+ Instance.E("g: Yummy")("{placed}", "{color=red}");
+
+ B.w = A.e + (20, 0);
+ C.n = A.s - (0, 20);
+ D.w = C.e + (20, 0);
+ E.w = D.e + (20, 0);
+
+ drawObjects(A, B, C, D, E);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lars_issues.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lars_issues.mp
new file mode 100644
index 00000000000..607ef54c909
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lars_issues.mp
@@ -0,0 +1,94 @@
+input metauml;
+
+numeric u;
+u = 1.3cm;
+
+beginfig(1);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Class.ElLocSysAcc("ElementLocalSystemAcceptor")
+()
+("+startElementAssebly()",
+ "+assembleElementLocalMatrix(k: KeyType, mat: LocalMatrixType, a: AssembleAction)",
+ "+assembleElementLocalRHS(k: KeyType, rhs: LocalRHSType, a: AssembleAction)",
+ "+endElementAssembly()");
+
+classStereotypes.ElLocSysAcc("<<interface>>");
+ClassTemplate.TEl("KeyType: typename")(ElLocSysAcc);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Class.FaceLocSysAcc("FaceLocalSystemAcceptor")
+ ()
+ ("+startFaceAssebly()",
+ "+assembleFaceLocalMatrix(k1: KeyType, k2: KeyType, mat: LocalMatrixType, a: AssembleAction)",
+ "+assembleFaceLocalRHS(k: KeyType, rhs: LocalRHSType, a: AssembleAction)",
+ "+endFaceAssembly()");
+
+ classStereotypes.FaceLocSysAcc("<<interface>>");
+ ClassTemplate.TFa("KeyType: typename")(FaceLocSysAcc);
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Class.SolProvider("SolutionProvider")
+ ()
+ ("+startSortBack()",
+ "+getLocalSolution(k: KeyType, sol: LocalSolutionType)",
+ "+endSortBack()");
+
+ classStereotypes.SolProvider("<<interface>>");
+ ClassTemplate.TSol("KeyType: typename")(SolProvider);
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % now inherit from these for LapackMatrixSorter
+ Class.LapackMS("LapackMatrixSorter")
+ ("-indMan: IndexManager",
+ "-A: LaGenMatDouble&",
+ "-x: LaVectorDouble&",
+ "-b: LaVectorDouble&"
+ )
+ ("+startElementAssembly()");
+
+ ClassTemplate.TLap("KeyType: typename", "IndexManager: class")(LapackMS);
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% where to draw these:
+FaceLocSysAcc.nw = ElLocSysAcc.ne + (1.5u, 0);
+SolProvider.nw = FaceLocSysAcc.ne + (1.5u, 0);
+LapackMS.n = FaceLocSysAcc.s + (0, -3u);
+
+drawObjects(ElLocSysAcc, TEl, FaceLocSysAcc, TFa,
+ SolProvider, TSol, LapackMS, TLap);
+
+% 50: how much should the path raise upwards before making a horizontal turn.
+link(inheritance)(pathStepY(LapackMS.n, FaceLocSysAcc.s, 50));
+link(inheritance)(pathStepY(LapackMS.n, SolProvider.s, 50));
+link(inheritance)(pathStepY(LapackMS.n, ElLocSysAcc.s, 50));
+
+endfig;
+
+beginfig(2);
+ Begin.b;
+ Activity.A("Eat something good", "from the kitchen");
+ Activity.B("Read a book");
+ End.e;
+
+ % or other positioning code...
+ setObjectJoin(pa.s = pb.n + (0,20));
+ joinObjects(b, A, B, e);
+
+ % important: first draw the activities
+ drawObjects(b, A, B, e);
+
+ % you can now draw the transitions
+ clink(transition)(b, A);
+ clink(transition)(A, B);
+ link(transition)(pathStepX(B.e, e.e, 30));
+
+ item(iGuard)("foo")(obj.sw = .5[b.s, A.n]);
+endfig;
+
+end;
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lowlevel.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lowlevel.mp
new file mode 100644
index 00000000000..952da34f482
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_lowlevel.mp
@@ -0,0 +1,66 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+input util_infrastructure;
+
+beginfig(1);
+ show "Lowlevel test";
+ %string foo;
+ %foo := var_instruction(numeric) x, y;
+ %show foo;
+ %foo := foo & ";";
+ %show foo;
+ attributes(foo);
+ _n_ := "foo";
+ %scantokens foo;
+ %string x;
+ %x := str(numeric);
+ var(numeric) x;
+
+ label.top("nothing shown (intentionally)", (0,0));
+endfig;
+
+vardef _foo@#=
+ attributes(@#);
+ var(string) @#a[];
+ @#a[0] := "fpp";
+ @#a[1] := "gqq";
+enddef;
+
+% _foo.b; % not working
+
+vardef _bar@#(text s)=
+ attributes(@#);
+ var(string) elements;
+ @#elements := enumToString(s)("");
+enddef;
+
+beginfig(2);
+ for f = scantokens "a, b, c":
+ show f;
+ endfor;
+ _bar.xx(a, b, c, d);
+ show xx.elements;
+ for f = scantokens xx.elements:
+ show f;
+ endfor;
+ label.top("nothing shown (intentionally)", (0,0));
+endfig;
+
+end
+
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_note.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_note.mp
new file mode 100644
index 00000000000..9ea6b1a2931
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_note.mp
@@ -0,0 +1,39 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml_note;
+input metauml_base;
+input metauml_paths;
+input metauml_links;
+input metauml_class_relations;
+
+beginfig(1);
+ Note.foo("Antananarivo", "Machupichu");
+ drawObject(foo);
+endfig;
+
+beginfig(2);
+ save foo;
+ Note.foo("Please disregard this note");
+ Note.bar("Please take the other note", "very seriously");
+
+ bar.s = foo.n + (10,20);
+ drawObjects(foo, bar);
+ clink(dashedLink)(foo, bar);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_package.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_package.mp
new file mode 100644
index 00000000000..990391f4f7a
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_package.mp
@@ -0,0 +1,54 @@
+input metauml;
+input metauml_package;
+input metauml_package_relations;
+
+beginfig(1);
+ Package.emptyPackage("")();
+
+ Package.nameOnlyPackage("java.sun.com")();
+
+ Class.oneClass("A class")()();
+ Package.oneClassPackage("One class package")(oneClass);
+
+ Instance.oneInstance("An instance")();
+ State.oneState("A state")();
+ Activity.oneActivity("An activity");
+ Package.multiPackage("Multipackage")(oneInstance, oneState, oneActivity);
+
+ Package.allPackage("This package contains them all")(emptyPackage, nameOnlyPackage,
+ oneClassPackage, multiPackage);
+
+ nameOnlyPackage.nw = emptyPackage.ne + (30, 0);
+ oneClassPackage.ne = emptyPackage.s - (0, 50);
+
+ multiPackage.top = oneClassPackage.top;
+ multiPackage.left = oneClassPackage.right + 20;
+
+ centered_allign_top(oneState, oneActivity)(10, below(oneInstance.s, 20));
+
+ drawObjects(allPackage);
+endfig;
+
+beginfig(2);
+ Package.nameOnlyOnTopPackage("Name on top")();
+ nameOnlyOnTopPackage.info.forceEmptyContent := 1;
+ Package.nameOnlyInMiddlePackage("By default name", "is in the middle")();
+
+ Class.cl("A class")("Attribute")("Method");
+ Package.notEmptyPackage("Contains class")(cl);
+
+ nameOnlyInMiddlePackage.n = nameOnlyOnTopPackage.s - (0, 40);
+ notEmptyPackage.w = nameOnlyInMiddlePackage.e + (80, 0);
+ drawObjects(nameOnlyOnTopPackage, nameOnlyInMiddlePackage, notEmptyPackage);
+
+ %link(import)(pathStepX(notEmptyPackage.w, nameOnlyOnTopPackage.e, -30));
+ %link(import)(pathVertical(nameOnlyInMiddlePackage.ne - (10, 0), nameOnlyOnTopPackage.bottom));
+ %link(import)(notEmptyPackage.sw -- nameOnlyInMiddlePackage.ne);
+endfig;
+
+beginfig(3);
+ link(nest)((10,10)--(30,30));
+endfig;
+
+
+end \ No newline at end of file
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_paths.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_paths.mp
new file mode 100644
index 00000000000..141b3efdb1c
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_paths.mp
@@ -0,0 +1,38 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ iClass.shade := 3;
+ Class.F("Foo")("a: int","b: int")();
+ Class.B("Bar")()();
+
+ B.nw = F.ne + (20,-20);
+
+ drawObjects(B, F);
+
+ link(association)(B.nw -- F.ne);
+
+ draw objectBorder(B) withcolor red;
+ draw objectBorder(F) withcolor blue;
+
+ link(association)(pathCut(B,F)(B.c--F.c));
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture.mp
new file mode 100644
index 00000000000..db78bb1a742
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture.mp
@@ -0,0 +1,192 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+string theFont;
+theFont := "tyxbtt";
+
+beginfig(1);
+ draw "xxx" infont defaultfont scaled defaultscale shifted (0,0);
+ draw "yyy" infont (iFont.name) scaled (iFont.scale) shifted (5, 5);
+
+ Picture.p("foo, bar, foo");
+ p.nw = (0,0);
+ drawObject(p);
+
+ Picture.q("nice, ugly");
+ drawObjectAt(q)( q.nw = (30,30) );
+
+ FontInfo.foo("tyxbtt", 1);
+ PictureInfo.nice(3,6,5,10)(foo);
+ nice.boxed := 1;
+
+ EPicture.myPic(nice)("what a nice feature");
+ drawObjectAt(myPic)( myPic.nw = (0,0));
+endfig;
+
+beginfig(2);
+ save p, q, r, t;
+
+ Picture.p("foo");
+ Picture.q("bar");
+ p.nw = (10, 10);
+ q.nw = (20, 20);
+
+ drawObject(p);
+ drawObject(q);
+
+ drawObjects(p, q);
+
+ Picture.a0("root" infont defaultfont);
+ Picture.a1("toof");
+
+ a[0].nw = (30, 30);
+ a[1].nw = (50, 50);
+
+ drawObjects(scantokens listArray(a)(2));
+ %drawObjectArray(a)(2);
+endfig;
+
+beginfig(3);
+ save p, q, r, t, u, pp;
+
+ bboxmargin := 0;
+
+ picture pp;
+ pp = "a" infont theFont;
+ Picture.p(pp);
+ Picture.q("cool" infont theFont);
+ Picture.r("good" infont theFont);
+ Picture.t("tust");
+ Picture.u("fook" infont theFont);
+
+ p.nw = (0,50);
+ setObjectJoin(pa.left=pb.left; pa.bottom = pb.top + 1);
+ joinDrawObjects(p, q, r, t, u);
+
+ defaultdy:=0;
+ boxjoin(a.sw=b.nw; a.se=b.ne);
+ boxit.A0("aaa");
+ boxit.A1("dddd");
+ boxit.A2("asf");
+ boxit.A3("good");
+ boxit.A4("..");
+ A0.nw=(0,0);
+ drawboxed(A0,A1,A2,A3,A4);
+
+ show A[1].nw;
+
+ Picture.B0(btex adsaas etex);
+ Picture.X[2](btex asdasad etex);
+
+ myy := 40;
+
+ bboxmargin := 0;
+
+ pair p;
+ p := (30,myy);
+ dotlabel.lrt(".", p);
+ picture x;
+ x := "f: int" infont theFont;
+ draw bbox(x) shifted p;
+ draw x shifted p;
+
+ show "LLCORNER P";
+ show llcorner x;
+
+ pair q;
+ q := (70,myy);
+ dotlabel.lrt(".", q);
+ picture y;
+ y := "goofy: int" infont theFont;
+ draw bbox(y) shifted q;
+ draw y shifted q;
+
+ pair qq;
+ qq := (135,myy);
+ dotlabel.lrt(".", qq);
+ picture y;
+ y := "goot" infont theFont;
+ draw bbox(y) shifted qq;
+ draw y shifted qq;
+
+ show "LLCORNER q";
+ show llcorner y;
+
+ draw (0,myy)--(150, myy) dashed evenly;
+
+ myyb := 70;
+ Picture.aa(btex goof etex);
+ aa.sw = (30, myyb);
+ Picture_draw.aa;
+
+ draw (0,myyb)--(100, myyb) dashed evenly;
+endfig;
+
+beginfig(4);
+ save a, b;
+ FontInfo.myFont(theFont, 1);
+ PictureInfo.myWay(0,0,0,0)(myFont);
+ myWay.boxed := 1;
+
+ EPicture.a0(myWay)("goof");
+ EPicture.a1(myWay)("Aoorian");
+ EPicture.a2(myWay)("fpp");
+ EPicture.a3(myWay)("f: int");
+ EPicture.a4(myWay)("aa()");
+
+ a0.nw = (0,0);
+ setObjectJoin(pa.bottom = pb.bottom; pa.right = pb.left - 10);
+ joinDrawObjects(scantokens listArray(a)(5));
+
+ draw a0.sw -- a4.se withcolor black dashed evenly;
+
+ myWay.ignoreNegativeBase := 1;
+ EPicture.b0(myWay)("goof");
+ EPicture.b1(myWay)("Aoorian");
+ EPicture.b2(myWay)("fpp");
+ EPicture.b3(myWay)("f: int");
+ EPicture.b4(myWay)("aa()");
+
+ b0.nw = (0,-20);
+ setObjectJoin(pa.bottom = pb.bottom; pa.right = pb.left - 10);
+ joinDrawObjects(scantokens listArray(b)(5));
+
+ draw b0.sw -- b4.se withcolor black dashed evenly;
+endfig;
+
+
+beginfig(5);
+ truecorners := 1;
+ bboxmargin := 0;
+ save p;
+ picture basepict;
+ basepict := "<<foo>>" infont "tyxtt";
+
+ draw basepict;
+ draw bbox basepict;
+endfig;
+
+beginfig(6);
+ item.foo(iPictBoxed)("foo bar cool")(foo.nw = (0,0));
+ item.bar(iPict)("x: int")(bar.nw = (20,20));
+
+ aitem(iPictBoxed)("an anounymous item")(obj.nw = (40,10));
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture_stack.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture_stack.mp
new file mode 100644
index 00000000000..d13803f71ff
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_picture_stack.mp
@@ -0,0 +1,70 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+string theFont;
+theFont := "tyxtt";
+
+beginfig(1);
+ PictureStackInfoCopy.stackWay(iStack);
+
+ EPictureStack.emptyStack(stackWay)()("vcenter");
+ emptyStack.nw=(10,10);
+ drawObject(emptyStack);
+endfig;
+
+beginfig(2);
+ PictureStack.myStack("foo", "bar: int" infont theFont, "cool man" infont defaultfont, "nice")("vcenter");
+ myStack.nw = (0,0);
+ PictureStack_draw.myStack;
+endfig;
+
+beginfig(3);
+ % 1
+ PictureStack.stack("fooornika", "gar nichts", "nicelina")("vcenter");
+ stack.info.boxed := 1;
+ stack.info.iPict.boxed := 1; % this does nothing, it's too late
+
+ stack.nw = (0,0);
+ drawObject(stack);
+
+ % 2
+ PictureStack.stackb("fooornika", "gar nichts", "nicelina")("vcenter");
+ stackb.info.boxed := 1;
+ stackb.pict[0].info.boxed := 1;
+ stackb.pict[2].info.boxed := 1;
+
+ stackb.nw = (50,0);
+ drawObject(stackb);
+
+ % 3
+ PictureStackInfoCopy.myInfo(iStack);
+ myInfo.boxed := 1;
+ myInfo.iPict.boxed := 1;
+ EPictureStack.stackc(myInfo)("fooornika", "gar nichts", "nicelina")("vcenter");
+
+ stackc.nw = (100,0);
+ drawObject(stackc);
+endfig;
+
+beginfig(4);
+ %
+
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_positioning.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_positioning.mp
new file mode 100644
index 00000000000..5e2a855539c
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_positioning.mp
@@ -0,0 +1,195 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+iPict.boxed := 1;
+spacing := 5;
+string strA, strB, strC;
+strA := "a";
+strB := "...";
+strC := "XYZ";
+
+beginfig(1);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(top, left, right)(spacing)("+")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.left, A.top) -- (C.right, A.top);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.top(spacing)(X, Y, Z);
+
+ X.top = A.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.top) -- (Z.right, X.top);
+endfig;
+
+beginfig(2);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(midy, left, right)(spacing)("+")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.left, A.midy) -- (C.right, A.midy);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.midy(spacing)(X, Y, Z);
+
+ X.top = A.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.midy) -- (Z.right, X.midy);
+endfig;
+
+beginfig(3);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(bottom, left, right)(spacing)("+")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.left, A.bottom) -- (C.right, A.bottom);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ leftToRight.bottom(spacing)(X, Y, Z);
+
+ X.top = A.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.bottom) -- (Z.right, X.bottom);
+endfig;
+
+beginfig(4);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(left, top, bottom)(spacing)("-")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.left, A.top) -- (A.left, C.bottom);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.left(spacing)(X, Y, Z);
+
+ X.top = C.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.left, X.top) -- (X.left, Z.bottom);
+endfig;
+
+beginfig(5);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(midx, top, bottom)(spacing)("-")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.midx, A.top) -- (A.midx, C.bottom);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.midx(spacing)(X, Y, Z);
+
+ X.top = C.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.midx, X.top) -- (X.midx, Z.bottom);
+endfig;
+
+beginfig(6);
+ save A, B, C, X, Y, Z;
+
+ Picture.A(strA);
+ Picture.B(strB);
+ Picture.C(strC);
+
+ allign(right, top, bottom)(spacing)("-")(A, B, C);
+
+ drawObjects(A, B, C);
+
+ draw (A.right, A.top) -- (A.right, C.bottom);
+
+ %%%%
+
+ Picture.X(strA);
+ Picture.Y(strB);
+ Picture.Z(strC);
+
+ topToBottom.right(spacing)(X, Y, Z);
+
+ X.top = C.bottom - 10;
+
+ drawObjects(X, Y, Z);
+
+ draw (X.right, X.top) -- (X.right, Z.bottom);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins.mp
new file mode 100644
index 00000000000..750cee4e975
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins.mp
@@ -0,0 +1,26 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+input metauml_skin_simple;
+
+beginfig(1);
+ Class.HelloSkin("HelloSkin")("nice: int")("done(): void");
+ drawObject(HelloSkin);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins_global_defaults.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins_global_defaults.mp
new file mode 100644
index 00000000000..aaeffd043b7
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_skins_global_defaults.mp
@@ -0,0 +1,29 @@
+% Part of the MetaUML manual.
+% 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.
+
+string metauml_defaultFont, metauml_defaultFontLight;
+metauml_defaultFont := "cmr12";
+metauml_defaultFontLight := "cmr10";
+
+input metauml;
+
+beginfig(1);
+ Class.HelloSkinB("HelloSkinGlobal")("foo: int")("bar(): void");
+ drawObject(HelloSkinB);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_state.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_state.mp
new file mode 100644
index 00000000000..f9a53741c01
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_state.mp
@@ -0,0 +1,73 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+beginfig(1);
+ EntryPoint.entry;
+ ExitPoint.exit;
+
+ entry.nw = (0,0);
+ exit.nw = (50,50);
+
+ drawObjects(entry, exit);
+ clink(transition)(entry, exit);
+endfig;
+
+beginfig(2);
+ EState.myState(iState)("the light is", "visibly on")();
+ drawObject(myState);
+
+ State.anotherState("Another nice state")();
+ anotherState.info.drawNameLine := 1;
+ drawObjectAt(anotherState)(anotherState.nw = (0,50));
+endfig;
+
+beginfig(3);
+ State.interesting("Interesting state")();
+ State_internalTransitions.interesting("OnEntry / doVeryHappy", "OnExit / doSomewhatSad");
+ interesting.info.drawNameLine := 1;
+
+ drawObject(interesting);
+endfig;
+
+beginfig(4);
+ Begin.b;
+ End.e;
+ State.sa("A state")();
+ State.sb("Another state")();
+ setObjectJoin(pb.w = pa.e + (40, 0));
+ joinObjects(b, sa, sb, e);
+
+ State.composite("Composite state")(b, e, sa, sb);
+ drawObject(composite);
+
+ clink(transition)(b, sa);
+ clink(transition)(sa, sb);
+ clink(transition)(sb, e);
+endfig;
+
+beginfig(5);
+endfig;
+
+beginfig(6);
+endfig;
+
+beginfig(7);
+endfig;
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_usecase.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_usecase.mp
new file mode 100644
index 00000000000..dd75ac68be5
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/test_usecase.mp
@@ -0,0 +1,197 @@
+% Part of the MetaUML manual.
+% 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.
+
+input metauml;
+
+HumanInfoCopy.iDwarf(iHuman);
+iDwarf.width := 60;
+iDwarf.height := 20;
+iDwarf.foreColor := blue;
+iDwarf.shadeColor := .8blue;
+
+beginfig(1);
+ Human.h;
+ drawObject(h);
+ draw objectBox(h);
+
+ Human.h1;
+ h1.n = (35, 0);
+ h1.info.foreColor := red;
+ drawObject(h1);
+
+ Human.h2;
+ h2.info.height := 90;
+ h2.nw = (50,0);
+ drawObject(h2);
+ draw objectBox(h2);
+
+ EHuman.d(iDwarf);
+ drawObjectAt(d)(d.s = (10,-50));
+
+ EHuman.d2(iDwarf);
+ d2.info.shadeColor := red;
+ drawObjectAt(d2)(d2.s = (10,-80));
+endfig;
+
+beginfig(2);
+ save a,b,c,d;
+
+ show "***";
+ show "Figure 2";
+ show "";
+
+ Actor.a("foo");
+ drawObject(a);
+
+ Actor.b("Bar in debug mode", "fooling around");
+ Actor_setDebugMode.b;
+ b.n = (70,0);
+ drawObject(b);
+
+ Actor.c("Student");
+ c.sw = b.n;
+ drawObject(c);
+
+ Actor.d(".");
+ d.e = (30, -50);
+ drawObject(d);
+ label.rt("X", d.e);
+endfig;
+
+beginfig(3);
+ Usecase.u("foo");
+ drawObject(u);
+
+ draw objectBox(u) withpen pencircle scaled .1;
+
+ draw u.n withpen pencircle scaled 2 withcolor red;
+ draw u.s withpen pencircle scaled 2 withcolor red;
+ draw u.e withpen pencircle scaled 2 withcolor red;
+ draw u.w withpen pencircle scaled 2 withcolor red;
+
+ draw u.ulft withpen pencircle scaled 2 withcolor blue;
+ draw u.urt withpen pencircle scaled 2 withcolor blue;
+ draw u.llft withpen pencircle scaled 2 withcolor blue;
+ draw u.lrt withpen pencircle scaled 2 withcolor blue;
+
+ Usecase.login("Log in for an eagerly", "awaiting user", "which spans the 3rd line");
+ login.s = (0, 5);
+ drawObject(login);
+
+ Usecase.t("foo xasdf asdf as", "asdfa");
+ t.s = login.n + (0,10);
+ drawObject(t);
+
+ Usecase.q("foo xasdf asdf as", "asdfa", "cru asdf asdf ygh", "Sdfg s");
+ q.s = t.n + (0,10);
+ drawObject(q);
+
+endfig;
+
+beginfig(4);
+ Actor.userA("User A2", "doesn't looks all too nice", "by today's standards");
+ % Any Actor object is made of two sub-objects: nameStack and human.
+ % Each individual picture in the nameStack can be configured individually.
+ %
+ % However, it is not possible to configure all the lines in the nameStack at
+ % once now, saying something like:
+ %
+ % userA.nameStack.info.iPict.iFont.scale := 3;
+ %
+ % This happens because the information above is copied into the Picture objects
+ % in the Actor constructor (and it is useless to modify it afterwards).
+ %
+ % If you do want to make such global modifications of the settings, see the
+ % next two examples.
+
+ userA.nameStack.pict[0].info.iFont.scale := 1.2;
+ userA.nameStack.pict[1].info.iFont.scale := .7;
+ userA.nameStack.info.borderColor := blue;
+ userA.nameStack.info.boxed := 1;
+ userA.nameStack.group.info.left := 30;
+ userA.nameStack.group.info.right := 5;
+ userA.human.info.foreColor := red;
+
+ drawObject(userA);
+ %draw objectBox(userA.nameStack);
+ %draw objectBox(userA.human);
+endfig;
+
+beginfig(5);
+ save userA;
+ % If you want to have preset a info for specific objects
+
+ ActorInfoCopy.iBig(iActor);
+
+ % ActorInfo contains info-s for two objects
+ % iNameStack: for the stack representing the actor's name
+ % iHuman: for the little human
+
+ iBig.iNameStack.iPict.iFont.scale := 3;
+ iBig.iNameStack.spacing := 25;
+ iBig.iHuman.height := 25;
+
+ EActor.userA(iBig)("User A", "on two lines");
+ drawObject(userA);
+endfig;
+
+beginfig(6);
+ save userA;
+ % If you want to have GLOBAL settings
+
+ iActor.iNameStack.iPict.iFont.scale := 2;
+ iActor.iNameStack.spacing := 18;
+
+ Actor.userA("User A", "reloaded");
+ drawObject(userA);
+endfig;
+
+beginfig(7);
+ save usecaseA;
+ Usecase.usecaseA("A highly customizable", "usecase. Foo bar!");
+ usecaseA.info.iNameStack.iPict.iFont.scale := .5;
+ drawObject(usecaseA);
+endfig;
+
+beginfig(8);
+ save usecaseA;
+ Usecase.usecaseA("A highly customizable", "usecase. Foo bar!");
+ usecaseA.info.iNameStack.iPict.iFont.scale := 1.1;
+ usecaseA.info.foreColor := red;
+ usecaseA.info.borderColor := blue;
+ usecaseA.info.iShade.background := green;
+ usecaseA.info.iShade.shift := 4;
+ drawObject(usecaseA);
+endfig;
+
+beginfig(9);
+ save usecaseA;
+ UsecaseInfoCopy.iMyUsecase(iUsecase);
+ iMyUsecase.iNameStack.iPict.iFont.scale := .6;
+ iMyUsecase.iNameStack.spacing := 5;
+ iMyUsecase.foreColor := green;
+ iMyUsecase.iShade.background := red;
+
+ EUsecase.usecaseA(iMyUsecase)("A highly ", " customizable usecase.");
+ EUsecase.usecaseB(iMyUsecase)("Another very ", " customizable usecase.");
+
+ leftToRight(20)(usecaseA, usecaseB);
+ drawObjects(usecaseA, usecaseB);
+endfig;
+
+end
+
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase.mp
new file mode 100644
index 00000000000..ca8040f57b2
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase.mp
@@ -0,0 +1,43 @@
+% Sample MetaUML figures.
+% 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.
+
+
+input metauml;
+
+beginfig(1);
+ Usecase.U("Authenticate user",
+ "by name, password");
+ drawObject(U);
+endfig;
+
+beginfig(2);
+ Actor.A("User");
+ drawObject(A);
+endfig;
+
+beginfig(3);
+ save A;
+
+ Actor.A("Administrator");
+ drawObject(A);
+ draw A.nw -- A.ne -- A.se -- A.sw -- cycle;
+ draw A.human.nw -- A.human.ne -- A.human.se -- A.human.sw -- cycle;
+
+endfig;
+
+
+end
diff --git a/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase_diagrams.mp b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase_diagrams.mp
new file mode 100644
index 00000000000..110ca35c072
--- /dev/null
+++ b/Master/texmf-dist/doc/metapost/metauml/metauml_manual/fig/usecase_diagrams.mp
@@ -0,0 +1,48 @@
+% Part of the MetaUML manual.
+% 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.
+
+% for f in `find . | grep '.*\.[1-9]'`; do echo $f; done
+
+input metauml;
+
+beginfig(1);
+ Actor.user("User");
+ Actor.db("Database");
+
+ Usecase.dbquery("Query database");
+ Usecase.auth("Authentification");
+ Usecase.authA("Authentification by", "username, password");
+ Usecase.authB("Authentification by", "smartcard");
+
+ auth.w = user.human.e + (30,0);
+ dbquery.s = auth.n + (0,30);
+ db.human.w = dbquery.e + (30,0);
+
+ authB.left - authA.right = 30;
+ authB.midy = authA.midy;
+ .5[authB.w, authA.e] = (auth.midx, auth.bottom - 50);
+
+ drawObjects(user, auth, dbquery, db, authA, authB);
+
+ clink(inheritance)(authA, auth);
+ clink(inheritance)(authB, auth);
+ clink(association)(auth, dbquery);
+ clink(association)(user.human, auth);
+ clink(association)(dbquery, db.human);
+endfig;
+
+end