UMLSpeed
===========================

About:
=======

UMLSpeed is a compiler for a simple, abstract language that allows 
declaration of UML entities and diagrams. Diagrams can be compiled
into SVG and the entities to XMI for use with other tools.

For more information on the language syntax, see the samples folder
and documentation (HTML format) in doc/reference/

Why?
========

1. Graphical UML tools in general suck - why should we, as programmers have
   to drag and drop stupid graphical things and use a mouse when we could 
   express what we want 10 times faster with a text editor and a simple 
   notation? More importantly, why should we have to lay everything out
   when the computer could do it for us?

2. Graphical UML tools are bloated, huge, memory and disk-hogging 
   monsters.

3. Graphical UML tools use either a binary data format or XML,
   which is not particularly friendly to source code control systems.

4. Because I can :-)


Advantages of UMLSpeed:
========================

1. Written in GCJ-portable java and compiled natively. It's extremely
   fast even when dealing with thousands of entities and diagrams.

2. Purely command-line driven and takes miniscule resources.

3. Flexible enough with file imports that large UML projects can be broken
   up into separate files and only individual bits built at a time 
   as required.

4. C-style syntax means that the source language integrates well with
   source code control and diff tools.

5. Standards compliant - produces interoperable SVG and XMI.

6. Can integrate with automated build tools for regular diagram/xmi
   compilation.

Installation (Linux/BSD systems):
==================================

(if you are using a *nix system with a strange file system layout, edit the 
Makefile and change the installation target paths. Defaults are 
/usr/local/bin for binaries and /usr/local/share/man/man1 for the 
manpage).

Compile with "make", followed by (as root) "make install".

You will need GNU make installed, as well as gcj

Trying it out:
====================

Some samples are included in the samples folder.

Build the example diagrams from the sample source with:

cd samples
umlspeed umlspeed.diagrams.ums

SVG files will be created in the current working directory. View them
with Inkscape for best rendering quality, but Firefox and other
SVG renderers work equally well.

Further Reading:
========================

Check out the docs folder for more detail. A man page is also supplied
and installed by the Makefile.

VIM:
========================

If you use vim, you can install syntax highlighting for UMLSpeed by
running "make vim" as your normal user.

Regular Java:
========================

UMLSpeed works equally well with plain java (as opposed to native 
compilation). An ant build script is supplied that will create a umlspeed.jar
file. To use, just run "java -jar umlspeed.jar" and pass arguments as
you would to a native binary.

If you are using Windows, you could set up different file type tasks
through explorer to call the umlspeed jar, specifying xmi, source or
svg output, allowing you to right click on a .ums file and generate 
aprpopriate content.

Alternatively, if you are using eclipse. A plugin is supplied on the
umlspeed download page. Copy the jar file to the plugins directory of
your Eclipse installation. You can then right click on .ums files and
use the "UMLSpeed" submenu to generate output.

Status:
=========================

This is still alpha software. Don't hold me responsible if it kills your
pets and blows your house up.

Implemented so far:

*. Compiler/parser
*. Namespaces, Class diagrams and related entities
*. Use case diagrams and related entities
*. Sequence diagrams
*. Deployment diagrams and related entities
*. Diagram packages
*. Auto-link pathfinding
*. XMI 1.3 output (classes/interfaces and packages)
*. VIM syntax highlighting
*. Code generation (Java and Python)
*. Maven plugin
*. Eclipse plugin
*. Documentation output

Still to do:

*. Code generation (Ruby, PHP, Perl, C++, C#)
*. Diagram notes
*. Alternative diagram layout managers
*. Activity diagrams


