changeset 825:51edcd435b30

Removed the old implementation of docgen. This isn't in usable state currently so I'll remove it temporarily. Hopefully there will a new version based on xml processing later.
author Jari-Matti M?kel? <jmjm@iki.fi>
date Thu, 27 Mar 2008 16:56:55 +0200
parents a8b3de006554
children d659f7aa055c
files src/docgen/archdoc.xmi src/docgen/config/configurator.d src/docgen/config/default.cfg src/docgen/config/reader.d src/docgen/config/reflection.d src/docgen/docgen.d src/docgen/document/generator.d src/docgen/document/htmlgenerator.d src/docgen/document/latexgenerator.d src/docgen/document/plaintextgenerator.d src/docgen/document/xmlgenerator.d src/docgen/graphutils/dotwriter.d src/docgen/graphutils/modulenamewriter.d src/docgen/graphutils/modulepathwriter.d src/docgen/graphutils/primitives.d src/docgen/graphutils/writer.d src/docgen/graphutils/writers.d src/docgen/lstlang0.sty src/docgen/misc/meta.d src/docgen/misc/misc.d src/docgen/misc/options.d src/docgen/misc/parser.d src/docgen/misc/textutils.d src/docgen/moduledoc/htmlwriter.d src/docgen/moduledoc/writer.d src/docgen/moduledoc/writers.d src/docgen/page/htmlwriter.d src/docgen/page/latexwriter.d src/docgen/page/plaintextwriter.d src/docgen/page/writer.d src/docgen/page/writers.d src/docgen/page/xmlwriter.d src/docgen/sourcelisting/htmlwriter.d src/docgen/sourcelisting/latexwriter.d src/docgen/sourcelisting/writer.d src/docgen/sourcelisting/writers.d src/docgen/sourcelisting/xmlwriter.d src/docgen/templates/README src/docgen/templates/default/html/classes.tpl src/docgen/templates/default/html/dependencies.tpl src/docgen/templates/default/html/firstpage.tpl src/docgen/templates/default/html/graphics.tpl src/docgen/templates/default/html/listing.tpl src/docgen/templates/default/html/listings.tpl src/docgen/templates/default/html/makefile.tpl src/docgen/templates/default/html/modules.tpl src/docgen/templates/default/html/pagetemplate.tpl src/docgen/templates/default/html/pagetemplate2.tpl src/docgen/templates/default/html/static/tab_b.gif src/docgen/templates/default/html/static/tab_l.gif src/docgen/templates/default/html/static/tab_r.gif src/docgen/templates/default/html/static/tabs.css src/docgen/templates/default/html/stylesheet.tpl src/docgen/templates/default/html/toc.tpl src/docgen/templates/default/latex/classes.tpl src/docgen/templates/default/latex/dependencies.tpl src/docgen/templates/default/latex/firstpage.tpl src/docgen/templates/default/latex/graphics.tpl src/docgen/templates/default/latex/index.tpl src/docgen/templates/default/latex/lastpage.tpl src/docgen/templates/default/latex/listing.tpl src/docgen/templates/default/latex/listings.tpl src/docgen/templates/default/latex/makefile.tpl src/docgen/templates/default/latex/modules.tpl src/docgen/templates/default/latex/static/lstlang0.sty src/docgen/templates/default/latex/toc.tpl src/docgen/templates/default/plaintext/classes.tpl src/docgen/templates/default/plaintext/dependencies.tpl src/docgen/templates/default/plaintext/firstpage.tpl src/docgen/templates/default/plaintext/graphics.tpl src/docgen/templates/default/plaintext/listing.tpl src/docgen/templates/default/plaintext/listings.tpl src/docgen/templates/default/plaintext/makefile.tpl src/docgen/templates/default/plaintext/modules.tpl src/docgen/templates/default/plaintext/toc.tpl src/docgen/tests/common.d src/docgen/tests/doctemplate.d src/docgen/tests/graphs.d src/docgen/tests/listing.d src/docgen/tests/parse.d src/docgen/teststuff/a.d src/docgen/teststuff/b.d src/docgen/teststuff/c.d src/docgen/teststuff/clean.sh src/docgen/teststuff/lstlang0.sty src/docgen/teststuff/modules.tex src/docgen/testsuite.d
diffstat 86 files changed, 0 insertions(+), 4947 deletions(-) [+]
line wrap: on
line diff
--- a/src/docgen/archdoc.xmi	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1066 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<XMI xmlns:UML="http://schema.omg.org/spec/UML/1.3" verified="false" timestamp="2007-10-15T23:59:30" xmi.version="1.2" >
- <XMI.header>
-  <XMI.documentation>
-   <XMI.exporter>umbrello uml modeller http://uml.sf.net</XMI.exporter>
-   <XMI.exporterVersion>1.5.8</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="TMA6Ge0zQMX6" 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="R9UhhTPng6id" 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="juNjzfHRzPXE" 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="1XBPtiTIpxzU" 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="GraphOptions" >
-       <UML:Classifier.feature>
-        <UML:Attribute isSpecification="false" visibility="private" xmi.id="zRuotD7A5ZEx" type="4F09aHCjljSA" name="format" />
-        <UML:Attribute isSpecification="false" visibility="private" xmi.id="dMwwhlSnUoPh" type="VDAdlQhZ750q" name="imageFormat" />
-        <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="kdwMLV8h83sE" aggregation="composite" type="zgj70ST7PbVQ" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Sii687Npp9vE" aggregation="none" type="FVtbgO8sd2ii" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Generalization isSpecification="false" child="FVtbgO8sd2ii" visibility="public" namespace="Logical View" xmi.id="rtOV4FVf7iPk" parent="zgj70ST7PbVQ" discriminator="" name="" />
-      <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="Yxf0JQYnYv4n" aggregation="none" type="zgj70ST7PbVQ" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="CZfvIVeFD72m" aggregation="none" type="ZUDChgtO8jSy" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="KxhR786WWKiA" name="" >
-       <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="e0bOstNQo1O8" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="Pwtxqxi0ULvm" aggregation="none" type="2MyyGGXAPfEy" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="036VnHDG2xBH" name="" >
-       <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="rY12d3mG4Neu" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="GzI5yhBNb2IP" aggregation="none" type="B92ON93E7uE9" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="MPnzJ9f0egCU" name="" >
-       <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="xyPRKJE9rFBS" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="HxgLLIDbGVeE" aggregation="none" type="w884b40YcIag" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Association isSpecification="false" visibility="public" namespace="Logical View" xmi.id="qQ8ZNcL54wHR" name="" >
-       <UML:Association.connection>
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="false" xmi.id="CnampsBkrbC9" aggregation="none" type="haoxC1oM2QVz" name="" />
-        <UML:AssociationEnd isSpecification="false" visibility="public" changeability="changeable" isNavigable="true" xmi.id="sQIhdT9uOqDj" aggregation="none" type="qxq04A8rywIb" name="" />
-       </UML:Association.connection>
-      </UML:Association>
-      <UML:Enumeration stereotype="enum" isSpecification="false" isLeaf="false" visibility="public" namespace="Logical View" xmi.id="BQqAv02HTM6x" isRoot="false" isAbstract="false" name="VertexType" >
-       <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="ONF2RwfAq0sn" 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="e9EdXlpWG0u7" type="672lM6F9KhcI" />
-         </UML:BehavioralFeature.parameter>
-        </UML:Operation>
-        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="L1C3szmMnzpw" isRoot="false" isAbstract="false" isQuery="false" name="createGraphWriter" >
-         <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="gNPWJNyfiEi9" 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="ANIyMAl0H0bm" 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="jPJ0PB74YVap" type="OcpJQugxHW8F" />
-         </UML:BehavioralFeature.parameter>
-        </UML:Operation>
-        <UML:Operation isSpecification="false" isLeaf="false" visibility="public" xmi.id="GL3CAg7Qy0PF" isRoot="false" isAbstract="false" isQuery="false" name="createListingWriter" >
-         <UML:BehavioralFeature.parameter>
-          <UML:Parameter kind="return" xmi.id="qWVYkDfsYxos" 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,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="1" width="62" showattsigs="601" x="862" fillcolor="none" y="200" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="UY72E0ULeXyT" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         <classwidget usesdiagramfillcolor="0" width="175" showattsigs="601" x="135" fillcolor="#ffffc0" y="236" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="OcpJQugxHW8F" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="368" x="643" fillcolor="#ffffc0" y="291" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="zhVfgpENwAeN" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="404" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="qxq04A8rywIb" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="559" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="w884b40YcIag" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="714" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="B92ON93E7uE9" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="145" showattsigs="601" x="869" fillcolor="#ffffc0" y="747" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="2MyyGGXAPfEy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="411" showattsigs="601" x="17" fillcolor="#ffffc0" y="582" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="haoxC1oM2QVz" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="226" showattsigs="601" x="109" fillcolor="#ffffc0" y="482" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="m1ftLgsc5LXQ" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="411" x="17" fillcolor="#ffffc0" y="355" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="DdhFJyNQcQSm" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="1" width="127" x="498" fillcolor="none" y="324" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         <interfacewidget usesdiagramfillcolor="1" width="113" x="690" fillcolor="none" y="182" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="yBk69LKYzyaX" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-        </widgets>
-        <messages/>
-        <associations>
-         <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="vasmP4T4bt7x" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="DdhFJyNQcQSm" widgetaid="m1ftLgsc5LXQ" xmi.id="M1DRAGcxqQmM" type="511" linecolor="none" >
-          <linepath>
-           <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,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="168" showattsigs="601" x="201" fillcolor="#ffffc0" y="283" showopsigs="601" linewidth="none" height="36" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="85ASUVIYu8Rm" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-        </widgets>
-        <messages/>
-        <associations/>
-       </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,50,0,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="183" x="300" fillcolor="#ffffc0" y="44" linewidth="none" height="72" usefillcolor="1" isinstance="0" xmi.id="o5RT7D5TyDem" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-        </widgets>
-        <messages/>
-        <associations/>
-       </diagram>
-       <diagram snapgrid="0" showattsig="1" fillcolor="#ffffc0" linewidth="0" zoom="100" showgrid="0" showopsig="1" usefillcolor="1" snapx="10" canvaswidth="1042" snapy="10" showatts="1" xmi.id="37Q7pvtspjUI" documentation="" type="1" showops="1" showpackage="0" name="Graph classes" localid="" showstereotype="0" showscope="1" snapcsgrid="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" canvasheight="860" >
-        <widgets>
-         <classwidget usesdiagramfillcolor="0" width="330" showattsigs="601" x="324" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="162" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="FVtbgO8sd2ii" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="172" x="62" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="4F09aHCjljSA" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="375" x="622" fillcolor="#ffffc0" y="433" drawascircle="0" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="2Mzl2VgeffI0" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="436" showattsigs="601" x="481" fillcolor="#ffffc0" y="546" drawascircle="0" showopsigs="601" linewidth="none" height="72" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="taceG4p7AY1k" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="236" showattsigs="601" x="70" fillcolor="#ffffc0" y="228" showopsigs="601" linewidth="none" height="189" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="672lM6F9KhcI" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="375" showattsigs="601" x="623" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="ZUDChgtO8jSy" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="110" x="434" fillcolor="#ffffc0" y="54" linewidth="none" height="126" usefillcolor="1" isinstance="0" xmi.id="BQqAv02HTM6x" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="309" showattsigs="601" x="729" fillcolor="#ffffc0" y="234" showopsigs="601" linewidth="none" height="108" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="PILb9kCQnOZd" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <enumwidget usesdiagramfillcolor="0" width="136" x="815" fillcolor="#ffffc0" y="0" linewidth="none" height="180" usefillcolor="1" isinstance="0" xmi.id="uzw9DITFgRm2" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="0" width="338" x="19" fillcolor="#ffffc0" y="440" drawascircle="0" showopsigs="601" linewidth="none" height="81" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="H9NLXsg0Hncp" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="250" showattsigs="601" x="63" fillcolor="#ffffc0" y="554" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="GIPhxHkszygs" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="319" showattsigs="601" x="29" fillcolor="#ffffc0" y="646" showopsigs="601" linewidth="none" height="63" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="vJ8WmfZPiVQE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="156" showattsigs="601" x="296" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="leYQpk5LWBlE" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <classwidget usesdiagramfillcolor="0" width="147" showattsigs="601" x="464" fillcolor="#ffffc0" y="766" showopsigs="601" linewidth="none" height="45" usefillcolor="1" showpubliconly="0" showattributes="1" isinstance="0" xmi.id="cQGGEupKkEKw" showoperations="1" showpackage="0" showscope="1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,50,0,0,0,0,0" linecolor="#ff0000" />
-         <interfacewidget usesdiagramfillcolor="1" width="127" x="426" fillcolor="none" y="423" drawascircle="0" showopsigs="601" linewidth="none" height="54" usefillcolor="1" showpubliconly="0" isinstance="0" xmi.id="QbirDWtuKiBS" showoperations="1" showpackage="0" showscope="1" showstereotype="1" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         <enumwidget usesdiagramfillcolor="0" width="112" x="259" fillcolor="#ffffc0" y="90" linewidth="none" height="90" usefillcolor="1" isinstance="0" xmi.id="VDAdlQhZ750q" showpackage="0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="#ff0000" />
-        </widgets>
-        <messages/>
-        <associations>
-         <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="6iFUQNA8O29G" text="incoming" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="2" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="uzw9DITFgRm2" widgetaid="PILb9kCQnOZd" xmi.id="eaFFJAnvNrxh" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
-          <linepath>
-           <startpoint startx="883" starty="234" />
-           <endpoint endx="883" endy="180" />
-          </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="43" x="838" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="37WQwMtpwlbJ" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="4" indexb="2" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="PILb9kCQnOZd" xmi.id="xg3pIv6gVUUO" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
-          <linepath>
-           <startpoint startx="729" starty="306" />
-           <endpoint endx="654" endy="309" />
-          </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="75" x="649" fillcolor="none" y="309" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="n4MMwRI29XWX" text="outgoing" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="3" indexa="1" totalcountb="4" indexb="3" linewidth="none" widgetbid="FVtbgO8sd2ii" widgetaid="2Mzl2VgeffI0" xmi.id="m7wwiwCSxVGR" type="502" linecolor="none" >
-          <linepath>
-           <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="uefHfmXit36n" text="factory" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="2" indexa="1" totalcountb="2" indexb="1" linewidth="none" widgetbid="672lM6F9KhcI" widgetaid="H9NLXsg0Hncp" xmi.id="p0keVPRrye6f" type="502" linecolor="none" >
-          <linepath>
-           <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="PzcKiCdTExqA" text="type" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="3" indexa="1" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="4F09aHCjljSA" widgetaid="672lM6F9KhcI" xmi.id="zRuotD7A5ZEx" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
-          <linepath>
-           <startpoint startx="148" starty="228" />
-           <endpoint endx="148" endy="180" />
-          </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="56" x="150" fillcolor="none" y="182" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="O8CVfg2XLio0" text="format" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </assocwidget>
-         <assocwidget totalcounta="3" indexa="2" visibilityB="200" totalcountb="2" indexb="1" linewidth="none" widgetbid="VDAdlQhZ750q" widgetaid="672lM6F9KhcI" xmi.id="dMwwhlSnUoPh" type="510" changeabilityA="900" changeabilityB="900" linecolor="none" visibilityA="200" >
-          <linepath>
-           <startpoint startx="227" starty="228" />
-           <endpoint endx="315" endy="180" />
-          </linepath>
-          <floatingtext usesdiagramfillcolor="1" width="99" x="273" fillcolor="none" y="196" linewidth="none" posttext="" role="710" height="22" usefillcolor="1" pretext="-" isinstance="0" xmi.id="SJgKMk7kki2Q" 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="426" x="123" fillcolor="none" y="98" operation="rSVt3npBuRwI" linewidth="none" widgetbid="xkkShjnglZDn" height="32" usefillcolor="1" seqnum="" textid="17kr4cTMN71P" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="rSVt3npBuRwI" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
-          <floatingtext usesdiagramfillcolor="1" width="233" x="128" fillcolor="none" y="76" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="17kr4cTMN71P" text=": this(options : GraphOptions)" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </messagewidget>
-         <messagewidget usesdiagramfillcolor="1" width="426" x="123" fillcolor="none" y="284" operation="qt3yjRHa0HmR" linewidth="none" widgetbid="xkkShjnglZDn" height="73" usefillcolor="1" seqnum="" textid="8R7413dyF3lY" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="qt3yjRHa0HmR" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
-          <floatingtext usesdiagramfillcolor="1" width="306" x="128" fillcolor="none" y="262" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="8R7413dyF3lY" text=": createGraphWriter(outputs : OutputStream[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </messagewidget>
-         <messagewidget usesdiagramfillcolor="1" width="368" x="527" fillcolor="none" y="304" operation="RhFDP34VCWM4" linewidth="none" widgetbid="5sYVesgRYawR" height="32" usefillcolor="1" seqnum="" textid="KpN7JYvOVJ7T" widgetaid="xkkShjnglZDn" isinstance="0" xmi.id="RhFDP34VCWM4" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
-          <floatingtext usesdiagramfillcolor="1" width="399" x="532" fillcolor="none" y="282" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="KpN7JYvOVJ7T" text=": this(factory : GraphWriterFactory, outputs : OutputStream[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </messagewidget>
-         <messagewidget usesdiagramfillcolor="1" width="786" x="123" fillcolor="none" y="537" operation="nXwHg6RtyC4B" linewidth="none" widgetbid="5sYVesgRYawR" height="32" usefillcolor="1" seqnum="" textid="CUWS73hkulgU" widgetaid="8k1etAbDCjb4" isinstance="0" xmi.id="nXwHg6RtyC4B" sequencemessagetype="1000" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" >
-          <floatingtext usesdiagramfillcolor="1" width="338" x="249" fillcolor="none" y="515" linewidth="none" posttext="" role="704" height="22" usefillcolor="1" pretext="" isinstance="0" xmi.id="CUWS73hkulgU" text=": generateGraph(vertices : Vertex[], edges : Edge[])" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,50,0,0,0,0,0" linecolor="none" />
-         </messagewidget>
-        </messages>
-        <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&amp;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,0,0,0,0,0" linecolor="#ff0000" />
-         <componentwidget usesdiagramfillcolor="0" width="247" x="166" fillcolor="#ffffc0" y="158" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="OmgklXk4NCu0" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <componentwidget usesdiagramfillcolor="0" width="279" x="568" fillcolor="#ffffc0" y="158" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="9Wmh3pGp1WC1" usesdiagramusefillcolor="0" font="Sans Serif,10,-1,5,75,0,0,0,0,0" linecolor="#ff0000" />
-         <componentwidget usesdiagramfillcolor="1" width="159" x="98" fillcolor="none" y="310" linewidth="none" height="66" usefillcolor="1" isinstance="0" xmi.id="JeCajbMGRVUn" usesdiagramusefillcolor="1" font="Sans Serif,10,-1,0,75,0,0,0,0,0" linecolor="none" />
-        </widgets>
-        <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="37Q7pvtspjUI" documentation="" uniqueid="qWVYkDfsYxos" />
-  <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="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="m1ftLgsc5LXQ" >
-      <listitem open="0" type="814" id="xswAJre2CrPi" />
-      <listitem open="0" type="815" id="mZ1wtQujXunn" />
-     </listitem>
-     <listitem open="0" type="813" id="gGNje78ValnI" >
-      <listitem open="0" type="814" id="hcALY1fmWlEG" />
-      <listitem open="0" type="814" id="9QXgkpqgA1Du" />
-      <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="vJ8WmfZPiVQE" >
-      <listitem open="0" type="815" id="rSVt3npBuRwI" />
-      <listitem open="0" type="815" id="qt3yjRHa0HmR" />
-     </listitem>
-     <listitem open="0" type="813" id="haoxC1oM2QVz" >
-      <listitem open="0" type="815" id="2SrUGMptabML" />
-     </listitem>
-     <listitem open="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="1" type="813" id="OcpJQugxHW8F" >
-      <listitem open="0" type="814" id="gOHG3iCLbStZ" />
-     </listitem>
-     <listitem open="0" type="813" id="098RWfwZqN4L" >
-      <listitem open="0" type="815" id="CMMapfT5KiQP" />
-     </listitem>
-     <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="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="DdhFJyNQcQSm" >
-      <listitem open="0" type="815" id="QR4frQ4pllIy" />
-      <listitem open="0" type="815" id="GL3CAg7Qy0PF" />
-     </listitem>
-     <listitem open="0" type="817" id="zhVfgpENwAeN" >
-      <listitem open="0" type="815" id="eGKXDits9Kho" />
-      <listitem open="0" type="815" id="fA2So7Re6pf2" />
-     </listitem>
-     <listitem open="0" type="817" id="QbirDWtuKiBS" />
-     <listitem open="0" type="830" id="Datatypes" >
-      <listitem open="1" type="829" id="DaFOT7jBVtui" />
-      <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>
--- a/src/docgen/config/configurator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.config.configurator;
-
-import docgen.config.reader;
-import docgen.config.reflection;
-import docgen.misc.options;
-
-import Integer = tango.text.convert.Integer;
-import tango.io.stream.FileStream;
-import tango.io.Stdout;
-
-/**
- * Class for handling and merging doc generator options.
- */
-interface Configurator {
-  /**
-   * Merges configuration options from the given file.
-   */
-  void mergeConfiguration(char[] cfgFile);
-  
-  /**
-   * Returns a hierarchical structure of configuration options.
-   */
-  DocGeneratorOptions *getConfiguration();
-}
-
-private DocGeneratorOptions options;
-private Struct!(options) opt;
-private const cases = makeTypeStringForStruct!(opt);
-
-class DefaultConfigurator : Configurator {
-  private:
-    
-  DocGeneratorOptions options;
-
-  public:
-
-  const defaultProfileLocation = "docgen/config/default.cfg";
-
-  this() {
-    mergeConfiguration(defaultProfileLocation);
-  }
-
-  this(char[] cfgFile) {
-    this();
-    mergeConfiguration(cfgFile);
-  }
-
-  void mergeConfiguration(char[] cfgFile) {
-    
-    auto inputStream = new FileInput(cfgFile);
-    auto content = new char[inputStream.length];
-    auto bytesRead = inputStream.read (content);
-    
-    assert(bytesRead == inputStream.length, "Error reading configuration file");
-
-    auto tokens = lex(content);
-    auto configuration = parse(tokens);
-
-    foreach(key, val; configuration) {
-      bool err() {
-        throw new Exception(
-          "Configurator: Invalid key-val pair " ~ key ~
-          "=" ~ (val.length ? val[0] : "null"));
-      }
-
-      // cuteness, lul
-      mixin(_switch(
-        mixin(cases) ~
-        `default: throw new Exception("Illegal configuration key " ~ key);`
-      ));
-    }
-  }
-
-  DocGeneratorOptions *getConfiguration() {
-    return &options;
-  }
-}
--- a/src/docgen/config/default.cfg	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#
-# This file contains the default configuration. You don't need to
-# worry about this, the system will load the settings automatically.
-#
-# If you need to customize settings, just take a copy of this or
-# write one from scratch and pass the new file location as a
-# command line parameter.
-#
-
-
-(options
-  (graph
-    (imageFormat PNG)
-    (depth -1)
-    (nodeColor white)
-    (cyclicNodeColor tomato)
-    (unlocatableNodeColor gray)
-    (depColor black)
-    (cyclicDepColor red)
-    (publicDepColor blue)
-    (clusterColor blue)
-    (includeUnlocatableModules true)
-    (highlightCyclicEdges true)
-    (highlightCyclicVertices true)
-    (groupByPackageNames true)
-    (groupByFullPackageName false)
-  )
-  (listing
-    (literateStyle true)
-    (enableListings true)
-  )
-  (templates
-    (title "Test project")
-    (versionString 1.0)
-    (copyright "Crashtest dummy")
-    (paperSize a4paper)
-    (shortFileNames false)
-    (templateStyle default)
-  )
-  (parser
-    (importPaths)
-    (rootPaths)
-    (strRegexps)
-    (commentFormat Doxygen)
-    (depth -1)
-  )
-  (outputFormats LaTeX HTML PlainText)
-  (outputDir tmp/)
-)
--- a/src/docgen/config/reader.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.config.reader;
-
-debug import tango.io.Stdout;
-
-/**
- * Lexes a s-exp like input
- */
-char[][] lex(char[] input) {
-  char[][] tokens;
-
-  uint state = 0, level = 0;
-  size_t sidx = 0;
-
-  void err(size_t i, int type = 0) {
-    auto b = input[i<20 ? 0 : i-20..i];
-    auto e = input[i+1..i+21>$ ? $ : i+21];
-
-    throw new Exception("Lex: " ~ 
-      (type == 0 ? "Illegal character" :
-      type == 1 ? "Wrong number of parenthesis" :
-      "Unexpected end of input") ~
-      ": " ~ b ~ "  >>>" ~ input[i] ~ "<<<  " ~ e ~ "."
-    );
-  }
-  void begin(size_t i) { sidx = i; }
-  void end(size_t i) { tokens ~= input[sidx..i]; }
-
-  foreach(size_t i, c; input) {
-    if (sidx > i) continue;
-    switch(c) { // states space, token, textEnd
-      case '"': // starts a ""-string
-        switch(state) {
-          case 0:
-            char[] buf;
-            bool escape;
-            char d;
-            sidx = i;
-            while(!((d = input[++sidx]) == '"' && !escape) && sidx<input.length)
-              if (escape) {
-                if (d != '"' && d != '\\') buf ~= '\\';
-                buf ~= d;
-                escape = false;
-              } else if (d == '\\')
-                escape = true;
-              else
-                buf ~= d;
-
-            sidx++;
-            tokens ~= buf;
-            state = 2;
-            continue;
-          default: err(i);
-        }
-      case '\\':
-        switch(state) {
-          case 0: begin(i); state = 1; continue;
-          case 1: continue;
-          case 2: err(i);
-        }
-      case '#': // starts a comment
-        sidx = i;
-        while (++sidx<input.length && input[sidx] != '\n') {}
-        continue;
-      case ' ': // whitespace
-      case '\t':
-      case '\n':
-      case '(': // begins a block
-      case ')': // ends a block
-        switch(state) {
-          case 1: end(i);
-          case 0:
-          case 2:
-            switch(c) {
-              case '(': tokens ~= "("; level++; state = 0; break;
-              case ')': tokens ~= ")"; if (!level--) err(i,1);
-              default: state = 0;
-            }
-        }
-        break;
-      default:
-        switch(state) {
-          case 0: begin(i);
-          case 1: state = 1; continue;
-          case 2: err(i);
-        }
-     }
-  }
-
-  if (state == 3 || level != 0) err(input.length-1,2);
-  if (state > 0) end(input.length);
-
-  debug {
-    foreach(i, tok; tokens)
-      Stdout.format("{}{}", tok, (i != tokens.length-1 ? " " : ""));
-    Stdout.newline;
-  }
-
-  return tokens;
-}
-
-/**
- * Parser a s-exp like input used by the config files.
- */
-char[][][char[]] parse(char[][] tokens) {
-  char[][][char[]] values;
-  size_t i = 1;
-
-  void err(size_t j) {
-    auto b = tokens[j < 5 ? 0 : j-5..j];
-    auto e = tokens[j+1..j+6>$ ? $ : j+6];
-    char[] tmp;
-    foreach(t; b) tmp ~= t ~ " ";
-    tmp ~= ">>>" ~ tokens[j] ~ "<<< ";
-    foreach(t; e) tmp ~= t ~ " ";
-
-    throw new Exception(
-      "Parse: Illegal token: " ~ tmp ~ "."
-    );
-  }
-
-  if (tokens[0] != "(") err(0);
-
-  void doParse(char[] prefix = null) {
-    if (tokens[i] == "(" ||
-        tokens[i] == ")") err(i);
-    if (prefix) prefix ~= ".";
-    auto v = prefix ~ tokens[i++];
-    //values[v] = null;
-    while (tokens[i] != ")")
-      if (tokens[i++] == "(")
-        doParse(v);
-      else
-        values[v] ~= tokens[i-1];
-    i++;
-  }
-
-  doParse();
-
-  return values;
-}
--- a/src/docgen/config/reflection.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,275 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.config.reflection;
-
-import docgen.misc.meta;
-import docgen.misc.options;
-
-////
-//
-// Macros for reading input
-//
-////
-
-char[] _wrong(char[] key) {
-  return `if (val.length != 1) throw new Exception(
-    "Wrong number of arguments for `~key~`");`;
-}
-
-char[] _switch(char[] stuff) {
-  return "switch(key) {" ~ stuff ~ "}";
-}
-
-char[] _parseI(char[] key) {
-  return `case "` ~ key ~ `":` ~ _wrong(key) ~ key ~
-    `= Integer.parse(val[0]); continue;`;
-}
-
-char[] _parseS(char[] key) {
-  return `case "` ~ key ~ `":` ~ _wrong(key) ~ key ~
-    `= val[0]; continue;`;
-}
-
-char[] _parseB(char[] key) {
-  return `case "` ~ key ~ `":` ~ _wrong(key) ~ key ~
-    `= val[0] == "true" ? true : val[0] == "false" ? false : err(); continue;`;
-}
-
-char[] _parseList(char[] key) {
-  return `case "` ~ key ~ `":foreach(v; val) ` ~
-    key ~ `~= v; continue;`;
-}
-
-template _parseEnum_(bool list, char[] key, V...) {
-  static if (V.length>1)
-    const char[] _parseEnum_ =
-      `case "` ~ V[0] ~ `":` ~ key ~ (list ? "~" : "") ~ `=` ~ V[1] ~ `; continue;` \n ~
-      _parseEnum_!(list, key, V[2..$]);
-  else
-    const char[] _parseEnum_ = "";
-}
-
-template _parseEnum(char[] key, V...) {
-  const char[] _parseEnum = `case "` ~ key ~
-    `":` ~ _wrong(key) ~ `switch(val[0]) {` ~
-    _parseEnum_!(false, key, V) ~
-      `default: err(); } continue;`;
-}
-
-template _parseEnumList(char[] key, V...) {
-  const char[] _parseEnumList = `case "` ~ key ~
-    `":` ~ `foreach (item; val) switch(item) {` ~
-    _parseEnum_!(true, key, V) ~
-      `default: err(); } continue;`;
-}
-
-////
-//
-// Reflection for properties. This code will hopefully get better when the dmdfe bugs get fixed.
-//
-////
-
-// dmdfe bug -- Seriously WTF?
-char[] fixType(char[] type) {
-  return type[$-1] == ' ' ? type[0..$-1] : type;
-}
-
-// take the last part of field name
-char[] getLastName(char[] field) {
-  if (field.length == 0) return "";
-  int t = 0;
-  // dmdfe bug: a while loop causes index out of bounds error
-  for (int i=field.length-1; i >= 0; i--)
-    if (field[i] == '.') { t = i+1; break; }
-  return field[t..$];
-}
-
-// dmdfe bug: cannot return evalType alias
-template _evalType(char[] type) {
-  mixin("alias "~type~" value;");
-}
-
-// Note: stuple wrappers needed for tuples, otherwise:
-// dmdfe bug: cc1d: ../.././gcc/d/dmd/expression.c:4865: virtual Expression* DotIdExp::semantic(Scope*): Assertion `0' failed.
-template evalType(char[] type) {
-  alias _evalType!(type).value evalType;
-}
-
-// wraps the reflected struct and enum data inside struct because otherwise the handling becomes impossibly hard
-template getType(T) {
-  static if(is(T == struct))
-    alias Struct!(T) getType;
-  else static if(is(T == enum))
-    alias Enum!(T) getType;
-  else static if(isEnumList!(T))
-    alias Enum!(enumListType!(T), true) getType;
-  else
-    alias T getType;
-}
-
-template getTypes(alias S, int idx = S.tupleof.length) {
-  static if(idx)
-    alias Tuple!(getTypes!(S, idx-1), getType!(typeof(S.tupleof[idx-1]))) getTypes;
-  else
-    alias Tuple!() getTypes;
-}
-
-/**
- * Extracts the comma separated struct field names using .tupleof.stringof.
- * This is needed since the struct.tupleof[n].stringof is broken for enums and tuples in dmdfe.
- *
- * Bugs: handling of tuples
- */
-char[] __getNames(char[] type) {
-  char[] tmp;
-  bool end = false;
-
-  foreach(c; type[5..$]) {
-    if (c != ' ' && c != '(' && c != ')' && end) tmp ~= c;
-    if (c == ',') end = false;
-    if (c == '.') end = true;
-  }
-
-  return tmp;
-}
-
-template _getNames(char[] str, T...) {
-  static if (str.length) {
-    static if (str[0] == ',')
-      alias _getNames!(str[1..$], T, "") _getNames;
-    else
-      alias _getNames!(str[1..$], T[0..$-1], T[$-1] ~ str[0]) _getNames;
-  } else
-    alias T _getNames;
-}
-
-template getNames(char[] str) {
-  alias _getNames!(__getNames(str), "") getNames;
-}
-
-struct Struct(alias T) {
-  const type = "struct"; // used for pattern matching... apparently there's no other way
-  const name = fixType(T.stringof); // dmdfe bug: trailing space
-  alias STuple!(getNames!(T.tupleof.stringof)) names;
-  alias STuple!(getTypes!(T)) types;
-}
-
-struct Enum(alias T, bool list = false) {
-  const type = list ? "enumlist" : "enum"; // used for pattern matching... apparently there's no other way
-  const name =  T.stringof[1..$]; // dmdfe bug: returns enum base type instead enum type
-  alias evalType!("___"~name).tuple elements;
-}
-
-// determines the enumtype[] type
-template isEnumList(T : T[]) {
-  const isEnumList = T.stringof[0] == '_';
-}
-
-template isEnumList(T) {
-  const isEnumList = false;
-}
-
-template enumListType(T : T[]) {
-  alias T enumListType;
-}
-
-template enumListType(T) {
-  static assert(false, "Not enum list type!");
-}
-
-char[] createIParser(char[] field) {
-  return `_parseI("` ~ field ~ `") ~` \n;
-}
-
-char[] createBParser(char[] field) {
-  return `_parseB("` ~ field ~ `") ~` \n;
-}
- 
-char[] createSParser(char[] field) {
-  return `_parseS("` ~ field ~ `") ~` \n;
-}
- 
-char[] createLParser(char[] field) {
-  return `_parseList("` ~ field ~ `") ~` \n;
-}
-
-char[] createEParser(char[] field, char[] contents) {
-  return `_parseEnum!("` ~ field ~ `",` ~ contents ~ `) ~` \n;
-}
-
-char[] createELParser(char[] field, char[] contents) {
-  return `_parseEnumList!("` ~ field ~ `",` ~ contents ~ `) ~` \n;
-}
-
-template _makeEnumString(char[] t, E...) {
-  static if (E.length)
-    const _makeEnumString = `"` ~ E[0] ~ `", "` ~ t ~ "." ~ E[0] ~ `",` ~
-                            _makeEnumString!(t, E[1..$]);
-  else
-    const _makeEnumString = "";
-}
-
-// avoids the following dmdfe bugs:
-//  - Error: elements is not a type (typeof(T).elements)
-//  - Error: tuple is not a valid template value argument (T.elements where T is the complex type def)
-template makeEnumString(char[] t, T) {
-  const makeEnumString = _makeEnumString!(t, T.elements);
-}
-
-/**
- * Generates code for parsing data from the configuration data structure.
- */
-template makeTypeString(int i, N, T, char[] prefix) {
-  static assert(N.tuple.length == T.tuple.length);
-  static if (i < N.tuple.length) {
-    static if (is(T.tuple[i] == bool))
-      const makeTypeString = createBParser(prefix ~ N.tuple[i]) ~ makeTypeString!(i+1, N, T, prefix);
-    else static if (is(T.tuple[i] : int))
-      const makeTypeString = createIParser(prefix ~ N.tuple[i]) ~ makeTypeString!(i+1, N, T, prefix);
-    else static if (is(T.tuple[i] == char[]))
-      const makeTypeString = createSParser(prefix ~ N.tuple[i]) ~ makeTypeString!(i+1, N, T, prefix);
-    else static if (is(T.tuple[i] == char[][]))
-      const makeTypeString = createLParser(prefix ~ N.tuple[i]) ~ makeTypeString!(i+1, N, T, prefix);
-    else static if (is(T.tuple[i] == struct)) {
-      static if (T.tuple[i].type == "struct")
-        const makeTypeString = makeTypeString!(0, typeof(T.tuple[i].names),
-                               typeof(T.tuple[i].types), prefix~N.tuple[i]~".") ~
-                               makeTypeString!(i+1, N, T, prefix);
-      else static if (T.tuple[i].type == "enum")
-        const makeTypeString = createEParser(prefix ~ N.tuple[i],
-                               makeEnumString!(T.tuple[i].name, T.tuple[i])[0..$-1]) ~
-                               makeTypeString!(i+1, N, T, prefix);
-      else static if (T.tuple[i].type == "enumlist")
-        const makeTypeString = createELParser(prefix ~ N.tuple[i],
-                               makeEnumString!(T.tuple[i].name, T.tuple[i])[0..$-1]) ~
-                               makeTypeString!(i+1, N, T, prefix);
-      else {
-        const makeTypeString = "?" ~ makeTypeString!(i+1, N, T, prefix);
-        static assert(false, "Unknown type");
-      }
-    } else {
-      const makeTypeString = "?" ~ makeTypeString!(i+1, N, T, prefix);
-      static assert(false, "Unknown type");
-    }
-  } else
-    const makeTypeString = "";
-}
-
-template makeTypeStringForStruct(alias opt) {
-  const makeTypeStringForStruct = makeTypeString!(0, opt.names, opt.types, opt.name~".")[0..$-2];
-}
-
-/* some leftovers 
-template handleType(T, char[] prefix="") {
-  static if(is(typeof(T) == struct)) {
-    static if(T.type == "enum")
-      // another dmdfe weirdness: T.stringof == "Enum!(Type)" here, but if do
-      // alias T handleType;, the result.stringof is "struct Enum".
-      alias T handleType;
-  } else
-    alias T handleType;
-}
-*/
-
--- a/src/docgen/docgen.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.docgen;
-
-import docgen.graphutils.writers;
-import docgen.config.configurator;
-import docgen.document.latexgenerator;
-import docgen.document.htmlgenerator;
-import docgen.document.xmlgenerator;
-import docgen.document.plaintextgenerator;
-
-//import dil.Settings;
-import dil.SettingsLoader;
-
-import tango.core.Array;
-import tango.text.Text;
-import tango.io.Stdout;
-
-void usage() {
-  Stdout(
-    "Usage: docgen rootpath importpath_1 ... importpath_n outputdir"
-  ).newline;
-}
-
-void main(char[][] args) {
-  dil.SettingsLoader.loadSettings();
-
-  Stdout(docgen_version).newline.newline;
-
-  if (args.length<3) {
-    usage();
-    return;
-  }
-
-  Configurator config = new DefaultConfigurator();
-
-  auto options = config.getConfiguration();
-  options.parser.rootPaths = [ args[1] ];
-  options.parser.importPaths = args[2..$-1];
-  options.outputDir = args[$-1];
-
-  alias DepGraph.Vertex Vertex;
-  alias DepGraph.Edge Edge;
-
-  Module[] cachedModules;
-  DepGraph cachedGraph;
-
-  void parser(ref Module[] modules, ref DepGraph depGraph) {
-    Edge[] edges;
-    Vertex[char[]] vertices;
-
-    if (cachedGraph !is null) {
-      modules = cachedModules;
-      depGraph = cachedGraph;
-      return;
-    }
-
-    int id = 1;
-
-    Parser.loadModules(
-      options.parser.rootPaths,
-      options.parser.importPaths,
-      options.parser.strRegexps,
-      options.graph.includeUnlocatableModules,
-      options.parser.depth,
-      (char[] fqn, char[] path, Module m) {
-        if (m is null) {
-          if (fqn in vertices) {
-            debug Stdout.format("{} already set.\n", fqn);
-            return;
-          }
-          auto vertex = new Vertex(fqn, path, id++);
-          vertices[fqn] = vertex;
-          debug Stdout.format("Setting {} = {}.\n", fqn, path);
-        } else {
-          vertices[m.moduleFQN] = new Vertex(m.moduleFQN, m.filePath, id++);
-          debug Stdout.format("Setting {} = {}.\n", m.moduleFQN, m.filePath);
-        }
-      },
-      (Module imported, Module importer, bool isPublic, bool isStatic) {
-        debug Stdout.format("Connecting {} - {}.\n", imported.moduleFQN, importer.moduleFQN);
-        auto edge = vertices[imported.moduleFQN].addChild(vertices[importer.moduleFQN]);
-        edge.isPublic = isPublic;
-        edge.isStatic = isStatic;
-        edges ~= edge;
-      },
-      modules
-    );
-
-    modules.sort(
-      (Module a, Module b) { return ((new Text!(char)(a.moduleFQN)).compare(b.moduleFQN)) < 0; }
-    );
-
-    depGraph.edges = edges;
-    depGraph.vertices = vertices.values;
-
-    cachedGraph = depGraph;
-    cachedModules = modules;
-  }
-  
-  GraphCache graphcache = new DefaultGraphCache();
-
-  foreach(format; options.outputFormats) {
-    DocGenerator generator;
-
-    switch(format) {
-      case DocFormat.LaTeX:
-        Stdout("Generating LaTeX docs..");
-        generator = new LaTeXDocGenerator(*options, &parser, graphcache);
-        break;
-      case DocFormat.HTML:
-        Stdout("Generating HTML docs..");
-        generator = new HTMLDocGenerator(*options, &parser, graphcache);
-        break;
-      case DocFormat.XML:
-        Stdout("Generating XML docs..");
-        generator = new XMLDocGenerator(*options, &parser);
-        break;
-      case DocFormat.PlainText:
-        Stdout("Generating plain text docs..");
-        generator = new PlainTextDocGenerator(*options, &parser, graphcache);
-        break;
-      default: throw new Exception("Format not supported");
-    }
-
-    generator.generate();
-    Stdout("done.").newline;
-  }
-}
--- a/src/docgen/document/generator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.document.generator;
-
-import docgen.misc.misc;
-import docgen.misc.parser;
-public import docgen.misc.options;
-import docgen.page.writers;
-import docgen.moduledoc.writers;
-import docgen.graphutils.writers;
-import docgen.sourcelisting.writers;
-import docgen.config.configurator;
-import tango.io.stream.FileStream;
-import tango.io.FilePath;
-import tango.io.FileScan;
-debug import tango.io.Stdout;
-
-
-alias void delegate(ref Module[], ref DepGraph) ParserDg;
-
-abstract class DefaultDocGenerator : DocGenerator {
-  protected:
-
-  DocFormat docFormat;
-  auto makeFile = "make.sh";
-  char[] genDir;
-
-  DocGeneratorOptions m_options;
-  ParserDg m_parser;
-  PageWriter docWriter;
-
-  GraphWriterFactory graphFactory;
-  PageWriterFactory pageFactory;
-  ListingWriterFactory listingFactory;
-  ModuleDocWriterFactory moduleDocFactory;
-  
-  Module[] modules;
-  DepGraph depGraph;
-
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser) {
-    m_options = options;
-    m_parser = parser;
-
-    createGraphWriterFactory();
-    createPageWriterFactory();
-    createListingWriterFactory();
-    createModuleDocWriterFactory();
-
-    // create output dir
-    (new FilePath(options.outputDir ~ "/" ~ genDir)).create();
-
-    // copy static files
-    copyStaticContent();
-  }
-
-  DocGeneratorOptions *options() {
-    return &m_options;
-  }
-
-  protected:
-
-  void createGraphWriterFactory() {
-    graphFactory = new DefaultGraphWriterFactory(this);
-  }
-
-  void createPageWriterFactory() {
-    pageFactory = new DefaultPageWriterFactory(this);
-  }
-
-  void createListingWriterFactory() {
-    listingFactory = new DefaultListingWriterFactory(this);
-  }
-
-  void createModuleDocWriterFactory() {
-    moduleDocFactory = new DefaultModuleDocWriterFactory(this);
-  }
-
-  char[] outPath(char[] file) {
-    return options.outputDir ~ "/" ~ genDir ~ "/" ~ file;
-  }
-
-  void copyStaticContent() {
-    auto scan = new FileScan();
-    scan(templateDir~options.templates.templateStyle~"/"~formatDirs[docFormat]~"/static/");
-
-    foreach(filePath; scan.files) {
-      (new FilePath(outPath(filePath.file))).copy(filePath.toString());
-    }
-
-    debug Stdout(scan.files.length)(" static files copied.\n");
-  }
-
-  FileOutput outputFile(char[] fname) {
-    return new FileOutput(outPath(fname));
-  }
-
-  void parseSources() {
-    depGraph = new DepGraph();
-    m_parser(modules, depGraph);
-  }
-
-  //---
-
-  void writeSimpleFile(char[] fname, void delegate() dg) {
-    auto docFile = outputFile(fname);
-
-    docWriter.setOutput([docFile]);
-    dg();
-
-    docFile.close();
-  }
-
-  /**
-   * Generates "makefile" for processing e.g. .dot files.
-   */
-  void generateMakeFile(char[][] args ...) {
-    writeSimpleFile(makeFile, { docWriter.generateCustomPage("makefile", args); } );
-  }
-  
-}
-
-abstract class DefaultCachingDocGenerator : DefaultDocGenerator, CachingDocGenerator {
-  private:
-    
-  GraphCache m_graphCache;
-
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser, GraphCache graphCache) {
-    super(options, parser);
-    m_graphCache = graphCache;
-  }
-  
-  GraphCache graphCache() {
-    return m_graphCache;
-  }
-
-  protected:
-
-  void createGraphWriterFactory() {
-    graphFactory = new DefaultCachingGraphWriterFactory(this);
-  }
-}
--- a/src/docgen/document/htmlgenerator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,156 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.document.htmlgenerator;
-
-import docgen.document.generator;
-import docgen.misc.misc;
-import tango.io.stream.FileStream;
-import tango.text.Util : replace;
-
-class HTMLDocGenerator : DefaultCachingDocGenerator {
-  private:
-
-  auto docFileNames = [
-    "index.html"[], "toc.html"[], "classes.html"[],
-    "modules.html"[], "files.html"[]
-  ];
-
-  auto depGraphFile = "depgraph.dot";
-  auto depGraphDocFile = "depgraph.html";
-  auto styleSheetFile = "default.css";
-
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser, GraphCache graphcache) {
-    genDir = "html";
-    docFormat = DocFormat.HTML;
-    super(options, parser, graphcache);
-  }
-
-  /**
-   * Generates the documentation.
-   */
-  void generate() {
-    parseSources();
-
-    docWriter = pageFactory.createPageWriter( null, docFormat );
-
-    // stylesheet needs to be created first to propagate the css file name
-    generateStyleSheet();
-
-    generateDoc();
-
-    if (options.listing.enableListings)
-      generateListings();
-
-    generateClasses();
-    generateModules();
-    generateDependencies();
-    generateMakeFile(imageFormatExts[options.graph.imageFormat]);
-  }
-
-  protected:
-
-  /**
-   * Generates document skeleton.
-   */
-  void generateDoc() {
-    writeSimpleFile(docFileNames[0], {
-      docWriter.generateFirstPage();
-    });
-    /*
-    writeSimpleFile(docFileNames[1], {
-      docWriter.generateTOC(modules);
-      docWriter.generateCustomPage("pagetemplate2", docgen_version);
-    });*/
-  }
-
-  /**
-   * Generates a global style sheet.
-   */
-  void generateStyleSheet() {
-    writeSimpleFile(styleSheetFile, {
-      docWriter.generateCustomPage("stylesheet");
-    });
-  }
-
-  /**
-   * Generates documentation for classes.
-   */
-  void generateClasses() {
-    writeSimpleFile(docFileNames[2], {
-      docWriter.generateClassSection();
-      docWriter.generateCustomPage("pagetemplate2", docgen_version);
-    });
-  }
-
-  /**
-   * Generates documentation for modules.
-   */
-  void generateModules() {
-    writeSimpleFile(docFileNames[3], {
-      docWriter.generateModuleSection(modules);
-      docWriter.generateCustomPage("pagetemplate2", docgen_version);
-    });
-    
-//    auto mdw = moduleDocFactory.createModuleDocWriter(docWriter, docFormat);
-
-  }
-
-  /**
-   * Generates source file listings.
-   */
-  void generateListings() {
-    writeSimpleFile(docFileNames[4], {
-      docWriter.generateListingSection(modules);
-
-      char[][] contents;
-
-      contents ~= "(";
-
-      foreach(mod; modules) {
-        auto FQN = mod.moduleFQN;
-        auto dstFname = replace(mod.moduleFQN.dup, '.', '_') ~ ".html";
-        contents ~= `<a href="` ~ dstFname ~ `">` ~ FQN ~ "</a>";
-      }
-
-      contents ~= ")";
-
-      docWriter.addList(contents, false);
-
-      docWriter.generateCustomPage("pagetemplate2", docgen_version);
-    });
-
-    auto writer = listingFactory.createListingWriter(docWriter, docFormat);
-
-    foreach(mod; modules) {
-      auto dstFname = replace(mod.moduleFQN.dup, '.', '_') ~ ".html";
-
-      writeSimpleFile(dstFname, {
-        auto srcFile = new FileInput(mod.filePath);
-        writer.generateListing(srcFile, null, mod.moduleFQN);
-        srcFile.close();
-      });
-    }
-  }
-
-  /**
-   * Generates dependency graphs.
-   */
-  void generateDependencies() {
-    writeSimpleFile(depGraphDocFile, {
-      docWriter.generateDepGraphSection();
-
-      auto imgFile = outputFile(depGraphFile);
-
-      auto writer = graphFactory.createGraphWriter( docWriter, GraphFormat.Dot );
-      writer.generateDepGraph(depGraph, imgFile);
-
-      imgFile.close();
-
-      docWriter.generateCustomPage("pagetemplate2", docgen_version);
-    });
-  }
-}
--- a/src/docgen/document/latexgenerator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.document.latexgenerator;
-
-import docgen.document.generator;
-import docgen.misc.misc;
-import tango.io.stream.FileStream;
-import tango.text.Util : replace;
-
-/**
- * Main routine for LaTeX doc generation.
- */
-class LaTeXDocGenerator : DefaultCachingDocGenerator {
-  private:
-
-  auto docFileName = "document.tex";
-  auto depGraphDocFile = "dependencies.tex";
-  auto depGraphFile = "depgraph.dot";
-  auto listingFile = "files.tex";
-  auto modulesFile = "modules.tex";
-
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser, GraphCache graphcache) {
-    genDir = "latex";
-    docFormat = DocFormat.LaTeX;
-
-    super(options, parser, graphcache);
-  }
-
-  /**
-   * Generates the documentation.
-   */
-  void generate() {
-    parseSources();
-
-    generateDoc();
-
-    if (options.listing.enableListings)
-      generateListings();
-
-    generateClasses();
-    generateModules();
-    generateDependencies();
-    generateMakeFile(docFileName, "pdf");
-  }
-
-  protected:
-
-  /**
-   * Generates document skeleton.
-   */
-  void generateDoc() {
-    auto docFile = outputFile(docFileName);
-    docWriter = pageFactory.createPageWriter( [ docFile ], docFormat );
-
-    docWriter.generateFirstPage();
-    docWriter.generateTOC(modules);
-    docWriter.generateClassSection();
-    docWriter.generateModuleSection(modules);
-    docWriter.generateListingSection(modules);
-    docWriter.generateDepGraphSection();
-    docWriter.generateIndexSection();
-    docWriter.generateLastPage();
-
-    docFile.close();
-  }
-
-  /**
-   * Generates documentation for classes.
-   */
-  void generateClasses() {
-    auto docFile = outputFile(modulesFile);
-    docFile.close();
-  }
-
-  /**
-   * Generates documentation for modules.
-   */
-  void generateModules() {
-    auto docFile = outputFile(modulesFile);
-    docFile.close();
-  }
-
-  /**
-   * Generates source file listings.
-   */
-  void generateListings() {
-    writeSimpleFile(listingFile, {
-      auto writer = listingFactory.createListingWriter(docWriter, docFormat);
-
-      foreach(mod; modules) {
-        auto dstFname = replace(mod.moduleFQN.dup, '.', '_') ~ ".d";
-        
-        auto srcFile = new FileInput(mod.filePath);
-        auto dstFile = outputFile(dstFname);
-        
-        writer.generateListing(srcFile, dstFile, mod.moduleFQN);
-
-        srcFile.close();
-        dstFile.close();
-      }
-    });
-  }
-
-  /**
-   * Generates dependency graphs.
-   */
-  void generateDependencies() {
-    writeSimpleFile(depGraphDocFile, {
-      auto imgFile = outputFile(depGraphFile);
-
-      auto writer = graphFactory.createGraphWriter( docWriter, GraphFormat.Dot );
-      writer.generateDepGraph(depGraph, imgFile);
-
-      imgFile.close();
-    });
-  }
-}
--- a/src/docgen/document/plaintextgenerator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.document.plaintextgenerator;
-
-import docgen.document.generator;
-import docgen.misc.misc;
-import tango.io.stream.FileStream;
-import tango.io.FilePath;
-import tango.text.Util : replace;
-
-class PlainTextDocGenerator : DefaultCachingDocGenerator {
-  private:
-
-  auto docFileNames = [
-    "index.txt"[], "toc.txt"[], "classes.txt"[],
-    "modules.txt"[], "files.txt"[]
-  ];
-
-  auto depGraphFile = "depgraph.dot";
-  auto depGraphDocFile = "depgraph.txt";
-
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser, GraphCache graphcache) {
-    genDir = "txt";
-    docFormat = DocFormat.PlainText;
-    
-    super(options, parser, graphcache);
-  }
-
-  /**
-   * Generates the documentation.
-   */
-  void generate() {
-    parseSources();
-
-    docWriter = pageFactory.createPageWriter( null, docFormat );
-
-    generateDoc();
-
-    if (options.listing.enableListings)
-      generateListings();
-
-    generateClasses();
-    generateModules();
-    generateDependencies();
-    generateMakeFile(imageFormatExts[options.graph.imageFormat]);
-  }
-
-  protected:
-
-  /**
-   * Generates document skeleton.
-   */
-  void generateDoc() {
-    writeSimpleFile(docFileNames[0], {
-      docWriter.generateFirstPage();
-    });
-    
-    writeSimpleFile(docFileNames[1], {
-      docWriter.generateTOC(modules);
-    });
-  }
-
-  /**
-   * Generates documentation for classes.
-   */
-  void generateClasses() {
-    writeSimpleFile(docFileNames[2], {
-      docWriter.generateClassSection();
-    });
-  }
-
-  /**
-   * Generates documentation for modules.
-   */
-  void generateModules() {
-    writeSimpleFile(docFileNames[3], {
-      docWriter.generateModuleSection(modules);
-    });
-  }
-
-  /**
-   * Generates source file listings.
-   */
-  void generateListings() {
-    writeSimpleFile(docFileNames[4], {
-      docWriter.generateListingSection(modules);
-
-      char[][] contents;
-
-      foreach(mod; modules) {
-        auto FQN = mod.moduleFQN;
-        contents ~= FQN ~ " (see " ~ replace(FQN.dup, '.', '_') ~ ".d)";
-      }
-
-      docWriter.addList(contents, false);
-    });
-
-    foreach(mod; modules)
-      (new FilePath(outPath(replace(mod.moduleFQN.dup, '.', '_') ~ ".d"))).copy(mod.filePath);
-  }
-
-  /**
-   * Generates dependency graphs.
-   */
-  void generateDependencies() {
-    writeSimpleFile(depGraphDocFile, {
-      docWriter.generateDepGraphSection();
-
-      auto imgFile = outputFile(depGraphFile);
-
-      auto writer = graphFactory.createGraphWriter( docWriter, GraphFormat.Dot );
-      writer.generateDepGraph(depGraph, imgFile);
-
-      imgFile.close();
-    });
-  }
-}
--- a/src/docgen/document/xmlgenerator.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.document.xmlgenerator;
-
-import docgen.document.generator;
-import docgen.misc.misc;
-import tango.io.stream.FileStream;
-import tango.text.Util : replace;
-
-class XMLDocGenerator : DefaultDocGenerator {
-  public:
-
-  this(DocGeneratorOptions options, ParserDg parser) {
-    genDir = "xml";
-    docFormat = DocFormat.XML;
-
-    super(options, parser);
-  }
-
-  void generate() { /* TODO */ }
-}
--- a/src/docgen/graphutils/dotwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.graphutils.dotwriter;
-import docgen.graphutils.writer;
-
-import tango.io.Print: Print;
-import tango.text.convert.Layout : Layout;
-import tango.io.FilePath;
-import tango.text.Util;
-import tango.text.convert.Sprint;
-debug import tango.io.Stdout;
-
-/**
- * Creates a graph rule file for the dot utility.
- */
-class DotWriter : AbstractGraphWriter {
-  public:
-
-  this(GraphWriterFactory factory, PageWriter writer) {
-    super(factory, writer);
-  }
-
-  void generateDepGraph(DepGraph depGraph, OutputStream imageFile) {
-    generateImageTag(imageFile);
-    
-    auto image = generateDepImageFile(depGraph);
-    auto printer = new Print!(char)(new Layout!(char), imageFile);
-    printer(image);
-  }
-
-  protected:
-
-  char[] generateDepImageFile(DepGraph depGraph) {
-    char[] image;
-    auto sprint = new Sprint!(char);
-    
-    auto edges = depGraph.edges;
-    auto vertices = depGraph.vertices;
-
-    DepGraph.Vertex[][char[]] verticesByPckgName;
-    if (factory.options.graph.groupByFullPackageName ||
-        factory.options.graph.groupByPackageNames) {
-      foreach (mod; vertices) {
-        auto parts = mod.name.delimit(".");
-
-        if (parts.length>1) {
-          auto pkg = parts[0..$-1].join(".");
-          verticesByPckgName[pkg] ~= mod;
-        }
-      }
-    }
-
-    if (factory.options.graph.highlightCyclicVertices ||
-        factory.options.graph.highlightCyclicEdges)
-      depGraph.markCycles();
-
-    image ~= "Digraph ModuleDependencies {\n";
-
-    foreach (module_; vertices) {
-      auto nodeName = 
-        factory.options.graph.groupByPackageNames ?
-        module_.name.split(".")[$-1] :
-        module_.name;
-
-      image ~= sprint.format(
-        `  n{} [label="{}",style=filled,fillcolor={}];`\n,
-        module_.id,
-        nodeName,
-        module_.cyclic && factory.options.graph.highlightCyclicVertices ?
-          factory.options.graph.cyclicNodeColor :
-        module_.incoming.length == 0 && module_.outgoing.length == 0 ?
-          factory.options.graph.unlocatableNodeColor :
-          factory.options.graph.nodeColor
-      );
-    }
-
-    foreach (edge; edges)
-      image ~= sprint.format(
-        `  n{} -> n{}[color={}];`\n,
-        edge.outgoing.id,
-        edge.incoming.id,
-        edge.cyclic ?
-          factory.options.graph.cyclicDepColor :
-        edge.isPublic ?
-          factory.options.graph.publicDepColor ~ ",style=bold" :
-          factory.options.graph.depColor
-      );
-
-    if (factory.options.graph.groupByPackageNames)
-
-      if (!factory.options.graph.groupByFullPackageName) {
-        foreach (packageName, vertices; verticesByPckgName) {
-          auto name = packageName.split(".");
-
-          if (name.length > 1) {
-            char[] pkg;
-            foreach(part; name) {
-              pkg ~= part ~ ".";
-              image ~= sprint.format(
-                `subgraph "cluster_{0}" {{`\n`  label="{0}"`\n,
-                pkg[0..$-1],
-                pkg[0..$-1]
-              );
-            }
-            for (int i=0; i< name.length; i++) {
-              image ~= "}\n";
-            }
-          }
-        }
-      }
-      foreach (packageName, vertices; verticesByPckgName) {
-        image ~= sprint.format(
-          `  subgraph "cluster_{0}" {{`\n`  label="{0}";color=`
-          ~ factory.options.graph.clusterColor ~ `;`\n`  `,
-          packageName,
-          packageName
-        );
-
-        foreach (module_; vertices)
-          image ~= sprint.format(`n{0};`, module_.id);
-        image ~= "\n  }\n";
-      }
-
-    image ~= "}";
-
-    return image;
-  }
-        
-  void generateImageTag(OutputStream imageFile) {
-    // name of the .dot file
-    char[] fn = (cast(Object)imageFile.conduit).toString();
-    fn = FilePath(fn).file;
-
-    fn = fn[0..$-3] ~ imageFormatExts[factory.options.graph.imageFormat];
-    
-    writer.addGraphics(fn);
-  } 
-}
-
-class CachingDotWriter : DotWriter {
-  private:
-
-  CachingGraphWriterFactory factory;
-
-  public:
-
-  this(CachingGraphWriterFactory factory, PageWriter writer) {
-    super(factory, writer);
-    this.factory = factory;
-  }
-
-  override void generateDepGraph(DepGraph depGraph, OutputStream imageFile) {
-    generateImageTag(imageFile);
-
-    auto cached = factory.graphCache.getCachedGraph(depGraph, GraphFormat.Dot);
-
-    auto printer = new Print!(char)(new Layout!(char), imageFile);
-    
-    if (cached) {
-      printer(cached);
-    } else {
-      auto image = generateDepImageFile(depGraph);
-      factory.graphCache.setCachedGraph(depGraph, GraphFormat.Dot, image);
-      printer(image);
-    }
-  }
-}
-
--- a/src/docgen/graphutils/modulenamewriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.graphutils.modulenamewriter;
-import docgen.graphutils.writer;
-
-import tango.io.Print: Print;
-import tango.text.convert.Layout : Layout;
-
-class ModuleNameWriter : AbstractGraphWriter {
-  public:
-
-  this(GraphWriterFactory factory, PageWriter writer) {
-    super(factory, writer);
-  }
-
-  void generateDepGraph(DepGraph depGraph, OutputStream imageFile) {
-    char[][] contents;
-
-    auto edges = depGraph.edges;
-    auto vertices = depGraph.vertices;
-
-    void doList(DepGraph.Vertex[] v, uint level) {
-      if (!level) return;
-
-      contents ~= "(";
-
-      foreach (vertex; v) {
-        contents ~= vertex.name;
-        if (vertex.outgoing.length)
-          doList(vertex.outgoing, level-1);
-      }
-
-      contents ~= ")";
-    }
-
-    doList(vertices, factory.options.graph.depth);
-
-    writer.addList(contents, false);
-  }
-}
--- a/src/docgen/graphutils/modulepathwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.graphutils.modulepathwriter;
-import docgen.graphutils.writer;
-
-import tango.io.Print: Print;
-import tango.text.convert.Layout : Layout;
-
-class ModulePathWriter : AbstractGraphWriter {
-  public:
-
-  this(GraphWriterFactory factory, PageWriter writer) {
-    super(factory, writer);
-  }
-
-  void generateDepGraph(DepGraph depGraph, OutputStream imageFile) {
-    char[][] contents;
-
-    auto edges = depGraph.edges;
-    auto vertices = depGraph.vertices;
-
-    void doList(DepGraph.Vertex[] v, uint level) {
-      if (!level) return;
-
-      contents ~= "(";
-
-      foreach (vertex; v) {
-        contents ~= vertex.location;
-        if (vertex.outgoing.length)
-          doList(vertex.outgoing, level-1);
-      }
-
-      contents ~= ")";
-    }
-
-    doList(vertices, factory.options.graph.depth);
-
-    writer.addList(contents, false);
-  }
-}
--- a/src/docgen/graphutils/primitives.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.graphutils.primitives;
-
-/**
- * Extendible graph class. Should support separation of concerns now better with mixins.
- * Provides a method for cycle marking.
- */
-class Graph(alias V, alias E, int capacity = 1) {
-  static class Edge {
-    Vertex outgoing, incoming;
-    //bool cyclic = true;
-
-    this(Vertex o, Vertex i) {
-      outgoing = o;
-      incoming = i;
-      o.outgoingEdges ~= this;
-      i.incomingEdges ~= this;
-    }
-
-    bool cyclic() {
-      return outgoing.cyclic && incoming.cyclic;
-    }
-
-    mixin E;
-  }
-
-  static class Vertex {
-    Edge[] incomingEdges;
-    Edge[] outgoingEdges;
-    bool cyclic = true;
-
-    Edge addChild(Vertex v) {
-      return new Edge(v, this);
-    }
-
-    Edge addParent(Vertex v) {
-      return v.addChild(this);
-    }
-
-    Vertex[] incoming() {
-      Vertex[] tmp;
-
-      foreach(edge; incomingEdges)
-        tmp ~= edge.outgoing;
-
-      return tmp;
-    }
-
-    Vertex[] outgoing() {
-      Vertex[] tmp;
-
-      foreach(edge; outgoingEdges)
-        tmp ~= edge.incoming;
-
-      return tmp;
-    }
-
-    mixin V;
-  }
-
-  Vertex[] vertices;
-  Edge[] edges;
-
-  this() {
-    vertices.length = capacity;
-    vertices.length = 0;
-    edges.length = capacity;
-    edges.length = 0;
-  }
-
-  void add(Vertex vertex) { vertices ~= vertex; }
-
-  void add(Edge edge) { edges ~= edge; }
-
-  void connect(Vertex from, Vertex to) { edges ~= from.addParent(to); }
-
-  void connect(int from, int to) { connect(vertices[from], vertices[to]); }
-
-  /**
-   * Starts from non-cyclic nodes and propagates two both directions.
-   * Bugs: marks non-cyclic imports between two cycles as cyclic. Could be fixed later if it's really needed (slow)
-   */
-  void markCycles() {
-    void mark(Vertex v) {
-      v.cyclic = false;
-      foreach(o; v.outgoing) {
-        if (!o.cyclic) continue;
-
-        // propagate
-        bool cyclic = false;
-        foreach(p; o.incoming) if (p.cyclic) { cyclic = true; break; }
-        if (!cyclic) mark(o);
-      }
-    }
-
-    void mark2(Vertex v) {
-      v.cyclic = false;
-      foreach(o; v.incoming) {
-        if (!o.cyclic) continue;
-
-        // propagate
-        bool cyclic = false;
-        foreach(p; o.outgoing) if (p.cyclic) { cyclic = true; break; }
-        if (!cyclic) mark2(o);
-      }
-    }
-
-    foreach(e; vertices)
-      if (e.cyclic) {
-        if (!e.incoming.length) mark(e);
-        if (!e.outgoing.length) mark2(e);
-      }
-  }
-}
-
-template Empty() {}
-
-
-// graph elements used in dep graphs
-
-
-template DepEdge() {
-  bool isPublic; /// Public import.
-  bool isStatic; /// Static import.
-}
-
-template DepVertex() {
-  char[] name;
-  char[] location;
-  uint id;
-
-  this(char[] name, char[] location, uint id = 0) {
-    this.name = name;
-    this.location = location;
-    this.id = id;
-  }
-}
-
-alias Graph!(DepVertex, DepEdge, 100) DepGraph;
--- a/src/docgen/graphutils/writer.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.graphutils.writer;
-
-public import docgen.misc.misc;
-public import docgen.graphutils.primitives;
-public import docgen.page.writer;
-debug import tango.io.Stdout;
-
-interface GraphWriter {
-  void generateDepGraph(DepGraph depGraph, OutputStream imageFile);
-}
-
-interface GraphWriterFactory : WriterFactory {
-  GraphWriter createGraphWriter(PageWriter writer, GraphFormat outputFormat);
-}
-
-interface CachingGraphWriterFactory : GraphWriterFactory {
-  GraphCache graphCache();
-}
-/+
-/**
- * Marks all cycles in the graph.
- *
- * May have bugs, but is a bit simpler than the previous version.
- */
-void findCycles(Vertex[] vertices, Edge[] edges) {
-  debug void p() {
-    foreach(e; edges) Stderr(e.type)(" "c);
-    Stderr.newline;
-  }
-
-  bool visit(Edge edge) {
-    if (edge.cycleType == CycleType.Reserved) {
-      edge.cycleType = CycleType.Cyclic;
-      version(VerboseDebug) p();
-      return true;
-    }
-
-    bool wasCyclic = edge.isCyclic();
-    edge.cycleType = CycleType.Reserved;
-    version(VerboseDebug) p();
-
-    foreach(edge2; edge.incoming.outgoingEdges)
-      if (visit(edge2)) {
-        if (edge.isCyclic()) {
-          edge.cycleType = CycleType.Reserved;
-          wasCyclic = true;
-          version(VerboseDebug) p();
-          continue;
-        }
-        edge.cycleType = CycleType.Cyclic;
-        return true;
-      }
-
-    edge.cycleType = wasCyclic ? CycleType.Cyclic : CycleType.Cyclefree;
-    version(VerboseDebug) p();
-    return false;
-  }
-
-  foreach(vertex; vertices)
-    foreach(edge; vertex.outgoingEdges)
-      if (edge.cycleType == CycleType.Unspecified) {
-        visit(edge);
-        debug Stderr("*\n");
-      }
-}
-+/
-
-abstract class AbstractGraphWriter : AbstractWriter!(GraphWriterFactory), GraphWriter {
-  protected:
-
-  PageWriter writer;
-  
-  public:
-
-  this(GraphWriterFactory factory, PageWriter writer) {
-    super(factory);
-    this.writer = writer;
-  }
-}
-
-class DefaultGraphCache : GraphCache {
-  private:
-    
-  char[][Object][GraphFormat] m_graphCache;
-
-  public:
-
-  char[] getCachedGraph(Object graph, GraphFormat format) {
-    debug Stdout("Starting graph lookup\n");
-    debug Stdout(&graph, format).newline;
-    debug Stdout(&m_graphCache).newline;
-    
-    auto lookup1 = format in m_graphCache;
-    if (lookup1) {
-      auto lookup2 = graph in *lookup1;
-      if (lookup2) {
-          return *lookup2;
-      }
-    }
-    debug Stdout("Graph cache miss!\n");
-    return null;
-  }
-
-  void setCachedGraph(Object graph, GraphFormat format, char[]
-      contents) {
-    m_graphCache[format][graph] = contents;
-    debug Stdout("Graph cache updated!\n");
-  }
-}
--- a/src/docgen/graphutils/writers.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/**
- * 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 : AbstractWriterFactory, GraphWriterFactory {
-  public:
-
-  this(DocGenerator generator) {
-    super(generator);
-  }
-
-  GraphWriter createGraphWriter(PageWriter writer, GraphFormat outputFormat) {
-    switch (outputFormat) {
-      case GraphFormat.Dot:
-        return new DotWriter(this, writer);
-      case GraphFormat.ModuleNames:
-        return new ModuleNameWriter(this, writer);
-      case GraphFormat.ModulePaths:
-        return new ModulePathWriter(this, writer);
-      default:
-        throw new Exception("Graph writer type does not exist!");
-    }
-  }
-}
-
-class DefaultCachingGraphWriterFactory : AbstractWriterFactory, CachingGraphWriterFactory {
-  public:
-
-  CachingDocGenerator generator;
-
-  this(CachingDocGenerator generator) {
-    super(generator);
-    this.generator = generator;
-  }
-
-  GraphCache graphCache() {
-    return generator.graphCache;
-  }
-
-  override GraphWriter createGraphWriter(PageWriter writer, GraphFormat outputFormat) {
-    switch (outputFormat) {
-      case GraphFormat.Dot:
-        return new CachingDotWriter(this, writer);
-      case GraphFormat.ModuleNames:
-        return new ModuleNameWriter(this, writer);
-      case GraphFormat.ModulePaths:
-        return new ModulePathWriter(this, writer);
-      default:
-        throw new Exception("Graph writer type does not exist!");
-    }
-  }
-}
--- a/src/docgen/lstlang0.sty	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-%%
-%% 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
--- a/src/docgen/misc/meta.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.misc.meta;
-
-/// tuple literal workaround
-template Tuple(T...) { alias T Tuple; }
-
-/// another tuple literal workaround (can be nested & avoids at least one dmdfe bug)
-struct STuple(T...) { alias T tuple; }
-
-
-// (a -> b), [a] -> [b]
-template map(alias S, T...) {
-  static if (T.length)
-    alias Tuple!(S!(T[0]), map!(S, T[1..$])) map;
-  else
-    alias T map;
-}
-
-/// (a -> Bool), [a] -> [a]
-template filter(alias S, T...) {
-  static if (!T.length)
-    alias Tuple!() filter;
-  else static if (S!(T[0]))
-    alias Tuple!(T[0], filter!(S, T[1..$])) filter;
-  else
-    alias filter!(S, T[1..$]) filter;
-}
-
-/// Int -> Bool
-template odd(int T) {
-  const odd = T%2 == 1;
-}
-
-/// Int -> Bool
-template even(int T) {
-  const even = !odd!(T);
-}
-
-/// a [a] -> a  -- max x y = max2 x (max y)
-T max(T, U...)(T a, U b) {
-  static if (b.length)
-    return a > max(b) ? a : max(b);
-  else
-    return a;
-}
-
-/// a [a] -> a  -- min x y = min2 x (min y)
-T min(T, U...)(T a, U b) {
-  static if (b.length)
-    return a < min(b) ? a : min(b);
-  else
-    return a;
-}
-
-/// Upcasts derivatives of B to B
-template UpCast(B, T) { alias T UpCast; }
-template UpCast(B, T : B) { alias B UpCast; }
-
-/// converts integer to ascii, base 10
-char[] itoa(int i) {
-  char[] ret;
-  auto numbers = "0123456789ABCDEF";
-
-  do {
-    ret = numbers[i%10] ~ ret;
-    i /= 10;
-  } while (i)
-
-  return ret;
-}
-
-/// Enum stuff
-
-template _genList(char[] pre, char[] post, T...) {
-  static if (T.length)
-    const _genList = pre ~ T[0] ~ post ~ (T.length>1 ? "," : "") ~
-                     _genList!(pre, post, T[1..$]);
-  else
-    const _genList = ``;
-}
-
-/**
- * Creates
- *   - a typedef for enum (workaround for .tupleof.stringof)
- *   - the enum structure
- *   - string array of enum items (for runtime programming)
- *   - string tuple of enum items (for metaprogramming - char[][] doesn't work)
- */
-template createEnum(char[] tName, char[] eName, char[] arName, char[] alName, T...) {
-  const createEnum =
-    "typedef int " ~ tName ~ ";" ~
-    "enum " ~ eName ~ ":" ~ tName ~ "{" ~ _genList!("", "", T) ~ "};" ~
-    "char[][] " ~ arName ~ "=[" ~ _genList!(`"`, `"[]`, T) ~ "];" ~
-    "alias STuple!(" ~ _genList!(`"`, `"`, T) ~ ") " ~ alName ~ ";";
-}
--- a/src/docgen/misc/misc.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.misc.misc;
-import docgen.misc.options;
-import tango.io.model.IConduit : OutputStream;
-
-char[] docgen_version = "Dil document generator 0.1";
-
-interface DocGenerator {
-  DocGeneratorOptions *options();
-  void generate();
-}
-
-interface GraphCache {  
-  char[] getCachedGraph(Object graph, GraphFormat format);
-  void setCachedGraph(Object graph, GraphFormat format, char[] contents);
-}
-
-interface CachingDocGenerator : DocGenerator {
-  GraphCache graphCache();
-}
-
-interface WriterFactory {
-  DocGeneratorOptions *options();
-}
-
-abstract class AbstractWriterFactory : WriterFactory {
-  protected DocGenerator generator;
-
-  public:
-  
-  DocGeneratorOptions *options() {
-    return generator.options;
-  }
-
-  this(DocGenerator generator) {
-    this.generator = generator;
-  }
-}
-
-
-template AbstractWriter(T, int n = 0) {
-  abstract class AbstractWriter {
-    protected T factory;
-    protected OutputStream[] outputs;
-  
-    static if (n > 0) {
-      this(T factory, OutputStream[] outputs) {
-        this.factory = factory;
-        this.outputs = outputs;
-        assert(outputs.length == n, "Incorrect number of outputs");
-      }
-    }
-
-    this(T factory) {
-      this.factory = factory;
-    }
-  }
-}
--- a/src/docgen/misc/options.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.misc.options;
-
-import docgen.misc.meta;
-
-/** creates reflective enums, syntax: enum name + list of elements */
-template optionEnum(char[] name, T...) {
-  const optionEnum = createEnum!("_" ~ name, name, "__" ~ name, "___" ~ name, T);
-}
-
-/** Supported document output formats. */
-mixin(optionEnum!("DocFormat", "LaTeX", "XML", "HTML", "PlainText"));
-
-/**
- * Supported comment formats.
- * 
- * http://www.stack.nl/~dimitri/doxygen/docblocks.html
- * http://www.digitalmars.com/d/ddoc.html
- */
-mixin(optionEnum!("CommentFormat", "Ddoc", "Doxygen"));
-
-/** Supported image formats. */
-mixin(optionEnum!("ImageFormat", "PNG", "SVG", "GIF", "PDF"));
-
-/** Image format extensions. */
-const imageFormatExts = [ "png", "svg", "gif", "pdf" ];
-
-/** Supported graph writers. */
-mixin(optionEnum!("GraphFormat", "Dot", "ModuleNames", "ModulePaths"));
-
-struct GraphOptions {
-  /// image format to use for graphs
-  ImageFormat imageFormat;
-  /// maximum depth of dependencies in graphs
-  uint depth;
-  /// color of normal modules
-  char[] nodeColor;
-  /// color of the modules in cyclic dep relation
-  char[] cyclicNodeColor;
-  /// unlocatable module color
-  char[] unlocatableNodeColor;
-  /// color of the dependencies
-  char[] depColor;
-  /// color of the dependencies in cyclic dep relation
-  char[] cyclicDepColor;
-  /// color of the public dependencies
-  char[] publicDepColor;
-  /// package color
-  char[] clusterColor;
-  /// include unlocatable modules to the dep graph
-  bool includeUnlocatableModules;
-  /// highlight imports in cyclic dep relation
-  bool highlightCyclicEdges;
-  /// highlight modules in cyclic dep relation
-  bool highlightCyclicVertices;
-  /// group modules by package names in dep graph
-  bool groupByPackageNames;
-  /// group modules hierarchically or by full package name
-  bool groupByFullPackageName;
-}
-
-struct ListingOptions {
-  /// use literate programming symbols [LaTeX]
-  bool literateStyle;
-  /// enable source code listings
-  bool enableListings;
-}
-
-struct TemplateOptions {
-  /// project title
-  char[] title;
-  /// project version
-  char[] versionString;
-  /// copyright notice
-  char[] copyright;
-  /// paper size [LaTeX]
-  char[] paperSize;
-  /// use short file names [HTML]
-  bool shortFileNames;
-  /// page template style to use, customizable via docgen/templates
-  char[] templateStyle;
-}
-
-struct ParserOptions {
-  /// paths to search for imports 
-  char[][] importPaths;
-  /// paths to "root files"
-  char[][] rootPaths;
-  /// regexps for excluding modules
-  char[][] strRegexps;
-  /// comment format [comment parser]
-  CommentFormat commentFormat;
-  /// maximum depth of dependencies
-  uint depth;
-}
-
-struct DocGeneratorOptions {
-  /// location for the generated output
-  char[] outputDir;
-
-  /// list of document formats to be generated
-  DocFormat[] outputFormats;
- 
-  GraphOptions graph;
-  ListingOptions listing;
-  TemplateOptions templates;
-  ParserOptions parser;
-}
-
--- a/src/docgen/misc/parser.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,210 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.misc.parser;
-
-import dil.parser.Parser;
-import dil.parser.ImportParser;
-import dil.File;
-import dil.Settings;
-public import dil.semantic.Module;
-import tango.text.Regex : RegExp = Regex;
-import tango.io.FilePath;
-import tango.io.FileSystem;
-import tango.core.Array : remove;
-import tango.text.Util;
-import docgen.misc.meta;
-debug import tango.io.Stdout;
-
-alias void delegate (char[] fqn, char[] path, Module module_) modDg;
-alias void delegate (Module imported, Module importer, bool isPublic, bool isStatic) importDg;
-
-class Parser {
-  protected:
-
-//  ParserOptions m_options;
-
-    
-  static char[] findModuleFilePath(char[] moduleFQNPath, char[][] importPaths) {
-    auto filePath = new FilePath();
-    foreach (importPath; importPaths) {
-      filePath.set(importPath);
-      filePath.append(moduleFQNPath);
-
-      foreach (moduleSuffix; [".d", ".di"/*interface file*/])
-      {
-        filePath.suffix(moduleSuffix);
-        debug Stdout("Trying ")(filePath.toString()).newline;
-        if (filePath.exists())
-          return filePath.toString();
-      }
-    }
-
-    debug Stdout("  * ")(moduleFQNPath)(" does not exist in imports\n")();
-    return null;
-  }
-
-  public:
-
-  /**
-   * Imports the transitive closure of imports starting from "filePath",
-   * limited by recursionDepth.
-   *
-   * The search can be filtered by providing a list of regexps that match the
-   * FQNs of modules to be ignored.
-   *
-   * Params:
-   *     filePath = Path of the file to parse
-   *     importPaths = Directories to look for imports
-   *     strRegexps = Filter regexps
-   *     IncludeUnlocatableModules = Call the delegate also for unlocatable files
-   *     recursionDepth = How many levels of imports to follow (-1 = no limit)
-   *     mdg = Delegate that gets called for every module found
-   *     idg = Delegate that gets called for every import found
-   *     modules = List of parsed modules
-   */
-  static void loadModules(char[] filePath, char[][] importPaths, char[][] strRegexps,
-                          bool IncludeUnlocatableModules, int recursionDepth,
-                          modDg mdg, importDg idg, out Module[] modules) {
-
-    loadModules([filePath], importPaths, strRegexps, IncludeUnlocatableModules,
-      recursionDepth, mdg, idg, modules);
-  }
-
-  /**
-   * Imports the transitive closure of imports starting from "filePath",
-   * limited by recursionDepth.
-   *
-   * The search can be filtered by providing a list of regexps that match the
-   * FQNs of modules to be ignored.
-   *
-   * Params:
-   *     filePaths = Paths of the files to parse
-   *     importPaths = Directories to look for imports
-   *     strRegexps = Filter regexps
-   *     IncludeUnlocatableModules = Call the delegate also for unlocatable files
-   *     recursionDepth = How many levels of imports to follow (-1 = no limit)
-   *     mdg = Delegate that gets called for every module found
-   *     idg = Delegate that gets called for every import found
-   *     modules = List of parsed modules
-   */
-  static void loadModules(char[][] filePaths, char[][] importPaths, char[][] strRegexps,
-                          bool IncludeUnlocatableModules, int recursionDepth,
-                          modDg mdg, importDg idg, out Module[] modules) {
-
-    // Initialize regular expressions.
-    RegExp[] regexps;
-    foreach (strRegexp; strRegexps)
-      regexps ~= new RegExp(strRegexp);
-
-    importPaths ~= ".";
-
-    // Add directory of file and global directories to import paths.
-    foreach(filePath; filePaths) {
-      auto fileDir = (new FilePath(filePath)).folder();
-      if (fileDir.length)
-        importPaths ~= fileDir;
-    }
-
-//    importPaths ~= GlobalSettings.importPaths;
-
-    debug foreach(path; importPaths) {
-      Stdout("Import path: ")(path).newline;
-    }
-
-    Module[char[]] loadedModules;
-
-    Module loadModule(char[] moduleFQNPath, int depth) {
-      if (depth == 0) return null;
-      
-      debug Stdout("Loading ")(moduleFQNPath).newline;
-
-      // Return already loaded module.
-      auto mod_ = moduleFQNPath in loadedModules;
-      if (mod_ !is null) {
-        debug Stdout("  Already loaded.")(moduleFQNPath).newline;
-        return *mod_;
-      }
-
-      auto FQN = replace(moduleFQNPath.dup, dirSep, '.');
-      
-      // Ignore module names matching regular expressions.
-      foreach (rx; regexps)
-        if (rx.test(FQN)) return null;
-
-      auto moduleFilePath = findModuleFilePath(moduleFQNPath, importPaths);
-
-      debug Stdout("  FQN ")(FQN).newline;
-      debug Stdout("  Module path ")(moduleFilePath).newline;
-
-      Module mod = null;
-
-      if (moduleFilePath is null) {
-        if (IncludeUnlocatableModules)
-          mdg(FQN, moduleFQNPath, null);
-      } else {
-        mod = new Module(moduleFilePath);
-        
-        // Use lightweight ImportParser.
-//        mod.parser = new ImportParser(loadFile(moduleFilePath), moduleFilePath);
-        mod.parse();
-
-        debug Stdout("  Parsed FQN ")(mod.getFQN()).newline;
-
-        // autoinclude dirs (similar to Java)
-        // running docgen in foo/bar/abc/ also finds foo/xyz/zzz.d if module names are right
-        {
-          // foo.bar.mod -> [ "foo", "bar" ]
-          auto modPackage = split(mod.getFQN, ".")[0..$-1];
-          auto modDir = split(FileSystem.toAbsolute(new FilePath(moduleFilePath)).standard().folder(), "/");
-          auto modLocation = modDir[0..modDir.remove(".")];
-
-          bool matches = false;
-          int i;
-
-          for(i = 1; i <= min(modPackage.length, modLocation.length); i++) {
-            matches = true;
-            debug Stdout("  Decl: ")(modPackage[$-i]).newline;
-            debug Stdout("  Path: ")(modLocation[$-i]).newline;
-            if (modPackage[$-i] != modLocation[$-i]) {
-              matches = false;
-              break;
-            }
-          }
-          if (matches) {
-            auto loc = modLocation[0..$-i+1].join("/");
-            debug Stdout("  Autoadding import: ")(loc).newline;
-            importPaths ~= loc;
-          }
-        }
-
-        mdg(FQN, moduleFQNPath, mod);
-        loadedModules[moduleFQNPath] = mod;
-
-        foreach (importDecl; mod.imports)
-          foreach(moduleFQN_; importDecl.getModuleFQNs(dirSep)) {
-            auto loaded_mod = loadModule(moduleFQN_, depth == -1 ? depth : depth-1);
-
-            if (loaded_mod !is null) {
-              idg(loaded_mod, mod, importDecl.isPublic(), importDecl.isStatic());
-            } else if (IncludeUnlocatableModules) {
-              auto tmp = new Module(null);
-              tmp.setFQN(replace(moduleFQN_.dup, dirSep, '.'));
-              idg(tmp, mod, importDecl.isPublic(), importDecl.isStatic());
-            }
-          }
-      }
-
-      return mod;
-    } // loadModule
-
-    foreach(filePath; filePaths)
-      loadModule(filePath, recursionDepth);
-
-    // Finished loading modules.
-
-    // Ordered list of loaded modules.
-    modules = loadedModules.values;
-  }
-}
--- a/src/docgen/misc/textutils.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/**
- * Author: Aziz Köksal & Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.misc.textutils;
-
-// copied from Generate.d
-char[] xml_escape(char[] text)
-{
-  char[] result;
-  result.length = text.length;
-  result.length = 0;
-  foreach(c; text)
-    switch(c)
-    {
-      case '<': result ~= "&lt;";  break;
-      case '>': result ~= "&gt;";  break;
-      case '&': result ~= "&amp;"; break;
-      default:  result ~= c;
-    }
-  return result;
-}
-
-char[] plainTextHeading(char[] s) {
-  char[] line;
-  line.length = 80;
-  line[] = '=';
-
-  return s ~ \n ~ line[0..s.length].dup ~ \n ~ \n;
-}
-
-char[] plainTextHorizLine(int l = 80) {
-  char[] line;
-  line.length = 80;
-  line[] = '-';
-  
-  return line[0..l].dup ~ \n;
-}
--- a/src/docgen/moduledoc/htmlwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.moduledoc.htmlwriter;
-
-import docgen.moduledoc.writer;
-import docgen.misc.textutils;
-
-
-/**
- * TODO
- */
-class HTMLWriter : AbstractWriter!(ModuleDocWriterFactory), ModuleDocWriter {
-  PageWriter writer;
-  
-  this(ModuleDocWriterFactory factory, PageWriter writer) {
-    super(factory);
-    this.writer = writer;
-  }
-  
-  void generateModuleDoc(Module mod, OutputStream output) {
-    
-					/*
-    auto inputStream = cast(FileInput)input;
-    auto content = new char[inputStream.length];
-    auto bytesRead = inputStream.read (content);
-    
-    assert(bytesRead == inputStream.length, "Error reading source file");
-    assert(output == null);
-    
-    writer.addListing(
-      moduleName,
-      xml_escape(content)
-    );*/
-  }
-}
-
--- a/src/docgen/moduledoc/writer.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.moduledoc.writer;
-
-import docgen.misc.misc;
-public import docgen.page.writer;
-import tango.io.model.IConduit : OutputStream, InputStream;
-
-interface ModuleDocWriter {
-  void generateModuleDoc(Module mod, OutputStream output);
-}
-
-interface ModuleDocWriterFactory : WriterFactory {
-  ModuleDocWriter createModuleDocWriter(PageWriter writer, DocFormat outputFormat);
-}
--- a/src/docgen/moduledoc/writers.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.moduledoc.writers;
-
-public import docgen.moduledoc.writer;
-//import docgen.moduledoc.latexwriter;
-import docgen.moduledoc.htmlwriter;
-//import docgen.moduledoc.xmlwriter;
-
-class DefaultModuleDocWriterFactory : AbstractWriterFactory, ModuleDocWriterFactory {
-  this(DocGenerator generator) {
-    super(generator);
-  }
-
-  ModuleDocWriter createModuleDocWriter(PageWriter writer, DocFormat outputFormat) {
-    switch (outputFormat) {/*
-      case DocFormat.LaTeX:
-        return new LaTeXWriter(this, writer);
-      case DocFormat.XML:
-        return new XMLWriter(this, writer);*/
-      case DocFormat.HTML:
-        return new HTMLWriter(this, writer);
-      default:
-        throw new Exception("Moduledoc writer type does not exist!");
-    }
-  }
-}
-
--- a/src/docgen/page/htmlwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.htmlwriter;
-
-import docgen.page.writer;
-import docgen.misc.textutils;
-import tango.io.FileConduit : FileConduit;
-import tango.text.convert.Sprint;
-import tango.io.FilePath;
-
-/**
- * Writes a HTML document skeleton.
- */
-class HTMLWriter : AbstractPageWriter!("html") {
-  private:
-
-  char[] styleSheetFile;
-
-  public:
-  
-  this(PageWriterFactory factory, OutputStream[] outputs) {
-    super(factory);
-  }
-
-  override void generateClassSection() {
-    print.format(getTemplate("classes"), factory.options.templates.title);
-  }
-
-  override void generateModuleSection(Module[] modules) {
-    print.format(getTemplate("modules"), factory.options.templates.title);
-  }
-
-  override void generateListingSection(Module[] modules) {
-    print.format(getTemplate("listings"), factory.options.templates.title);
-  }
-
-  override void generateDepGraphSection() {
-    print.format(getTemplate("dependencies"), factory.options.templates.title);
-  }
-
-  void generateFirstPage() {
-    print.format(
-      getTemplate("firstpage"),
-      factory.options.templates.title,
-      factory.options.templates.versionString,
-      factory.options.templates.copyright
-    );
-
-    footer();
-  }
-  
-  /**
-   * A hack for figuring out the stylesheet file name.
-   */
-  override void generateCustomPage(char[] name, char[][] args ...) {
-    super.generateCustomPage(name, args);
-
-    if (name == "stylesheet") {
-      styleSheetFile = (new FilePath(
-        (cast(Object)outputs[0].conduit).toString())).file();
-    }
-  }
-
-  /**
-   * Overrides the default template fetcher in order to
-   * provide a consistent layout for all pages.
-   */
-  override char[] getTemplate(char[] name) {
-    auto content = super.getTemplate(name);
-
-    foreach(pageName; [
-      "firstpage"[], "toc"[], "classes"[], "modules"[], "listing"[],
-      "listings"[], "dependencies"[], "lastpage"[] ]) {
-      if (name == pageName) {
-        auto sprint = new Sprint!(char)(5120);
-        char[] title = factory.options.templates.title ~ " ";
-        switch(name) {
-          case "firstpage": title ~= "Documentation"; break;
-          case "toc": title ~= "TOC"; break;
-          case "classes": title ~= "Class index"; break;
-          case "modules": title ~= "Module index"; break;
-          case "listing": title ~= "File contents"; break;
-          case "listings": title ~= "File index"; break;
-          case "dependencies": title ~="Dependencies"; break;
-        }
-        return
-          sprint.format(super.getTemplate("pagetemplate"), styleSheetFile, title) ~
-          content;
-      }
-    }
-
-    return content;
-  }
-
-  void addList(char[][] contents, bool ordered) {
-    foreach(item; contents) {
-      switch(item) {
-        case "(": print(ordered ? "<ol>" : "<ul>"); continue;
-        case ")": print(ordered ? "</ol>" : "</ul>"); continue;
-        default: print("<li>")(item)("</li>");
-      }
-    }
-  }
-
-  override void addListing(char[] moduleName, char[] contents, bool inline) {
-    print.format(getTemplate("listing"), moduleName, contents);
-
-    footer();
-  }
-
-  protected:
-
-  /**
-   * Writes the page footer.
-   */
-  void footer() {
-    print.format(getTemplate("pagetemplate2"), docgen_version);
-  }
-}
--- a/src/docgen/page/latexwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.latexwriter;
-
-import docgen.page.writer;
-import tango.io.FileConduit : FileConduit;
-
-/**
- * Writes a LaTeX document skeleton.
- */
-class LaTeXWriter : AbstractPageWriter!("latex", 1) {
-  this(PageWriterFactory factory, OutputStream[] outputs) {
-    super(factory, outputs);
-  }
-
-  void generateFirstPage() {
-    print.format(
-      getTemplate("firstpage"),
-      factory.options.templates.paperSize,
-      factory.options.templates.title,
-      factory.options.templates.versionString,
-      docgen_version,
-      timeNow(),
-      factory.options.listing.literateStyle ? "" : "%"
-    );
-  }
-
-  void addList(char[][] contents, bool ordered) {
-    foreach(item; contents) {
-      switch(item) {
-        case "(": print(ordered ? "\\begin{enumerate}" : "\\begin{itemize}"); continue;
-        case ")": print(ordered ? "\\end{enumerate}" : "\\end{itemize}"); continue;
-        default: print("\\item")(item)(\n);
-      }
-    }
-  }
-}
--- a/src/docgen/page/plaintextwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.plaintextwriter;
-
-import docgen.page.writer;
-import docgen.misc.textutils;
-import tango.io.FileConduit : FileConduit;
-
-/**
- * Writes a plain text document skeleton.
- */
-class PlainTextWriter : AbstractPageWriter!("plaintext") {
-  this(PageWriterFactory factory, OutputStream[] outputs) {
-    super(factory);
-  }
-
-  override void generateTOC(Module[] modules) {
-    print.format(getTemplate("toc"));
-  }
-
-  override void generateModuleSection(Module[] modules) {
-    print.format(getTemplate("modules"));
-  }
-
-  override void generateListingSection(Module[] modules) {
-    print.format(getTemplate("listings"));
-  }
-
-  void generateDepGraphSection() {
-    print.format(getTemplate("dependencies"));
-  }
-
-  void generateFirstPage() {
-    print.format(getTemplate("firstpage"),
-      plainTextHeading(factory.options.templates.title ~ " Reference Manual"),
-      factory.options.templates.versionString,
-      docgen_version,
-      timeNow()
-    );
-  }
-
-  void addList(char[][] contents, bool ordered) {
-    uint[] counters;
-    foreach(item; contents) {
-      switch(item) {
-        case "(": counters ~= 1; continue;
-        case ")": counters.length = counters.length - 1; continue;
-        default:
-        if (counters.length>0)
-          for (int i=0; i <= counters.length; i++)
-            print(" ");
-        if (ordered)
-          print(++counters[$-1])(". ")(item)(\n);
-        else
-          print("* ")(item)(\n);
-      }
-    }
-  }
-}
--- a/src/docgen/page/writer.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.writer;
-
-public import docgen.misc.misc;
-public import docgen.misc.options;
-public import docgen.misc.parser;
-import tango.io.model.IConduit : OutputStream;
-import tango.time.chrono.Gregorian;
-import tango.text.locale.Core;
-import tango.time.WallClock;
-import tango.text.convert.Sprint;
-import tango.io.stream.FileStream;
-import tango.io.Stdout;
-import tango.io.Print: Print;
-import tango.text.convert.Layout : Layout;
-import tango.io.FilePath;
-import tango.io.FileScan;
-
-const templateDir = "docgen/templates/";
-
-const formatDirs = [ "latex"[], "xml"[], "html"[], "plaintext"[] ];
-
-/**
- * Writes the logical subcomponents of a document,
- * e.g. sections, embedded graphics, lists
- */
-interface PageWriter {
-  /**
-   * Updates the outputstreams.
-   */
-  void setOutput(OutputStream[] outputs);
-
-  /**
-   * Generates the first page(s).
-   */
-  void generateFirstPage();
-
-  /**
-   * Generates table of contents.
-   */
-  void generateTOC(Module[] modules);
-
-  /**
-   * Generates class documentation section.
-   */
-  void generateClassSection();
-
-  /**
-   * Generates module documentation section.
-   */
-  void generateModuleSection(Module[] modules);
-
-  /**
-   * Generates source code listing section.
-   */
-  void generateListingSection(Module[] modules);
-
-  /**
-   * Generates dependency graph section.
-   */
-  void generateDepGraphSection();
-
-  /**
-   * Generates an index section.
-   */
-  void generateIndexSection();
-
-  /**
-   * Generates the last page(s).
-   */
-  void generateLastPage();
-
-  /**
-   * Generates a page using a custom template file.
-   *
-   * Some examples: style sheet, DTD files, makefiles.
-   */
-  void generateCustomPage(char[] name, char[][] args ...);
-  
-  // --- page components
-  //
-  /*
-   * Adds an external graphics file. 
-   */
-  void addGraphics(char[] imageFile);
-  
-  /**
-   * Adds a source code listing.
-   */
-  void addListing(char[] moduleName, char[] contents, bool inline = true);
-
-  /**
-   * Adds a list of items.
-   */
-  void addList(char[][] contents, bool ordered);
-}
-
-interface PageWriterFactory : WriterFactory {
-  PageWriter createPageWriter(OutputStream[] outputs, DocFormat outputFormat);
-}
-
-template AbstractPageWriter(char[] format, int n = 0) {
-  abstract class AbstractPageWriter : AbstractWriter!(PageWriterFactory, n), PageWriter {
-    protected:
-
-    char[][char[]] m_templates;
-    Print!(char) print;
-
-    public:
-         
-    this(PageWriterFactory factory, OutputStream[] outputs) {
-      this(factory);
-      setOutput(outputs);
-    }
-
-    void setOutput(OutputStream[] outputs) {
-      this.outputs = outputs;
-      static if (n > 0)
-        assert(outputs.length == n, "Incorrect number of outputs");
-
-      print = new Print!(char)(new Layout!(char), outputs[0]);
-    }
-
-    void generateTOC(Module[] modules) {
-      print.format(getTemplate("toc"));
-    }
-
-    void generateClassSection() {
-      print.format(getTemplate("classes"));
-    }
-
-    void generateModuleSection(Module[] modules) {
-      print.format(getTemplate("modules"));
-    }
-
-    void generateListingSection(Module[] modules) {
-      print.format(getTemplate("listings"));
-    }
-
-    void generateDepGraphSection() {
-      print.format(getTemplate("dependencies"));
-    }
-
-    void generateIndexSection() {
-      print.format(getTemplate("index"));
-    }
-
-    void generateLastPage() {
-      print.format(getTemplate("lastpage"));
-    }
-
-    void generateCustomPage(char[] name, char[][] args ...) {
-      switch(args.length) {
-        case 0: print.format(getTemplate(name)); break;
-        case 1: print.format(getTemplate(name), args[0]); break;
-        case 2: print.format(getTemplate(name), args[0], args[1]); break;
-        case 3: print.format(getTemplate(name), args[0], args[1], args[2]); break;
-        default: throw new Exception("Too many arguments");
-      }
-    }
-
-    //---
-
-    void addGraphics(char[] imageFile) {
-      print.format(getTemplate("graphics"), imageFile);
-    }
-    
-    void addListing(char[] moduleName, char[] contents, bool inline) {
-      print.format(getTemplate("listing"), moduleName, contents);
-    }
-
-    protected:
-
-    this(PageWriterFactory factory) {
-      super(factory);
-    
-      auto scan = new FileScan();
-      scan(templateDir~factory.options.templates.templateStyle~"/"~format~"/", ".tpl");
-
-      debug Stdout(scan.files.length)(" template files loaded.\n");
-
-      foreach(tpl; scan.files) {
-        m_templates[tpl.name] = loadTemplate(tpl.toString());
-      }
-    }
-
-    char[] getTemplate(char[] name) {
-      auto tpl = name in m_templates;
-      assert(tpl, "Error: template ["~format~"/"~name~"] not found!");
-      return *tpl;
-    }
-
-    char[] loadTemplate(char[] fn) {
-      scope(failure) {
-        Stderr("Warning: error opening template "~fn~".");
-        return null;
-      }
-
-      auto file = new FileInput(fn);
-      auto content = new char[file.length];
-      auto bytesRead = file.read(content);
-      
-      assert(bytesRead == file.length, "Error reading template");
-      
-      file.close();
-      
-      return content;
-    }
-    
-    char[] timeNow() {
-      auto n = WallClock.now;
-      auto c = Gregorian.generic;
-      auto d = c.toDate(n);
-      auto sprint = new Sprint!(char);
-
-      auto culture = new Culture("en-GB");
-      auto dateTimeFormat = culture.dateTimeFormat();
-
-      return sprint.format("{} {} {} {}",
-        dateTimeFormat.getAbbreviatedDayName(c.getDayOfWeek(n)),
-        1,//d.day(),
-        //dateTimeFormat.getAbbreviatedMonthName(d.month()),
-        2,//d.month(),
-        3//d.year()) //FIXME: something is broken here (Error: function expected before (), not *(&d + 8u) of type uint)
-        ).dup;
-    }
-  }
-}
--- a/src/docgen/page/writers.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.writers;
-
-public import docgen.page.writer;
-import docgen.page.htmlwriter;
-import docgen.page.xmlwriter;
-import docgen.page.plaintextwriter;
-import docgen.page.latexwriter;
-
-class DefaultPageWriterFactory : AbstractWriterFactory, PageWriterFactory {
-  this(DocGenerator generator) {
-    super(generator);
-  }
-
-  PageWriter createPageWriter(OutputStream[] outputs, DocFormat outputFormat) {
-    switch (outputFormat) {
-      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);
-      default:
-        throw new Exception("Document writer type does not exist!");
-    }
-  }
-}
--- a/src/docgen/page/xmlwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.page.xmlwriter;
-
-import docgen.page.writer;
-import docgen.misc.textutils;
-import tango.io.FileConduit : FileConduit;
-
-//TODO: this is mostly broken now
-
-/**
- * TODO
- */
-class XMLWriter : AbstractPageWriter!("xml", 1) {
-  this(PageWriterFactory factory, OutputStream[] outputs) {
-    super(factory, outputs);
-  }
-
-  void generateTOC(Module[] modules) {
-    // TODO
-    print.format(getTemplate("toc"));
-  }
-
-  void generateModuleSection() {
-    // TODO
-    print.format(getTemplate("modules"));
-  }
-
-  void generateListingSection() {
-    // TODO
-    print.format(getTemplate("listings"));
-  }
-
-  void generateDepGraphSection() {
-    // TODO
-    print.format(getTemplate("dependencies"));
-  }
-
-  void generateIndexSection() { }
-
-  void generateLastPage() { }
-
-  void generateFirstPage() { }
-
-  void addList(char[][] contents, bool ordered) {
-    foreach(item; contents) {
-      switch(item) {
-        case "(": print(ordered ? "<ol>" : "<ul>"); continue;
-        case ")": print(ordered ? "</ol>" : "</ul>"); continue;
-        default: print("<li>")(xml_escape(item))("</li>");
-      }
-    }
-  }
-}
--- a/src/docgen/sourcelisting/htmlwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.sourcelisting.htmlwriter;
-
-import docgen.sourcelisting.writer;
-import docgen.misc.textutils;
-//import dil.Parser;
-import tango.io.stream.FileStream;
-
-
-/**
- * TODO
- */
-class HTMLWriter : AbstractWriter!(ListingWriterFactory), ListingWriter {
-  PageWriter writer;
-  
-  this(ListingWriterFactory factory, PageWriter writer) {
-    super(factory);
-    this.writer = writer;
-  }
-  
-  //void generateListing(Parser parser) { /* TODO */ }
-  
-  void generateListing(InputStream input, OutputStream output, char[] moduleName) {
-    auto inputStream = cast(FileInput)input;
-    auto content = new char[inputStream.length];
-    auto bytesRead = inputStream.read (content);
-    
-    assert(bytesRead == inputStream.length, "Error reading source file");
-    assert(output == null);
-    
-    writer.addListing(
-      moduleName,
-      xml_escape(content)
-    );
-  }
-}
--- a/src/docgen/sourcelisting/latexwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.sourcelisting.latexwriter;
-
-import docgen.sourcelisting.writer;
-//import dil.Parser;
-import tango.io.FilePath;
-
-/**
- * Adds a code listing section for the given file. 
- */
-class LaTeXWriter : AbstractWriter!(ListingWriterFactory), ListingWriter {
-  PageWriter writer;
-  
-  this(ListingWriterFactory factory, PageWriter writer) {
-    super(factory);
-    this.writer = writer;
-  }
-
-  //void generateListing(Parser parser) { /* TODO */ }
-  
-  void generateListing(InputStream input, OutputStream output, char[] moduleName) {
-    output.copy(input);
-    
-    writer.addListing(
-      moduleName,
-      FilePath((cast(Object)output.conduit).toString()).file
-    );
-  }
-}
--- a/src/docgen/sourcelisting/writer.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.sourcelisting.writer;
-
-import docgen.misc.misc;
-public import docgen.page.writer;
-//import dil.Parser;
-import tango.io.model.IConduit : OutputStream, InputStream;
-
-interface ListingWriter {
-  //void generateListing(Parser parser);
-  void generateListing(InputStream input, OutputStream output, char[] moduleName);
-}
-
-interface ListingWriterFactory : WriterFactory {
-  ListingWriter createListingWriter(PageWriter writer, DocFormat outputFormat);
-}
--- a/src/docgen/sourcelisting/writers.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.sourcelisting.writers;
-
-public import docgen.sourcelisting.writer;
-import docgen.sourcelisting.latexwriter;
-import docgen.sourcelisting.htmlwriter;
-import docgen.sourcelisting.xmlwriter;
-
-class DefaultListingWriterFactory : AbstractWriterFactory, ListingWriterFactory {
-  this(DocGenerator generator) {
-    super(generator);
-  }
-
-  ListingWriter createListingWriter(PageWriter writer, DocFormat outputFormat) {
-    switch (outputFormat) {
-      case DocFormat.LaTeX:
-        return new LaTeXWriter(this, writer);
-      case DocFormat.XML:
-        return new XMLWriter(this, writer);
-      case DocFormat.HTML:
-        return new HTMLWriter(this, writer);
-      default:
-        throw new Exception("Listing writer type does not exist!");
-    }
-  }
-}
--- a/src/docgen/sourcelisting/xmlwriter.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.sourcelisting.xmlwriter;
-
-import docgen.sourcelisting.writer;
-//import dil.Parser;
-
-/**
- * TODO
- */
-class XMLWriter : AbstractWriter!(ListingWriterFactory), ListingWriter {
-  PageWriter writer;
-  
-  this(ListingWriterFactory factory, PageWriter writer) {
-    super(factory);
-    this.writer = writer;
-  }
-
-  //void generateListing(Parser parser) { /* TODO */ }
-  void generateListing(InputStream input, OutputStream output, char[] moduleName) { /* TODO */ }
-}
--- a/src/docgen/templates/README	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-The docgen uses the following template file names by default
-
-firstpage
-toc
-classes
-modules
-listings
-dependencies
-index
-lastpage
-langdef
-makefile
-graphics
-listing
--- a/src/docgen/templates/default/html/classes.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<h1>{0} Class List</h1>
--- a/src/docgen/templates/default/html/dependencies.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<h1>{} Dependencies</h1>
--- a/src/docgen/templates/default/html/firstpage.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<h1>{0} Documentation</h1>
-<h2 id="version">{1}</h2>
-<h2>© {2}</h2>
--- a/src/docgen/templates/default/html/graphics.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<p><img src="{}" /></p>
--- a/src/docgen/templates/default/html/listing.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-<h1>{0} Contents</h1>
-<pre style="dcode">{1}</pre>
--- a/src/docgen/templates/default/html/listings.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<h1>{0} File List</h1>
--- a/src/docgen/templates/default/html/makefile.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-for i in *.dot; do
-  F=`echo $i|sed 's/dot/{0}/'`
-  dot $i -T{0} -o$F
-done
-
--- a/src/docgen/templates/default/html/modules.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-<h1>{0} Module List</h1>
--- a/src/docgen/templates/default/html/pagetemplate.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>{1}</title>
-  <meta name="author" content="TODO" />
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <link rel="stylesheet" href="{0}" media="all" title="default" />
-</head>
-<body>
-<div class="tabs">
-  <ul>
-    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
-    <li><a href="classes.html"><span>Classes</span></a></li>
-    <li><a href="modules.html"><span>Modules</span></a></li>
-    <li><a href="files.html"><span>Files</span></a></li>
-    <li><a href="depgraph.html"><span>Dependencies</span></a></li>
-  </ul>
-</div>
--- a/src/docgen/templates/default/html/pagetemplate2.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-<hr />
-<p id="generator">Generated by {0}</p>
-</body>
-</html>
Binary file src/docgen/templates/default/html/static/tab_b.gif has changed
Binary file src/docgen/templates/default/html/static/tab_l.gif has changed
Binary file src/docgen/templates/default/html/static/tab_r.gif has changed
--- a/src/docgen/templates/default/html/static/tabs.css	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
-
-DIV.tabs
-{
-   float            : left;
-   width            : 100%;
-   background       : url("tab_b.gif") repeat-x bottom;
-   margin-bottom    : 4px;
-}
-
-DIV.tabs UL
-{
-   margin           : 0px;
-   padding-left     : 10px;
-   list-style       : none;
-}
-
-DIV.tabs LI, DIV.tabs FORM
-{
-   display          : inline;
-   margin           : 0px;
-   padding          : 0px;
-}
-
-DIV.tabs FORM
-{
-   float            : right;
-}
-
-DIV.tabs A
-{
-   float            : left;
-   background       : url("tab_r.gif") no-repeat right top;
-   border-bottom    : 1px solid #84B0C7;
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-DIV.tabs A:hover
-{
-   background-position: 100% -150px;
-}
-
-DIV.tabs A:link, DIV.tabs A:visited,
-DIV.tabs A:active, DIV.tabs A:hover
-{
-       color: #1A419D;
-}
-
-DIV.tabs SPAN
-{
-   float            : left;
-   display          : block;
-   background       : url("tab_l.gif") no-repeat left top;
-   padding          : 5px 9px;
-   white-space      : nowrap;
-}
-
-DIV.tabs INPUT
-{
-   float            : right;
-   display          : inline;
-   font-size        : 1em;
-}
-
-DIV.tabs TD
-{
-   font-size        : x-small;
-   font-weight      : bold;
-   text-decoration  : none;
-}
-
-
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-DIV.tabs SPAN {float : none;}
-/* End IE5-Mac hack */
-
-DIV.tabs A:hover SPAN
-{
-   background-position: 0% -150px;
-}
-
-DIV.tabs LI.current A
-{
-   background-position: 100% -150px;
-   border-width     : 0px;
-}
-
-DIV.tabs LI.current SPAN
-{
-   background-position: 0% -150px;
-   padding-bottom   : 6px;
-}
-
-DIV.nav
-{
-   background       : none;
-   border           : none;
-   border-bottom    : 1px solid #84B0C7;
-}
--- a/src/docgen/templates/default/html/stylesheet.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-@import "tabs.css";
-
-body {{
-background: #fff;
-}
-
-h1, h2 {{
-text-align: center;
-}
-
-h1 {{
-font-size: 1.5em;
-}
-
-h2#version {{
-font-size: 0.8em;
-}
-
-h2 {{
-font-size: 1.1em;
-}
-
-hr {{
-height: 0;
-border: 0;
-border-bottom: 1px solid black;
-}
-
-#generator {{
-text-align: right;
-font-size: small;
-font-style: italic;
-}
--- a/src/docgen/templates/default/html/toc.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-  <title>{0} Reference Manual</title>
-  <meta name="author" content="{1}" />
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <link rel="stylesheet" href="style.css" media="all" title="default" />
-  <link rel="stylesheet" href="print.css" media="print" />
-</head>
-<body>
-<h2>Table of Contents</h2>
-<hr />
-{0}
-</body>
-</html>
--- a/src/docgen/templates/default/latex/classes.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-\chapter{{Class documentation}
-\input{{classes}
--- a/src/docgen/templates/default/latex/dependencies.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-\chapter{{Dependency diagram}
-\input{{dependencies}
--- a/src/docgen/templates/default/latex/firstpage.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-\documentclass[{0}]{{book}
-\usepackage{{a4wide}
-\usepackage{{makeidx}
-\usepackage{{fancyhdr}
-\usepackage{{graphicx}
-\usepackage{{hyperref}
-\usepackage{{multicol}
-\usepackage{{float}
-\usepackage{{textcomp}
-\usepackage{{alltt}
-\usepackage[utf8]{{inputenc}
-\usepackage{{listings}
-\lstnewenvironment{{dcode}
-{{ \lstset{{language=d} }
-{{}
-\lstset{{
-  {5} literate=
-  {5}          {{<=}{{{{$\leq$}}1
-  {5}          {{>=}{{{{$\geq$}}1
-  {5}          {{!=}{{{{$\neq$}}1
-  {5}          {{...}{{{{$\dots$}}1
-  {5}          {{~}{{{{$\sim$}}1,
-  stringstyle=\ttfamily,
-  inputencoding=utf8,
-  extendedchars=false,
-  columns=fixed,
-  basicstyle=\small
-}
-\hypersetup{{backref,colorlinks=true}
-\makeindex
-\setcounter{{tocdepth}{{1}
-\newcommand{{\clearemptydoublepage}{{\newpage{{\pagestyle{{empty}\cleardoublepage}}
-\def\thechapter{{\Roman{{chapter}}
-\def\thesection{{\arabic{{chapter}.\arabic{{section}}
-% \renewcommand{{\footrulewidth}{{0.4pt}
-
-\begin{{document}
-
-\begin{{titlepage}
-\vspace*{{7cm}
-\begin{{center}
-{{\Large {1} Reference Manual\\[1ex]\large {2} }\\
-\vspace*{{1cm}
-{{\large Generated by {3} }\\
-\vspace*{{0.5cm}
-{{\small {4} }\\
-\end{{center}
-\end{{titlepage}
-
-\clearemptydoublepage
--- a/src/docgen/templates/default/latex/graphics.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-\includegraphics[width=1\textwidth,height=1\textheight,keepaspectratio]{{{0}}
--- a/src/docgen/templates/default/latex/index.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-\printindex
--- a/src/docgen/templates/default/latex/lastpage.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-\end{{document}
--- a/src/docgen/templates/default/latex/listing.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-\section{{Module {0}}
-\lstinputlisting[language=d]{{{1}}
-\clearpage
\ No newline at end of file
--- a/src/docgen/templates/default/latex/listings.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-\chapter{{File listings}
-\input{{files}
--- a/src/docgen/templates/default/latex/makefile.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-#!/bin/sh
-
-for i in *.dot; do
-  F=`echo $i|sed 's/dot/{1}/'`
-  dot $i -T{1} -o$F
-done
-
-pdflatex {0}
-makeindex document
-pdflatex {0}
--- a/src/docgen/templates/default/latex/modules.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-\chapter{{Module documentation}
-\input{{modules}
--- a/src/docgen/templates/default/latex/static/lstlang0.sty	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-%%
-%% 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]%
--- a/src/docgen/templates/default/latex/toc.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-\tableofcontents
-\thispagestyle{{empty}
-
-\clearemptydoublepage
-
-\setcounter{{page}{{1}
--- a/src/docgen/templates/default/plaintext/classes.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Class List
-----------
-
--- a/src/docgen/templates/default/plaintext/dependencies.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Module Dependencies
--------------------
-
--- a/src/docgen/templates/default/plaintext/firstpage.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-{0}
-
-Version {1}
-
-Generated by {2}
-
-{3}
--- a/src/docgen/templates/default/plaintext/graphics.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-See {}.
\ No newline at end of file
--- a/src/docgen/templates/default/plaintext/listing.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Module {0}
-See {1}.
-
--- a/src/docgen/templates/default/plaintext/listings.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-File listings
--------------
-
--- a/src/docgen/templates/default/plaintext/makefile.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-for i in *.dot; do
-  F=`echo $i|sed 's/dot/{0}/'`
-  dot $i -T{0} -o$F
-done
-
--- a/src/docgen/templates/default/plaintext/modules.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-Module List
------------
-
--- a/src/docgen/templates/default/plaintext/toc.tpl	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-Table of Contents
------------------
-
-1. Class documentation
-
-2. Module documentation
-
-3. File listings
-
-4. Dependency diagram
--- a/src/docgen/tests/common.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.tests.common;
-
-import docgen.misc.misc;
-import docgen.misc.options;
-import docgen.config.configurator;
-
-class TestDocGenerator : DocGenerator {
-  Configurator config;
-
-  this() {
-    config = new DefaultConfigurator();
-  }
-
-  public void generate() {
-
-  }
-  
-  public DocGeneratorOptions *options() {
-    return config.getConfiguration();
-  }
-}
--- a/src/docgen/tests/doctemplate.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.tests.doctemplate;
-
-import docgen.tests.common;
-import docgen.page.writers;
-import tango.io.FileConduit;
-
-// doc template
-//@unittest
-void doctemplate1() {
-  auto gen = new TestDocGenerator;
-  auto fname = "doctemplate.tex";
-  
-  auto gwf = new DefaultPageWriterFactory(gen);
-  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
-  auto writer = gwf.createPageWriter( [ file ], DocFormat.LaTeX );
-  
-  writer.generateFirstPage();
-  writer.generateTOC(null);
-  writer.generateModuleSection(null);
-  writer.generateListingSection(null);
-  writer.generateDepGraphSection();
-  writer.generateIndexSection();
-  writer.generateLastPage();
-  
-  file.close();
-}
--- a/src/docgen/tests/graphs.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.tests.graphs;
-
-import docgen.tests.common;
-import docgen.misc.parser;
-import docgen.graphutils.writers;
-import docgen.page.writers;
-import tango.io.FileConduit;
-import dil.semantic.Module;
-
-alias DepGraph.Edge Edge;
-alias DepGraph.Vertex Vertex;
-
-void saveDefaultGraph(DepGraph depGraph, char[] fname) {
-  auto gen = new TestDocGenerator;
-  gen.options.graph.highlightCyclicVertices = true;
-  gen.options.graph.imageFormat = ImageFormat.SVG;
-  //gen.options.graph.graphFormat = GraphFormat.ModuleNames;
-  //gen.options.graph.graphFormat = GraphFormat.ModulePaths;
-  gen.options.graph.depth = 5;
-  auto ddf = new DefaultPageWriterFactory(gen);
-  auto gwf = new DefaultGraphWriterFactory(gen);
-  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
-  auto file2 = new FileConduit("docgen/teststuff/" ~ fname ~ "-2", FileConduit.WriteCreate);
-
-  auto writer = gwf.createGraphWriter(
-    ddf.createPageWriter( [ file2 ], DocFormat.LaTeX),
-    GraphFormat.Dot
-  );
-  
-  writer.generateDepGraph(depGraph, file);
-  
-  file.close();
-  file2.close();
-}
-
-// no edges
-//@unittest
-void graph1() {
-  auto g = new DepGraph;
-  g.add(new Vertex("mod_a", "path.to.mod_a", 1));
-  g.add(new Vertex("mod_b", "path.to.mod_b", 2));
-  g.add(new Vertex("mod_c", "path.to.mod_c", 3));
-  
-  saveDefaultGraph(g, "graph1.dot");
-}
-
-
-// simple tree structure
-//@unittest
-void graph2() {
-  auto g = new DepGraph;
-  g.add(new Vertex("mod_a", "path.to.mod_a", 1));
-  g.add(new Vertex("mod_b", "path.to.mod_b", 2));
-  g.add(new Vertex("mod_c", "path.to.mod_c", 3));
-  g.add(new Vertex("mod_d", "path.to.mod_d", 4));
-
-  g.connect(1, 0);
-  g.connect(2, 0);
-  g.connect(3, 2);
-  
-  saveDefaultGraph(g, "graph2.dot");
-}
-
-// circular imports
-//@unittest
-void graph3() {
-  auto g = new DepGraph;
-  g.add(new Vertex("mod_a", "path.to.mod_a", 1));
-  g.add(new Vertex("mod_b", "path.to.mod_b", 2));
-  g.add(new Vertex("mod_c", "path.to.mod_c", 3));
-  g.add(new Vertex("mod_d", "path.to.mod_d", 4));
-
-  g.connect(1, 0);
-  g.connect(2, 1);
-  g.connect(0, 2);
-  
-  saveDefaultGraph(g, "graph3.dot");
-}
-
-// more complex graph
-//@unittest
-void graph4() {
-  auto g = new DepGraph;
-  g.add(new Vertex("mod_a", "path.to.mod_a", 1));
-  g.add(new Vertex("mod_b", "path.to.mod_b", 2));
-  g.add(new Vertex("mod_c", "path.to.mod_c", 3));
-  g.add(new Vertex("mod_d", "path.to.mod_d", 4));
-  g.add(new Vertex("mod_e", "path.to.mod_e", 5));
-  g.add(new Vertex("mod_f", "path.to.mod_f", 6));
-  g.add(new Vertex("mod_g", "path.to.mod_g", 7));
-
-  g.connect(1, 0);
-  g.connect(2, 1);
-  g.connect(0, 2); 
-  g.connect(0, 3);
-  g.connect(0, 4);
-  g.connect(3, 1);
-  g.connect(4, 1);
-  g.connect(0, 6);
-  g.connect(5, 1);
-  g.connect(5, 6);
-  g.connect(6, 0);
-
-  saveDefaultGraph(g, "graph4.dot");
-}
-
-
-// parses the test modules and creates a dep graph
-//@unittest
-void graph5() {
-  auto gen = new TestDocGenerator;
-  gen.options.graph.highlightCyclicVertices = true;
-  gen.options.graph.imageFormat = ImageFormat.PDF;
-  gen.options.outputFormats = [ DocFormat.LaTeX ];
-  auto fname = "dependencies.tex";
-  auto imgFname = "depgraph.dot";
-  
-  auto ddf = new DefaultPageWriterFactory(gen);
-  auto gwf = new DefaultGraphWriterFactory(gen);
-  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
-  auto imgFile = new FileConduit("docgen/teststuff/" ~ imgFname, FileConduit.WriteCreate);
-  
-  Module[] modules;
-  Edge[] edges;
-  Vertex[char[]] vertices;
-  int id = 1;
-  
-  Parser.loadModules(
-    [ "c" ], [ "docgen/teststuff/" ],
-    null, true, -1,
-    (char[] fqn, char[] path, Module m) {
-      vertices[m.moduleFQN] = new DepGraph.Vertex(m.moduleFQN, m.filePath, id++);
-    },
-    (Module imported, Module importer, bool isPublic, bool isStatic) {
-      auto edge = vertices[imported.moduleFQN].addChild(vertices[importer.moduleFQN]);
-      edge.isPublic = isPublic;
-      edge.isStatic = isStatic;
-      edges ~= edge;
-    },
-    modules
-  );
-
-  auto writer = gwf.createGraphWriter(
-    ddf.createPageWriter( [ file ], DocFormat.LaTeX ),
-    GraphFormat.Dot
-  );
-  
-  auto graph = new DepGraph;
-  graph.edges = edges;
-  graph.vertices = vertices.values;
-
-  writer.generateDepGraph(graph, imgFile);
-  
-  file.close();
-  imgFile.close();
-}
--- a/src/docgen/tests/listing.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.tests.listing;
-
-import docgen.misc.parser;
-import docgen.tests.common;
-import docgen.sourcelisting.writers;
-import docgen.page.writers;
-import tango.io.FileConduit;
-import tango.text.Util;
-
-// doc template
-//@unittest
-void listing1() {
-  auto gen = new TestDocGenerator;
-  gen.options.outputFormats = [ DocFormat.LaTeX ];
-  auto fname = "files.tex";
-  
-  auto ddf = new DefaultPageWriterFactory(gen);
-  auto dlwf = new DefaultListingWriterFactory(gen);
-  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
-  
-
-  Module[] modules;
-
-  Parser.loadModules(
-    [ "c" ], [ "docgen/teststuff/" ],
-    null, true, -1,
-    (char[] fqn, char[] path, Module m) {},
-    (Module imported, Module importer, bool isPublic, bool isStatic) {},
-    modules
-  );
-  
-  foreach(mod; modules) {
-    auto dstFname = replace(mod.moduleFQN.dup, '.', '_');
-    
-    auto srcFile = new FileConduit(mod.filePath);
-    auto dstFile = new FileConduit("docgen/teststuff/_" ~ dstFname ~ ".d", FileConduit.WriteCreate);
-    auto writer = dlwf.createListingWriter( ddf.createPageWriter( [ file ],
-          DocFormat.LaTeX ), DocFormat.LaTeX );
-    
-    writer.generateListing(srcFile, dstFile, mod.moduleFQN);
-
-    srcFile.close();
-    dstFile.close();
-  }
-  
-  file.close();
-}
--- a/src/docgen/tests/parse.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.tests.parse;
-
-import docgen.misc.parser;
-import tango.io.FileConduit;
-import tango.io.Print: Print;
-import tango.text.convert.Layout : Layout;
-
-void saveToFile(char[] fname, void delegate(Print!(char) file) foo) {
-  auto file = new FileConduit("docgen/teststuff/" ~ fname, FileConduit.WriteCreate);
-  auto output = new Print!(char)(new Layout!(char), file);
-  
-  foo(output);
-  
-  file.close();
-}
-
-// load some test files
-//@unittest
-void parse1() {
-  saveToFile("parse1.txt", (Print!(char) file){
-    Module[] modules;
-  
-    Parser.loadModules(
-      [ "c" ], [ "docgen/teststuff/" ],
-      null, true, -1,
-      (char[] fqn, char[] path, Module m) {
-        file.format("{0} = {1}\n", fqn, path);
-      },
-      (Module imported, Module importer, bool isPublic, bool isStatic) {
-        file.format("{0} <- {1}\n",
-          imported ? imported.moduleFQN : "null"[],
-          importer ? importer.moduleFQN : "null"[]
-        );
-      },
-      modules
-    );
-  });
-}
-
-// load the imports of dil
-//@unittest
-void parse2() {
-  saveToFile("parse2.txt", (Print!(char) file){
-    Module[] modules;
-    
-    Parser.loadModules(
-      [ "docgen/testsuite" ], [".", "/home/jm/d/tango/"],
-      null, true, -1,
-      (char[] fqn, char[] path, Module m) {
-        file.format("{0} = {1}\n", fqn, path);
-      },
-      (Module imported, Module importer, bool isPublic, bool isStatic) {
-        file.format("{0} <- {1}\n",
-          imported ? imported.moduleFQN : "null"[],
-          importer ? importer.moduleFQN : "null"[]
-        );
-      },
-      modules
-    );
-  });
-}
--- a/src/docgen/teststuff/a.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-module a;
-
-void foo() {}
-void bar() {}
--- a/src/docgen/teststuff/b.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-module b;
-
-import a;
-
--- a/src/docgen/teststuff/c.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-module c;
-
-import a;
-import b;
--- a/src/docgen/teststuff/clean.sh	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-rm _*
-rm dep*
-rm doc*
-rm *.tex
-rm graph*
-rm parse*
-touch modules.tex
--- a/src/docgen/teststuff/lstlang0.sty	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-%%
-%% 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
--- a/src/docgen/testsuite.d	Mon Mar 24 19:00:58 2008 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/**
- * Author: Jari-Matti Mäkelä
- * License: GPL3
- */
-module docgen.testsuite;
-
-import docgen.tests.graphs;
-import docgen.tests.parse;
-import docgen.tests.doctemplate;
-import docgen.tests.listing;
-//import docgen.tests.sexp;
-import tango.io.Stdout;
-
-/**
- * A temporary test program for the docgen package.
- * I'll replace this with proper unittests in the future.
- *
- */
-void main() {
-  Stdout("Running..\n")();
-
-  Stdout(" Test1\n")();
-  graph1();
-  Stdout(" Test2\n")();
-  graph2();
-  Stdout(" Test3\n")();
-  graph3();
-  Stdout(" Test4\n")();
-  graph4();
-  Stdout(" Test5\n")();
-  graph5();
-  Stdout(" Test6\n")();
-  parse1();
-  Stdout(" Test7\n")();
-  parse2();
-  Stdout(" Test8\n")();
-  doctemplate1();
-  Stdout(" Test9\n")();
-  listing1();
-//  loadConfig();
-  Stdout("done.\n")();
-}