lib/dot: add examples
[nit.git] / lib / dot / exemples / clusters.nit
diff --git a/lib/dot/exemples/clusters.nit b/lib/dot/exemples/clusters.nit
new file mode 100644 (file)
index 0000000..993d3ca
--- /dev/null
@@ -0,0 +1,72 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Example from http://www.graphviz.org/content/cluster
+
+import dot
+
+var graph = new DotGraph("G", "digraph")
+
+var cl0 = new DotGraph("cluster_0", "subgraph")
+cl0["label"] = "process #1"
+cl0["style"] = "filled"
+cl0["color"] = "lightgrey"
+cl0.nodes_attrs["style"] = "filled"
+cl0.nodes_attrs["color"] = "white"
+
+var a0 = cl0.add_node("a0")
+var a1 = cl0.add_node("a1")
+var a2 = cl0.add_node("a2")
+var a3 = cl0.add_node("a3")
+cl0.add_edge(a0, a1)
+cl0.add_edge(a1, a2)
+cl0.add_edge(a2, a3)
+
+graph.add cl0
+
+var cl1 = new DotGraph("cluster_1", "subgraph")
+cl1["label"] = "process #2"
+cl1["color"] = "blue"
+cl1.nodes_attrs["style"] = "filled"
+
+var b0 = cl1.add_node("b0")
+var b1 = cl1.add_node("b1")
+var b2 = cl1.add_node("b2")
+var b3 = cl1.add_node("b3")
+cl1.add_edge(b0, b1)
+cl1.add_edge(b1, b2)
+cl1.add_edge(b2, b3)
+
+graph.add cl1
+
+var start = graph.add_node("start")
+start["shape"] = "Mdiamond"
+
+var nend = graph.add_node("end")
+nend["shape"] = "Msquare"
+
+graph.add_edge(start, a0)
+graph.add_edge(start, b0)
+graph.add_edge(a1, b3)
+graph.add_edge(b2, a3)
+graph.add_edge(a3, a0)
+graph.add_edge(a3, nend)
+graph.add_edge(b3, nend)
+
+if args.is_empty then
+       print graph.to_dot
+       graph.show
+else
+       graph.to_dot.write_to_file args.first
+end