[valadoc] MarkupWriter: Split into a general purpose markup writer and a html-writer
- From: Florian Brosch <flobrosch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [valadoc] MarkupWriter: Split into a general purpose markup writer and a html-writer
- Date: Wed, 28 Oct 2009 13:05:19 +0000 (UTC)
commit 1401f631f3deccc7d425010ecd48dc68df4b49c9
Author: Florian Brosch <flo brosch gmail com>
Date: Fri Oct 23 21:52:34 2009 +0200
MarkupWriter: Split into a general purpose markup writer and a html-writer
src/doclets/devhelp/doclet.vala | 6 +-
src/doclets/htm/doclet.vala | 8 +-
src/doclets/valadoc.org/doclet.vala | 4 +-
src/libvaladoc/Makefile.am | 1 +
src/libvaladoc/html-doclet/html-doclet.vala | 121 +++++++-------
src/libvaladoc/html-doclet/html-markupwriter.vala | 171 ++------------------
src/libvaladoc/html-doclet/html-renderer.vala | 33 ++--
src/libvaladoc/markupwriter.vala | 177 +++++++++++++++++++++
8 files changed, 280 insertions(+), 241 deletions(-)
---
diff --git a/src/doclets/devhelp/doclet.vala b/src/doclets/devhelp/doclet.vala
index 484f359..03919e1 100755
--- a/src/doclets/devhelp/doclet.vala
+++ b/src/doclets/devhelp/doclet.vala
@@ -256,7 +256,7 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet {
this.devhelp = new DevhelpFormat (pkg_name, "");
GLib.FileStream file = GLib.FileStream.open (filepath, "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (this.css_path, pkg_name);
@@ -277,7 +277,7 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet {
this.devhelp.add_chapter_start (node.name, path);
GLib.FileStream file = GLib.FileStream.open (rpath, "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (css_path, node.full_name ());
@@ -299,7 +299,7 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet {
string path = this.get_path (node);
GLib.FileStream file = GLib.FileStream.open (rpath, "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (css_path, node.full_name());
diff --git a/src/doclets/htm/doclet.vala b/src/doclets/htm/doclet.vala
index 552f335..ae708d7 100755
--- a/src/doclets/htm/doclet.vala
+++ b/src/doclets/htm/doclet.vala
@@ -123,7 +123,7 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet {
write_wiki_pages (tree, css_path_wiki, Path.build_filename(settings.path, "content"));
GLib.FileStream file = GLib.FileStream.open (GLib.Path.build_filename ( settings.path, "index.html" ), "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (this.css_path_package, settings.pkg_name);
@@ -147,7 +147,7 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet {
rt = DirUtils.create (GLib.Path.build_filename ( path, "img" ), 0777);
GLib.FileStream file = GLib.FileStream.open (GLib.Path.build_filename ( path, "index.htm" ), "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (this.css_path, pkg_name);
@@ -164,7 +164,7 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet {
if (ns.name != null) {
GLib.FileStream file = GLib.FileStream.open (rpath, "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (this.css_path, ns.full_name ());
@@ -181,7 +181,7 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet {
string rpath = this.get_real_path (node);
GLib.FileStream file = GLib.FileStream.open (rpath, "w");
- writer = new MarkupWriter (file);
+ writer = new Html.MarkupWriter (file);
writer.xml_declaration ();
_renderer.set_writer (writer);
write_file_header (css_path, node.full_name());
diff --git a/src/doclets/valadoc.org/doclet.vala b/src/doclets/valadoc.org/doclet.vala
index 2df7a1f..7a2e8a3 100755
--- a/src/doclets/valadoc.org/doclet.vala
+++ b/src/doclets/valadoc.org/doclet.vala
@@ -124,8 +124,8 @@ public class Valadoc.ValadocOrg.Doclet : BasicDoclet {
string parentnodetypepath = (parentnodepkgname == parentnodename)? parentnodepkgname : parentnodepkgname+"/"+parentnodename;
string typepath = pkgname+"/"+fullname;
this.file.printf ("INSERT INTO `ValadocCodeElement` (`id`, `parent`, `valaapi`) VALUES ((SELECT `id` FROM `ValadocApiElement` WHERE BINARY `fullname`='%s' LIMIT 1), (SELECT `id` FROM `ValadocApiElement` WHERE BINARY `fullname`='%s' LIMIT 1), '", typepath, parentnodetypepath);
- var writer = new MarkupWriter (file);
- writer.set_source_wrap (false);
+ var writer = new Html.MarkupWriter (file);
+ writer.set_wrap (false);
_renderer.set_writer (writer);
_renderer.set_container (element);
_renderer.render (element.signature);
diff --git a/src/libvaladoc/Makefile.am b/src/libvaladoc/Makefile.am
index d6567ed..f05470d 100644
--- a/src/libvaladoc/Makefile.am
+++ b/src/libvaladoc/Makefile.am
@@ -29,6 +29,7 @@ libvaladoc_la_VALASOURCES = \
filehelper.vala \
moduleloader.vala \
settings.vala \
+ markupwriter.vala \
documentation/commentscanner.vala \
documentation/documentation.vala \
documentation/documentationparser.vala \
diff --git a/src/libvaladoc/html-doclet/html-doclet.vala b/src/libvaladoc/html-doclet/html-doclet.vala
index 50a16d7..e444913 100755
--- a/src/libvaladoc/html-doclet/html-doclet.vala
+++ b/src/libvaladoc/html-doclet/html-doclet.vala
@@ -23,7 +23,7 @@ using Valadoc.Api;
public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
protected Settings settings;
protected HtmlRenderer _renderer;
- protected MarkupWriter writer;
+ protected Html.MarkupWriter writer;
public abstract void process (Settings settings, Api.Tree tree);
@@ -32,13 +32,13 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
protected void write_navi_entry_html_template (string style, string content) {
- writer.start_tag ("li", style);
+ writer.start_tag ("li", {"class", style});
writer.text (content);
writer.end_tag ("li");
}
protected void write_navi_entry_html_template_with_link (string style, string link, string content) {
- writer.start_tag ("li", style);
+ writer.start_tag ("li", {"class", style});
writer.link (link, content);
writer.end_tag ("li");
}
@@ -97,7 +97,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
protected void write_navi_top_entry (Api.Node element, Api.Node? parent) {
string style = get_html_css_class (element);
- writer.start_tag ("ul", css_navi);
+ writer.start_tag ("ul", {"class", css_navi});
if (element == parent || parent == null) {
this.write_navi_entry (element, parent, style, false);
@@ -106,16 +106,16 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
writer.end_tag ("ul");
- writer.simple_tag ("hr", css_navi_hr);
+ writer.simple_tag ("hr", {"class", css_navi_hr});
}
protected void write_top_element_template (string link) {
- writer.start_tag ("ul", css_navi);
- writer.start_tag ("li", css_package_index);
+ writer.start_tag ("ul", {"class", css_navi});
+ writer.start_tag ("li", {"class", css_package_index});
writer.link (link, "Packages");
writer.end_tag ("li");
writer.end_tag ("ul");
- writer.simple_tag ("hr", css_navi_hr);
+ writer.simple_tag ("hr", {"class", css_navi_hr});
}
protected void write_top_elements (Api.Node element, Api.Node? parent) {
@@ -149,9 +149,9 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
Gee.ArrayList<Namespace> ns_list = new Gee.ArrayList<Namespace> ();
this.fetch_subnamespace_names (package, ns_list);
- writer.start_tag ("div", css_style_navigation);
+ writer.start_tag ("div", {"class", css_style_navigation});
write_top_elements (package, package);
- writer.start_tag ("ul", css_navi);
+ writer.start_tag ("ul", {"class", css_navi});
Namespace globals = null;
@@ -185,21 +185,21 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
protected void write_navi_symbol (Api.Node node) {
- writer.start_tag ("div", css_style_navigation);
+ writer.start_tag ("div", {"class", css_style_navigation});
write_top_elements (node, node);
write_navi_symbol_inline (node, node);
writer.end_tag ("div");
}
protected void write_navi_leaf_symbol (Api.Node node) {
- writer.start_tag ("div", css_style_navigation);
+ writer.start_tag ("div", {"class", css_style_navigation});
write_top_elements ((Api.Node) node.parent, node);
write_navi_symbol_inline ((Api.Node) node.parent, node);
writer.end_tag ("div");
}
protected void write_navi_symbol_inline (Api.Node node, Api.Node? parent) {
- writer.start_tag ("ul", css_navi);
+ writer.start_tag ("ul", {"class", css_navi});
write_navi_children (node, Api.NodeType.NAMESPACE, parent);
write_navi_children (node, Api.NodeType.ERROR_CODE, parent);
write_navi_children (node, Api.NodeType.ENUM_VALUE, parent);
@@ -260,7 +260,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
Gee.List<Block> description = doctree.content;
if (description.size > 0) {
- writer.start_tag ("span", css_brief_description);
+ writer.start_tag ("span", {"class", css_brief_description});
_renderer.set_container (pos);
_renderer.render_children (description.get (0));
@@ -275,7 +275,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
return;
}
- writer.start_tag ("div", css_description);
+ writer.start_tag ("div", {"class", css_description});
_renderer.set_container (pos);
_renderer.render (doctree);
@@ -284,10 +284,10 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
private void write_signature (Api.Node element , Api.Node? pos) {
- writer.set_source_wrap (false);
+ writer.set_wrap (false);
_renderer.set_container (pos);
_renderer.render (element.signature);
- writer.set_source_wrap (true);
+ writer.set_wrap (true);
}
protected bool is_internal_node (Api.Node node) {
@@ -299,16 +299,16 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
public void write_navi_packages_inline (Api.Tree tree) {
- writer.start_tag ("ul", css_navi);
+ writer.start_tag ("ul", {"class", css_navi});
foreach (Package pkg in tree.get_package_list()) {
if (pkg.is_visitor_accessible (settings)) {
- writer.start_tag ("li", get_html_css_class (pkg));
+ writer.start_tag ("li", {"class", get_html_css_class (pkg)});
writer.link (get_link (pkg, null), pkg.name);
// brief description
writer.end_tag ("li");
}
else {
- writer.start_tag ("li", get_html_css_class (pkg));
+ writer.start_tag ("li", {"class", get_html_css_class (pkg)});
writer.text (pkg.name);
writer.end_tag ("li");
}
@@ -317,15 +317,15 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
public void write_navi_packages (Api.Tree tree) {
- writer.start_tag ("div", css_style_navigation);
+ writer.start_tag ("div", {"class", css_style_navigation});
this.write_navi_packages_inline (tree);
writer.end_tag ("div");
}
public void write_package_index_content (Api.Tree tree) {
- writer.start_tag ("div", css_style_content);
- writer.start_tag ("h1", css_title).text ("Packages:").end_tag ("h1");
- writer.simple_tag ("hr", css_headline_hr);
+ writer.start_tag ("div", {"class", css_style_content});
+ writer.start_tag ("h1", {"class", css_title}).text ("Packages:").end_tag ("h1");
+ writer.simple_tag ("hr", {"class", css_headline_hr});
WikiPage? wikiindex = (tree.wikitree == null)? null : tree.wikitree.search ("index.valadoc");
if (wikiindex != null) {
@@ -333,20 +333,20 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
_renderer.render (wikiindex.documentation);
}
- writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2");
- writer.start_tag ("h3", css_title).text ("Packages:").end_tag ("h3");
+ writer.start_tag ("h2", {"class", css_title}).text ("Content:").end_tag ("h2");
+ writer.start_tag ("h3", {"class", css_title}).text ("Packages:").end_tag ("h3");
this.write_navi_packages_inline (tree);
writer.end_tag ("div");
}
public void write_symbol_content (Api.Node node) {
string full_name = node.full_name ();
- writer.start_tag ("div", css_style_content);
- writer.start_tag ("h1", css_title, full_name).text (node.name).end_tag ("h1");
- writer.simple_tag ("hr", css_headline_hr);
+ writer.start_tag ("div", {"class", css_style_content});
+ writer.start_tag ("h1", {"class", css_title, full_name}).text (node.name).end_tag ("h1");
+ writer.simple_tag ("hr", {"class", css_headline_hr});
this.write_image_block (node);
- writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2");
- writer.start_tag ("div", css_code_definition);
+ writer.start_tag ("h2", {"class", css_title}).text ("Description:").end_tag ("h2");
+ writer.start_tag ("div", {"class", css_code_definition});
this.write_signature (node, node);
writer.end_tag ("div");
this.write_documentation (node, node);
@@ -371,7 +371,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
Api.NodeType.FIELD,
Api.NodeType.CONSTANT
})) {
- writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2");
+ writer.start_tag ("h2", {"class", css_title}).text ("Content:").end_tag ("h2");
write_children_table (node, Api.NodeType.ERROR_CODE, "Error codes");
write_children_table (node, Api.NodeType.ENUM_VALUE, "Enum values");
write_children (node, Api.NodeType.CLASS, "Classes", node);
@@ -405,11 +405,11 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
bool with_childs = parent != null && parent is Package;
- writer.start_tag ("h3", css_title).text ("Namespaces:").end_tag ("h3");
- writer.start_tag ("ul", css_inline_navigation);
+ writer.start_tag ("h3", {"class", css_title}).text ("Namespaces:").end_tag ("h3");
+ writer.start_tag ("ul", {"class", css_inline_navigation});
foreach (Namespace child in namespaces) {
if (child.name != null) {
- writer.start_tag ("li", css_namespace);
+ writer.start_tag ("li", {"class", css_namespace});
writer.link (get_link (child, parent), child.name);
this.write_brief_description (child, parent);
writer.end_tag ("li");
@@ -435,14 +435,14 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
return;
}
- writer.start_tag ("h2", css_title).text ("Dependencies:").end_tag ("h2");
- writer.start_tag ("ul", css_inline_navigation);
+ writer.start_tag ("h2", {"class", css_title}).text ("Dependencies:").end_tag ("h2");
+ writer.start_tag ("ul", {"class", css_inline_navigation});
foreach (Package p in deps) {
string link = this.get_link(p, parent);
if (link == null) {
- writer.start_tag ("li", css_package, p.name).text (p.name).end_tag ("li");
+ writer.start_tag ("li", {"class", css_package, "id", p.name}).text (p.name).end_tag ("li");
} else {
- writer.start_tag ("li", css_package);
+ writer.start_tag ("li", {"class", css_package});
writer.link (get_link (p, parent), p.name);
writer.end_tag ("li");
}
@@ -461,17 +461,17 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
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) {
- writer.start_tag ("h3", css_title).text (type_string).text (":").end_tag ("h3");
- writer.start_tag ("ul", css_inline_navigation);
+ writer.start_tag ("h3", {"class", css_title}).text (type_string).text (":").end_tag ("h3");
+ writer.start_tag ("ul", {"class", css_inline_navigation});
foreach (Api.Node child in children) {
- writer.start_tag ("li", get_html_css_class (child));
+ writer.start_tag ("li", {"class", get_html_css_class (child)});
if (is_internal_node (child)) {
writer.link (get_link (child, container), child.name);
writer.text (" - ");
write_brief_description (child, container);
} else {
write_signature (child, container);
- writer.start_tag ("div", css_leaf_brief_description);
+ writer.start_tag ("div", {"class", css_leaf_brief_description});
write_brief_description (child, container);
writer.end_tag ("div");
}
@@ -484,12 +484,11 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
private void write_children_table (Api.Node node, Api.NodeType type, string type_string) {
Gee.Collection<Api.Node> children = node.get_children_by_type (Api.NodeType.ENUM_VALUE);
if (children.size > 0) {
- writer.start_tag ("h3", css_title).text (type_string).text (":").end_tag ("h3");
- writer.start_tag ("table", get_html_css_class (node));
+ writer.start_tag ("h3", {"class", css_title}).text (type_string).text (":").end_tag ("h3");
+ writer.start_tag ("table", {"class", get_html_css_class (node)});
foreach (Api.Node child in children) {
writer.start_tag ("tr");
-
- writer.start_tag ("td", get_html_css_class (child), child.name);
+ writer.start_tag ("td", {"class", get_html_css_class (child), "id", child.name});
writer.text (child.name);
writer.end_tag ("td");
@@ -521,19 +520,19 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
Diagrams.write_struct_diagram ((Struct)element, realimgpath);
}
- writer.start_tag ("h2", css_title).text ("Object Hierarchy:").end_tag ("h2");
+ 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) {
- writer.start_tag ("div", css_style_content);
- writer.start_tag ("h1", css_title).text (node.name == null ? "Global Namespace" : node.full_name ()).end_tag ("h1");
- writer.simple_tag ("hr", css_hr);
- writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2");
+ writer.start_tag ("div", {"class", css_style_content});
+ writer.start_tag ("h1", {"class", css_title}).text (node.name == null ? "Global Namespace" : node.full_name ()).end_tag ("h1");
+ writer.simple_tag ("hr", {"class", css_hr});
+ writer.start_tag ("h2", {"class", css_title}).text ("Description:").end_tag ("h2");
this.write_documentation (node, parent);
- writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2");
+ writer.start_tag ("h2", {"class", css_title}).text ("Content:").end_tag ("h2");
if (node.name == null) {
this.write_child_namespaces ((Package) node.parent, parent);
@@ -554,17 +553,17 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
}
protected void write_package_content (Package node, Api.Node? parent, WikiPage? wikipage = null) {
- writer.start_tag ("div", css_style_content);
- writer.start_tag ("h1", css_title, node.name).text (node.name).end_tag ("h1");
- writer.simple_tag ("hr", css_headline_hr);
- writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2");
+ writer.start_tag ("div", {"class", css_style_content});
+ writer.start_tag ("h1", {"class", css_title, node.name}).text (node.name).end_tag ("h1");
+ writer.simple_tag ("hr", {"class", css_headline_hr});
+ writer.start_tag ("h2", {"class", css_title}).text ("Description:").end_tag ("h2");
if (wikipage != null) {
_renderer.set_container (parent);
_renderer.render (wikipage.documentation);
}
- writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2");
+ writer.start_tag ("h2", {"class", css_title}).text ("Content:").end_tag ("h2");
this.write_child_namespaces (node, parent);
@@ -593,16 +592,16 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
writer.stylesheet_link (css);
writer.end_tag ("head");
writer.start_tag ("body");
- writer.start_tag ("div", css_site_header);
+ writer.start_tag ("div", {"class", css_site_header});
writer.text ("%s Reference Manual".printf (title == null ? "" : title));
writer.end_tag ("div");
- writer.start_tag ("div", css_style_body);
+ writer.start_tag ("div", {"class", css_style_body});
}
protected void write_file_footer () {
writer.end_tag ("div");
writer.simple_tag ("br");
- writer.start_tag ("div", "site_foother");
+ writer.start_tag ("div", {"class", "site_foother"});
writer.text ("Generated by ");
writer.link ("http://www.valadoc.org/", "Valadoc");
writer.end_tag ("div");
diff --git a/src/libvaladoc/html-doclet/html-markupwriter.vala b/src/libvaladoc/html-doclet/html-markupwriter.vala
index ce821da..f7f8931 100755
--- a/src/libvaladoc/html-doclet/html-markupwriter.vala
+++ b/src/libvaladoc/html-doclet/html-markupwriter.vala
@@ -24,175 +24,38 @@
using GLib;
using Valadoc.Content;
-public class Valadoc.Html.MarkupWriter {
- private unowned FileStream stream;
- private int indent;
- private long current_column = 0;
- private bool last_was_tag;
- private bool wrap = true;
-
- private const int MAX_COLUMN = 150;
-
+public class Valadoc.Html.MarkupWriter : Valadoc.MarkupWriter {
public MarkupWriter (FileStream stream) {
- this.stream = stream;
- last_was_tag = true;
- }
-
- public void xml_declaration () {
- do_write ("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- indent = -1;
- last_was_tag = true;
- }
-
- public MarkupWriter start_tag (string name, string? css_class = null, string? id = null) {
- indent++;
- check_column (name);
- do_write ("<%s%s%s>".printf (
- name,
- css_class != null ? " class=\"%s\"".printf (css_class) : "",
- id != null ? " id=\"%s\"".printf (id) : ""));
- last_was_tag = true;
- return this;
- }
-
- public MarkupWriter start_tag_with_attrs (string name, string? css_class = null, string[] names, string[] values) {
- indent++;
- check_column (name);
-
- var content = "<%s%s".printf (
- name,
- css_class != null ? " class=\"%s\"".printf (css_class) : "");
- for (int i = 0; i < names.length; i++) {
- content += " %s=\"%s\"".printf (names[i], values[i]);
- }
- content += ">";
-
- do_write (content);
- last_was_tag = true;
- return this;
- }
-
- public MarkupWriter end_tag (string name) {
- check_column (name, true);
- do_write ("</%s>".printf (name));
- indent--;
- last_was_tag = true;
- return this;
- }
-
- public MarkupWriter simple_tag (string name, string? css_class = null) {
- indent++;
- check_column (name);
- do_write ("<%s%s/>".printf (
- name,
- css_class != null ? " class=\"%s\"".printf (css_class) : ""));
- indent--;
- last_was_tag = true;
- return this;
+ base (stream);
}
+ // edit
public MarkupWriter link (string url, string label, string? css_class = null) {
- indent++;
- check_column ("a");
- do_write ("<a%s href=\"%s\">%s</a>".printf (
- css_class != null ? " class=\"%s\"".printf (css_class) : "",
- url, label));
- indent--;
- last_was_tag = true;
+ if (css_class == null) {
+ start_tag ("a", {"href", url});
+ } else {
+ start_tag ("a", {"href", url, "class", css_class});
+ }
+ text (label);
+ end_tag ("a");
return this;
}
public MarkupWriter image (string src, string? caption = null, string? css_class = null) {
- indent++;
- check_column ("img");
- do_write ("<img%s src=\"%s\"%s/>".printf (
- css_class != null ? " class=\"%s\"".printf (css_class) : "",
- src,
- caption != null ? " alt=\"%s\"".printf (caption) : ""));
- indent--;
- last_was_tag = true;
- return this;
- }
-
- public MarkupWriter stylesheet_link (string url) {
- indent++;
- check_column ("link");
- do_write ("<link href=\"%s\" rel=\"stylesheet\" type=\"text/css\" />".printf (url));
- indent--;
- last_was_tag = true;
- return this;
- }
-
- public MarkupWriter text (string text) {
- if (wrap && text.length + current_column > MAX_COLUMN) {
- long wrote = 0;
- while (wrote < text.length) {
- long space_pos = -1;
- for (long i = wrote + 1; i < text.length; i++) {
- if (text[i] == ' ') {
- if (i - wrote + current_column > MAX_COLUMN) {
- break;
- }
- space_pos = i;
- }
- }
- if (text.length - wrote + current_column <= MAX_COLUMN) {
- do_write (text.substring (wrote));
- wrote = text.length + 1;
- } else if (space_pos == -1) {
- // Force line break
- } else {
- do_write (text.substring (wrote, space_pos - wrote));
- wrote = space_pos + 1;
- }
- if (wrote < text.length) {
- break_line ();
- do_write (" ");
- }
- }
+ if (css_class == null) {
+ simple_tag ("img", {"src", src, "alt", caption});
} else {
- do_write (text);
+ simple_tag ("img", {"src", src, "alt", caption, "class", css_class});
}
- last_was_tag = false;
return this;
}
- public MarkupWriter raw_text (string text) {
- do_write (text);
- last_was_tag = false;
+ public MarkupWriter stylesheet_link (string url) {
+ simple_tag ("link", {"href", url, "rel", "stylesheet", "type", "text/css"});
return this;
}
- public void set_source_wrap (bool wrap) {
- this.wrap = wrap;
- }
-
- private void break_line () {
- stream.printf ("\n");
- stream.printf (string.nfill (indent * 2, ' '));
- current_column = indent * 2;
- }
-
- private void do_write (string text) {
- if (wrap && current_column + text.length > MAX_COLUMN) {
- break_line ();
- }
- stream.printf (text);
- current_column += text.length;
- }
-
- private void check_column (string name, bool end_tag = false) {
- if (!wrap) {
- return;
- } else if (!end_tag && inline (name) && !last_was_tag) {
- return;
- } else if (end_tag && content_inline (name)) {
- return;
- }
- break_line ();
- }
-
- private bool inline (string name) {
+ private override bool inline_element (string name) {
return name != "html"
&& name != "head"
&& name != "title"
@@ -215,7 +78,7 @@ public class Valadoc.Html.MarkupWriter {
&& name != "img";
}
- private bool content_inline (string name) {
+ private override bool content_inline_element (string name) {
return name == "title"
|| name == "p"
|| name == "a"
diff --git a/src/libvaladoc/html-doclet/html-renderer.vala b/src/libvaladoc/html-doclet/html-renderer.vala
index 3ff91d8..67ff880 100755
--- a/src/libvaladoc/html-doclet/html-renderer.vala
+++ b/src/libvaladoc/html-doclet/html-renderer.vala
@@ -86,7 +86,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Deprecated));
write_taglets (
() => {
- writer.start_tag ("p", "main_title");
+ writer.start_tag ("p", {"class", "main_title"});
writer.start_tag ("b").text ("Deprecated:").end_tag ("b");
},
() => {
@@ -105,8 +105,8 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Param));
write_taglets (
() => {
- writer.start_tag ("h2", "main_title").text ("Parameters:").end_tag ("h2");
- writer.start_tag ("table", "main_parameter_table");
+ writer.start_tag ("h2", {"class", "main_title"}).text ("Parameters:").end_tag ("h2");
+ writer.start_tag ("table", {"class", "main_parameter_table"});
},
() => {
writer.end_tag ("table");
@@ -116,7 +116,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
(taglet) => {
var param = taglet as Taglets.Param;
writer.start_tag ("tr");
- writer.start_tag ("td", "main_parameter_table_name").text (param.parameter_name).end_tag ("td");
+ writer.start_tag ("td", {"class", "main_parameter_table_name"}).text (param.parameter_name).end_tag ("td");
writer.start_tag ("td");
param.accept_children (this);
writer.end_tag ("td");
@@ -126,8 +126,8 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Return));
write_taglets (
() => {
- writer.start_tag ("h2", "main_title").text ("Returns:").end_tag ("h2");
- writer.start_tag ("table", "main_parameter_table");
+ writer.start_tag ("h2", {"class", "main_title"}).text ("Returns:").end_tag ("h2");
+ writer.start_tag ("table", {"class", "main_parameter_table"});
},
() => {
writer.end_tag ("table");
@@ -146,8 +146,8 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Throws));
write_taglets (
() => {
- writer.start_tag ("h2", "main_title").text ("Returns:").end_tag ("h2");
- writer.start_tag ("table", "main_parameter_table");
+ writer.start_tag ("h2", {"class", "main_title"}).text ("Returns:").end_tag ("h2");
+ writer.start_tag ("table", {"class", "main_parameter_table"});
},
() => {
writer.end_tag ("table");
@@ -157,7 +157,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
(taglet) => {
var exception = taglet as Taglets.Throws;
writer.start_tag ("tr");
- writer.start_tag ("td", "main_parameter_table_name").text (exception.error_domain_name).end_tag ("td");
+ writer.start_tag ("td", {"class", "main_parameter_table_name"}).text (exception.error_domain_name).end_tag ("td");
writer.start_tag ("td");
exception.accept_children (this);
writer.end_tag ("td");
@@ -167,7 +167,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Since));
write_taglets (
() => {
- writer.start_tag ("h2", "main_title").text ("Since:").end_tag ("h2");
+ writer.start_tag ("h2", {"class", "main_title"}).text ("Since:").end_tag ("h2");
writer.start_tag ("p");
},
() => {
@@ -183,7 +183,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.See));
write_taglets (
() => {
- writer.start_tag ("h2", "main_title").text ("See also:").end_tag ("h2");
+ writer.start_tag ("h2", {"class", "main_title"}).text ("See also:").end_tag ("h2");
writer.start_tag ("p");
},
() => {
@@ -274,7 +274,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
break;
}
if (tag != null) {
- writer.start_tag (tag, css_type);
+ writer.start_tag (tag, {"class", css_type});
}
element.accept_children (this);
if (tag != null) {
@@ -289,16 +289,15 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
}
public override void visit_table (Table element) {
- writer.start_tag ("table", "main_table");
+ writer.start_tag ("table", {"class", "main_table"});
element.accept_children (this);
writer.end_tag ("table");
}
public override void visit_table_cell (TableCell element) {
- writer.start_tag_with_attrs ("td", "main_table",
- { "colspan", "rowspan" },
- { element.colspan.to_string (), element.rowspan.to_string () }
- );
+ writer.start_tag ("td", {"class", "main_table",
+ "colspan", element.colspan.to_string (),
+ "rowspan", element.rowspan.to_string ()});
element.accept_children (this);
writer.end_tag ("td");
}
diff --git a/src/libvaladoc/markupwriter.vala b/src/libvaladoc/markupwriter.vala
new file mode 100644
index 0000000..98655d8
--- /dev/null
+++ b/src/libvaladoc/markupwriter.vala
@@ -0,0 +1,177 @@
+/* markupwriter.vala
+ *
+ * Valadoc - a documentation tool for vala.
+ * Copyright (C) 2008-2009 Florian Brosch, Didier Villevalois
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Didier 'Ptitjes Villevalois <ptitjes free fr>
+ */
+
+
+
+public class Valadoc.MarkupWriter {
+ private unowned FileStream stream;
+ protected int indent;
+ private long current_column = 0;
+ private bool last_was_tag;
+ private bool wrap = true;
+
+ private const int MAX_COLUMN = 150;
+
+ public MarkupWriter (FileStream stream) {
+ this.stream = stream;
+ last_was_tag = true;
+ }
+
+ public void xml_declaration () {
+ do_write ("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ indent = -1;
+ last_was_tag = true;
+ }
+
+ //TODO: rename to start_tagv, create a start_tag (string name, string[] ...)
+ public MarkupWriter start_tag (string name, string[]? attributes=null) {
+ indent++;
+ check_column (name);
+
+ if (attributes.length % 2 != 0) {
+ attributes.resize (attributes.length+1);
+ attributes[attributes.length-1] = "";
+ }
+
+ var content = new StringBuilder ("<");
+ content.append (name);
+ for (int i = 0; i < attributes.length; i=i+2) {
+ content.append_printf (" %s=\"%s\"", attributes[i], attributes[i+1]);
+ }
+ content.append (">");
+
+ do_write (content.str);
+ last_was_tag = true;
+ return this;
+ }
+
+ public MarkupWriter simple_tag (string name, string[]? attributes=null) {
+ indent++;
+ check_column (name);
+
+ if (attributes.length % 2 != 0) {
+ attributes.resize (attributes.length+1);
+ attributes[attributes.length-1] = "";
+ }
+
+ var content = new StringBuilder ("<");
+ content.append (name);
+ for (int i = 0; i < attributes.length; i=i+2) {
+ content.append_printf (" %s=\"%s\"", attributes[i], attributes[i+1]);
+ }
+ content.append ("/>");
+
+ do_write (content.str);
+ indent--;
+ last_was_tag = true;
+ return this;
+ }
+
+
+ public MarkupWriter end_tag (string name) {
+ check_column (name, true);
+ do_write ("</%s>".printf (name));
+ indent--;
+ last_was_tag = true;
+ return this;
+ }
+
+ public MarkupWriter text (string text) {
+ if (wrap && text.length + current_column > MAX_COLUMN) {
+ long wrote = 0;
+ while (wrote < text.length) {
+ long space_pos = -1;
+ for (long i = wrote + 1; i < text.length; i++) {
+ if (text[i] == ' ') {
+ if (i - wrote + current_column > MAX_COLUMN) {
+ break;
+ }
+ space_pos = i;
+ }
+ }
+ if (text.length - wrote + current_column <= MAX_COLUMN) {
+ do_write (text.substring (wrote));
+ wrote = text.length + 1;
+ } else if (space_pos == -1) {
+ // Force line break
+ } else {
+ do_write (text.substring (wrote, space_pos - wrote));
+ wrote = space_pos + 1;
+ }
+ if (wrote < text.length) {
+ break_line ();
+ do_write (" ");
+ }
+ }
+ } else {
+ do_write (text);
+ }
+ last_was_tag = false;
+ return this;
+ }
+
+ public MarkupWriter raw_text (string text) {
+ do_write (text);
+ last_was_tag = false;
+ return this;
+ }
+
+ public void set_wrap (bool wrap) {
+ this.wrap = wrap;
+ }
+
+ private void break_line () {
+ stream.printf ("\n");
+ stream.printf (string.nfill (indent * 2, ' '));
+ current_column = indent * 2;
+ }
+
+ protected void do_write (string text) {
+ if (wrap && current_column + text.length > MAX_COLUMN) {
+ break_line ();
+ }
+ stream.printf (text);
+ current_column += text.length;
+ }
+
+ private void check_column (string name, bool end_tag = false) {
+ if (!wrap) {
+ return;
+ } else if (!end_tag && inline_element (name) && !last_was_tag) {
+ return;
+ } else if (end_tag && content_inline_element (name)) {
+ return;
+ }
+ break_line ();
+ }
+
+ protected virtual bool inline_element (string name) {
+ return false;
+ }
+
+ protected virtual bool content_inline_element (string name) {
+ return true;
+ }
+}
+
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]