}
.main_diagram {
+ border-style: none;
display: block;
margin: 0px auto;
}
}
.main_diagram {
+ border-style: none;
display: block;
margin: 0px auto;
}
}
.main_diagram {
+ border-style: none;
display: block;
margin: 0px auto;
width: 100px;
construct {
_renderer = new HtmlRenderer (this);
- icon_directory = "";
}
private string get_path (Api.Node element) {
return GLib.Path.build_filename (this.settings.path, this.package_dir_name, element.full_name () + ".html");
}
+ protected override string get_icon_directory () {
+ return "";
+ }
+
+
public override void process (Settings settings, Api.Tree tree) {
base.process (settings, tree);
DirUtils.create (this.settings.path, 0777);
libvaladoc_la_VALASOURCES = \
doclet.vala \
- drawer.vala \
errorreporter.vala \
filehelper.vala \
moduleloader.vala \
content/tablerow.vala \
content/taglet.vala \
content/text.vala \
+ charts/chart.vala \
+ charts/chartfactory.vala \
+ charts/hierarchychart.vala \
+ charts/simplechartfactory.vala \
parser/manyrule.vala \
parser/oneofrule.vala \
parser/optionalrule.vala \
taglets/tagletsince.vala \
taglets/tagletthrows.vala \
html/basicdoclet.vala \
+ html/htmlchartfactory.vala \
html/linkhelper.vala \
html/cssclassresolver.vala \
html/htmlmarkupwriter.vala \
libvaladoc.vala.stamp: $(libvaladoc_la_VALASOURCES)
- $(VALAC) $(VALAFLAGS) -C -H valadoc-1.0.h --pkg gee-1.0 --pkg vala-1.0 --pkg libgvc --pkg gmodule-2.0 --vapidir $(top_srcdir)/src/vapi --pkg libgvc --pkg config --library valadoc-1.0 --basedir $(top_srcdir)/src/libvaladoc/ --save-temps $^
+ $(VALAC) $(VALAFLAGS) -C -H valadoc-1.0.h --pkg gee-1.0 --pkg vala-1.0 --pkg libgvc --pkg gmodule-2.0 --pkg libgvc --vapidir $(top_srcdir)/src/vapi --pkg config --library valadoc-1.0 --basedir $(top_srcdir)/src/libvaladoc/ --save-temps $^
touch $@
--- /dev/null
+/* chart.vala
+ *
+ * Copyright (C) 2008 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+public class Valadoc.Charts.Chart : Api.Visitor {
+ protected Gvc.Context context;
+ protected Gvc.Graph graph;
+ protected Factory factory;
+
+ static construct {
+ Gvc.init ();
+ }
+
+ public Chart (Factory factory, Api.Node node) {
+ graph = factory.create_graph (node);
+ this.factory = factory;
+ node.accept (this);
+ }
+
+ public void save (string file_name, string file_type = "png") {
+ if (context == null) {
+ context = factory.create_context (graph);
+ }
+ context.render_filename (graph, file_type, file_name);
+ }
+
+ public void write (GLib.FileStream file, string file_type) {
+ if (context == null) {
+ context = factory.create_context (graph);
+ }
+ context.render (graph, file_type, file);
+ }
+
+ ~Chart () {
+ if (context != null) {
+ context.free_layout (graph);
+ }
+ }
+}
+
--- /dev/null
+/* chartfactory.vala
+ *
+ * Copyright (C) 2008 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+public abstract class Valadoc.Charts.Factory : Object {
+ protected Gvc.Node create_type (Gvc.Graph graph, Api.Node item) {
+ return graph.create_node (item.full_name ());
+ }
+
+ public abstract Gvc.Graph create_graph (Api.Node item);
+
+ public abstract Gvc.Context create_context (Gvc.Graph graph);
+
+ public abstract Gvc.Node create_class (Gvc.Graph graph, Api.Class item);
+
+ public abstract Gvc.Node create_struct (Gvc.Graph graph, Api.Struct item);
+
+ public abstract Gvc.Node create_interface (Gvc.Graph graph, Api.Interface item);
+
+ public abstract Gvc.Node create_enum (Gvc.Graph graph, Api.Enum item);
+
+ public abstract Gvc.Node create_delegate (Gvc.Graph graph, Api.Delegate item);
+
+ public abstract Gvc.Node create_errordomain (Gvc.Graph graph, Api.ErrorDomain item);
+
+ public abstract Gvc.Node create_namespace (Gvc.Graph graph, Api.Namespace item);
+
+ public abstract Gvc.Edge add_children (Gvc.Graph graph, Gvc.Node parent, Gvc.Node child);
+}
+
--- /dev/null
+/* hierarchychart.vala
+ *
+ * Copyright (C) 2008 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Gee;
+
+
+public class Valadoc.Charts.Hierarchy : Charts.Chart {
+ public Hierarchy (Factory factory, Api.Node node) {
+ base (factory, node);
+ }
+
+ private void draw_implemented_interfaces (Gvc.Node child, Collection<Api.TypeReference> interfaces) {
+ foreach (Api.TypeReference typeref in interfaces) {
+ var parent = factory.create_interface (graph, (Api.Interface) typeref.data_type);
+ factory.add_children (graph, parent, child);
+ }
+ }
+
+ private void draw_parent_classes (Api.Class item, Gvc.Node? child = null) {
+ var parent = factory.create_class (graph, item);
+
+ if (child != null) {
+ factory.add_children (graph, parent, child);
+ }
+
+ if (item.base_type != null) {
+ draw_parent_classes ((Api.Class) item.base_type.data_type, parent);
+ }
+
+ draw_implemented_interfaces (parent, item.get_implemented_interface_list ());
+ }
+
+ private void draw_parent_structs (Api.Struct item, Gvc.Node? child = null) {
+ var parent = factory.create_struct (graph, item);
+
+ if (child != null) {
+ factory.add_children (graph, parent, child);
+ }
+
+ if (item.base_type != null) {
+ draw_parent_structs ((Api.Struct) item.base_type.data_type, parent);
+ }
+ }
+
+ public override void visit_interface (Api.Interface item) {
+ var iface = factory.create_interface (graph, item);
+
+ if (item.base_type != null) {
+ draw_parent_classes ((Api.Class) item.base_type.data_type, iface);
+ }
+
+ draw_implemented_interfaces (iface, item.get_implemented_interface_list ());
+ }
+
+ public override void visit_class (Api.Class item) {
+ draw_parent_classes (item);
+ }
+
+ public override void visit_struct (Api.Struct item) {
+ draw_parent_structs (item);
+ }
+}
+
--- /dev/null
+/* simplechartfactory.vala
+ *
+ * Copyright (C) 2008 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+
+public class Valadoc.Charts.SimpleFactory : Charts.Factory {
+ protected virtual Gvc.Node configure_type (Gvc.Node node, Api.Node item) {
+ node.safe_set ("shape", "box", "");
+ node.safe_set ("fontname", "Times", "");
+ node.safe_set ("label", item.full_name (), "");
+ return node;
+ }
+
+ public override Gvc.Graph create_graph (Api.Node item) {
+ var graph = new Gvc.Graph (item.full_name (), Gvc.GraphKind.AGDIGRAPH);
+ return graph;
+ }
+
+ public override Gvc.Context create_context (Gvc.Graph graph) {
+ var context = new Gvc.Context ();
+ context.layout_jobs (graph);
+ context.layout (graph, "dot");
+ return context;
+ }
+
+ public override Gvc.Node create_class (Gvc.Graph graph, Api.Class item) {
+ var node = configure_type (create_type (graph, item), item);
+ node.safe_set ("style", "bold", "");
+ return node;
+ }
+
+ public override Gvc.Node create_struct (Gvc.Graph graph, Api.Struct item) {
+ var node = configure_type (create_type (graph, item), item);
+ node.safe_set ("style", "bold", "");
+ return node;
+ }
+
+ public override Gvc.Node create_interface (Gvc.Graph graph, Api.Interface item) {
+ return configure_type (create_type (graph, item), item);
+ }
+
+ public override Gvc.Node create_enum (Gvc.Graph graph, Api.Enum item) {
+ return configure_type (create_type (graph, item), item);
+ }
+
+ public override Gvc.Node create_delegate (Gvc.Graph graph, Api.Delegate item) {
+ return configure_type (create_type (graph, item), item);
+ }
+
+ public override Gvc.Node create_errordomain (Gvc.Graph graph, Api.ErrorDomain item) {
+ return configure_type (create_type (graph, item), item);
+ }
+
+ public override Gvc.Node create_namespace (Gvc.Graph graph, Api.Namespace item) {
+ return configure_type (create_type (graph, item), item);
+ }
+
+ public override Gvc.Edge add_children (Gvc.Graph graph, Gvc.Node parent, Gvc.Node child) {
+ var edge = graph.create_edge (parent, child);
+ edge.safe_set ("dir", "back", "");
+ return edge;
+ }
+}
+
+++ /dev/null
-/* drawer.vala
- *
- * Copyright (C) 2008-2009 Florian Brosch
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author:
- * Brosch Florian <flo.brosch@gmail.com>
- */
-
-using Graphviz;
-using Gee;
-using Valadoc.Api;
-
-namespace Valadoc.Diagrams {
- // replace with .full_name
- private static inline string get_diagram_node_name (Api.Node type) {
- string name = "";
- if (type.nspace.full_name() != null) {
- name = type.nspace.full_name () + ".";
- }
- return name + type.name;
- }
-
- public static void write_struct_diagram (Struct stru, string path) {
- string[] params2 = new string[5];
- params2[0] = "";
- params2[1] = "-T";
- params2[2] = "png";
- params2[3] = "-o";
- params2[4] = path;
-
- Graphviz.Context cntxt = Context.context ();
- cntxt.parse_args (params2);
-
- Graphviz.Graph g = Graph.open ("g", GraphType.AGDIGRAPH);
- g.set_safe ("rank", "", "");
-
- weak Graphviz.Node me = draw_struct (g, stru, null);
- draw_struct_parents (stru, g, me);
-
- cntxt.layout_jobs (g);
- cntxt.render_jobs (g);
- cntxt.free_layout (g);
- }
-
- private static void draw_struct_parents (Struct stru, Graphviz.Graph g, Graphviz.Node me) {
- Struct? parent = stru.base_type != null ? (Struct) stru.base_type.data_type : null;
- if (parent != null) {
- weak Graphviz.Node stru2 = draw_struct (g, parent, me);
- draw_struct_parents (parent, g, stru2);
- }
- }
-
- public static void write_interface_diagram (Interface iface, string path) {
- string[] params2 = new string[5];
- params2[0] = "";
- params2[1] = "-T";
- params2[2] = "png";
- params2[3] = "-o";
- params2[4] = path;
-
- Graphviz.Context cntxt = Context.context ();
- cntxt.parse_args (params2);
-
- Graphviz.Graph g = Graph.open ("g", GraphType.AGDIGRAPH);
- g.set_safe ("rank", "", "");
-
- weak Graphviz.Node me = draw_interface (g, iface, null);
- draw_interface_parents (iface, g, me);
-
- cntxt.layout_jobs (g);
- cntxt.render_jobs (g);
- cntxt.free_layout (g);
- }
-
- private static void draw_interface_parents (Interface iface, Graphviz.Graph g, Graphviz.Node me) {
- Collection<TypeReference> parentlst = iface.get_implemented_interface_list ();
- Class? cl = iface.base_type != null ? (Class) iface.base_type.data_type : null;
- if (cl != null) {
- weak Graphviz.Node cln = draw_class (g, cl, me);
- draw_class_parents (cl, g, cln);
- }
-
- foreach (TypeReference type in parentlst) {
- draw_interface (g, (Interface) type.data_type, me);
- }
- }
-
- public static void write_class_diagram (Class cl, string path) {
- string[] params2 = new string[5];
- params2[0] = "";
- params2[1] = "-T";
- params2[2] = "png";
- params2[3] = "-o";
- params2[4] = path;
-
- Graphviz.Context cntxt = Context.context ();
- cntxt.parse_args (params2);
-
- Graphviz.Graph g = Graph.open ("g", GraphType.AGDIGRAPH);
- g.set_safe ("rank", "", "");
-
- weak Graphviz.Node me = draw_class (g, cl, null);
- draw_class_parents (cl, g, me);
-
- cntxt.layout_jobs (g);
- cntxt.render_jobs (g);
- cntxt.free_layout (g);
- }
-
- private static weak Graphviz.Node draw_struct (Graph g, Struct stru, Graphviz.Node? parent) {
- string name = get_diagram_node_name (stru);
- weak Graphviz.Node? node = g.find_node (name);
- if (node == null) {
- node = g.node (name);
- node.set_safe ("shape", "box", "");
- node.set_safe ("fontname", "Times", "");
- }
-
- if (parent != null) {
- weak Edge edge = g.edge (node, parent);
- edge.set_safe ("dir", "back", "");
- }
-
- return node;
- }
-
- private static weak Graphviz.Node draw_interface (Graph g, Interface iface, Graphviz.Node? parent) {
- string name = get_diagram_node_name (iface);
- weak Graphviz.Node? node = g.find_node (name);
- if (node == null) {
- node = g.node (name);
- node.set_safe ("shape", "box", "");
- node.set_safe ("fontname", "Times", "");
- }
-
- if (parent != null) {
- weak Edge edge = g.edge (node, parent);
- edge.set_safe ("dir", "back", "");
- }
-
- return node;
- }
-
- private static weak Graphviz.Node draw_class (Graph g, Class cl, Graphviz.Node? parent) {
- string name = get_diagram_node_name (cl);
- weak Graphviz.Node? node = g.find_node (name);
- if (node == null) {
- node = g.node (name);
- node.set_safe ("style", "bold", "");
- node.set_safe ("shape", "box", "");
-
- if (cl.is_abstract) {
- node.set_safe ("fontname", "Times-Italic", "");
- } else {
- node.set_safe ("fontname", "Times", "");
- }
- }
-
- if (parent != null) {
- weak Edge edge = g.edge (node, parent);
- edge.set_safe ("dir", "back", "");
- }
-
- return node;
- }
-
- private static void draw_class_parents (Class cl, Graphviz.Graph g, Graphviz.Node me) {
- Collection<TypeReference> parents = cl.get_implemented_interface_list ();
- Class? pcl = cl.base_type != null ? (Class) cl.base_type.data_type : null;
-
- if (pcl != null) {
- weak Graphviz.Node node = draw_class (g, pcl, me);
- draw_class_parents (pcl, g, node);
- }
-
- foreach (TypeReference type in parents) {
- draw_interface (g, (Interface) type.data_type, me);
- }
- }
-}
-
protected Html.MarkupWriter writer;
protected Html.LinkHelper linker;
protected Html.CssClassResolver cssresolver;
-
-
- // paths:
- protected string chart_directory = "img";
- protected string icon_directory = "..";
+ protected Charts.Factory image_factory;
// CSS:
}
public virtual void process (Settings settings, Api.Tree tree) {
+ this.image_factory = new SimpleChartFactory (settings);
this.settings = settings;
this.tree = tree;
}
+
+ // paths:
protected string? get_link (Api.Node to, Api.Node from) {
return linker.get_relative_link (from, to, settings);
}
+ protected virtual string get_img_path_html (Api.Node element, string type) {
+ return Path.build_filename ("img", element.full_name () + "." + type);
+ }
+
+ protected virtual string get_img_path (Api.Node element, string type) {
+ return Path.build_filename (settings.path, element.package.name, "img", element.full_name () + "." + type);
+ }
+
+ protected virtual string get_icon_directory () {
+ return "..";
+ }
+
+
+
protected void write_navi_entry_html_template (string style, string content) {
writer.start_tag ("li", {"class", style});
writer.text (content);
if (link == true) {
this.write_navi_entry_html_template_with_link (style, this.get_link (element, pos), name);
- }
- else {
+ } else {
this.write_navi_entry_html_template (style, name);
}
}
writer.start_tag ("div", {"class", css_box_headline});
writer.start_tag ("div", {"class", css_box_headline_text}).text (headline).end_tag ("div");
writer.start_tag ("div", {"class", css_box_headline_toggle});
- writer.start_tag ("img", {"onclick", "toggle_box (this, '" + html_id + "')", "src", Path.build_filename (icon_directory, "coll_open.png")});
+ writer.start_tag ("img", {"onclick", "toggle_box (this, '" + html_id + "')", "src", Path.build_filename (get_icon_directory (), "coll_open.png")});
writer.raw_text (" ");
writer.end_tag ("div");
writer.end_tag ("div");
writer.end_tag ("ul");
}
- protected string get_img_path (Api.Node element) {
- return Path.build_filename (chart_directory, element.full_name () + ".png");
- }
-
- protected string get_img_real_path (Api.Node element) {
- return Path.build_filename (settings.path, element.package.name, chart_directory, element.full_name () + ".png");
- }
-
protected void write_children (Api.Node node, Api.NodeType type, string type_string, Api.Node? container) {
var children = node.get_children_by_type (type);
if (children.size > 0) {
}
protected void write_image_block (Api.Node element) {
- if (!(element is Class || element is Interface || element is Struct)) {
- return;
- }
+ if (element is Class || element is Interface || element is Struct) {
+ var chart = new Charts.Hierarchy (image_factory, element);
+ chart.save (this.get_img_path (element, "png"), "png");
- string realimgpath = this.get_img_real_path (element);
- string imgpath = this.get_img_path (element);
+ writer.start_tag ("h2", {"class", css_title}).text ("Object Hierarchy:").end_tag ("h2");
- if (element is Class) {
- Diagrams.write_class_diagram ((Class)element, realimgpath);
+ writer.simple_tag ("img", {"class", css_diagram, "usemap", "#"+element.full_name (),"alt", "Object hierarchy for %s".printf (element.name), "src", this.get_img_path_html (element, "png")});
+ writer.add_usemap (chart);
}
- else if (element is Interface) {
- Diagrams.write_interface_diagram ((Interface)element, realimgpath);
- }
- else if (element is Struct) {
- Diagrams.write_struct_diagram ((Struct)element, realimgpath);
- }
-
- writer.start_tag ("h2", {"class", css_title}).text ("Object Hierarchy:").end_tag ("h2");
- writer.image (imgpath, "Object hierarchy for %s".printf (element.name), css_diagram);
}
public void write_namespace_content (Namespace node, Api.Node? parent) {
--- /dev/null
+/* simplechartfactory.vala
+ *
+ * Copyright (C) 2008 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * Florian Brosch <flo.brosch@gmail.com>
+ */
+
+
+
+public class Valadoc.Html.SimpleChartFactory : Charts.SimpleFactory {
+ private Settings _settings;
+ private Api.Node _container;
+
+ public SimpleChartFactory (Settings settings) {
+ _settings = settings;
+ }
+
+ public override Gvc.Graph create_graph (Api.Node item) {
+ var graph = base.create_graph (item);
+ _container = item;
+ return graph;
+ }
+
+ protected override Gvc.Node configure_type (Gvc.Node node, Api.Node item) {
+ base.configure_type (node, item);
+
+ if (_container != null) {
+ var linker = LinkHelper.get_instance ();
+ var link = linker.get_relative_link (_container, item, _settings);
+ if (link != null) {
+ node.safe_set ("URL", link, "");
+ }
+ }
+
+ return node;
+ }
+}
+
base (stream, xml_declaration);
}
+ public MarkupWriter add_usemap (Charts.Chart chart) {
+ stream.putc ('\n');
+ chart.write (stream, "cmapx");
+ return this;
+ }
+
// edit
public MarkupWriter link (string url, string label, string? css_class = null) {
if (css_class == null) {
return _singleton;
}
- // done
public string? get_package_link (Api.Package package, Settings settings) {
if (!package.is_visitor_accessible (settings)) {
return null;
public class Valadoc.MarkupWriter {
- private unowned FileStream stream;
+ protected unowned FileStream stream;
protected int indent;
private long current_column = 0;
private bool last_was_tag;
+++ /dev/null
-
-
-[CCode (cprefix = "")]
-namespace Graphviz {
-
-
-//check the headerfile, // rename
-[CCode (cprefix = "", cheader_filename="gvc.h")]
-public enum GraphType { // => GraphKind
- AGDIGRAPHSTRICT,
- AGRAPHSTRICT,
- AGDIGRAPH,
- AGRAPH
-}
-
-
-
-[CCode (cname = "aginitlib", cheader_filename="gvc.h")]
-public void init ( size_t graphinfo, size_t nodeinfo, size_t edgeinfo);
-
-
-// rename enum values
-[CCode (cname = "agerrlevel_t", cheader_filename = "gvc.h", cprefix = "")]
-public enum ErrorLevel {
- AGWARN,
- AGERR,
- AGMAX,
- AGPREV
-}
-
-[CCode(cprefix = "ag")]
-namespace Error {
- [CCode (cname = "agerrno")]
- public static ErrorLevel errno;
-
- [CCode (cname = "agerr")]
- public static int error( ErrorLevel level, string fmt, ...);
-
- [CCode (cname = "agerrors")]
- public static int errors( );
-
- [CCode (cname = "agseterr")]
- public static void set_error( ErrorLevel err );
-
- [CCode (cname = "aglasterr")]
- public static string? last_error( );
-
- // rename
- [CCode (cname = "agerrorf")] // name?
- public static void errorf( string format, ...);
-
- // rename
- [CCode (cname = "agwarningf")]
- void warningf( string fmt, ...);
-}
-
-
-// -> parser: static class
-// [CCode (cname = "agreadline")]
-// public void read_line(int);
-
-// [CCode (cname = "agsetfile")]
-// public void set_file( string filename );
-
-
-// char *gvUsername(void);
-
-
-
-
-//
-//-> class string: (I think we don't need that for the api.)
-//[CCode (cname = "agstrdup")]
-//extern char *agstrdup(char *);
-//[CCode (cname = "agstrfree")]
-//extern void agstrfree(char *);
-//[CCode (cname = "agcanon")]
-//char * agcanon (char *)
-//[CCode (cname = "agstrcanon")]
-//char *agstrcanon(char *, char *);
-//[CCode (cname = "agcanonical")]
-//char *agcanonical(char *);
-//[CCode (cname = "aghtmlstr")]
-//int aghtmlstr(char *s);
-//[CCode (cname = "agstrdup_html")]
-//char *agstrdup_html(char *s);
-
-
-
-
-
-[Compact]
-[CCode (cname = "rank_t", cheader_filename = "gvc.h", free_function = "", cprefix = "")]
-public class Rank {
-
-}
-
-[Compact]
-[CCode (cname = "Agraph_t", cheader_filename = "gvc.h", free_function = "agclose", cprefix = "")]
-// AGraph
-public class Graph {
- //[CCode (cname = "agmemread")]
- //public static Graph? mem_read( char[] mem ); // some internal cast-magic caused damage to my brain
- //public void attach_attrs( );
-
- [CCode (cname = "agread")]
- public static Graph read (GLib.FileStream file );
-
- [CCode (cname = "AG_IS_DIRECTED")]
- public bool is_directed ( );
-
- [CCode (cname = "AG_IS_STRICT")]
- public bool is_strict ( );
-
- //
- [CCode (cname = "agraphattr")]
- public Sym attribute ( string name, string val );
-
- [CCode (cname = "agfstattr")]
- public weak Sym first_attribute ( );
-
- [CCode (cname = "aglstattr")]
- public weak Sym last_attribute ( );
-
- [CCode (cname = "agnxtattr")]
- public weak Sym next_attribute ( Sym sym );
-
- [CCode (cname = "agprvattr")]
- public weak Sym previous_attribute ( Sym sym );
-
- //
- [CCode (cname = "agget")]
- public string get( string name );
-
- //
- [CCode (cname = "agxget")]
- public string get_index( int index );
-
- [CCode (cname = "agset")]
- public int set(string attr, string val);
-
- [CCode (cname = "agxset")]
- public int set_index( int index, char[] buf );
-
- [CCode (cname = "agindex")]
- public int index ( string name );
-
- [CCode (cname = "agsafeset")]
- public int set_safe( string name, string val, string def );
-
- [CCode (cname = "agopen")]
- public static Graph open ( string name, GraphType kind );
-
- //
- [CCode (cname = "agsubg")]
- public weak Graph subgraph( string name );
-
- [CCode (cname = "agfindsubg")]
- public weak Graph find_sub_graph ( string name );
-
- [CCode (cname = "agwrite")]
- public int write( GLib.FileStream file );
-
- [CCode (cname = "agprotograph")]
- public static Graph proto_graph ( );
-
- [CCode (cname = "agusergraph")]
- public static Graph user_graph( Node n );
-
- [CCode (cname = "agnnodes")]
- public int n_nodes( );
-
- [CCode (cname = "agnedges")]
- public int n_edges( );
-
- [CCode (cname = "aginsert")]
- public void insert( void* obj );
-
- [CCode (cname = "agdelete")]
- public void delete( void* obj );
-
- [CCode (cname = "agcontains")]
- public int contains( void* obj );
-
- // make sure that the returned note is really freed by this class
- [CCode (cname = "agnode")]
- public weak Node node ( string str );
-
- //
- [CCode (cname = "agnodeattr")]
- Sym node_attribute ( string name, string val );
-
- [CCode (cname = "agfindnode")]
- public weak Node find_node( string name );
-
- [CCode (cname = "agfstnode")]
- public weak Node first_node( );
-
- [CCode (cname = "agnxtnode")]
- public weak Node next_node( Node n );
-
- [CCode (cname = "aglstnode")]
- public weak Node last_node( );
-
- [CCode (cname = "agprvnode")]
- public weak Node prev_node( Node n );
-
- [CCode (cname = "agedge")]
- public weak Edge edge( Node tail, Node head );
-
- [CCode (cname = "agedgeattr")]
- public weak Sym edge_attribute( string name, string val );
-
- [CCode (cname = "agfindedge")]
- public weak Edge find_edge( Node tail, Node head );
-
- [CCode (cname = "agfstedge")]
- public weak Edge first_edge(Graph g, Node n);
-
- [CCode (cname = "agnxtedge")]
- public weak Edge next_edge( Edge e, Node n);
-
- [CCode (cname = "agfstin")]
- public weak Edge first_in( Node n );
-
- [CCode (cname = "agnxtin")]
- public weak Edge next_in ( Edge e );
-
- [CCode (cname = "agfstout")]
- public weak Edge first_out( Node n );
-
- [CCode (cname = "agnxtout")]
- public weak Edge next_out( Edge edge );
-
- //?
- [CCode (cname = "agraphattr")]
- public Sym graph_attribute ( string name, string val );
-
- [CCode (cname = "agfindattr")]
- public weak Sym find_attribute ( string name );
-
- [CCode (cname = "agcopyattr")]
- public int copy_attribute( void* newobj );
-
- //
- [CCode (cname = "agprotonode")]
- public Node proto_node ( );
-
- //
- [CCode (cname = "agprotoedge")]
- public Edge proto_edge ( );
-}
-
-
-
-// Fill in!
-[Compact]
-[CCode (cname = "Agnode_t", cheader_filename = "gvc.h", free_function = "agFREEnode", cprefix = "")]
-public class Node {
- [CCode (cname = "agsafeset")]
- public int set_safe( string name, string val, string def );
-
- [CCode (cname = "agfindattr")]
- public weak Sym find_attribute ( string name );
-
- [CCode (cname = "agcopyattr")]
- public int copy_attribute( void* newobj );
-
- //
- [CCode (cname = "agget")]
- public string get( string name );
-
- //
- [CCode (cname = "agxget")]
- public string get_index( int index );
-
- //
- [CCode (cname = "agset")]
- public int set(string attr, string val);
-
- [CCode (cname = "agxset")]
- public int set_index( int index, char[] buf );
-
- [CCode (cname = "agindex")]
- public int index ( string name );
-
- // same as cname="agnode" -> i just tink it is weak
- [CCode (cname = "agattr")]
- public weak Sym attribute ( string name, string val );
-
- [CCode (cname = "agfstattr")]
- public weak Sym first_attribute ( );
-
- [CCode (cname = "aglstattr")]
- public weak Sym last_attribute ( );
-
- [CCode (cname = "agnxtattr")]
- public weak Sym next_attribute ( Sym sym );
-
- [CCode (cname = "agprvattr")]
- public weak Sym previous_attribute ( Sym sym );
-}
-
-
-
-// FILL IN! - free function?
-[Compact]
-[CCode (cname = "Agedge_t", cheader_filename = "gvc.h", cprefix = "")]
-public class Edge {
- //
- [CCode (cname = "agattr")]
- public weak Sym attribute ( string name, string val );
-
- [CCode (cname = "agfstattr")]
- public weak Sym first_attribute ( );
-
- [CCode (cname = "aglstattr")]
- public weak Sym last_attribute ( );
-
- [CCode (cname = "agnxtattr")]
- public weak Sym next_attribute ( Sym sym );
-
- [CCode (cname = "agprvattr")]
- public weak Sym previous_attribute ( Sym sym );
-
- [CCode (cname = "agsafeset")]
- public int set_safe( string name, string val, string def );
-
- [CCode (cname = "agfindattr")]
- public weak Sym find_attribute ( string name );
-
- //
- [CCode (cname = "agcopyattr")]
- public int copy_attribute( void* newobj );
-
- //
- [CCode (cname = "agget")]
- public string get( string name );
-
- //
- [CCode (cname = "agxget")]
- public string get_index( int index );
-
- [CCode (cname = "agset")]
- public int set(string attr, string val);
-
- [CCode (cname = "agxset")]
- public int set_index( int index, char[] buf );
-
- [CCode (cname = "agindex")]
- public int index ( string name );
-}
-
-
-
-// free function?
-[Compact]
-[CCode (cname = "Agsym_t", cheader_filename = "gvc.h", cprefix = "")]
-public class Sym {
-}
-
-
-[Compact]
-[CCode (cname = "GVC_t", cheader_filename = "gvc.h", free_function = "gvFreeContext", cprefix = "")]
-public class Context {
- //??
- //GVC_t *gvNEWcontext(char **info, char *user);
- [CCode (cname = "gvParseArgs")]
- public int parse_args ( [CCode (array_length_pos = 0.9)] string[] argv );
-
- [CCode (cname = "gvContext")]
- public static Context context ( ); // => GraphKind
-
- [CCode (cname = "gvLayout")]
- public int layout ( Graph g, string engine );
-
- [CCode (cname = "gvLayoutJobs")]
- public int layout_jobs ( Graph g );
-
- [CCode (cname = "gvRender")]
- public int render( Graph g, string format, GLib.FileStream file );
-
- [CCode (cname = "gvRenderFilename")]
- public int render_filename ( Graph g, string format, string filename);
-
- [CCode (cname = "gvRenderJobs")]
- public int render_jobs ( Graph g );
-
- [CCode (cname = "gvFreeLayout")]
- public int free_layout ( Graph g );
-}
-
-
-}
-