Mercurial > projects > dil
changeset 395:ac9cd48151b6
Added couple of docgen modules.
author | Jari-Matti M?kel? <jmjm@iki.fi> |
---|---|
date | Wed, 19 Sep 2007 23:12:20 +0300 |
parents | 6440da4adb07 |
children | 0a4619735ce9 |
files | trunk/src/docgen-tests.d trunk/src/docgen/archdoc.xmi trunk/src/docgen/docgen.d trunk/src/docgen/graphutils/dotwriter.d trunk/src/docgen/graphutils/modulenamewriter.d trunk/src/docgen/graphutils/modulepathwriter.d trunk/src/docgen/graphutils/primitives.d trunk/src/docgen/graphutils/writer.d trunk/src/docgen/graphutils/writers.d trunk/src/docgen/lstlang0.sty trunk/src/docgen/misc/misc.d trunk/src/docgen/modulegraph/writer.d trunk/src/docgen/sourcelisting/writer.d trunk/src/docgen/sourcelisting/writers.d |
diffstat | 14 files changed, 1917 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen-tests.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,55 @@ +/** + * 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/archdoc.xmi Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,1066 @@ +<?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.header> + <XMI.documentation> + <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter> + <XMI.exporterVersion>1.5.71</XMI.exporterVersion> + <XMI.exporterEncoding>UnicodeUTF8</XMI.exporterEncoding> + </XMI.documentation> + <XMI.metamodel xmi.name="UML" href="UML.xml" xmi.version="1.3" /> + </XMI.header> + <XMI.content> + <UML:Model isSpecification="false" isLeaf="false" isRoot="false" xmi.id="m1" isAbstract="false" name="Umbrello UML mallintaja" > + <UML:Namespace.ownedElement> + <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="folder" isRoot="false" isAbstract="false" name="folder" /> + <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="datatype" isRoot="false" isAbstract="false" name="datatype" /> + <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="enum" isRoot="false" isAbstract="false" name="enum" /> + <UML:Stereotype isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="interface" isRoot="false" isAbstract="false" name="interface" /> + <UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Logical View" isRoot="false" isAbstract="false" name="Logical View" > + <UML:Namespace.ownedElement> + <UML:Package stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Datatypes" isRoot="false" isAbstract="false" name="Datatypes" > + <UML:Namespace.ownedElement> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="wMWsornjU1NO" isRoot="false" isAbstract="false" name="int" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="MGwAYPpykhTm" isRoot="false" isAbstract="false" name="char" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="EaC7G8UkzGbk" isRoot="false" isAbstract="false" name="bool" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="z3jKRbJnqFxM" isRoot="false" isAbstract="false" name="float" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="clKKQl7eLHlZ" isRoot="false" isAbstract="false" name="double" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="NFJMWv4VyoqO" isRoot="false" isAbstract="false" name="short" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="N7BDN7YzqsIG" isRoot="false" isAbstract="false" name="long" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="cPuvefV1toMN" isRoot="false" isAbstract="false" name="unsigned int" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="hQqeEe2cmDn9" isRoot="false" isAbstract="false" name="unsigned short" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="IL68COOolGjP" isRoot="false" isAbstract="false" name="unsigned long" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="wERn1lAgB0KQ" isRoot="false" isAbstract="false" name="string" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="tblJnk8mwuii" isRoot="false" isAbstract="false" name="GraphNode[]" elementReference="FVtbgO8sd2ii" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="zgj70ST7PbVQ" isRoot="false" isAbstract="false" name="undef" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="1dmVIJyonUEn" /> + <UML:Generalization xmi.idref="p27xKs3wyvpN" /> + <UML:Generalization xmi.idref="lO9c3UK3Ot3L" /> + <UML:Generalization xmi.idref="ns2H6KLVJ9Xb" /> + </UML:GeneralizableElement.generalization> + </UML:DataType> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="UGpWCc0uWy3g" isRoot="false" isAbstract="false" name="Vertex[]" elementReference="FVtbgO8sd2ii" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="QXgD4zE4FsCt" isRoot="false" isAbstract="false" name="GraphWriterOptions *" /> + <UML:DataType stereotype="datatype" isSpecification="false" isLeaf="false" visibility="public" namespace="Datatypes" xmi.id="DaFOT7jBVtui" isRoot="false" isAbstract="false" name="CodeListerOptions *" /> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Class comment="CodeLister " isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="gGNje78ValnI" isRoot="false" isAbstract="true" name="AbstractListingWriter" > + <UML:Classifier.feature> + <UML:Attribute isSpecification="false" visibility="protected" xmi.id="hcALY1fmWlEG" type="DdhFJyNQcQSm" name="factory" /> + <UML:Attribute isSpecification="false" visibility="protected" xmi.id="9QXgkpqgA1Du" type="3qQutO5Yhxt6" name="outputs" /> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="Aa3THxJUbPoV" isRoot="false" isAbstract="false" isQuery="false" name="this" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="BqUI126Bc7cr" value="" type="DdhFJyNQcQSm" name="factory" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="UJXlWuv0im5m" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="UY72E0ULeXyT" isRoot="false" isAbstract="false" name="Parser" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="KASRlJWedAvi" client="gGNje78ValnI" name="" supplier="UY72E0ULeXyT" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="OcpJQugxHW8F" isRoot="false" isAbstract="false" name="ListingOptions" > + <UML:Classifier.feature> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="gOHG3iCLbStZ" type="58hyBKGITKzU" name="docFormat" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="uYIB5OPcbNSb" client="gGNje78ValnI" name="" supplier="OcpJQugxHW8F" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="dw4fHleozmt5" client="gGNje78ValnI" name="" supplier="zgj70ST7PbVQ" /> + <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="58hyBKGITKzU" isRoot="false" isAbstract="false" name="DocFormat" > + <UML:EnumerationLiteral comment="LaTeX + listings currently" isSpecification="false" isLeaf="false" visibility="public" namespace="58hyBKGITKzU" xmi.id="jnhozkQ1UqIp" isRoot="false" isAbstract="false" name="LaTeX" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="58hyBKGITKzU" xmi.id="DhN6TjTmtUai" isRoot="false" isAbstract="false" name="XML" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="58hyBKGITKzU" xmi.id="eyKevtlegQQd" isRoot="false" isAbstract="false" name="HTML" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="58hyBKGITKzU" xmi.id="9qedeuTpcot5" isRoot="false" isAbstract="false" name="PlainText" /> + </UML:Enumeration> + <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="o5RT7D5TyDem" isRoot="false" isAbstract="false" name="CommentFormat" > + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="o5RT7D5TyDem" xmi.id="pCzlo8cW1N0o" isRoot="false" isAbstract="false" name="ddoc" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="o5RT7D5TyDem" xmi.id="FS23UTFrinBx" isRoot="false" isAbstract="false" name="doxygen" /> + </UML:Enumeration> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="zhVfgpENwAeN" isRoot="false" isAbstract="true" name="ListingWriter" > + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="eGKXDits9Kho" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="KNIleVffDrUP" value="" type="yBk69LKYzyaX" name="stream" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="fA2So7Re6pf2" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="Au5dZofnQ9Fm" value="" type="UY72E0ULeXyT" name="parser" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Interface> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="qxq04A8rywIb" isRoot="false" isAbstract="false" name="XMLWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="u534X7uMBIy5" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="KoEO9zJwTXuD" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="w884b40YcIag" isRoot="false" isAbstract="false" name="HTMLWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="1tZ6hQ3Znq07" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="mBRaST74dftD" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="B92ON93E7uE9" isRoot="false" isAbstract="false" name="LatexWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="FbDTu6ZqYxZ5" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="JpwoOQQ4RzaO" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2MyyGGXAPfEy" isRoot="false" isAbstract="false" name="PlainTextWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="jNbdqaYMr5vR" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="VRgNwkJTDt0B" isRoot="false" isAbstract="false" isQuery="false" name="generateListing" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="haoxC1oM2QVz" isRoot="false" isAbstract="false" name="DefaultListingFactory" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="0zf0YojVOJsY" /> + </UML:GeneralizableElement.generalization> + <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 isSpecification="false" visibility="private" xmi.id="GYFWlYNnmcE7" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="pOOtPyR4YD1i" client="gGNje78ValnI" name="" supplier="zhVfgpENwAeN" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Hf6nfAgadb4K" client="gGNje78ValnI" name="" supplier="haoxC1oM2QVz" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Zq72H2CSpWXa" client="2MyyGGXAPfEy" name="" supplier="zhVfgpENwAeN" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="A6N2elCBKnZO" client="B92ON93E7uE9" name="" supplier="zhVfgpENwAeN" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="eumL2kguvB4r" client="w884b40YcIag" name="" supplier="zhVfgpENwAeN" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="4EmCZ7If6KdF" client="qxq04A8rywIb" name="" supplier="zhVfgpENwAeN" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="lPLNpCYn0pMy" client="haoxC1oM2QVz" name="" supplier="qxq04A8rywIb" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="vlcHfpQlYKr7" client="haoxC1oM2QVz" name="" supplier="w884b40YcIag" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Kg5HoKskzFEv" client="haoxC1oM2QVz" name="" supplier="B92ON93E7uE9" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="9Vk40Voo7HZw" client="haoxC1oM2QVz" name="" supplier="2MyyGGXAPfEy" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="PsKBU0u8FFdQ" client="zhVfgpENwAeN" name="" supplier="zgj70ST7PbVQ" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="xxCyboRg8fju" client="gGNje78ValnI" name="" supplier="zhVfgpENwAeN" /> + <UML:Generalization isSpecification="false" child="2MyyGGXAPfEy" visibility="public" namespace="Logical View" xmi.id="jNbdqaYMr5vR" parent="gGNje78ValnI" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="B92ON93E7uE9" visibility="public" namespace="Logical View" xmi.id="FbDTu6ZqYxZ5" parent="gGNje78ValnI" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="w884b40YcIag" visibility="public" namespace="Logical View" xmi.id="1tZ6hQ3Znq07" parent="gGNje78ValnI" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="qxq04A8rywIb" visibility="public" namespace="Logical View" xmi.id="u534X7uMBIy5" parent="gGNje78ValnI" discriminator="" name="" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="098RWfwZqN4L" isRoot="false" isAbstract="false" name="ModuleGraphFactory" > + <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 isSpecification="false" visibility="private" xmi.id="r5Ijnmvx8HYv" value="" type="Ug6grrz7llbI" name="modules" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="4F09aHCjljSA" isRoot="false" isAbstract="false" name="GraphFormat" > + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="4F09aHCjljSA" xmi.id="Uhfew917nyad" isRoot="false" isAbstract="false" name="Dot" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="4F09aHCjljSA" xmi.id="Jy1fqRBSwrTe" isRoot="false" isAbstract="false" name="ModuleNames" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="4F09aHCjljSA" xmi.id="aow2SW2oUhRP" isRoot="false" isAbstract="false" name="ModulePaths" /> + </UML:Enumeration> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="pwXaDeUXVlRv" isRoot="false" isAbstract="false" name="ClassGraphFactory" > + <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 isSpecification="false" visibility="private" xmi.id="eZGRSI3D44ZH" value="" type="Ug6grrz7llbI" name="modules" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="FVtbgO8sd2ii" isRoot="false" isAbstract="false" name="Vertex" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="rtOV4FVf7iPk" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="cf98eu4OpFbX" type="cPuvefV1toMN" name="id" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="hgsYJ2YnnaVS" type="wERn1lAgB0KQ" name="name" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="sBVGlTogVHfE" type="wERn1lAgB0KQ" name="location" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="ajeRzBpBzXm2" type="XjtDAoectTTH" name="incomingEdges" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="hTSa11gAdwIE" type="XjtDAoectTTH" name="outgoingEdges" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="VXmaXhPeKk9I" type="BQqAv02HTM6x" name="type" /> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="2fXtbb2YF7TG" isRoot="false" isAbstract="false" isQuery="false" name="this" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="yejRa2Oznwhc" value="" type="wERn1lAgB0KQ" name="name" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="659S1872M8Cd" value="" type="wERn1lAgB0KQ" name="loc" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="QSb02dspK6xX" value="" type="cPuvefV1toMN" name="id" /> + </UML:BehavioralFeature.parameter> + </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:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization isSpecification="false" child="zgj70ST7PbVQ" visibility="public" namespace="Logical View" xmi.id="1dmVIJyonUEn" parent="FVtbgO8sd2ii" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="zgj70ST7PbVQ" visibility="public" namespace="Logical View" xmi.id="p27xKs3wyvpN" parent="FVtbgO8sd2ii" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="zgj70ST7PbVQ" visibility="public" namespace="Logical View" xmi.id="lO9c3UK3Ot3L" parent="FVtbgO8sd2ii" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="zgj70ST7PbVQ" visibility="public" namespace="Logical View" xmi.id="ns2H6KLVJ9Xb" parent="FVtbgO8sd2ii" discriminator="" name="" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="taceG4p7AY1k" isRoot="false" isAbstract="true" name="AbstractGraphWriter" > + <UML:Classifier.feature> + <UML:Attribute isSpecification="false" visibility="protected" xmi.id="jYgSGEsqagKv" type="H9NLXsg0Hncp" name="factory" /> + <UML:Attribute isSpecification="false" visibility="protected" xmi.id="4Bqtwxx8p0pI" type="3qQutO5Yhxt6" name="outputs" /> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="RhFDP34VCWM4" isRoot="false" isAbstract="false" isQuery="false" name="this" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="tBvamRjPCFGt" value="" type="H9NLXsg0Hncp" name="factory" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="9EFHJ6ymPiIf" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </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: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" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="E1vnjmQdHkkv" type="58hyBKGITKzU" name="docFormat" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="cGQrznU4axXm" type="cPuvefV1toMN" name="depth" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="UirRcvN0JEsV" type="EaC7G8UkzGbk" name="IncludeUnlocatableModules" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="AQlvQmLLBkXo" type="EaC7G8UkzGbk" name="GroupByFullPackageName" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="vOQEdHhXSPF8" type="EaC7G8UkzGbk" name="GroupByPackageNames" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="TrfH97Bbn23Q" type="EaC7G8UkzGbk" name="HighlightCyclicVertices" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="uBkkfpbvggDX" type="EaC7G8UkzGbk" name="HighlightCyclicEdges" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="2Mzl2VgeffI0" isRoot="false" isAbstract="true" name="GraphWriter" > + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="kluUKuajlkAu" isRoot="false" isAbstract="false" isQuery="false" name="generateGraph" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="fREmiJ7UKXFJ" value="" type="UGpWCc0uWy3g" name="vertices" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="OVLa6NXYfSPa" value="" type="XjtDAoectTTH" name="edges" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </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:Association.connection> + </UML:Association> + <UML:Generalization isSpecification="false" child="FVtbgO8sd2ii" visibility="public" namespace="Logical View" xmi.id="rtOV4FVf7iPk" parent="zgj70ST7PbVQ" discriminator="" name="" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="YFH3CyxPGsNY" client="taceG4p7AY1k" name="" supplier="2Mzl2VgeffI0" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="ZUDChgtO8jSy" isRoot="false" isAbstract="false" name="DotWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="gO9JCUKh4zz7" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="nXwHg6RtyC4B" isRoot="false" isAbstract="false" isQuery="false" name="generateGraph" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="L3a5zNEcbuwz" value="" type="UGpWCc0uWy3g" name="vertices" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="FX185qpx9hBY" value="" type="XjtDAoectTTH" name="edges" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization isSpecification="false" child="ZUDChgtO8jSy" visibility="public" namespace="Logical View" xmi.id="gO9JCUKh4zz7" parent="taceG4p7AY1k" discriminator="" name="" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="Ug6grrz7llbI" isRoot="false" isAbstract="false" name="Parser[]" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="85ASUVIYu8Rm" isRoot="false" isAbstract="false" name="ClassGraphWriter" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="R1LMLXi8zBZD" isRoot="false" isAbstract="false" name="ModuleGraphWriter" /> + <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: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: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: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: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: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" > + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="BQqAv02HTM6x" xmi.id="UWXR1uwj6Xht" isRoot="false" isAbstract="false" name="module" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="BQqAv02HTM6x" xmi.id="KZH8gthgkYAr" isRoot="false" isAbstract="false" name="package" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="BQqAv02HTM6x" xmi.id="GvOp2iAWCfvE" isRoot="false" isAbstract="false" name="class" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="BQqAv02HTM6x" xmi.id="XsxdPcUh9joq" isRoot="false" isAbstract="false" name="interface" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="BQqAv02HTM6x" xmi.id="dTUN2eCIZb6Z" isRoot="false" isAbstract="false" name="trait" /> + </UML:Enumeration> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="PILb9kCQnOZd" isRoot="false" isAbstract="false" name="Edge" > + <UML:Classifier.feature> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="Aq7LuhClDFeB" type="FVtbgO8sd2ii" name="incoming" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="xg3pIv6gVUUO" type="FVtbgO8sd2ii" name="outgoing" /> + <UML:Attribute isSpecification="false" visibility="private" xmi.id="eaFFJAnvNrxh" type="uzw9DITFgRm2" name="type" /> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="p2AAWOx6E09l" isRoot="false" isAbstract="false" isQuery="false" name="this" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="mN7gwLT6JP4I" value="" type="FVtbgO8sd2ii" name="o" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="WNmYYSfW1HTL" value="" type="FVtbgO8sd2ii" name="i" /> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="ITeVbCmrH3BN" value="" type="BQqAv02HTM6x" name="type" /> + </UML:BehavioralFeature.parameter> + </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:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="uzw9DITFgRm2" isRoot="false" isAbstract="false" name="EdgeType" > + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="Gv3YsqBCKi6E" isRoot="false" isAbstract="false" name="unspecified" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="A1QhopWR6xzK" isRoot="false" isAbstract="false" name="aggregation" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="OVYO1FWE3aSP" isRoot="false" isAbstract="false" name="association" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="uXTHm0iw18dq" isRoot="false" isAbstract="false" name="composition" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="3Mv6vLTpsw6c" isRoot="false" isAbstract="false" name="cyclicDependency" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="0BPEtKs5X9EB" isRoot="false" isAbstract="false" name="dependency" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="w8F05EKRiqqj" isRoot="false" isAbstract="false" name="generalization" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="uzw9DITFgRm2" xmi.id="OQEcUiDMf7Wr" isRoot="false" isAbstract="false" name="inheritance" /> + </UML:Enumeration> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="YjondCVQ8s2U" client="2Mzl2VgeffI0" name="" supplier="zgj70ST7PbVQ" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="XjtDAoectTTH" isRoot="false" isAbstract="false" name="Edge[]" /> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="H9NLXsg0Hncp" isRoot="false" isAbstract="true" name="GraphWriterFactory" > + <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:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="L1C3szmMnzpw" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="YLOGwvBFuNIk" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Interface> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="GIPhxHkszygs" isRoot="false" isAbstract="true" name="AbstractGraphWriterFactory" > + <UML:Classifier.feature> + <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:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="m7wwiwCSxVGR" client="2Mzl2VgeffI0" name="" supplier="FVtbgO8sd2ii" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="R79vj31U6PK0" client="2Mzl2VgeffI0" name="" supplier="PILb9kCQnOZd" /> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="Pef9sSrIGFql" client="GIPhxHkszygs" name="" supplier="H9NLXsg0Hncp" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="p0keVPRrye6f" client="H9NLXsg0Hncp" name="" supplier="672lM6F9KhcI" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="vJ8WmfZPiVQE" isRoot="false" isAbstract="false" name="DefaultGraphWriterFactory" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="kOBlgJz6y2Lz" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="rSVt3npBuRwI" isRoot="false" isAbstract="false" isQuery="false" name="this" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="o4PMZ16oEaaK" value="" type="672lM6F9KhcI" name="options" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="qt3yjRHa0HmR" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" > + <UML:BehavioralFeature.parameter> + <UML:Parameter isSpecification="false" visibility="private" xmi.id="37SmulDSCnBM" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="leYQpk5LWBlE" isRoot="false" isAbstract="false" name="ModuleNameWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="51RZVXixdhgF" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="VR6VNEtfCgkY" isRoot="false" isAbstract="false" isQuery="false" name="generateGraph" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="cQGGEupKkEKw" isRoot="false" isAbstract="false" name="ModulePathWriter" > + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref="Z4ZHkEV03W4k" /> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="wEWZIkURw0Kn" isRoot="false" isAbstract="false" isQuery="false" name="generateGraph" /> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization isSpecification="false" child="cQGGEupKkEKw" visibility="public" namespace="Logical View" xmi.id="Z4ZHkEV03W4k" parent="taceG4p7AY1k" discriminator="" name="" /> + <UML:Generalization isSpecification="false" child="leYQpk5LWBlE" visibility="public" namespace="Logical View" xmi.id="51RZVXixdhgF" parent="taceG4p7AY1k" discriminator="" name="" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="3qQutO5Yhxt6" isRoot="false" isAbstract="false" name="OutputStream[]" /> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="QbirDWtuKiBS" isRoot="false" isAbstract="true" name="OutputStream" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="0e7qU7vxuugt" client="H9NLXsg0Hncp" name="" supplier="QbirDWtuKiBS" /> + <UML:Generalization isSpecification="false" child="vJ8WmfZPiVQE" visibility="public" namespace="Logical View" xmi.id="kOBlgJz6y2Lz" parent="GIPhxHkszygs" discriminator="" name="" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="jUfTITIIjhSw" client="vJ8WmfZPiVQE" name="" supplier="leYQpk5LWBlE" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ntBujkSHp8rF" client="vJ8WmfZPiVQE" name="" supplier="cQGGEupKkEKw" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="oG7IcloUW5iz" client="vJ8WmfZPiVQE" name="" supplier="ZUDChgtO8jSy" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="6E5Os60E5bNw" client="taceG4p7AY1k" name="" supplier="QbirDWtuKiBS" /> + <UML:Class isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="m1ftLgsc5LXQ" isRoot="false" isAbstract="true" name="AbstractListingFactory" > + <UML:Classifier.feature> + <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:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="DdhFJyNQcQSm" isRoot="false" isAbstract="true" name="ListingFactory" > + <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: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 isSpecification="false" visibility="private" xmi.id="rlp4XIxd1W9V" value="" type="3qQutO5Yhxt6" name="outputs" /> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Interface> + <UML:Abstraction isSpecification="false" visibility="public" namespace="Logical View" xmi.id="M1DRAGcxqQmM" client="m1ftLgsc5LXQ" name="" supplier="DdhFJyNQcQSm" /> + <UML:Generalization isSpecification="false" child="haoxC1oM2QVz" visibility="public" namespace="Logical View" xmi.id="0zf0YojVOJsY" parent="m1ftLgsc5LXQ" discriminator="" name="" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="6bs0V3Pr6aVg" client="DdhFJyNQcQSm" name="" supplier="OcpJQugxHW8F" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="yQFLdIs4FB5E" client="DdhFJyNQcQSm" name="" supplier="3qQutO5Yhxt6" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="ykj8Siycsv3x" client="gGNje78ValnI" name="" supplier="3qQutO5Yhxt6" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="YFeUspY6csTF" client="zhVfgpENwAeN" name="" supplier="UY72E0ULeXyT" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="8nWBoU6zOpZ6" client="gGNje78ValnI" name="" supplier="QbirDWtuKiBS" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="0RBqSjye7dsd" client="DdhFJyNQcQSm" name="" supplier="QbirDWtuKiBS" /> + <UML:Interface stereotype="interface" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="yBk69LKYzyaX" isRoot="false" isAbstract="true" name="InputStream" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Logical View" xmi.id="veycFmCVOnie" client="zhVfgpENwAeN" name="" supplier="yBk69LKYzyaX" /> + <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="VDAdlQhZ750q" isRoot="false" isAbstract="false" name="ImageFormat" > + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="VDAdlQhZ750q" xmi.id="NPNgtZqJFAtE" isRoot="false" isAbstract="false" name="PNG" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="VDAdlQhZ750q" xmi.id="2W24K4edixcf" isRoot="false" isAbstract="false" name="SVG" /> + <UML:EnumerationLiteral isSpecification="false" isLeaf="false" visibility="public" namespace="VDAdlQhZ750q" xmi.id="kjad3bVP0s5s" isRoot="false" isAbstract="false" name="GIF" /> + </UML:Enumeration> + </UML:Namespace.ownedElement> + <XMI.extension xmi.extender="umbrello" > + <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" /> + </widgets> + <messages/> + <associations> + <assocwidget totalcounta="4" indexa="3" totalcountb="2" indexb="1" linewidth="none" widgetbid="zhVfgpENwAeN" widgetaid="gGNje78ValnI" xmi.id="xxCyboRg8fju" type="511" linecolor="none" > + <linepath> + <startpoint startx="825" starty="464" /> + <endpoint endx="827" endy="372" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="5" indexb="4" linewidth="none" widgetbid="gGNje78ValnI" widgetaid="2MyyGGXAPfEy" xmi.id="jNbdqaYMr5vR" type="500" linecolor="none" > + <linepath> + <startpoint startx="965" starty="747" /> + <endpoint endx="846" endy="536" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="5" indexb="3" linewidth="none" widgetbid="gGNje78ValnI" widgetaid="B92ON93E7uE9" xmi.id="FbDTu6ZqYxZ5" type="500" linecolor="none" > + <linepath> + <startpoint startx="810" starty="747" /> + <endpoint endx="760" endy="536" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="5" indexb="2" linewidth="none" widgetbid="gGNje78ValnI" widgetaid="w884b40YcIag" xmi.id="1tZ6hQ3Znq07" type="500" linecolor="none" > + <linepath> + <startpoint startx="655" starty="747" /> + <endpoint endx="675" endy="536" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="5" indexb="1" linewidth="none" widgetbid="gGNje78ValnI" widgetaid="qxq04A8rywIb" xmi.id="u534X7uMBIy5" type="500" linecolor="none" > + <linepath> + <startpoint startx="500" starty="747" /> + <endpoint endx="589" endy="536" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="5" indexa="4" totalcountb="3" indexb="1" linewidth="none" widgetbid="2MyyGGXAPfEy" widgetaid="haoxC1oM2QVz" xmi.id="KxhR786WWKiA" type="512" linecolor="none" > + <linepath> + <startpoint startx="345" starty="627" /> + <endpoint endx="917" endy="747" /> + <point x="846" y="686" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="5" indexa="3" totalcountb="3" indexb="1" linewidth="none" widgetbid="B92ON93E7uE9" widgetaid="haoxC1oM2QVz" xmi.id="036VnHDG2xBH" type="512" linecolor="none" > + <linepath> + <startpoint startx="263" starty="627" /> + <endpoint endx="762" endy="747" /> + <point x="693" y="689" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="5" indexa="2" totalcountb="3" indexb="1" linewidth="none" widgetbid="w884b40YcIag" widgetaid="haoxC1oM2QVz" xmi.id="MPnzJ9f0egCU" type="512" linecolor="none" > + <linepath> + <startpoint startx="181" starty="627" /> + <endpoint endx="607" endy="747" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="5" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="qxq04A8rywIb" widgetaid="haoxC1oM2QVz" xmi.id="qQ8ZNcL54wHR" type="512" linecolor="none" > + <linepath> + <startpoint startx="99" starty="627" /> + <endpoint endx="452" endy="747" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="3" indexb="2" linewidth="none" widgetbid="DdhFJyNQcQSm" widgetaid="gGNje78ValnI" xmi.id="hcALY1fmWlEG" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" > + <linepath> + <startpoint startx="611" starty="464" /> + <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" /> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="DdhFJyNQcQSm" widgetaid="m1ftLgsc5LXQ" xmi.id="M1DRAGcxqQmM" type="511" linecolor="none" > + <linepath> + <startpoint startx="222" starty="482" /> + <endpoint endx="222" endy="436" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="m1ftLgsc5LXQ" widgetaid="haoxC1oM2QVz" xmi.id="0zf0YojVOJsY" type="500" linecolor="none" > + <linepath> + <startpoint startx="222" starty="582" /> + <endpoint endx="222" endy="536" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="OcpJQugxHW8F" widgetaid="DdhFJyNQcQSm" xmi.id="6bs0V3Pr6aVg" type="502" linecolor="none" > + <linepath> + <startpoint startx="222" starty="355" /> + <endpoint endx="222" endy="281" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="UY72E0ULeXyT" widgetaid="zhVfgpENwAeN" xmi.id="YFeUspY6csTF" type="502" linecolor="none" > + <linepath> + <startpoint startx="888" starty="291" /> + <endpoint endx="893" endy="236" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="4" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="QbirDWtuKiBS" widgetaid="gGNje78ValnI" xmi.id="8nWBoU6zOpZ6" type="502" linecolor="none" > + <linepath> + <startpoint startx="718" starty="464" /> + <endpoint endx="561" endy="378" /> + <point x="604" y="432" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="QbirDWtuKiBS" widgetaid="DdhFJyNQcQSm" xmi.id="0RBqSjye7dsd" type="502" linecolor="none" > + <linepath> + <startpoint startx="428" starty="382" /> + <endpoint endx="498" endy="351" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="yBk69LKYzyaX" widgetaid="zhVfgpENwAeN" xmi.id="veycFmCVOnie" type="502" linecolor="none" > + <linepath> + <startpoint startx="765" starty="291" /> + <endpoint endx="746" endy="236" /> + </linepath> + </assocwidget> + </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="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" /> + </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="PnEBEL9IihdQ" documentation="" type="1" showops="1" showpackage="0" name="Module doc 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/> + <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="i9im14LKfTmZ" documentation="" type="1" showops="1" showpackage="0" name="Module 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="307" fillcolor="#ffffc0" y="545" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="098RWfwZqN4L" 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="194" showattsigs="601" x="197" fillcolor="#ffffc0" y="276" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="R1LMLXi8zBZD" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,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="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" /> + </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" /> + <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" /> + <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" /> + </widgets> + <messages/> + <associations> + <assocwidget totalcounta="4" indexa="3" totalcountb="2" indexb="1" linewidth="none" widgetbid="2Mzl2VgeffI0" widgetaid="taceG4p7AY1k" xmi.id="YFH3CyxPGsNY" type="511" linecolor="none" > + <linepath> + <startpoint startx="808" starty="546" /> + <endpoint endx="809" endy="496" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="4" indexb="3" linewidth="none" widgetbid="taceG4p7AY1k" widgetaid="ZUDChgtO8jSy" xmi.id="gO9JCUKh4zz7" type="500" linecolor="none" > + <linepath> + <startpoint startx="873" starty="766" /> + <endpoint endx="808" endy="618" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="4" indexb="1" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="PILb9kCQnOZd" xmi.id="Aq7LuhClDFeB" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" > + <linepath> + <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" /> + </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" /> + </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" /> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="4" indexb="3" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="2Mzl2VgeffI0" xmi.id="m7wwiwCSxVGR" type="502" linecolor="none" > + <linepath> + <startpoint startx="747" starty="433" /> + <endpoint endx="654" endy="349" /> + <point x="714" y="385" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="PILb9kCQnOZd" widgetaid="2Mzl2VgeffI0" xmi.id="R79vj31U6PK0" type="502" linecolor="none" > + <linepath> + <startpoint startx="872" starty="433" /> + <endpoint endx="883" endy="342" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="H9NLXsg0Hncp" widgetaid="GIPhxHkszygs" xmi.id="Pef9sSrIGFql" type="511" linecolor="none" > + <linepath> + <startpoint startx="188" starty="554" /> + <endpoint endx="188" endy="521" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="4" indexa="1" visibilityB="200" totalcountb="3" indexb="2" linewidth="none" widgetbid="H9NLXsg0Hncp" widgetaid="taceG4p7AY1k" xmi.id="jYgSGEsqagKv" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" > + <linepath> + <startpoint startx="590" starty="546" /> + <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" /> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="672lM6F9KhcI" widgetaid="H9NLXsg0Hncp" xmi.id="p0keVPRrye6f" type="502" linecolor="none" > + <linepath> + <startpoint startx="188" starty="440" /> + <endpoint endx="188" endy="417" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="4" indexb="2" linewidth="none" widgetbid="taceG4p7AY1k" widgetaid="cQGGEupKkEKw" xmi.id="Z4ZHkEV03W4k" type="500" linecolor="none" > + <linepath> + <startpoint startx="562" starty="766" /> + <endpoint endx="699" endy="618" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="4" indexb="1" linewidth="none" widgetbid="taceG4p7AY1k" widgetaid="leYQpk5LWBlE" xmi.id="51RZVXixdhgF" type="500" linecolor="none" > + <linepath> + <startpoint startx="400" starty="766" /> + <endpoint endx="590" endy="618" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="QbirDWtuKiBS" widgetaid="H9NLXsg0Hncp" xmi.id="0e7qU7vxuugt" type="502" linecolor="none" > + <linepath> + <startpoint startx="357" starty="467" /> + <endpoint endx="426" endy="450" /> + <point x="409" y="467" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="GIPhxHkszygs" widgetaid="vJ8WmfZPiVQE" xmi.id="kOBlgJz6y2Lz" type="500" linecolor="none" > + <linepath> + <startpoint startx="188" starty="646" /> + <endpoint endx="188" endy="608" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="leYQpk5LWBlE" widgetaid="vJ8WmfZPiVQE" xmi.id="jUfTITIIjhSw" type="502" linecolor="none" > + <linepath> + <startpoint startx="135" starty="709" /> + <endpoint endx="348" endy="766" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="3" indexb="1" linewidth="none" widgetbid="cQGGEupKkEKw" widgetaid="vJ8WmfZPiVQE" xmi.id="ntBujkSHp8rF" type="502" linecolor="none" > + <linepath> + <startpoint startx="241" starty="709" /> + <endpoint endx="513" endy="766" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="3" indexb="1" linewidth="none" widgetbid="ZUDChgtO8jSy" widgetaid="vJ8WmfZPiVQE" xmi.id="oG7IcloUW5iz" type="502" linecolor="none" > + <linepath> + <startpoint startx="348" starty="677" /> + <endpoint endx="748" endy="766" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="4" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="QbirDWtuKiBS" widgetaid="taceG4p7AY1k" xmi.id="6E5Os60E5bNw" type="502" linecolor="none" > + <linepath> + <startpoint startx="699" starty="546" /> + <endpoint endx="553" endy="450" /> + <point x="679" y="524" /> + <point x="597" y="524" /> + <point x="597" y="494" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="BQqAv02HTM6x" widgetaid="FVtbgO8sd2ii" xmi.id="VXmaXhPeKk9I" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" > + <linepath> + <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" /> + </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" /> + </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" /> + </assocwidget> + </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="cZsSOYL0vMYc" documentation="" type="3" showops="1" showpackage="0" name="Graph generation" localid="fNm3GNcdo5oo" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" > + <widgets> + <objectwidget usesdiagramfillcolor="0" width="191" x="432" fillcolor="#ffffc0" y="48" instancename="" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="vJ8WmfZPiVQE" decon="0" localid="xkkShjnglZDn" multipleinstance="0" drawasactor="0" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,1,0,0,0" linecolor="#ff0000" /> + <objectwidget usesdiagramfillcolor="0" width="82" x="846" fillcolor="#ffffc0" y="48" instancename="" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="ZUDChgtO8jSy" decon="0" localid="5sYVesgRYawR" multipleinstance="0" drawasactor="0" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,1,0,0,0" linecolor="#ff0000" /> + <objectwidget usesdiagramfillcolor="0" width="144" x="37" fillcolor="#ffffc0" y="48" instancename="" linewidth="none" height="28" usefillcolor="1" isinstance="0" xmi.id="R1LMLXi8zBZD" decon="0" localid="8k1etAbDCjb4" multipleinstance="0" drawasactor="0" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,1,0,0,0" linecolor="#ff0000" /> + <notewidget usesdiagramfillcolor="1" width="130" x="558" fillcolor="none" y="105" linewidth="none" height="63" usefillcolor="1" isinstance="0" xmi.id="mi9i1VrBEe8P" text="Common graph settings are bound first." usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" /> + <notewidget usesdiagramfillcolor="1" width="205" x="241" fillcolor="none" y="207" linewidth="none" height="50" usefillcolor="1" isinstance="0" xmi.id="AvASsvve1luo" text="A new writer is usually created for each graph file." usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" /> + <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> + <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" > + <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" > + <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> + <associations/> + </diagram> + </diagrams> + </XMI.extension> + </UML:Model> + <UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Use Case View" isRoot="false" isAbstract="false" name="Use Case View" > + <UML:Namespace.ownedElement/> + </UML:Model> + <UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Component View" isRoot="false" isAbstract="false" name="Component View" > + <UML:Namespace.ownedElement> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="3XF2INiTN1r0" isRoot="false" isAbstract="false" name="DocumentGenerator" /> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="JrRpdxcmaX5Z" isRoot="false" isAbstract="false" name="ModuleDoc" /> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="oCHM2Pm3w15E" isRoot="false" isAbstract="false" name="SourceListing" /> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="OmgklXk4NCu0" isRoot="false" isAbstract="false" name="ModuleGraph" /> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="9Wmh3pGp1WC1" isRoot="false" isAbstract="false" name="ClassGraph" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="9zv0am0s4p3H" client="3XF2INiTN1r0" name="" supplier="9Wmh3pGp1WC1" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="7Qg9DhQeLLiC" client="3XF2INiTN1r0" name="" supplier="OmgklXk4NCu0" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="TCboYJyLq3UQ" client="3XF2INiTN1r0" name="" supplier="JrRpdxcmaX5Z" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="3BrrELHlDrWv" client="3XF2INiTN1r0" name="" supplier="oCHM2Pm3w15E" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="G51CBWFaF9t3" client="3XF2INiTN1r0" name="" supplier="9Wmh3pGp1WC1" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="sgHau3wyChzY" client="3XF2INiTN1r0" name="" supplier="OmgklXk4NCu0" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="8Xdyj7yz61iY" client="3XF2INiTN1r0" name="" supplier="JrRpdxcmaX5Z" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="YbwqcMQKAE7f" client="3XF2INiTN1r0" name="" supplier="oCHM2Pm3w15E" /> + <UML:Component executable="0" isSpecification="false" isLeaf="false" visibility="public" namespace="Component View" xmi.id="JeCajbMGRVUn" isRoot="false" isAbstract="false" name="Parser&Lexer" /> + <UML:Dependency isSpecification="false" visibility="public" namespace="Component View" xmi.id="ZZ3AIK4OAcIw" client="3XF2INiTN1r0" name="" supplier="JeCajbMGRVUn" /> + </UML:Namespace.ownedElement> + <XMI.extension xmi.extender="umbrello" > + <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="9cvLzH7kYq8S" documentation="" type="7" showops="1" showpackage="0" name="high level components" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" > + <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="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> + <messages/> + <associations> + <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="9Wmh3pGp1WC1" widgetaid="3XF2INiTN1r0" xmi.id="G51CBWFaF9t3" type="502" linecolor="none" > + <linepath> + <startpoint startx="528" starty="310" /> + <endpoint endx="707" endy="224" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="OmgklXk4NCu0" widgetaid="3XF2INiTN1r0" xmi.id="sgHau3wyChzY" type="502" linecolor="none" > + <linepath> + <startpoint startx="454" starty="310" /> + <endpoint endx="289" endy="224" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="JrRpdxcmaX5Z" widgetaid="3XF2INiTN1r0" xmi.id="8Xdyj7yz61iY" type="502" linecolor="none" > + <linepath> + <startpoint startx="454" starty="376" /> + <endpoint endx="298" endy="447" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="3" indexa="2" totalcountb="2" indexb="1" linewidth="none" widgetbid="oCHM2Pm3w15E" widgetaid="3XF2INiTN1r0" xmi.id="YbwqcMQKAE7f" type="502" linecolor="none" > + <linepath> + <startpoint startx="528" starty="376" /> + <endpoint endx="668" endy="447" /> + </linepath> + </assocwidget> + <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="JeCajbMGRVUn" widgetaid="3XF2INiTN1r0" xmi.id="ZZ3AIK4OAcIw" type="502" linecolor="none" > + <linepath> + <startpoint startx="380" starty="343" /> + <endpoint endx="257" endy="343" /> + </linepath> + </assocwidget> + </associations> + </diagram> + </diagrams> + </XMI.extension> + </UML:Model> + <UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Deployment View" isRoot="false" isAbstract="false" name="Deployment View" > + <UML:Namespace.ownedElement/> + </UML:Model> + <UML:Model stereotype="folder" isSpecification="false" isLeaf="false" visibility="public" namespace="m1" xmi.id="Entity Relationship Model" isRoot="false" isAbstract="false" name="Entity Relationship Model" > + <UML:Namespace.ownedElement/> + </UML:Model> + </UML:Namespace.ownedElement> + </UML:Model> + </XMI.content> + <XMI.extensions xmi.extender="umbrello" > + <docsettings viewid="i9im14LKfTmZ" documentation="" uniqueid="0HtRJDvsLArx" /> + <listview> + <listitem open="1" type="800" label="Näytöt" > + <listitem open="1" type="801" id="Logical View" > + <listitem open="0" type="807" id="BbQfy5JEWUGf" label="Class graph classes" /> + <listitem open="0" type="807" id="HBjs7fL0WfO5" label="General classes" /> + <listitem open="0" type="807" id="37Q7pvtspjUI" label="Graph classes" /> + <listitem open="0" type="807" id="PnEBEL9IihdQ" label="Module doc classes" /> + <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" /> + <listitem open="0" type="815" id="RhFDP34VCWM4" /> + </listitem> + <listitem open="0" type="813" id="GIPhxHkszygs" > + <listitem open="0" type="814" id="ZmI5M1aN978M" /> + <listitem open="0" type="815" id="liEDYXNQ5pTO" /> + </listitem> + <listitem open="0" type="813" id="gGNje78ValnI" > + <listitem open="0" type="814" id="hcALY1fmWlEG" /> + <listitem open="0" type="814" id="9QXgkpqgA1Du" /> + <listitem open="0" type="815" id="Aa3THxJUbPoV" /> + </listitem> + <listitem open="0" type="813" id="pwXaDeUXVlRv" > + <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> + <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> + <listitem open="1" type="813" id="PILb9kCQnOZd" > + <listitem open="0" type="814" id="Aq7LuhClDFeB" /> + <listitem open="0" type="814" id="xg3pIv6gVUUO" /> + <listitem open="0" type="814" id="eaFFJAnvNrxh" /> + <listitem open="0" type="815" id="p2AAWOx6E09l" /> + <listitem open="0" type="815" id="faPqILFpZIBc" /> + </listitem> + <listitem open="0" type="813" id="XjtDAoectTTH" /> + <listitem open="1" type="813" id="672lM6F9KhcI" > + <listitem open="0" type="814" id="zRuotD7A5ZEx" /> + <listitem open="0" type="814" id="dMwwhlSnUoPh" /> + <listitem open="0" type="814" id="E1vnjmQdHkkv" /> + <listitem open="0" type="814" id="cGQrznU4axXm" /> + <listitem open="0" type="814" id="UirRcvN0JEsV" /> + <listitem open="0" type="814" id="AQlvQmLLBkXo" /> + <listitem open="0" type="814" id="vOQEdHhXSPF8" /> + <listitem open="0" type="814" id="TrfH97Bbn23Q" /> + <listitem open="0" type="814" id="uBkkfpbvggDX" /> + </listitem> + <listitem open="0" type="813" id="w884b40YcIag" > + <listitem open="0" type="815" id="mBRaST74dftD" /> + </listitem> + <listitem open="0" type="813" id="B92ON93E7uE9" > + <listitem open="0" type="815" id="JpwoOQQ4RzaO" /> + </listitem> + <listitem open="0" type="813" id="098RWfwZqN4L" > + <listitem open="0" type="815" id="CMMapfT5KiQP" /> + </listitem> + <listitem open="0" type="813" id="R1LMLXi8zBZD" /> + <listitem open="1" type="813" id="leYQpk5LWBlE" > + <listitem open="0" type="815" id="VR6VNEtfCgkY" /> + </listitem> + <listitem open="1" type="813" id="cQGGEupKkEKw" > + <listitem open="0" type="815" id="wEWZIkURw0Kn" /> + </listitem> + <listitem open="0" type="813" id="3qQutO5Yhxt6" /> + <listitem open="0" type="813" id="UY72E0ULeXyT" /> + <listitem open="0" type="813" id="Ug6grrz7llbI" /> + <listitem open="0" type="813" id="2MyyGGXAPfEy" > + <listitem open="0" type="815" id="VRgNwkJTDt0B" /> + </listitem> + <listitem open="1" type="813" id="FVtbgO8sd2ii" > + <listitem open="0" type="814" id="cf98eu4OpFbX" /> + <listitem open="0" type="814" id="hgsYJ2YnnaVS" /> + <listitem open="0" type="814" id="sBVGlTogVHfE" /> + <listitem open="0" type="814" id="ajeRzBpBzXm2" /> + <listitem open="0" type="814" id="hTSa11gAdwIE" /> + <listitem open="0" type="814" id="VXmaXhPeKk9I" /> + <listitem open="0" type="815" id="2fXtbb2YF7TG" /> + <listitem open="0" type="815" id="PX2Y1eFKtaj6" /> + </listitem> + <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> + <listitem open="0" type="817" id="H9NLXsg0Hncp" > + <listitem open="0" type="815" id="FYgiWJyDqrhK" /> + <listitem open="0" type="815" id="L1C3szmMnzpw" /> + </listitem> + <listitem open="0" type="817" id="yBk69LKYzyaX" /> + <listitem open="0" type="817" id="QbirDWtuKiBS" /> + <listitem open="0" type="830" id="Datatypes" > + <listitem open="1" type="829" id="DaFOT7jBVtui" /> + <listitem open="1" type="829" id="tblJnk8mwuii" /> + <listitem open="1" type="829" id="QXgD4zE4FsCt" /> + <listitem open="1" type="829" id="UGpWCc0uWy3g" /> + <listitem open="1" type="829" id="EaC7G8UkzGbk" /> + <listitem open="1" type="829" id="MGwAYPpykhTm" /> + <listitem open="1" type="829" id="clKKQl7eLHlZ" /> + <listitem open="1" type="829" id="z3jKRbJnqFxM" /> + <listitem open="1" type="829" id="wMWsornjU1NO" /> + <listitem open="1" type="829" id="N7BDN7YzqsIG" /> + <listitem open="1" type="829" id="NFJMWv4VyoqO" /> + <listitem open="1" type="829" id="wERn1lAgB0KQ" /> + <listitem open="0" type="829" id="zgj70ST7PbVQ" /> + <listitem open="1" type="829" id="cPuvefV1toMN" /> + <listitem open="1" type="829" id="IL68COOolGjP" /> + <listitem open="1" type="829" id="hQqeEe2cmDn9" /> + </listitem> + <listitem open="0" type="831" id="o5RT7D5TyDem" > + <listitem open="0" type="839" id="pCzlo8cW1N0o" /> + <listitem open="0" type="839" id="FS23UTFrinBx" /> + </listitem> + <listitem open="0" type="831" id="58hyBKGITKzU" > + <listitem open="0" type="839" id="jnhozkQ1UqIp" /> + <listitem open="0" type="839" id="DhN6TjTmtUai" /> + <listitem open="0" type="839" id="eyKevtlegQQd" /> + <listitem open="0" type="839" id="9qedeuTpcot5" /> + </listitem> + <listitem open="0" type="831" id="uzw9DITFgRm2" > + <listitem open="0" type="839" id="Gv3YsqBCKi6E" /> + <listitem open="0" type="839" id="A1QhopWR6xzK" /> + <listitem open="0" type="839" id="OVYO1FWE3aSP" /> + <listitem open="0" type="839" id="uXTHm0iw18dq" /> + <listitem open="0" type="839" id="3Mv6vLTpsw6c" /> + <listitem open="0" type="839" id="0BPEtKs5X9EB" /> + <listitem open="0" type="839" id="w8F05EKRiqqj" /> + <listitem open="0" type="839" id="OQEcUiDMf7Wr" /> + </listitem> + <listitem open="0" type="831" id="4F09aHCjljSA" > + <listitem open="0" type="839" id="Uhfew917nyad" /> + <listitem open="0" type="839" id="Jy1fqRBSwrTe" /> + <listitem open="0" type="839" id="aow2SW2oUhRP" /> + </listitem> + <listitem open="1" type="831" id="VDAdlQhZ750q" > + <listitem open="0" type="839" id="NPNgtZqJFAtE" /> + <listitem open="0" type="839" id="2W24K4edixcf" /> + <listitem open="0" type="839" id="kjad3bVP0s5s" /> + </listitem> + <listitem open="0" type="831" id="BQqAv02HTM6x" > + <listitem open="0" type="839" id="UWXR1uwj6Xht" /> + <listitem open="0" type="839" id="KZH8gthgkYAr" /> + <listitem open="0" type="839" id="GvOp2iAWCfvE" /> + <listitem open="0" type="839" id="XsxdPcUh9joq" /> + <listitem open="0" type="839" id="dTUN2eCIZb6Z" /> + </listitem> + </listitem> + <listitem open="1" type="802" id="Use Case View" /> + <listitem open="1" type="821" id="Component View" > + <listitem open="0" type="819" id="9cvLzH7kYq8S" label="high level components" /> + <listitem open="1" type="822" id="9Wmh3pGp1WC1" /> + <listitem open="1" type="822" id="3XF2INiTN1r0" /> + <listitem open="1" type="822" id="JrRpdxcmaX5Z" /> + <listitem open="1" type="822" id="OmgklXk4NCu0" /> + <listitem open="1" type="822" id="JeCajbMGRVUn" /> + <listitem open="1" type="822" id="oCHM2Pm3w15E" /> + </listitem> + <listitem open="1" type="827" id="Deployment View" /> + <listitem open="1" type="836" id="Entity Relationship Model" /> + </listitem> + </listview> + <codegeneration> + <codegenerator language="C++" /> + </codegeneration> + </XMI.extensions> +</XMI>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/docgen.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,22 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module trunk.src.docgen.docgen; + +import docgen.modulegraph.writer; + +struct DocGeneratorOptions { + GraphWriterOptions graph; + ListingsOptions listings; + CommentFormat commentFormat; +} + +/** + * Main routine for doc generation. + */ +class DocGenerator { + public static void generate() { + + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/dotwriter.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,97 @@ +/** + * Author: Aziz Köksal & Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.dotwriter; +import docgen.graphutils.writer; + +import tango.io.protocol.Writer : Writer; +import tango.io.FileConduit : FileConduit; +import tango.io.Print: Print; +import tango.text.convert.Layout : Layout; + + +/** + * Creates a graph rule file for the dot utility. + * + * TODO: support changing colors / graph style? + */ +class DotWriter : AbstractGraphWriter { + this(GraphWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 2, "Wrong number of outputs"); + } + + void generateGraph(Vertex[] vertices, Edge[] edges) { + auto output2 = new Print!(char)(new Layout!(char), outputs[0]); + auto output = new Print!(char)(new Layout!(char), outputs[1]); + + Vertex[][char[]] verticesByPckgName; + if (factory.options.GroupByFullPackageName) + foreach (module_; vertices) + verticesByPckgName[module_.name] ~= module_; // FIXME: is it name or loc? + + if (factory.options.HighlightCyclicVertices || + factory.options.HighlightCyclicEdges) + findCycles(vertices, edges); + + if (cast(FileConduit)outputs[1]) { + // name of the .dot file + char[] fn = (cast(FileConduit)outputs[1]).toUtf8(); + + // .dot -> .svg/.png/.gif/... + fn = fn[0..$-3] ~ imageFormatExts[factory.options.imageFormat]; + + switch(factory.options.docFormat) { + case DocFormat.LaTeX: + output2.format("\\includegraphics{{{0}}", fn); + break; + case DocFormat.XML: + // TODO + break; + case DocFormat.HTML: + output2.format(`<img src="{0}" />`, fn); + break; + case DocFormat.PlainText: + throw new Exception("Dot output is not supported in plain text mode."); + } + } + + output("Digraph ModuleDependencies {\n"); + + if (factory.options.HighlightCyclicVertices) + foreach (module_; vertices) + output.format( + ` n{0} [label="{1}"{2}];`\n, + module_.id, + module_.name, + (module_.isCyclic ? ",style=filled,fillcolor=tomato" : "") + ); + else + foreach (i, module_; vertices) + output.format(` n{0} [label="{1}"];`, i, module_.name); + + foreach (edge; edges) + output.format( + ` n{0} -> n{1}{2};`\n, + edge.outgoing.id, + edge.incoming.id, + (edge.isCyclic ? "[color=red]" : "") + ); + + if (factory.options.GroupByFullPackageName) + foreach (packageName, vertices; verticesByPckgName) { + output.format( + ` subgraph "cluster_{0}" {{`\n` label="{0}";color=blue;`\n` `, + packageName, + packageName + ); + + foreach (module_; vertices) + output.format(`n{0};`, module_.id); + output("\n }\n"); + } + + output("}"); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/modulenamewriter.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,38 @@ +/** + * Author: Aziz Köksal & Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.modulenamewriter; +import docgen.graphutils.writer; + +import tango.io.protocol.Writer : Writer; +import tango.io.FileConduit : FileConduit; +import tango.io.Print: Print; +import tango.text.convert.Layout : Layout; + + +/** + * TODO: add support for html/xml/latex? + */ +class ModuleNameWriter : AbstractGraphWriter { + this(GraphWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 1, "Wrong number of outputs"); + } + + void generateGraph(Vertex[] vertices, Edge[] edges) { + auto output = new Writer(outputs[0]); + + void doList(Vertex[] v, uint level, char[] indent = "") { + if (!level) return; + + foreach (vertex; v) { + output(indent)(vertex.name).newline; + if (vertex.outgoing.length) + doList(vertex.outgoing, level-1, indent ~ " "); + } + } + + doList(vertices, factory.options.depth); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/modulepathwriter.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,37 @@ +/** + * Author: Aziz Köksal & Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.modulepathwriter; +import docgen.graphutils.writer; + +import tango.io.protocol.Writer : Writer; +import tango.io.FileConduit : FileConduit; +import tango.io.Print: Print; +import tango.text.convert.Layout : Layout; + +/** + * TODO: add support for html/xml/latex? + */ +class ModulePathWriter : AbstractGraphWriter { + this(GraphWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 1, "Wrong number of outputs"); + } + + void generateGraph(Vertex[] vertices, Edge[] edges) { + auto output = new Writer(outputs[0]); + + void doPaths(Vertex[] v, uint level, char[] indent = "") { + if (!level) return; + + foreach (vertex; v) { + output(indent)(vertex.location).newline; + if (vertex.outgoing.length) + doPaths(vertex.outgoing, level-1, indent ~ " "); + } + } + + doPaths(vertices, factory.options.depth); + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/primitives.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,94 @@ +/** + * Author: Aziz Köksal & Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.primitives; + +enum EdgeType { + Unspecified, + Aggregation, + Association, + Composition, + CyclicDependency, + Dependency, + Generalization, + Inheritance, + Reserved // for the cycle algorithm +} + +class Edge { + Vertex outgoing; + Vertex incoming; + EdgeType type; + + this(Vertex o, Vertex i, EdgeType type = EdgeType.Unspecified) { + this.outgoing = o; + this.incoming = i; + this.type = type; + } + + bool isCyclic() { + return type == EdgeType.CyclicDependency; + } +} + +enum VertexType { + Module, + Package, + Class, + Interface, + Trait +} + +class Vertex { + char[] name; + char[] location; + uint id; + + Edge[] incomingEdges; + Edge[] outgoingEdges; + VertexType type; + + this(char[] name, char[] location, uint id = 0) { + this.name = name; + this.location = location; + this.id = id; + } + + Edge addChild(Vertex v, EdgeType type = EdgeType.Unspecified) { + auto edge = new Edge(v, this, type); + incomingEdges ~= edge; + v.outgoingEdges ~= edge; + return edge; + } + + Edge addParent(Vertex v, EdgeType type = EdgeType.Unspecified) { + return v.addChild(this, type); + } + + Vertex[] incoming() { + Vertex[] tmp; + + foreach(edge; incomingEdges) + tmp ~= edge.outgoing; + + return tmp; + } + + Vertex[] outgoing() { + Vertex[] tmp; + + foreach(edge; outgoingEdges) + tmp ~= edge.incoming; + + return tmp; + } + + bool isCyclic() { + foreach(edge; outgoingEdges) + if (edge.isCyclic) + return true; + + return false; + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/writer.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,176 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.writer; + +public import docgen.misc.misc; +public import docgen.graphutils.primitives; +import tango.io.model.IConduit : OutputStream; +debug import tango.io.Stdout; + +enum ImageFormat { + PNG, + SVG, + GIF +} + +const imageFormatExts = [ "png", "svg", "gif" ]; + +enum GraphFormat { + Dot, + ModuleNames, + ModulePaths +} + +struct GraphOptions { + GraphFormat graphFormat; + ImageFormat imageFormat; + DocFormat docFormat; + uint depth; + bool IncludeUnlocatableModules; + bool HighlightCyclicEdges; + bool HighlightCyclicVertices; + bool GroupByPackageNames; + bool GroupByFullPackageName; +} + +interface GraphWriter { + void generateGraph(Vertex[], Edge[]); +} + +alias void delegate(Vertex[], Edge[]) GraphWriterDg; + +abstract class AbstractGraphWriter : GraphWriter { + protected GraphWriterFactory factory; + protected OutputStream[] outputs; + + this(GraphWriterFactory factory, OutputStream[] outputs) { + this.factory = factory; + this.outputs = outputs; + } + + /** + * Marks all cycles in the graph. + * + * May have bugs, but is a bit simpler than the previous version. + */ + protected static void findCycles(Vertex[] vertices, Edge[] edges) { + debug void p() { + foreach(e; edges) Stderr(e.type)(" "c); + Stderr.newline; + } + + bool visit(Edge edge) { + if (edge.type == EdgeType.Reserved) { + edge.type = EdgeType.CyclicDependency; + debug p(); + return true; + } + + bool wasCyclic = edge.isCyclic(); + edge.type = EdgeType.Reserved; + debug p(); + + foreach(edge2; edge.incoming.outgoingEdges) + if (visit(edge2)) { + if (edge.isCyclic()) { + edge.type = EdgeType.Reserved; + wasCyclic = true; + debug p(); + continue; + } + edge.type = EdgeType.CyclicDependency; + return true; + } + + edge.type = wasCyclic ? EdgeType.CyclicDependency : EdgeType.Dependency; + debug p(); + return false; + } + + foreach(vertex; vertices) + foreach(edge; vertex.outgoingEdges) + if (edge.type == EdgeType.Unspecified) { + visit(edge); + debug Stderr("*\n"); + } + } + + /+ + void analyzeGraph(Vertex[] vertices, Edge[] edges) + { + void recursive(Vertex[] modules) + { + foreach (idx, vertex; vertices) + { + uint outgoing, incoming; + foreach (j, edge; edges) + { + if (edge.outgoing is vertex) + outgoing++; + if (edge.incoming is vertex) + incoming++; + } + + if (outgoing == 0) + { + if (incoming != 0) + { + // Vertex is a sink. + alias outgoing i; // Reuse + alias incoming j; // Reuse + // Remove edges. + for (i=j=0; i < edges.length; i++) + if (edges[i].incoming !is vertex) + edges[j++] = edges[i]; + edges.length = j; + vertices = vertices[0..idx] ~ vertices[idx+1..$]; + return recursive(modules); + } + else + assert(0, "orphaned module: "~vertex.getFQN()~" (has no edges in graph)"); // orphaned vertex (module) in graph + } + else if (incoming == 0) + { + // Vertex is a source + alias outgoing i; // Reuse + alias incoming j; // Reuse + // Remove edges. + for (i=j=0; i < edges.length; i++) + if (edges[i].outgoing !is vertex) + edges[j++] = edges[i]; + edges.length = j; + vertices = vertices[0..idx] ~ vertices[idx+1..$]; + return recursive(modules); + } +// else +// { +// // source && sink +// } + } + + // When reaching this point it means only cylic edges and vertices are left. + foreach (vertex; vertices) + vertex.isCyclic = true; + foreach (edge; edges) + if (edge) + edge.isCyclic = true; + } + recursive(vertices); + } + +/ +} + +interface GraphWriterFactory { + GraphOptions *options(); + GraphWriterDg createGraphWriter(OutputStream[] outputs); +} + +abstract class AbstractGraphWriterFactory : GraphWriterFactory { + protected GraphOptions m_options; + + public GraphOptions *options() { + return &m_options; + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/graphutils/writers.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,27 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.graphutils.writers; + +public import docgen.graphutils.writer; +import docgen.graphutils.dotwriter; +import docgen.graphutils.modulepathwriter; +import docgen.graphutils.modulenamewriter; + +class DefaultGraphWriterFactory : AbstractGraphWriterFactory { + this(GraphOptions options) { + m_options = options; + } + + GraphWriterDg createGraphWriter(OutputStream[] outputs) { + switch (m_options.graphFormat) { + case GraphFormat.Dot: + return &((new DotWriter(this, outputs)).generateGraph); + case GraphFormat.ModuleNames: + return &((new ModuleNameWriter(this, outputs)).generateGraph); + case GraphFormat.ModulePaths: + return &((new ModulePathWriter(this, outputs)).generateGraph); + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/lstlang0.sty Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,21 @@ +%% +%% D definition (c) 2007 Jari-Matti Mäkelä +%% +\lst@definelanguage{D}% + {morekeywords={abstract,alias,align,asm,assert,auto,body,bool,break,% + byte,case,cast,catch,cdouble,cent,cfloat,char,class,const,continue,% + creal,dchar,debug,default,delegate,delete,deprecated,do,double,% + else,enum,export,extern,false,final,finally,float,for,foreach,% + foreach_reverse,function,goto,idouble,if,ifloat,import,in,inout,% + int,interface,invariant,ireal,is,lazy,long,macro,mixin,module,new,% + null,out,override,package,pragma,private,protected,public,real,ref,% + return,scope,short,static,struct,super,switch,synchronized,template,% + this,throw,true,try,typedef,typeid,typeof,ubyte,ucent,uint,ulong,% + union,unittest,ushort,version,void,volatile,wchar,while,with},% + sensitive,% + morecomment=[s]{/*}{*/},% + morecomment=[n]{/+}{+/},% + morecomment=[l]//,% + morestring=[b]",% + morestring=[b]`% + }[keywords,comments,strings]% \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/misc/misc.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,17 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.misc.misc; + +enum DocFormat { + LaTeX, + XML, + HTML, + PlainText +} + +enum CommentFormat { + Ddoc, + Doxygen +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/modulegraph/writer.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,143 @@ +/** + * Author: Aziz Köksal & Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.modulegraph.writer; + +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; + +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) { + auto gwf = new DefaultGraphWriterFactory(*options); + + auto writer = gwf.createGraphWriter([Stdout.stream]); + + Edge[] edges; + Vertex[] vertices; + + loadModules(null, null, null, + gwf.options.IncludeUnlocatableModules, + vertices, edges); + + writer(vertices, edges); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/sourcelisting/writer.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,41 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.sourcelisting.writer; + +public import docgen.misc.misc; +import dil.Parser; +import tango.io.model.IConduit : OutputStream, InputStream; + +struct ListingOptions { + DocFormat docFormat; +} + +interface ListingWriter { + void generateListing(Parser parser); + void generateListing(InputStream input); +} + +abstract class AbstractListingWriter : ListingWriter { + protected ListingWriterFactory factory; + protected OutputStream[] outputs; + + this(ListingWriterFactory factory, OutputStream[] outputs) { + this.factory = factory; + this.outputs = outputs; + } +} + +interface ListingWriterFactory { + ListingOptions *options(); + ListingWriter createListingWriter(OutputStream[] outputs); +} + +abstract class AbstractListingWriterFactory : ListingWriterFactory { + protected ListingOptions m_options; + + public ListingOptions *options() { + return &m_options; + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/trunk/src/docgen/sourcelisting/writers.d Wed Sep 19 23:12:20 2007 +0300 @@ -0,0 +1,83 @@ +/** + * Author: Jari-Matti Mäkelä + * License: GPL3 + */ +module docgen.sourcelisting.writers; + +public import docgen.sourcelisting.writer; +import dil.Parser; + +class DefaultListingWriterFactory : AbstractListingWriterFactory { + this(ListingOptions options) { + m_options = options; + } + + ListingWriter createListingWriter(OutputStream[] outputs) { + switch (m_options.docFormat) { + case DocFormat.LaTeX: + return new LaTeXWriter(this, outputs); + case DocFormat.XML: + return new XMLWriter(this, outputs); + case DocFormat.HTML: + return new HTMLWriter(this, outputs); + case DocFormat.PlainText: + return new PlainTextWriter(this, outputs); + } + } +} + + +/** + * TODO + */ +class LaTeXWriter : AbstractListingWriter { + this(ListingWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 2, "Wrong number of outputs"); + } + + void generateListing(Parser parser) { /* TODO */ } + void generateListing(InputStream input) { /* TODO */ } +} + + +/** + * TODO + */ +class XMLWriter : AbstractListingWriter { + this(ListingWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 2, "Wrong number of outputs"); + } + + void generateListing(Parser parser) { /* TODO */ } + void generateListing(InputStream input) { /* TODO */ } +} + + +/** + * TODO: add support for html/xml/latex? + */ +class HTMLWriter : AbstractListingWriter { + this(ListingWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 2, "Wrong number of outputs"); + } + + void generateListing(Parser parser) { /* TODO */ } + void generateListing(InputStream input) { /* TODO */ } +} + + +/** + * TODO + */ +class PlainTextWriter : AbstractListingWriter { + this(ListingWriterFactory factory, OutputStream[] outputs) { + super(factory, outputs); + assert(outputs.length == 2, "Wrong number of outputs"); + } + + void generateListing(Parser parser) { /* TODO */ } + void generateListing(InputStream input) { /* TODO */ } +} \ No newline at end of file