changeset 443:87c36c5ed434

Merged branches.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Tue, 16 Oct 2007 22:20:37 +0200
parents 5968e273449b (current diff) 13ecfb4278a4 (diff)
children 0bda71dc9c4f
files trunk/src/docgen-tests.d
diffstat 12 files changed, 557 insertions(+), 252 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/src/docgen-tests.d	Tue Oct 16 22:13:37 2007 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module trunk.src.tests;
-
-import docgen.graphutils.writers;
-import tango.io.Stdout;
-import tango.io.FileConduit;
-
-/**
- * A temporary test program for the docgen package.
- * I'll replace this with proper unittests in the future.
- *
- */
-void main() {
-    {
-        auto a = new Vertex("mod_a", "path.to.mod_a", 1);
-        auto b = new Vertex("mod_b", "path.to.mod_b", 2);
-        auto c = new Vertex("mod_c", "path.to.mod_c", 3);
-
-        auto d = new Vertex("mod_d", "path.to.mod_d", 4);
-        auto e = new Vertex("mod_e", "path.to.mod_e", 5);
-        auto f = new Vertex("mod_f", "path.to.mod_f", 6);
-        auto g = new Vertex("mod_g", "path.to.mod_g", 7);
-
-        Edge[] edges;
-        //edges ~= a.addChild(b);
-        //edges ~= b.addChild(c);
-        //edges ~= c.addChild(a);
-        edges ~= d.addChild(a);
-        //edges ~= e.addChild(a);
-        edges ~= b.addChild(d);
-        edges ~= b.addChild(e);
-        edges ~= g.addChild(a);
-        edges ~= b.addChild(f);
-        edges ~= g.addChild(f);
-        edges ~= a.addChild(g);
-
-
-
-        GraphOptions test;
-        test.graphFormat = GraphFormat.Dot;
-        test.HighlightCyclicVertices = true;
-        //test.format = GraphOutputFormat.ModuleNames;
-        //test.format = GraphOutputFormat.ModulePaths;
-        test.depth = 5;
-        //test.depth++;
-
-        auto gwf = new DefaultGraphWriterFactory(test);
-        auto writer = gwf.createGraphWriter([Stdout.stream, new FileConduit("test.dot", FileConduit.WriteCreate)]);
-
-        writer([a,b,c,d,e,f,g], edges);
-    }
-}
\ No newline at end of file
--- a/trunk/src/docgen/archdoc.xmi	Tue Oct 16 22:13:37 2007 +0200
+++ b/trunk/src/docgen/archdoc.xmi	Tue Oct 16 22:20:37 2007 +0200
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2007-09-19T22:58:35" xmi.version="1.2" >
+<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2007-10-15T23:59:30" xmi.version="1.2" >
  <XMI.header>
   <XMI.documentation>
    <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
-   <XMI.exporterVersion>1.5.71</XMI.exporterVersion>
+   <XMI.exporterVersion>1.5.8</XMI.exporterVersion>
    <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding>
   </XMI.documentation>
   <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" />
@@ -128,7 +128,7 @@
        <UML:Classifier.feature>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="2SrUGMptabML" isRoot="false" isAbstract="false" isQuery="false" name="createListingWriter" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="pioyJkpEo7Bj" type="zhVfgpENwAeN" />
+          <UML:Parameter kind="return" xmi.id="TMA6Ge0zQMX6" type="zhVfgpENwAeN" />
           <UML:Parameter isSpecification="false" visibility="private" xmi.id="GYFWlYNnmcE7" value="" type="3qQutO5Yhxt6" name="outputs" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
@@ -154,7 +154,7 @@
        <UML:Classifier.feature>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="CMMapfT5KiQP" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="dnaY7cwuRQn2" type="2Mzl2VgeffI0" />
+          <UML:Parameter kind="return" xmi.id="R9UhhTPng6id" type="2Mzl2VgeffI0" />
           <UML:Parameter isSpecification="false" visibility="private" xmi.id="r5Ijnmvx8HYv" value="" type="Ug6grrz7llbI" name="modules" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
@@ -169,7 +169,7 @@
        <UML:Classifier.feature>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="RDl3vCbldkit" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="hvf2wcEjK0hb" type="2Mzl2VgeffI0" />
+          <UML:Parameter kind="return" xmi.id="juNjzfHRzPXE" type="2Mzl2VgeffI0" />
           <UML:Parameter isSpecification="false" visibility="private" xmi.id="eZGRSI3D44ZH" value="" type="Ug6grrz7llbI" name="modules" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
@@ -195,7 +195,7 @@
         </UML:Operation>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="PX2Y1eFKtaj6" isRoot="false" isAbstract="false" isQuery="false" name="isCyclic" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="iUqWazEDkmmr" type="EaC7G8UkzGbk" />
+          <UML:Parameter kind="return" xmi.id="1XBPtiTIpxzU" type="EaC7G8UkzGbk" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
        </UML:Classifier.feature>
@@ -216,7 +216,7 @@
         </UML:Operation>
        </UML:Classifier.feature>
       </UML:Class>
-      <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="672lM6F9KhcI" isRoot="false" isAbstract="false" name="GraphWriterOptions" >
+      <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="672lM6F9KhcI" isRoot="false" isAbstract="false" name="GraphOptions" >
        <UML:Classifier.feature>
         <UML:Attribute isSpecification="false" visibility="private" xmi.id="zRuotD7A5ZEx" type="4F09aHCjljSA" name="format" />
         <UML:Attribute isSpecification="false" visibility="private" xmi.id="dMwwhlSnUoPh" type="VDAdlQhZ750q" name="imageFormat" />
@@ -241,8 +241,8 @@
       </UML:Interface>
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="QrZyyaltfezo" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="pWxiAyPVfU1m" aggregation="composite" type="zgj70ST7PbVQ" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="g6iEmDoC2LA0" aggregation="none" type="FVtbgO8sd2ii" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="kdwMLV8h83sE" aggregation="composite" type="zgj70ST7PbVQ" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Sii687Npp9vE" aggregation="none" type="FVtbgO8sd2ii" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Generalization isSpecification="false" child="FVtbgO8sd2ii" visibility="public" namespace="Logical View" xmi.id="rtOV4FVf7iPk" parent="zgj70ST7PbVQ" discriminator="" name="" />
@@ -267,32 +267,32 @@
       <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eIi8xlOA51aq" client="zgj70ST7PbVQ" name="" supplier="ZUDChgtO8jSy" />
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="xcuomSYFMuc3" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="z3vey0rU0fYl" aggregation="none" type="zgj70ST7PbVQ" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="v0wc5Ii1vbnf" aggregation="none" type="ZUDChgtO8jSy" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="Yxf0JQYnYv4n" aggregation="none" type="zgj70ST7PbVQ" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CZfvIVeFD72m" aggregation="none" type="ZUDChgtO8jSy" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="KxhR786WWKiA" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="S4OAgzf4nSFv" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="LyN0X3ypydE5" aggregation="none" type="2MyyGGXAPfEy" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="e0bOstNQo1O8" aggregation="none" type="haoxC1oM2QVz" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Pwtxqxi0ULvm" aggregation="none" type="2MyyGGXAPfEy" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="036VnHDG2xBH" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="JoUpcbtKT5YV" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="eUTueiMekR8X" aggregation="none" type="B92ON93E7uE9" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="rY12d3mG4Neu" aggregation="none" type="haoxC1oM2QVz" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="GzI5yhBNb2IP" aggregation="none" type="B92ON93E7uE9" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="MPnzJ9f0egCU" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="ZYvknQmE8PDm" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="KYVg4GCPeyMv" aggregation="none" type="w884b40YcIag" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="xyPRKJE9rFBS" aggregation="none" type="haoxC1oM2QVz" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="HxgLLIDbGVeE" aggregation="none" type="w884b40YcIag" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="qQ8ZNcL54wHR" name="" >
        <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="wREu0yqd0ws9" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="3UwgJY27yBeJ" aggregation="none" type="qxq04A8rywIb" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="CnampsBkrbC9" aggregation="none" type="haoxC1oM2QVz" name="" />
+        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="sQIhdT9uOqDj" aggregation="none" type="qxq04A8rywIb" name="" />
        </UML:Association.connection>
       </UML:Association>
       <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="BQqAv02HTM6x" isRoot="false" isAbstract="false" name="VertexType" >
@@ -316,7 +316,7 @@
         </UML:Operation>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="faPqILFpZIBc" isRoot="false" isAbstract="false" isQuery="false" name="isCyclic" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="Oglo4WqmSTmM" type="EaC7G8UkzGbk" />
+          <UML:Parameter kind="return" xmi.id="ONF2RwfAq0sn" type="EaC7G8UkzGbk" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
        </UML:Classifier.feature>
@@ -337,7 +337,7 @@
        <UML:Classifier.feature>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="FYgiWJyDqrhK" isRoot="false" isAbstract="false" isQuery="false" name="options" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="305OynxgFlBp" type="672lM6F9KhcI" />
+          <UML:Parameter kind="return" xmi.id="e9EdXlpWG0u7" type="672lM6F9KhcI" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="L1C3szmMnzpw" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" >
@@ -352,7 +352,7 @@
         <UML:Attribute isSpecification="false" visibility="protected" xmi.id="ZmI5M1aN978M" type="672lM6F9KhcI" name="m_options" />
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="liEDYXNQ5pTO" isRoot="false" isAbstract="false" isQuery="false" name="options" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="kP1U9lJYR2KV" type="QXgD4zE4FsCt" />
+          <UML:Parameter kind="return" xmi.id="gNPWJNyfiEi9" type="QXgD4zE4FsCt" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
        </UML:Classifier.feature>
@@ -409,7 +409,7 @@
         <UML:Attribute isSpecification="false" visibility="protected" xmi.id="xswAJre2CrPi" type="OcpJQugxHW8F" name="m_options" />
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="mZ1wtQujXunn" isRoot="false" isAbstract="false" isQuery="false" name="options" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="ZAH1c2Nf2S1z" type="DaFOT7jBVtui" />
+          <UML:Parameter kind="return" xmi.id="ANIyMAl0H0bm" type="DaFOT7jBVtui" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
        </UML:Classifier.feature>
@@ -418,12 +418,12 @@
        <UML:Classifier.feature>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="QR4frQ4pllIy" isRoot="false" isAbstract="false" isQuery="false" name="options" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="DzfRkqGVDHxN" type="OcpJQugxHW8F" />
+          <UML:Parameter kind="return" xmi.id="jPJ0PB74YVap" type="OcpJQugxHW8F" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
         <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="GL3CAg7Qy0PF" isRoot="false" isAbstract="false" isQuery="false" name="createListingWriter" >
          <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="0HtRJDvsLArx" type="zhVfgpENwAeN" />
+          <UML:Parameter kind="return" xmi.id="qWVYkDfsYxos" type="zhVfgpENwAeN" />
           <UML:Parameter isSpecification="false" visibility="private" xmi.id="rlp4XIxd1W9V" value="" type="3qQutO5Yhxt6" name="outputs" />
          </UML:BehavioralFeature.parameter>
         </UML:Operation>
@@ -449,19 +449,19 @@
       <diagrams>
        <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1042" snapy="10" showatts="1" xmi.id="VfRLtV4Z9Ptg" documentation="" type="1" showops="1" showpackage="0" name="Source listing classes" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" >
         <widgets>
-         <classwidget usesdiagramfillcolor="0" width="428" showattsigs="601" x="504" fillcolor="#ffffc0" y="464" drawascircle="0" showopsigs="601" linewidth="none" height="72" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="gGNje78ValnI" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="1" width="62" showattsigs="601" x="862" fillcolor="none" y="200" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="UY72E0ULeXyT" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="none" />
-         <classwidget usesdiagramfillcolor="0" width="175" showattsigs="601" x="135" fillcolor="#ffffc0" y="236" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="OcpJQugxHW8F" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="368" x="643" fillcolor="#ffffc0" y="291" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="zhVfgpENwAeN" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="404" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="qxq04A8rywIb" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="559" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="w884b40YcIag" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="714" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="B92ON93E7uE9" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="869" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="2MyyGGXAPfEy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="411" showattsigs="601" x="17" fillcolor="#ffffc0" y="582" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="haoxC1oM2QVz" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="226" showattsigs="601" x="109" fillcolor="#ffffc0" y="482" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="m1ftLgsc5LXQ" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="411" x="17" fillcolor="#ffffc0" y="355" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="DdhFJyNQcQSm" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="1" width="127" x="498" fillcolor="none" y="324" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="none" />
-         <interfacewidget usesdiagramfillcolor="1" width="113" x="690" fillcolor="none" y="182" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="yBk69LKYzyaX" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="none" />
+         <classwidget usesdiagramfillcolor="0" width="428" showattsigs="601" x="504" fillcolor="#ffffc0" y="464" drawascircle="0" showopsigs="601" linewidth="none" height="72" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="gGNje78ValnI" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="1" width="62" showattsigs="601" x="862" fillcolor="none" y="200" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="UY72E0ULeXyT" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+         <classwidget usesdiagramfillcolor="0" width="175" showattsigs="601" x="135" fillcolor="#ffffc0" y="236" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="OcpJQugxHW8F" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="0" width="368" x="643" fillcolor="#ffffc0" y="291" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="zhVfgpENwAeN" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="404" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="qxq04A8rywIb" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="559" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="w884b40YcIag" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="714" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="B92ON93E7uE9" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="869" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="2MyyGGXAPfEy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="411" showattsigs="601" x="17" fillcolor="#ffffc0" y="582" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="haoxC1oM2QVz" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="226" showattsigs="601" x="109" fillcolor="#ffffc0" y="482" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="m1ftLgsc5LXQ" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="0" width="411" x="17" fillcolor="#ffffc0" y="355" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="DdhFJyNQcQSm" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="1" width="127" x="498" fillcolor="none" y="324" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+         <interfacewidget usesdiagramfillcolor="1" width="113" x="690" fillcolor="none" y="182" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="yBk69LKYzyaX" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
         </widgets>
         <messages/>
         <associations>
@@ -527,7 +527,7 @@
            <endpoint endx="428" endy="409" />
            <point x="541" y="409" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="66" x="448" fillcolor="none" y="410" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="#" isinstance="0" xmi.id="zbXkpXlCS0lr" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="66" x="448" fillcolor="none" y="410" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="#" isinstance="0" xmi.id="vasmP4T4bt7x" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="DdhFJyNQcQSm" widgetaid="m1ftLgsc5LXQ" xmi.id="M1DRAGcxqQmM" type="511" linecolor="none" >
           <linepath>
@@ -576,8 +576,8 @@
        </diagram>
        <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1042" snapy="10" showatts="1" xmi.id="BbQfy5JEWUGf" documentation="" type="1" showops="1" showpackage="0" name="Class graph classes" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" >
         <widgets>
-         <classwidget usesdiagramfillcolor="0" width="386" showattsigs="601" x="304" fillcolor="#ffffc0" y="533" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="pwXaDeUXVlRv" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="168" showattsigs="601" x="201" fillcolor="#ffffc0" y="283" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="85ASUVIYu8Rm" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="386" showattsigs="601" x="304" fillcolor="#ffffc0" y="533" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="pwXaDeUXVlRv" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="168" showattsigs="601" x="201" fillcolor="#ffffc0" y="283" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="85ASUVIYu8Rm" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
         </widgets>
         <messages/>
         <associations/>
@@ -597,30 +597,30 @@
        </diagram>
        <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1042" snapy="10" showatts="1" xmi.id="HBjs7fL0WfO5" documentation="" type="1" showops="1" showpackage="0" name="General classes" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" >
         <widgets>
-         <enumwidget usesdiagramfillcolor="0" width="162" x="98" fillcolor="#ffffc0" y="44" linewidth="none" height="108" usefillcolor="1" isinstance="0" xmi.id="58hyBKGITKzU" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="183" x="300" fillcolor="#ffffc0" y="44" linewidth="none" height="72" usefillcolor="1" isinstance="0" xmi.id="o5RT7D5TyDem" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
+         <enumwidget usesdiagramfillcolor="0" width="162" x="98" fillcolor="#ffffc0" y="44" linewidth="none" height="108" usefillcolor="1" isinstance="0" xmi.id="58hyBKGITKzU" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <enumwidget usesdiagramfillcolor="0" width="183" x="300" fillcolor="#ffffc0" y="44" linewidth="none" height="72" usefillcolor="1" isinstance="0" xmi.id="o5RT7D5TyDem" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
         </widgets>
         <messages/>
         <associations/>
        </diagram>
        <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1042" snapy="10" showatts="1" xmi.id="37Q7pvtspjUI" documentation="" type="1" showops="1" showpackage="0" name="Graph classes" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" >
         <widgets>
-         <classwidget usesdiagramfillcolor="0" width="330" showattsigs="601" x="324" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="162" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FVtbgO8sd2ii" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="172" x="62" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="4F09aHCjljSA" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="375" x="622" fillcolor="#ffffc0" y="433" drawascircle="0" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="2Mzl2VgeffI0" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="436" showattsigs="601" x="481" fillcolor="#ffffc0" y="546" drawascircle="0" showopsigs="601" linewidth="none" height="72" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="taceG4p7AY1k" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="236" showattsigs="601" x="70" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="189" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="672lM6F9KhcI" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="375" showattsigs="601" x="623" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="ZUDChgtO8jSy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="330" showattsigs="601" x="324" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="162" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FVtbgO8sd2ii" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <enumwidget usesdiagramfillcolor="0" width="172" x="62" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="4F09aHCjljSA" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="0" width="375" x="622" fillcolor="#ffffc0" y="433" drawascircle="0" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="2Mzl2VgeffI0" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="436" showattsigs="601" x="481" fillcolor="#ffffc0" y="546" drawascircle="0" showopsigs="601" linewidth="none" height="72" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="taceG4p7AY1k" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="236" showattsigs="601" x="70" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="189" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="672lM6F9KhcI" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="375" showattsigs="601" x="623" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="ZUDChgtO8jSy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
          <enumwidget usesdiagramfillcolor="0" width="110" x="434" fillcolor="#ffffc0" y="54" linewidth="none" height="126" usefillcolor="1" isinstance="0" xmi.id="BQqAv02HTM6x" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="309" showattsigs="601" x="729" fillcolor="#ffffc0" y="234" showopsigs="601" linewidth="none" height="108" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="PILb9kCQnOZd" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="309" showattsigs="601" x="729" fillcolor="#ffffc0" y="234" showopsigs="601" linewidth="none" height="108" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="PILb9kCQnOZd" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
          <enumwidget usesdiagramfillcolor="0" width="136" x="815" fillcolor="#ffffc0" y="0" linewidth="none" height="180" usefillcolor="1" isinstance="0" xmi.id="uzw9DITFgRm2" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="338" x="19" fillcolor="#ffffc0" y="440" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="H9NLXsg0Hncp" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="250" showattsigs="601" x="63" fillcolor="#ffffc0" y="554" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="GIPhxHkszygs" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="319" showattsigs="601" x="29" fillcolor="#ffffc0" y="646" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="vJ8WmfZPiVQE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="156" showattsigs="601" x="296" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="leYQpk5LWBlE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="147" showattsigs="601" x="464" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="cQGGEupKkEKw" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="1" width="127" x="426" fillcolor="none" y="423" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="none" />
-         <enumwidget usesdiagramfillcolor="0" width="112" x="259" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="VDAdlQhZ750q" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,75,1,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="0" width="338" x="19" fillcolor="#ffffc0" y="440" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="H9NLXsg0Hncp" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="250" showattsigs="601" x="63" fillcolor="#ffffc0" y="554" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="GIPhxHkszygs" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="319" showattsigs="601" x="29" fillcolor="#ffffc0" y="646" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="vJ8WmfZPiVQE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="156" showattsigs="601" x="296" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="leYQpk5LWBlE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <classwidget usesdiagramfillcolor="0" width="147" showattsigs="601" x="464" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="cQGGEupKkEKw" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
+         <interfacewidget usesdiagramfillcolor="1" width="127" x="426" fillcolor="none" y="423" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+         <enumwidget usesdiagramfillcolor="0" width="112" x="259" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="VDAdlQhZ750q" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
         </widgets>
         <messages/>
         <associations>
@@ -641,21 +641,21 @@
            <startpoint startx="729" starty="270" />
            <endpoint endx="654" endy="268" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="76" x="653" fillcolor="none" y="246" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="v0msW7sgOVcJ" text="incoming" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="76" x="653" fillcolor="none" y="246" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="6iFUQNA8O29G" text="incoming" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="uzw9DITFgRm2" widgetaid="PILb9kCQnOZd" xmi.id="eaFFJAnvNrxh" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
           <linepath>
            <startpoint startx="883" starty="234" />
            <endpoint endx="883" endy="180" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="43" x="838" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="XKgRPSjN3G7s" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="43" x="838" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="37WQwMtpwlbJ" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="4" indexb="2" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="PILb9kCQnOZd" xmi.id="xg3pIv6gVUUO" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
           <linepath>
            <startpoint startx="729" starty="306" />
            <endpoint endx="654" endy="309" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="75" x="649" fillcolor="none" y="309" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="ns2Esn3lmpbG" text="outgoing" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="75" x="649" fillcolor="none" y="309" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="n4MMwRI29XWX" text="outgoing" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="3" indexa="1" totalcountb="4" indexb="3" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="2Mzl2VgeffI0" xmi.id="m7wwiwCSxVGR" type="502" linecolor="none" >
           <linepath>
@@ -682,7 +682,7 @@
            <endpoint endx="357" endy="494" />
            <point x="516" y="494" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="66" x="359" fillcolor="none" y="496" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="#" isinstance="0" xmi.id="icdjqjacbcqS" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="66" x="359" fillcolor="none" y="496" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="#" isinstance="0" xmi.id="uefHfmXit36n" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="672lM6F9KhcI" widgetaid="H9NLXsg0Hncp" xmi.id="p0keVPRrye6f" type="502" linecolor="none" >
           <linepath>
@@ -747,21 +747,21 @@
            <startpoint startx="489" starty="228" />
            <endpoint endx="489" endy="180" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="41" x="446" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="OtDAgpQaGKsD" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="41" x="446" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="PzcKiCdTExqA" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="4F09aHCjljSA" widgetaid="672lM6F9KhcI" xmi.id="zRuotD7A5ZEx" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
           <linepath>
            <startpoint startx="148" starty="228" />
            <endpoint endx="148" endy="180" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="56" x="150" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="431nLOrSgmJx" text="format" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="56" x="150" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="O8CVfg2XLio0" text="format" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
          <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="VDAdlQhZ750q" widgetaid="672lM6F9KhcI" xmi.id="dMwwhlSnUoPh" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
           <linepath>
            <startpoint startx="227" starty="228" />
            <endpoint endx="315" endy="180" />
           </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="99" x="273" fillcolor="none" y="196" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="ox6exKnKRPMI" text="imageFormat" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+          <floatingtext usesdiagramfillcolor="1" width="99" x="273" fillcolor="none" y="196" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="SJgKMk7kki2Q" text="imageFormat" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </assocwidget>
         </associations>
        </diagram>
@@ -775,16 +775,16 @@
          <notewidget usesdiagramfillcolor="1" width="194" x="214" fillcolor="none" y="455" linewidth="none" height="50" usefillcolor="1" isinstance="0" xmi.id="pnt8L3mW94H6" text="Writer can be used to generate several graphs." usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
         </widgets>
         <messages>
-         <messagewidget usesdiagramfillcolor="1" width="412" x="123" fillcolor="none" y="98" operation="rSVt3npBuRwI" linewidth="none" widgetbid="xkkShjnglZDn" height="32" usefillcolor="1" seqnum="" textid="17kr4cTMN71P" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="rSVt3npBuRwI" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
-          <floatingtext usesdiagramfillcolor="1" width="233" x="128" fillcolor="none" y="76" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="17kr4cTMN71P" text=": this(options : GraphWriterOptions)" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
+         <messagewidget usesdiagramfillcolor="1" width="426" x="123" fillcolor="none" y="98" operation="rSVt3npBuRwI" linewidth="none" widgetbid="xkkShjnglZDn" height="32" usefillcolor="1" seqnum="" textid="17kr4cTMN71P" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="rSVt3npBuRwI" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
+          <floatingtext usesdiagramfillcolor="1" width="233" x="128" fillcolor="none" y="76" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="17kr4cTMN71P" text=": this(options : GraphOptions)" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </messagewidget>
-         <messagewidget usesdiagramfillcolor="1" width="412" x="123" fillcolor="none" y="284" operation="qt3yjRHa0HmR" linewidth="none" widgetbid="xkkShjnglZDn" height="73" usefillcolor="1" seqnum="" textid="8R7413dyF3lY" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="qt3yjRHa0HmR" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
+         <messagewidget usesdiagramfillcolor="1" width="426" x="123" fillcolor="none" y="284" operation="qt3yjRHa0HmR" linewidth="none" widgetbid="xkkShjnglZDn" height="73" usefillcolor="1" seqnum="" textid="8R7413dyF3lY" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="qt3yjRHa0HmR" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
           <floatingtext usesdiagramfillcolor="1" width="306" x="128" fillcolor="none" y="262" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="8R7413dyF3lY" text=": createGraphWriter(outputs : OutputStream[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </messagewidget>
          <messagewidget usesdiagramfillcolor="1" width="368" x="527" fillcolor="none" y="304" operation="RhFDP34VCWM4" linewidth="none" widgetbid="5sYVesgRYawR" height="32" usefillcolor="1" seqnum="" textid="KpN7JYvOVJ7T" widgetaid="xkkShjnglZDn" isinstance="0" xmi.id="RhFDP34VCWM4" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
           <floatingtext usesdiagramfillcolor="1" width="399" x="532" fillcolor="none" y="282" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="KpN7JYvOVJ7T" text=": this(factory : GraphWriterFactory, outputs : OutputStream[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </messagewidget>
-         <messagewidget usesdiagramfillcolor="1" width="772" x="123" fillcolor="none" y="537" operation="nXwHg6RtyC4B" linewidth="none" widgetbid="5sYVesgRYawR" height="32" usefillcolor="1" seqnum="" textid="CUWS73hkulgU" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="nXwHg6RtyC4B" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
+         <messagewidget usesdiagramfillcolor="1" width="786" x="123" fillcolor="none" y="537" operation="nXwHg6RtyC4B" linewidth="none" widgetbid="5sYVesgRYawR" height="32" usefillcolor="1" seqnum="" textid="CUWS73hkulgU" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="nXwHg6RtyC4B" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
           <floatingtext usesdiagramfillcolor="1" width="338" x="249" fillcolor="none" y="515" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="CUWS73hkulgU" text=": generateGraph(vertices : Vertex[], edges : Edge[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
          </messagewidget>
         </messages>
@@ -820,8 +820,8 @@
         <widgets>
          <componentwidget usesdiagramfillcolor="1" width="223" x="380" fillcolor="none" y="310" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="3XF2INiTN1r0" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="none" />
          <componentwidget usesdiagramfillcolor="0" width="230" x="183" fillcolor="#ffffc0" y="447" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="JrRpdxcmaX5Z" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <componentwidget usesdiagramfillcolor="0" width="201" x="568" fillcolor="#ffffc0" y="447" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="oCHM2Pm3w15E" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
-         <componentwidget usesdiagramfillcolor="0" width="247" x="166" fillcolor="#ffffc0" y="158" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="OmgklXk4NCu0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,1,0,0,0,0" linecolor="#ff0000" />
+         <componentwidget usesdiagramfillcolor="0" width="201" x="568" fillcolor="#ffffc0" y="447" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="oCHM2Pm3w15E" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
+         <componentwidget usesdiagramfillcolor="0" width="247" x="166" fillcolor="#ffffc0" y="158" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="OmgklXk4NCu0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
          <componentwidget usesdiagramfillcolor="0" width="279" x="568" fillcolor="#ffffc0" y="158" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="9Wmh3pGp1WC1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
          <componentwidget usesdiagramfillcolor="1" width="159" x="98" fillcolor="none" y="310" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="JeCajbMGRVUn" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="none" />
         </widgets>
@@ -872,7 +872,7 @@
   </UML:Model>
  </XMI.content>
  <XMI.extensions xmi.extender="umbrello" >
-  <docsettings viewid="i9im14LKfTmZ" documentation="" uniqueid="0HtRJDvsLArx" />
+  <docsettings viewid="37Q7pvtspjUI" documentation="" uniqueid="qWVYkDfsYxos" />
   <listview>
    <listitem open="1" type="800" label="Näytöt" >
     <listitem open="1" type="801" id="Logical View" >
@@ -883,10 +883,6 @@
      <listitem open="0" type="807" id="i9im14LKfTmZ" label="Module graph classes" />
      <listitem open="0" type="807" id="VfRLtV4Z9Ptg" label="Source listing classes" />
      <listitem open="0" type="810" id="cZsSOYL0vMYc" label="Graph generation" />
-     <listitem open="0" type="813" id="m1ftLgsc5LXQ" >
-      <listitem open="0" type="814" id="xswAJre2CrPi" />
-      <listitem open="0" type="815" id="mZ1wtQujXunn" />
-     </listitem>
      <listitem open="0" type="813" id="taceG4p7AY1k" >
       <listitem open="0" type="814" id="jYgSGEsqagKv" />
       <listitem open="0" type="814" id="4Bqtwxx8p0pI" />
@@ -896,6 +892,10 @@
       <listitem open="0" type="814" id="ZmI5M1aN978M" />
       <listitem open="0" type="815" id="liEDYXNQ5pTO" />
      </listitem>
+     <listitem open="0" type="813" id="m1ftLgsc5LXQ" >
+      <listitem open="0" type="814" id="xswAJre2CrPi" />
+      <listitem open="0" type="815" id="mZ1wtQujXunn" />
+     </listitem>
      <listitem open="0" type="813" id="gGNje78ValnI" >
       <listitem open="0" type="814" id="hcALY1fmWlEG" />
       <listitem open="0" type="814" id="9QXgkpqgA1Du" />
@@ -905,16 +905,13 @@
       <listitem open="0" type="815" id="RDl3vCbldkit" />
      </listitem>
      <listitem open="0" type="813" id="85ASUVIYu8Rm" />
-     <listitem open="1" type="813" id="OcpJQugxHW8F" >
-      <listitem open="0" type="814" id="gOHG3iCLbStZ" />
+     <listitem open="1" type="813" id="vJ8WmfZPiVQE" >
+      <listitem open="0" type="815" id="rSVt3npBuRwI" />
+      <listitem open="0" type="815" id="qt3yjRHa0HmR" />
      </listitem>
      <listitem open="0" type="813" id="haoxC1oM2QVz" >
       <listitem open="0" type="815" id="2SrUGMptabML" />
      </listitem>
-     <listitem open="1" type="813" id="vJ8WmfZPiVQE" >
-      <listitem open="0" type="815" id="rSVt3npBuRwI" />
-      <listitem open="0" type="815" id="qt3yjRHa0HmR" />
-     </listitem>
      <listitem open="0" type="813" id="ZUDChgtO8jSy" >
       <listitem open="0" type="815" id="nXwHg6RtyC4B" />
      </listitem>
@@ -943,6 +940,9 @@
      <listitem open="0" type="813" id="B92ON93E7uE9" >
       <listitem open="0" type="815" id="JpwoOQQ4RzaO" />
      </listitem>
+     <listitem open="1" type="813" id="OcpJQugxHW8F" >
+      <listitem open="0" type="814" id="gOHG3iCLbStZ" />
+     </listitem>
      <listitem open="0" type="813" id="098RWfwZqN4L" >
       <listitem open="0" type="815" id="CMMapfT5KiQP" />
      </listitem>
@@ -972,14 +972,6 @@
      <listitem open="0" type="813" id="qxq04A8rywIb" >
       <listitem open="0" type="815" id="KoEO9zJwTXuD" />
      </listitem>
-     <listitem open="0" type="817" id="zhVfgpENwAeN" >
-      <listitem open="0" type="815" id="eGKXDits9Kho" />
-      <listitem open="0" type="815" id="fA2So7Re6pf2" />
-     </listitem>
-     <listitem open="0" type="817" id="DdhFJyNQcQSm" >
-      <listitem open="0" type="815" id="QR4frQ4pllIy" />
-      <listitem open="0" type="815" id="GL3CAg7Qy0PF" />
-     </listitem>
      <listitem open="0" type="817" id="2Mzl2VgeffI0" >
       <listitem open="0" type="815" id="kluUKuajlkAu" />
      </listitem>
@@ -988,6 +980,14 @@
       <listitem open="0" type="815" id="L1C3szmMnzpw" />
      </listitem>
      <listitem open="0" type="817" id="yBk69LKYzyaX" />
+     <listitem open="0" type="817" id="DdhFJyNQcQSm" >
+      <listitem open="0" type="815" id="QR4frQ4pllIy" />
+      <listitem open="0" type="815" id="GL3CAg7Qy0PF" />
+     </listitem>
+     <listitem open="0" type="817" id="zhVfgpENwAeN" >
+      <listitem open="0" type="815" id="eGKXDits9Kho" />
+      <listitem open="0" type="815" id="fA2So7Re6pf2" />
+     </listitem>
      <listitem open="0" type="817" id="QbirDWtuKiBS" />
      <listitem open="0" type="830" id="Datatypes" >
       <listitem open="1" type="829" id="DaFOT7jBVtui" />
--- a/trunk/src/docgen/docgen.d	Tue Oct 16 22:13:37 2007 +0200
+++ b/trunk/src/docgen/docgen.d	Tue Oct 16 22:20:37 2007 +0200
@@ -2,7 +2,7 @@
  * Author: Jari-Matti Mäkelä
  * License: GPL3
  */
-module trunk.src.docgen.docgen;
+module docgen.docgen;
 
 import docgen.modulegraph.writer;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/misc/parser.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,259 @@
+/**
+ * Author: Aziz Köksal & Jari-Matti Mäkelä
+ * License: GPL3
+ */
+module docgen.misc.parser;
+
+import docgen.graphutils.writers;
+
+import dil.Parser;
+import dil.Module;
+import dil.Settings;
+import tango.text.Regex : RegExp = Regex;
+import tango.io.FilePath;
+import tango.io.FileConst;
+import tango.text.Util;
+import common;
+debug import tango.io.Stdout;
+
+class Parser {
+  private static string findModulePath(string moduleFQN, string[] importPaths) {
+    string modulePath;
+
+    foreach (path; importPaths) {
+      modulePath = path ~ (path[$-1] == dirSep ? "" : [dirSep]) ~ moduleFQN ~ ".d";
+
+      // TODO: also check for *.di?
+
+      if ((new FilePath(modulePath)).exists()) {
+        debug Stdout("  * File for ")(moduleFQN)(" found: ")(modulePath).newline;
+        return modulePath;
+      }
+    }
+
+    debug Stdout("  * ")(moduleFQN)(" does not exist in imports")().newline()();
+    return null;
+  }
+
+  /**
+   * Imports the transitive closure of imports starting from "filePath",
+   * limited by recursionDepth.
+   *
+   * The search can be filtered by providing a list of regexps that match the
+   * FQNs of modules to be ignored.
+   *
+   * Params:
+   *     filePath = Path of the file to parse
+   *     importPaths = Directories to look for imports
+   *     strRegexps = Filter regexps
+   *     IncludeUnlocatableModules = Call the delegate also for unlocatable files
+   *     recursionDepth = How many levels of imports to follow (-1 = no limit)
+   *     mdg = Delegate that gets called for every module found
+   *     idg = Delegate that gets called for every import found
+   *     modules = List of parsed modules
+   */
+  public static void loadModules(string filePath, string[] importPaths, string[] strRegexps,
+                                 bool IncludeUnlocatableModules, int recursionDepth,
+                                 void delegate (string fqn, string path, Module) mdg,
+                                 void delegate (Module imported, Module importer) idg,
+                                 out Module[] modules) {
+
+    loadModules([filePath], importPaths, strRegexps, IncludeUnlocatableModules,
+      recursionDepth, mdg, idg, modules);
+  }
+
+  /**
+   * Imports the transitive closure of imports starting from "filePath",
+   * limited by recursionDepth.
+   *
+   * The search can be filtered by providing a list of regexps that match the
+   * FQNs of modules to be ignored.
+   *
+   * Params:
+   *     filePaths = Paths of the files to parse
+   *     importPaths = Directories to look for imports
+   *     strRegexps = Filter regexps
+   *     IncludeUnlocatableModules = Call the delegate also for unlocatable files
+   *     recursionDepth = How many levels of imports to follow (-1 = no limit)
+   *     mdg = Delegate that gets called for every module found
+   *     idg = Delegate that gets called for every import found
+   *     modules = List of parsed modules
+   */
+  public static void loadModules(string[] filePaths, string[] importPaths, string[] strRegexps,
+                                 bool IncludeUnlocatableModules, int recursionDepth,
+                                 void delegate (string fqn, string path, Module) mdg,
+                                 void delegate (Module imported, Module importer) idg,
+                                 out Module[] modules) {
+    // Initialize regular expressions.
+    RegExp[] regexps;
+    foreach (strRegexp; strRegexps)
+      regexps ~= new RegExp(strRegexp);
+
+    // Add directory of file and global directories to import paths.
+    foreach(filePath; filePaths) {
+      auto fileDir = (new FilePath(filePath)).folder();
+      if (fileDir.length)
+        importPaths ~= fileDir;
+    }
+
+    importPaths ~= GlobalSettings.importPaths;
+
+    debug foreach(path; importPaths) {
+      Stdout("Import path: ")(path).newline;
+    }
+
+    Module[string] loadedModules;
+
+    Module loadModule(string moduleFQNPath, int depth) {
+      if (depth == 0) return null;
+      
+      debug Stdout("Loading ")(moduleFQNPath).newline;
+
+      // Return already loaded module.
+      auto mod_ = moduleFQNPath in loadedModules;
+      if (mod_ !is null) {
+        debug Stdout("  Already loaded.")(moduleFQNPath).newline;
+        return *mod_;
+      }
+
+      auto FQN = replace(moduleFQNPath.dup, dirSep, '.');
+      
+      // Ignore module names matching regular expressions.
+      foreach (rx; regexps)
+        if (rx.test(FQN)) return null;
+
+      auto modulePath = findModulePath(moduleFQNPath, importPaths);
+      //foreach(filePath; filePaths)
+        //if (moduleFQNPath == filePath) modulePath = filePath;
+
+      debug Stdout("  FQN ")(FQN).newline;
+      debug Stdout("  Module path ")(modulePath).newline;
+
+      Module mod = null;
+
+      if (modulePath is null) {
+        if (IncludeUnlocatableModules)
+          mdg(FQN, moduleFQNPath, null);
+      } else {
+        mod = new Module(modulePath);
+        loadedModules[moduleFQNPath] = mod;
+        mod.parse();
+
+        mdg(FQN, moduleFQNPath, mod);
+
+        auto moduleFQNs = mod.getImports();
+
+        foreach (moduleFQN_; moduleFQNs) {
+          auto loaded_mod = loadModule(moduleFQN_, depth == -1 ? depth : depth-1);
+
+          if (loaded_mod !is null)
+            idg(loaded_mod, mod);
+        }
+      }
+
+      return mod;
+    } // loadModule
+
+    foreach(filePath; filePaths)
+      loadModule(filePath, recursionDepth);
+
+    // Finished loading modules.
+
+    // Ordered list of loaded modules.
+    modules = loadedModules.values;
+  }
+
+
+  /+ Old version - deprecated
+
+  /**
+   * Imports the transitive closure of imports starting from "filePath".
+   *
+   * The search can be filtered by providing a list of regexps that match the
+   * FQNs of modules to be ignored.
+   *
+   * TODO: integrate better with the docgen stuff - there's no need to
+   * scan&parse several times
+   */
+  public static void loadModules2(string filePath, string[] importPaths,
+                                 string[] strRegexps,
+                                 bool IncludeUnlocatableModules,
+                                 out Vertex[] vertices, out Edge[] edges,
+                                 out Module[] modules) {
+    // Init regular expressions.
+    RegExp[] regexps;
+    foreach (strRegexp; strRegexps)
+      regexps ~= new RegExp(strRegexp);
+
+    // Add directory of file and global directories to import paths.
+    auto fileDir = (new FilePath(filePath)).folder();
+    if (fileDir.length)
+      importPaths ~= fileDir;
+    importPaths ~= GlobalSettings.importPaths;
+
+    Vertex[string] loadedModules;
+    Edge[] _edges;
+    Module[] _modules;
+
+    int modCounter = 0;
+
+    void addModule(Vertex mod) {
+      assert(!(mod.location in loadedModules));
+
+      mod.id = modCounter++;
+      loadedModules[mod.location] = mod;
+    }
+
+    Vertex loadModule(string moduleFQNPath) {
+      // Return already loaded module.
+      auto mod_ = moduleFQNPath in loadedModules;
+      if (mod_ !is null) return *mod_;
+
+      // Ignore module names matching regular expressions.
+      foreach (rx; regexps)
+      if (rx.test(replace(moduleFQNPath, dirSep, '.')))
+        return null;
+
+      auto modulePath = findModulePath(moduleFQNPath, importPaths);
+      if (moduleFQNPath == filePath) modulePath = filePath;
+      auto FQN = replace(moduleFQNPath, dirSep, '.');
+
+      Vertex mod;
+
+      if (modulePath is null) {
+        if (IncludeUnlocatableModules) {
+          mod = new Vertex(FQN, moduleFQNPath);
+          addModule(mod);
+        }
+      } else {
+        mod = new Vertex(FQN, moduleFQNPath);
+        addModule(mod);
+
+        auto m = new Module(modulePath);
+        _modules ~= m;
+        m.parse();
+
+        auto moduleFQNs = m.getImports();
+
+        foreach (moduleFQN_; moduleFQNs) {
+          auto loaded_mod = loadModule(moduleFQN_);
+
+          if (loaded_mod !is null)
+            loaded_mod.addChild(mod);
+        }
+      }
+
+      return mod;
+    } // loadModule
+
+    loadModule(filePath);
+
+    // Finished loading modules.
+
+    // Ordered list of loaded modules.
+    vertices = loadedModules.values;
+    edges = _edges;
+    modules = _modules;
+  }
+  +/
+}
\ No newline at end of file
--- a/trunk/src/docgen/modulegraph/writer.d	Tue Oct 16 22:13:37 2007 +0200
+++ b/trunk/src/docgen/modulegraph/writer.d	Tue Oct 16 22:20:37 2007 +0200
@@ -18,115 +18,11 @@
 alias FileConst.PathSeparatorChar dirSep;
 
 class ModuleGraphGenerator {
-  private static string findModulePath(string moduleFQN, string[] importPaths) {
-    string modulePath;
-
-    foreach (path; importPaths) {
-      modulePath = path ~ (path[$-1] == dirSep ? "" : [dirSep])
-                        ~ moduleFQN ~ ".d";
-
-      // TODO: also check for *.di?
-      if ((new FilePath(modulePath)).exists())
-        return modulePath;
-    }
-
-    return null;
-  }
-
-  /**
-   * Imports the transitive closure of imports starting from "filePath".
-   *
-   * The search can be filtered by providing a list of regexps that match the
-   * FQNs of modules to be ignored.
-   *
-   * TODO: integrate better with the docgen stuff - there's no need to
-   * scan&parse several times
-   */
-  public static void loadModules(string filePath, string[] importPaths,
-                                 string[] strRegexps,
-                                 bool IncludeUnlocatableModules,
-                                 out Vertex[] vertices, out Edge[] edges,
-                                 out Module[] modules) {
-    // Init regular expressions.
-    RegExp[] regexps;
-    foreach (strRegexp; strRegexps)
-      regexps ~= new RegExp(strRegexp);
-
-    // Add directory of file and global directories to import paths.
-    auto fileDir = (new FilePath(filePath)).folder();
-    if (fileDir.length)
-      importPaths ~= fileDir;
-    importPaths ~= GlobalSettings.importPaths;
-
-    Vertex[string] loadedModules;
-    Edge[] _edges;
-    Module[] _modules;
-
-    int modCounter = 0;
-
-    void addModule(Vertex mod) {
-      assert(!(mod.location in loadedModules));
-
-      mod.id = modCounter++;
-      loadedModules[mod.location] = mod;
-    }
-
-    Vertex loadModule(string moduleFQNPath) {
-      // Return already loaded module.
-      auto mod_ = moduleFQNPath in loadedModules;
-      if (mod_ !is null) return *mod_;
-
-      // Ignore module names matching regular expressions.
-      foreach (rx; regexps)
-      if (rx.test(replace(moduleFQNPath, dirSep, '.')))
-        return null;
-
-      auto modulePath = findModulePath(moduleFQNPath, importPaths);
-      if (moduleFQNPath == filePath) modulePath = filePath;
-      auto FQN = replace(moduleFQNPath, dirSep, '.');
-
-      Vertex mod;
-
-      if (modulePath is null) {
-        if (IncludeUnlocatableModules) {
-          mod = new Vertex(FQN, moduleFQNPath);
-          addModule(mod);
-        }
-      } else {
-        mod = new Vertex(FQN, moduleFQNPath);
-        addModule(mod);
-
-        auto m = new Module(modulePath);
-        _modules ~= m;
-        m.parse();
-
-        auto moduleFQNs = m.getImports();
-
-        foreach (moduleFQN_; moduleFQNs) {
-          auto loaded_mod = loadModule(moduleFQN_);
-
-          if (loaded_mod !is null)
-            loaded_mod.addChild(mod);
-        }
-      }
-
-      return mod;
-    } // loadModule
-
-    loadModule(filePath);
-
-    // Finished loading modules.
-
-    // Ordered list of loaded modules.
-    vertices = loadedModules.values;
-    edges = _edges;
-    modules = _modules;
-  }
 
   /**
    * TODO
    */
-  static void generateGraph(GraphWriterOptions *options) {
+  static void generateGraph(GraphOptions *options) {
     auto gwf = new DefaultGraphWriterFactory(*options);
 
     auto writer = gwf.createGraphWriter([Stdout.stream]);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/tests/graphs.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,98 @@
+/**
+ * Author: Jari-Matti Mäkelä
+ * License: GPL3
+ */
+module docgen.tests.graphs;
+
+import docgen.graphutils.writers;
+import tango.io.Stdout;
+import tango.io.FileConduit;
+
+void saveDefaultGraph(Vertex[] vertices, Edge[] edges, char[] fname) {
+  GraphOptions test;
+  test.graphFormat = GraphFormat.Dot;
+  test.HighlightCyclicVertices = true;
+  //test.format = GraphOutputFormat.ModuleNames;
+  //test.format = GraphOutputFormat.ModulePaths;
+  test.depth = 5;
+  
+  auto gwf = new DefaultGraphWriterFactory(test);
+  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
+  auto file2 = new FileConduit("docgen/teststuff/" ~ fname ~ "-2", FileConduit.WriteCreate);
+  auto writer = gwf.createGraphWriter( [ file2, file] );
+  
+  writer(vertices, edges);
+  
+  file.close();
+  file2.close();
+}
+
+// no edges
+//@unittest
+void graph1() {
+  auto a = new Vertex("mod_a", "path.to.mod_a", 1);
+  auto b = new Vertex("mod_b", "path.to.mod_b", 2);
+  auto c = new Vertex("mod_c", "path.to.mod_c", 3);
+  
+  saveDefaultGraph( [a,b,c], null, "graph1.dot" );
+}
+
+
+// simple tree structure
+//@unittest
+void graph2() {
+  auto a = new Vertex("mod_a", "path.to.mod_a", 1);
+  auto b = new Vertex("mod_b", "path.to.mod_b", 2);
+  auto c = new Vertex("mod_c", "path.to.mod_c", 3);
+  auto d = new Vertex("mod_d", "path.to.mod_d", 4);
+
+  Edge[] edges;
+  edges ~= a.addChild(b);
+  edges ~= a.addChild(c);
+  edges ~= c.addChild(d);
+  
+  saveDefaultGraph( [a,b,c,d], edges, "graph2.dot" );
+}
+
+// circular imports
+//@unittest
+void graph3() {
+  auto a = new Vertex("mod_a", "path.to.mod_a", 1);
+  auto b = new Vertex("mod_b", "path.to.mod_b", 2);
+  auto c = new Vertex("mod_c", "path.to.mod_c", 3);
+  auto d = new Vertex("mod_d", "path.to.mod_d", 4);
+
+  Edge[] edges;
+  edges ~= a.addChild(b);
+  edges ~= b.addChild(c);
+  edges ~= c.addChild(a);
+
+  saveDefaultGraph( [a,b,c,d], edges, "graph3.dot" );
+}
+
+// more complex graph
+//@unittest
+void graph4() {
+  auto a = new Vertex("mod_a", "path.to.mod_a", 1);
+  auto b = new Vertex("mod_b", "path.to.mod_b", 2);
+  auto c = new Vertex("mod_c", "path.to.mod_c", 3);
+  auto d = new Vertex("mod_d", "path.to.mod_d", 4);
+  auto e = new Vertex("mod_e", "path.to.mod_e", 5);
+  auto f = new Vertex("mod_f", "path.to.mod_f", 6);
+  auto g = new Vertex("mod_g", "path.to.mod_g", 7);
+
+  Edge[] edges;
+  edges ~= a.addChild(b);
+  edges ~= b.addChild(c);
+  edges ~= c.addChild(a);
+  edges ~= d.addChild(a);
+  edges ~= e.addChild(a);
+  edges ~= b.addChild(d);
+  edges ~= b.addChild(e);
+  edges ~= g.addChild(a);
+  edges ~= b.addChild(f);
+  edges ~= g.addChild(f);
+  edges ~= a.addChild(g);
+
+  saveDefaultGraph( [a,b,c,d,e,f,g], edges, "graph4.dot" );
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/tests/parse.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,70 @@
+/**
+ * Author: Jari-Matti Mäkelä
+ * License: GPL3
+ */
+module docgen.tests.parse;
+
+import docgen.misc.parser;
+import tango.io.Stdout;
+import tango.io.FileConduit;
+import tango.io.Print: Print;
+import tango.text.convert.Layout : Layout;
+import dil.Module;
+
+void saveToFile(char[] fname, void delegate(Print!(char) file) foo) {
+  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
+  auto output = new Print!(char)(new Layout!(char), file);
+  
+  foo(output);
+  
+  file.close();
+}
+
+// load some test files
+//@unittest
+void parse1() {
+  saveToFile("parse1.txt", (Print!(char) file){
+  
+  Module[] modules;
+
+  Parser.loadModules(
+    [ "c" ], ["docgen/teststuff/"[].dup],
+    null, true, -1,
+    (char[] fqn, char[] path, Module m) {
+      file.format("{0} = {1}\n", fqn, path);
+    },
+    (Module imported, Module importer) {
+      file.format("{0} <- {1}\n",
+        imported ? imported.moduleFQN : "null"[],
+        importer ? importer.moduleFQN : "null"[]
+      );
+    },
+    modules
+    );
+  });
+}
+
+// load the imports of dil
+//@unittest
+void parse2() {
+saveToFile("parse2.txt", (Print!(char) file){
+
+Module[] modules;
+
+Parser.loadModules(
+  [ "docgen-tests" ], [".", "/home/jm/d/tango/"],
+//  [ "c" ], ["docgen/teststuff/"[].dup],
+  null, true, -1,
+  (char[] fqn, char[] path, Module m) {
+    file.format("{0} = {1}\n", fqn, path);
+  },
+  (Module imported, Module importer) {
+    file.format("{0} <- {1}\n",
+      imported ? imported.moduleFQN : "null"[],
+      importer ? importer.moduleFQN : "null"[]
+    );
+  },
+  modules
+  );
+});
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/teststuff/a.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,4 @@
+module a;
+
+void foo() {}
+void bar() {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/teststuff/b.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,4 @@
+module b;
+
+import a;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/teststuff/c.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,4 @@
+module c;
+
+import a;
+import b;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trunk/src/docgen/testsuite.d	Tue Oct 16 22:20:37 2007 +0200
@@ -0,0 +1,25 @@
+/**
+ * Author: Jari-Matti Mäkelä
+ * License: GPL3
+ */
+module docgen.testsuite;
+
+import docgen.tests.graphs;
+import docgen.tests.parse;
+import tango.io.Stdout;
+
+/**
+ * A temporary test program for the docgen package.
+ * I'll replace this with proper unittests in the future.
+ *
+ */
+void main() {
+  Stdout("Running..");
+  graph1();
+  graph2();
+  graph3();
+  graph4();
+  parse1();
+  parse2();
+  Stdout("done.\n");
+}
--- a/trunk/src/std/uni.d	Tue Oct 16 22:13:37 2007 +0200
+++ b/trunk/src/std/uni.d	Tue Oct 16 22:20:37 2007 +0200
@@ -555,8 +555,8 @@
 	    assert(table[i][0] <= table[i][1]);
 	    if (i < table.length - 1)
 	    {
-		if (table[i][1] >= table[i + 1][0])
-		    printf("table[%d][1] = x%x, table[%d][0] = x%x\n", i, table[i][1], i + 1, table[i + 1][0]);
+//		if (table[i][1] >= table[i + 1][0])
+//		    printf("table[%d][1] = x%x, table[%d][0] = x%x\n", i, table[i][1], i + 1, table[i + 1][0]);
 		assert(table[i][1] < table[i + 1][0]);
 	    }
 	}