ANSI Common Lisp implementation of Tulip .tlp format graph generator
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


		      Cl-Tulip-Graph: a graph generator

Cl-Tulip-Graph is a graph description generator written in Common
Lisp. The package accepts various Lisp objects as nodes and produces
graph descriptions in .tlp format, which can be later visualized in
Tulip (see Tulip clusters and
properties are supported.

The package is formerly known as bouquet.

Cl-Tulip-Graph is written by Eugene Zaikonnikov, and is distributed
under the terms of LLGPL (see LICENSE file for details).

			   Building Cl-Tulip-Graph

Distribution tarball contains .asd system definition file, and several
.lisp source files. To compile and load Cl-Tulip-Graph, launch your
ASDF-enabled Lisp and perfrom (asdf:oos 'asdf:load-op :cl-tulip-graph)
in the REPL.

To test the package, try (cl-tulip-graph:test).

Cl-Tulip-Graph was tested with SBCL 1.0.55, but is expected to run
with other mostly-ANSI-conforming Lisps.

			    Using Cl-Tulip-Graph

Below is a short description of package API. To familiarise with Tulip
concepts, see

Cl-Tulip-Graph maintains current graph instance in graph cache which
is manipulated via set of interface functions. The interface functions
implicitly use the graph instance currently registered in the graph
cache: for most cases, it is more convenient and succinct.

The interface functions (exported from CL-TULIP-GRAPH package) are:

(NEW-GRAPH): Instantiates a new graph and stores it in the graph
cache. Also, default "Label" property is created for node labels.

(CURRENT-GRAPH): Returns the current graph instance.

(NODE <object>): Returns graph node instance associated with the
'object', or NIL if none found.

(REGISTER-NODE <object>): Creates node instance and associates it with
the 'object'.

(REGISTER-NODE-UNLESS-EXISTS <object>): Registers object as node
unless it is already registered.

(EDGE <from> <to>): Looks up for a directed edge from object 'from' to
object 'to'. If successful, the edge instance is returned, otherwise

(REGISTER-EDGE <from> <to>): Registers a directed edge from *node
instance* 'from' to node instance 'to'.

(MAKE-CLUSTER <name> &optional <nodes> <edges> &key <subclusters>):
Instantiates a cluster 'name' with optional nodes and edges; the
cluster can also contain subclusters (also cluster instances).

(CLUSTER <name>): Looks up cluster instance by name string.

(ADD-TO-CLUSTER <cluster> <entry>): Adds a node or edge instance to
cluster instance. 

(MAKE-PROPERTY <name> <cluster> <type> &optional <nodes-default>
<edges-default>): Instantiates a property 'name' (string) associated
with cluster number 'cluster' (implicit top-level cluster is 0) of
type 'type'. Optional defaults for edges and nodes can be provided.

(PROPERTY <name>): Looks up property instance by namestring.

(SET-PROPERTY <property> <entry> <value>): Associates 'entry' (an edge
or node instance) with its 'value' for the 'property' (a property

(LABEL <entry> <value>): set entry's text label to 'value' (a string
or a symbol; if latter, the label is assigned it's
symbol-name). Manipulates the default "Labels" property.

(RENDER-GRAPH &optional <stream>): Prints current graph in .tlp format
to 'stream'; if none provided, *standard-output* is used.