From: Didier "Ptitjes Date: Mon, 19 Oct 2009 23:55:33 +0000 (+0200) Subject: Html: Introduce MarkupWriter to pretty-print generated html X-Git-Tag: 0.37.1~3^2~551 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e8b422fed2c5ef5b5f68bf76e47de0d73f278ecc;p=thirdparty%2Fvala.git Html: Introduce MarkupWriter to pretty-print generated html --- diff --git a/src/doclets/devhelp/doclet/doclet.vala b/src/doclets/devhelp/doclet/doclet.vala index 4d02cf68a..c3d29b18d 100755 --- a/src/doclets/devhelp/doclet/doclet.vala +++ b/src/doclets/devhelp/doclet/doclet.vala @@ -20,6 +20,7 @@ using Valadoc; using Valadoc.Api; +using Valadoc.Html; using Xml; using Gee; @@ -227,8 +228,8 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { } } - public override void visit_package ( Package file ) { - string pkg_name = file.name; + public override void visit_package (Package package) { + string pkg_name = package.name; string path = GLib.Path.build_filename ( this.settings.path, pkg_name ); string filepath = GLib.Path.build_filename ( path, "index.htm" ); @@ -236,26 +237,27 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { string devpath = GLib.Path.build_filename ( path, pkg_name + ".devhelp2" ); WikiPage wikipage = null; - if ( this.settings.pkg_name == file.name && this.tree.wikitree != null ) { + if ( this.settings.pkg_name == package.name && this.tree.wikitree != null ) { wikipage = this.tree.wikitree.search ("index.valadoc"); } this.package_dir_name = pkg_name; - var rt = DirUtils.create ( path, 0777 ); rt = DirUtils.create ( imgpath, 0777 ); copy_directory ( Config.doclet_path + "deps/", path ); this.devhelp = new DevhelpFormat ( pkg_name, "" ); - GLib.FileStream ifile = GLib.FileStream.open ( filepath, "w" ); - this.write_file_header ( ifile, this.css_path, pkg_name ); - this.write_file_content ( ifile, file, file, wikipage ); - this.write_file_footer ( ifile ); - ifile = null; + GLib.FileStream file = GLib.FileStream.open ( filepath, "w" ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, pkg_name); + this.write_file_content (package, package, wikipage); + this.write_file_footer (); + file = null; - file.visit_namespaces ( this ); + package.visit_namespaces ( this ); this.devhelp.save_file ( devpath ); } @@ -266,9 +268,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { string path = this.get_path ( ns ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w" ); - this.write_file_header ( file, this.css_path, ns.full_name() ); - this.write_namespace_content ( file, ns, ns ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, ns.full_name()); + this.write_namespace_content (ns, ns); + this.write_file_footer (); file = null; this.devhelp.add_keyword ( KeywordType.NAMESPACE, ns.name, path ); @@ -313,9 +317,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_keyword ( KeywordType.INTERFACE, iface.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, iface.full_name() ); - this.write_interface_content ( file, iface, iface ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, iface.full_name()); + this.write_interface_content (iface, iface); + this.write_file_footer (); file = null; } @@ -342,9 +348,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, cl.full_name() ); - this.write_class_content ( file, cl, cl ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, cl.full_name()); + this.write_class_content (cl, cl); + this.write_file_footer (); file = null; } @@ -365,10 +373,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, stru.full_name() ); - - this.write_struct_content ( file, stru, stru ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, stru.full_name()); + this.write_struct_content (stru, stru); + this.write_file_footer (); file = null; } @@ -382,9 +391,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( errdom.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, errdom.full_name() ); - this.write_error_domain_content ( file, errdom, errdom ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, errdom.full_name()); + this.write_error_domain_content (errdom, errdom); + this.write_file_footer (); file = null; } @@ -399,9 +410,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( en.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, en.full_name() ); - this.write_enum_content ( file, en, en ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, en.full_name()); + this.write_enum_content (en, en); + this.write_file_footer (); file = null; } @@ -413,9 +426,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( prop.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, prop.full_name() ); - this.write_property_content ( file, prop ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, prop.full_name()); + this.write_property_content (prop); + this.write_file_footer (); file = null; } @@ -427,9 +442,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( constant.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, constant.full_name() ); - this.write_constant_content (file, constant); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, constant.full_name()); + this.write_constant_content (constant); + this.write_file_footer (); file = null; } @@ -441,9 +458,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( field.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, field.full_name() ); - this.write_field_content (file, field); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, field.full_name()); + this.write_field_content (field); + this.write_file_footer (); file = null; } @@ -461,9 +480,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( del.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, del.full_name() ); - this.write_delegate_content ( file, del ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, del.full_name()); + this.write_delegate_content (del); + this.write_file_footer (); file = null; } @@ -475,9 +496,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( sig.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, sig.full_name() ); - write_signal_content ( file, sig ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, sig.full_name()); + write_signal_content (sig); + this.write_file_footer (); file = null; } @@ -489,9 +512,11 @@ public class Valadoc.Devhelp.Doclet : Valadoc.Html.BasicDoclet { this.devhelp.add_chapter ( m.name, path ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, m.full_name() ); - this.write_method_content (file, m); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, m.full_name()); + this.write_method_content (m); + this.write_file_footer (); file = null; } } @@ -506,3 +531,4 @@ public Type register_plugin ( ) { return typeof ( Valadoc.Devhelp.Doclet ); } + diff --git a/src/doclets/htm/doclet/doclet.vala b/src/doclets/htm/doclet/doclet.vala index e446218a3..28ea47bf0 100755 --- a/src/doclets/htm/doclet/doclet.vala +++ b/src/doclets/htm/doclet/doclet.vala @@ -20,6 +20,7 @@ using Valadoc; using Valadoc.Api; +using Valadoc.Html; using Gee; namespace Valadoc { @@ -104,6 +105,10 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { private const string css_path_wiki = "../style.css"; private const string css_path = "../style.css"; + construct { + _renderer = new HtmlRenderer (this); + } + private string get_real_path ( Api.Node element ) { return GLib.Path.build_filename ( this.settings.path, element.package.name, element.full_name () + ".html" ); } @@ -117,10 +122,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { this.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" ); - this.write_file_header ( file, this.css_path_package, settings.pkg_name ); - this.write_navi_packages ( file, tree ); - this.write_packages_content ( file, tree ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path_package, settings.pkg_name); + this.write_navi_packages (tree); + this.write_packages_content (tree); + this.write_file_footer (); file = null; Gee.Collection packages = tree.get_package_list (); @@ -129,21 +136,23 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { } } - public override void visit_package ( Package file ) { - string pkg_name = file.name; + public override void visit_package (Package package) { + string pkg_name = package.name; string path = GLib.Path.build_filename ( this.settings.path, pkg_name ); var rt = DirUtils.create ( path, 0777 ); rt = DirUtils.create ( GLib.Path.build_filename ( path, "img" ), 0777 ); - GLib.FileStream ifile = GLib.FileStream.open ( GLib.Path.build_filename ( path, "index.htm" ), "w" ); - this.write_file_header ( ifile, this.css_path, pkg_name ); - this.write_navi_file ( ifile, file, file ); - this.write_file_content ( ifile, file, file ); - this.write_file_footer ( ifile ); - ifile = null; + GLib.FileStream file = GLib.FileStream.open ( GLib.Path.build_filename ( path, "index.htm" ), "w" ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, pkg_name); + this.write_navi_file (package, package); + this.write_file_content (package, package); + this.write_file_footer (); + file = null; - file.visit_namespaces ( this ); + package.visit_namespaces ( this ); } public override void visit_namespace ( Namespace ns ) { @@ -151,10 +160,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { if ( ns.name != null ) { GLib.FileStream file = GLib.FileStream.open ( rpath, "w" ); - this.write_file_header ( file, this.css_path, ns.full_name() ); - this.write_navi_namespace ( file, ns ); - this.write_namespace_content ( file, ns, ns ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, ns.full_name()); + this.write_navi_namespace (ns); + this.write_namespace_content (ns, ns); + this.write_file_footer (); file = null; } @@ -185,10 +196,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { iface.visit_constants ( this ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, iface.full_name() ); - this.write_navi_interface ( file, iface, iface ); - this.write_interface_content ( file, iface, iface ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, iface.full_name()); + this.write_navi_interface (iface, iface); + this.write_interface_content (iface, iface); + this.write_file_footer (); file = null; } @@ -207,10 +220,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { cl.visit_constants ( this ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, cl.full_name() ); - this.write_navi_class ( file, cl, cl ); - this.write_class_content ( file, cl, cl ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, cl.full_name()); + this.write_navi_class (cl, cl); + this.write_class_content (cl, cl); + this.write_file_footer (); file = null; } @@ -223,10 +238,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { stru.visit_constants ( this ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, stru.full_name() ); - this.write_navi_struct ( file, stru, stru ); - this.write_struct_content ( file, stru, stru ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, stru.full_name()); + this.write_navi_struct (stru, stru); + this.write_struct_content (stru, stru); + this.write_file_footer (); file = null; } @@ -236,10 +253,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { errdom.visit_methods ( this ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, errdom.full_name() ); - this.write_navi_error_domain ( file, errdom, errdom ); - this.write_error_domain_content ( file, errdom, errdom ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, errdom.full_name()); + this.write_navi_error_domain (errdom, errdom); + this.write_error_domain_content (errdom, errdom); + this.write_file_footer (); file = null; } @@ -250,10 +269,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { en.visit_methods ( this ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, en.full_name() ); - this.write_navi_enum ( file, en, en ); - this.write_enum_content ( file, en, en ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, en.full_name()); + this.write_navi_enum (en, en); + this.write_enum_content (en, en); + this.write_file_footer (); file = null; } @@ -261,10 +282,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( prop ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, prop.full_name() ); - this.write_navi_property ( file, prop ); - this.write_property_content ( file, prop ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, prop.full_name()); + this.write_navi_property (prop); + this.write_property_content (prop); + this.write_file_footer (); file = null; } @@ -272,10 +295,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( constant ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, constant.full_name() ); - this.write_navi_constant ( file, constant ); - this.write_constant_content (file, constant); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, constant.full_name()); + this.write_navi_constant (constant); + this.write_constant_content (constant); + this.write_file_footer (); file = null; } @@ -283,10 +308,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( field ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, field.full_name() ); - this.write_navi_field ( file, field ); - this.write_field_content (file, field); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, field.full_name()); + this.write_navi_field (field); + this.write_field_content (field); + this.write_file_footer (); file = null; } @@ -300,10 +327,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( del ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, del.full_name() ); - this.write_navi_delegate ( file, del ); - this.write_delegate_content ( file, del ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, del.full_name()); + this.write_navi_delegate (del); + this.write_delegate_content (del); + this.write_file_footer (); file = null; } @@ -311,10 +340,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( sig ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, sig.full_name() ); - this.write_navi_signal ( file, sig ); - write_signal_content ( file, sig ); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, sig.full_name()); + this.write_navi_signal (sig); + write_signal_content (sig); + this.write_file_footer (); file = null; } @@ -322,10 +353,12 @@ public class Valadoc.HtmlDoclet : Valadoc.Html.BasicDoclet { string rpath = this.get_real_path ( m ); GLib.FileStream file = GLib.FileStream.open ( rpath, "w"); - this.write_file_header ( file, this.css_path, m.full_name() ); - this.write_navi_method ( file, m ); - this.write_method_content (file, m); - this.write_file_footer ( file ); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (this.css_path, m.full_name()); + this.write_navi_method (m); + this.write_method_content (m); + this.write_file_footer (); file = null; } } @@ -340,3 +373,4 @@ public Type register_plugin ( ) { return typeof ( Valadoc.HtmlDoclet ); } + diff --git a/src/doclets/htmlhelpers/deps/style.css b/src/doclets/htmlhelpers/deps/style.css index 4bac34b37..cd25af78b 100644 --- a/src/doclets/htmlhelpers/deps/style.css +++ b/src/doclets/htmlhelpers/deps/style.css @@ -12,7 +12,7 @@ ul.external_link { .main_diagram { display: block; margin: 0px auto; - width: 100px; + width: 50%; } .site_navi { @@ -504,3 +504,4 @@ a.navi_link:hover, a.external_link:hover { color: #ff01ff; } + diff --git a/src/doclets/htmlhelpers/doclet/Makefile.am b/src/doclets/htmlhelpers/doclet/Makefile.am index e1a1fdd7f..f69abb4f5 100644 --- a/src/doclets/htmlhelpers/doclet/Makefile.am +++ b/src/doclets/htmlhelpers/doclet/Makefile.am @@ -25,7 +25,8 @@ htmlhelpers_LTLIBRARIES = \ libhtmlhelpers_la_VALASOURCES = \ globals.vala \ doclet.vala \ - htmlrenderer.vala \ + htmlrenderer.vala \ + markupwriter.vala \ $(NULL) @@ -67,3 +68,4 @@ MAINTAINERCLEANFILES = \ $(libhtmlhelpers_la_VALASOURCES:.vala=.c) \ $(NULL) + diff --git a/src/doclets/htmlhelpers/doclet/doclet.vala b/src/doclets/htmlhelpers/doclet/doclet.vala index 98da9d96b..0548fe035 100755 --- a/src/doclets/htmlhelpers/doclet/doclet.vala +++ b/src/doclets/htmlhelpers/doclet/doclet.vala @@ -24,38 +24,39 @@ using Valadoc.Api; public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet { protected Settings settings; protected HtmlRenderer _renderer; - - construct { - _renderer = new HtmlRenderer (this); - } + protected MarkupWriter writer; public abstract void process (Settings settings, Api.Tree tree); - protected string? get_link ( Api.Node element, Api.Node? pos ) { - return get_html_link ( this.settings, element, pos ); + protected string? get_link (Api.Node element, Api.Node? pos) { + return get_html_link (this.settings, element, pos); } - protected void write_navi_entry_html_template ( GLib.FileStream file, string style, string content ) { - file.printf ( "\t
  • %s
  • \n", style, content ); + protected void write_navi_entry_html_template (string style, string content) { + writer.start_tag ("li", style); + writer.text (content); + writer.end_tag ("li"); } - protected void write_navi_entry_html_template_with_link ( GLib.FileStream file, string style, string link, string content ) { - file.printf ( "\t
  • %s
  • \n", style, css_navi_link, link, content ); + protected void write_navi_entry_html_template_with_link (string style, string link, string content) { + writer.start_tag ("li", style); + writer.link (css_navi_link, link, content); + writer.end_tag ("li"); } - protected void write_navi_entry ( GLib.FileStream file, Api.Node element, Api.Node? pos, string style, bool link, bool full_name = false ) { + protected void write_navi_entry (Api.Node element, Api.Node? pos, string style, bool link, bool full_name = false) { string name; - if ( element is Class ) { - if ( ((Class)element).is_abstract ) + if (element is Class) { + if (((Class)element).is_abstract) name = "" + element.name + ""; else name = element.name; } - else if ( element is Package ) { + else if (element is Package) { name = element.package.name; } - else if ( full_name == true && element is Namespace ) { + else if (full_name == true && element is Namespace) { string tmp = element.full_name(); name = (tmp == null)? "Global Namespace" : tmp; } @@ -64,23 +65,23 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet { name = (tmp == null)? "Global Namespace" : tmp; } - if ( link == true ) - this.write_navi_entry_html_template_with_link ( file, style, this.get_link (element, pos), name ); + if (link == true) + this.write_navi_entry_html_template_with_link (style, this.get_link (element, pos), name); else - this.write_navi_entry_html_template ( file, style, name ); + this.write_navi_entry_html_template (style, name); } protected void write_wiki_pages (Api.Tree tree, string css_path_wiki, string contentp) { - if ( tree.wikitree == null ) { + if (tree.wikitree == null) { return ; } - if ( tree.wikitree == null ) { + if (tree.wikitree == null) { return ; } Gee.Collection pages = tree.wikitree.get_pages(); - if ( pages.size == 0 ) { + if (pages.size == 0) { return ; } @@ -88,1348 +89,1379 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet { DirUtils.create (Path.build_filename (contentp, "img"), 0777); - foreach ( WikiPage page in pages ) { - if ( page.name != "index.valadoc" ) { - GLib.FileStream file = GLib.FileStream.open ( Path.build_filename(contentp, page.name.ndup( page.name.len()-7).replace ("/", ".")+"html"), "w" ); - this.write_file_header ( file, css_path_wiki, this.settings.pkg_name ); + foreach (WikiPage page in pages) { + if (page.name != "index.valadoc") { + GLib.FileStream file = GLib.FileStream.open (Path.build_filename(contentp, page.name.ndup(page.name.len()-7).replace ("/", ".")+"html"), "w"); + writer = new MarkupWriter (file); + _renderer.set_writer (writer); + this.write_file_header (css_path_wiki, this.settings.pkg_name); _renderer.set_container (page); - _renderer.set_filestream (file); _renderer.render (page.documentation); - this.write_file_footer ( file ); + this.write_file_footer (); } } } - protected void write_navi_top_entry ( GLib.FileStream file, Api.Node element, Api.Node? mself ) { + protected void write_navi_top_entry (Api.Node element, Api.Node? parent) { string name = (element.name == null)? "Global Namespace" : element.name; string style = null; - if ( element is Namespace ) + if (element is Namespace) style = css_navi_namespace; - else if ( element is Enum ) + else if (element is Enum) style = css_navi_enum; - else if ( element is ErrorDomain ) + else if (element is ErrorDomain) style = css_navi_error_domain; - else if ( element is Struct ) + else if (element is Struct) style = css_navi_struct; - else if ( element is Class ) - style = ( ((Class)element).is_abstract )? css_navi_abstract_class : css_navi_class; - else if ( element is Interface ) + else if (element is Class) + style = (((Class)element).is_abstract)? css_navi_abstract_class : css_navi_class; + else if (element is Interface) style = css_navi_iface; - else if ( element is Package ) { + else if (element is Package) { name = element.package.name; style = css_navi_package; } - file.printf ( "
      \n", css_navi ); + writer.start_tag ("ul", css_navi); - if ( element == mself || mself == null ) - this.write_navi_entry ( file, element, mself, style, false ); + if (element == parent || parent == null) + this.write_navi_entry (element, parent, style, false); else - this.write_navi_entry ( file, element, mself, style, true ); + this.write_navi_entry (element, parent, style, true); - file.puts ( "
    \n" ); - file.printf ( "\n
    \n", css_navi_hr ); + writer.end_tag ("ul"); + writer.simple_tag ("hr", css_navi_hr); } - protected void write_top_element_template ( GLib.FileStream file, string link ) { - file.printf ( "\n
    \n", css_navi, css_navi_package_index, css_navi_link, link, css_navi_hr ); + protected void write_top_element_template (string link) { + writer.start_tag ("ul", css_navi); + writer.start_tag ("li", css_navi_package_index); + writer.link (css_navi_link, link, "Packages"); + writer.end_tag ("li"); + writer.end_tag ("ul"); + writer.simple_tag ("hr", css_navi_hr); } - protected void write_top_elements ( GLib.FileStream file, Api.Node element, Api.Node? mself ) { + protected void write_top_elements (Api.Node element, Api.Node? parent) { Gee.ArrayList lst = new Gee.ArrayList (); Api.Node pos = element; - this.write_top_element_template ( file, "../index.html" ); + this.write_top_element_template ("../index.html"); - while ( pos != null ) { - lst.add ( pos ); + while (pos != null) { + lst.add (pos); pos = (Api.Node)pos.parent; } - for ( int i = lst.size-1; i >= 0 ; i-- ) { - Api.Node el = lst.get ( i ); + for (int i = lst.size-1; i >= 0 ; i--) { + Api.Node el = lst.get (i); - if ( el.name != null ) { - this.write_navi_top_entry ( file, el, mself ); + if (el.name != null) { + this.write_navi_top_entry (el, parent); } } } - protected void fetch_subnamespace_names ( NamespaceHandler pos, Gee.ArrayList lst ) { + protected void fetch_subnamespace_names (NamespaceHandler pos, Gee.ArrayList lst) { Gee.Collection nspaces = pos.get_namespace_list (); - foreach ( Namespace ns in nspaces ) { - lst.add ( ns ); - this.fetch_subnamespace_names ( ns, lst ); + foreach (Namespace ns in nspaces) { + lst.add (ns); + this.fetch_subnamespace_names (ns, lst); } } - protected void write_navi_file ( GLib.FileStream file, Package efile, Api.Node? pos ) { + protected void write_navi_file (Package efile, Api.Node? pos) { Gee.ArrayList ns_list = new Gee.ArrayList (); - this.fetch_subnamespace_names (efile, ns_list ); + this.fetch_subnamespace_names (efile, ns_list); - file.printf ( "\t\t\t
    \n", css_style_navigation ); + writer.start_tag ("div", css_style_navigation); - if ( pos == null ) - this.write_top_elements ( file, efile, null ); - else if ( pos == efile ) - this.write_top_elements ( file, efile, efile ); + if (pos == null) + this.write_top_elements (efile, null); + else if (pos == efile) + this.write_top_elements (efile, efile); else - this.write_top_elements ( file, (Api.Node)pos.parent.parent, pos ); + this.write_top_elements ((Api.Node)pos.parent.parent, pos); - file.printf ( "\t\t\t\t
      \n", css_navi ); + writer.start_tag ("ul", css_navi); Namespace globals = null; - foreach ( Namespace ns in ns_list ) { - if ( ns.name == null ) + foreach (Namespace ns in ns_list) { + if (ns.name == null) globals = ns; else - this.write_navi_entry ( file, ns, pos, css_navi_namespace, true, true ); + this.write_navi_entry (ns, pos, css_navi_namespace, true, true); } - if ( globals != null ) { - this.write_navi_child_namespaces_inline_withouth_block ( file, globals, pos ); + if (globals != null) { + this.write_navi_child_namespaces_inline_withouth_block (globals, pos); } - file.puts ( "\t\t\t\t
    \n" ); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("ul"); + writer.end_tag ("div"); } - protected void write_navi_child_namespaces_inline_withouth_block ( GLib.FileStream file, Namespace ns, Api.Node? mself ) { - this.write_navi_child_namespaces_without_childs ( file, ns, mself ); - this.write_navi_child_classes_without_childs ( file, ns, mself ); - this.write_navi_child_interfaces_without_childs ( file, ns, mself ); - this.write_navi_child_structs_without_childs ( file, ns, mself ); - this.write_navi_child_enums_without_childs ( file, ns, mself ); - this.write_navi_child_error_domains_without_childs ( file, ns, mself ); - this.write_navi_child_delegates ( file, ns, mself ); - this.write_navi_child_static_methods ( file, ns, mself ); - this.write_navi_child_methods ( file, ns, mself ); - this.write_navi_child_fields ( file, ns, mself ); - this.write_navi_child_constants ( file, ns, mself ); + protected void write_navi_child_namespaces_inline_withouth_block (Namespace ns, Api.Node? parent) { + this.write_navi_child_namespaces_without_childs (ns, parent); + this.write_navi_child_classes_without_childs (ns, parent); + this.write_navi_child_interfaces_without_childs (ns, parent); + this.write_navi_child_structs_without_childs (ns, parent); + this.write_navi_child_enums_without_childs (ns, parent); + this.write_navi_child_error_domains_without_childs (ns, parent); + this.write_navi_child_delegates (ns, parent); + this.write_navi_child_static_methods (ns, parent); + this.write_navi_child_methods (ns, parent); + this.write_navi_child_fields (ns, parent); + this.write_navi_child_constants (ns, parent); } - protected void write_navi_child_namespaces_inline ( GLib.FileStream file, Namespace ns, Api.Node? mself ) { - file.printf ( "
      \n", css_navi ); + protected void write_navi_child_namespaces_inline (Namespace ns, Api.Node? parent) { + writer.start_tag ("ul", css_navi); - if ( ns.name == null ) { - this.write_navi_child_namespaces_without_childs ( file, (Package)ns.parent, ns ); + if (ns.name == null) { + this.write_navi_child_namespaces_without_childs ((Package)ns.parent, ns); } - this.write_navi_child_namespaces_inline_withouth_block ( file, ns, mself ); + this.write_navi_child_namespaces_inline_withouth_block (ns, parent); - file.puts ( "
    \n" ); + writer.end_tag ("ul"); } - protected void write_navi_child_namespaces ( GLib.FileStream file, Namespace ns, Api.Node? mself ) { - this.write_top_elements ( file, ns, mself ); - this.write_navi_child_namespaces_inline ( file, ns, mself ); + protected void write_navi_child_namespaces (Namespace ns, Api.Node? parent) { + this.write_top_elements (ns, parent); + this.write_navi_child_namespaces_inline (ns, parent); } - protected void write_navi_struct_inline ( GLib.FileStream file, Struct stru, Api.Node? mself ) { - file.printf ( "
      \n", css_navi ); - this.write_navi_child_construction_methods ( file, stru, mself ); - this.write_navi_child_static_methods ( file, stru, mself ); - this.write_navi_child_methods ( file, stru, mself ); - this.write_navi_child_fields ( file, stru, mself ); - this.write_navi_child_constants ( file, stru, mself ); - file.puts ( "
    \n" ); + protected void write_navi_struct_inline (Struct stru, Api.Node? parent) { + writer.start_tag ("ul", css_navi); + this.write_navi_child_construction_methods (stru, parent); + this.write_navi_child_static_methods (stru, parent); + this.write_navi_child_methods (stru, parent); + this.write_navi_child_fields (stru, parent); + this.write_navi_child_constants (stru, parent); + writer.end_tag ("ul"); } - protected void write_navi_struct ( GLib.FileStream file, Struct stru, Api.Node? mself ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, stru, mself ); - this.write_navi_struct_inline ( file, stru, mself ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_struct (Struct stru, Api.Node? parent) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (stru, parent); + this.write_navi_struct_inline (stru, parent); + writer.end_tag ("div"); } - protected void write_navi_interface_inline ( GLib.FileStream file, Interface iface, Api.Node? mself ) { - file.printf ( "
      \n", css_navi ); - this.write_navi_child_static_methods ( file, iface, mself ); - this.write_navi_child_delegates ( file, iface, mself ); - this.write_navi_child_methods ( file, iface, mself ); - this.write_navi_child_signals ( file, iface, mself ); - this.write_navi_child_properties ( file, iface, mself ); - this.write_navi_child_fields ( file, iface, mself ); - this.write_navi_child_constants ( file, iface, mself ); - file.puts ( "
    \n" ); + protected void write_navi_interface_inline (Interface iface, Api.Node? parent) { + writer.start_tag ("ul", css_navi); + this.write_navi_child_static_methods (iface, parent); + this.write_navi_child_delegates (iface, parent); + this.write_navi_child_methods (iface, parent); + this.write_navi_child_signals (iface, parent); + this.write_navi_child_properties (iface, parent); + this.write_navi_child_fields (iface, parent); + this.write_navi_child_constants (iface, parent); + writer.end_tag ("ul"); } - protected void write_navi_interface ( GLib.FileStream file, Interface iface, Api.Node? mself ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, iface, mself ); - this.write_navi_interface_inline ( file, iface, mself ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_interface (Interface iface, Api.Node? parent) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (iface, parent); + this.write_navi_interface_inline (iface, parent); + writer.end_tag ("div"); } - protected void write_navi_enum_inline ( GLib.FileStream file, Enum en, Api.Node? mself ) { - Gee.Collection enum_values = en.get_enum_values ( ); - file.printf ( "
      \n", css_navi ); + protected void write_navi_enum_inline (Enum en, Api.Node? parent) { + Gee.Collection enum_values = en.get_enum_values (); + writer.start_tag ("ul", css_navi); - foreach ( Api.EnumValue env in enum_values ) { - this.write_navi_entry ( file, env, en, css_navi_enval, true ); + foreach (Api.EnumValue env in enum_values) { + this.write_navi_entry (env, en, css_navi_enval, true); } - this.write_navi_child_static_methods ( file, en, mself ); - this.write_navi_child_methods ( file, en, mself ); - file.puts ( "
    \n" ); + this.write_navi_child_static_methods (en, parent); + this.write_navi_child_methods (en, parent); + writer.end_tag ("ul"); } - protected void write_navi_enum ( GLib.FileStream file, Enum en, Api.Node? mself ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, en, mself ); - this.write_navi_enum_inline ( file, en, mself ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_enum (Enum en, Api.Node? parent) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (en, parent); + this.write_navi_enum_inline (en, parent); + writer.end_tag ("div"); } - protected void write_navi_error_domain_inline ( GLib.FileStream file, ErrorDomain errdom, Api.Node? mself = null ) { - Gee.Collection error_codes = errdom.get_error_code_list ( ); - file.printf ( "
      \n", css_navi ); + protected void write_navi_error_domain_inline (ErrorDomain errdom, Api.Node? parent = null) { + Gee.Collection error_codes = errdom.get_error_code_list (); + writer.start_tag ("ul", css_navi); - foreach ( ErrorCode ec in error_codes ) { - this.write_navi_entry ( file, ec, errdom, css_navi_errdomcode, true ); + foreach (ErrorCode ec in error_codes) { + this.write_navi_entry (ec, errdom, css_navi_errdomcode, true); } - this.write_navi_child_static_methods ( file, errdom, mself ); - this.write_navi_child_methods ( file, errdom, mself ); - file.puts ( "
    \n" ); + this.write_navi_child_static_methods (errdom, parent); + this.write_navi_child_methods (errdom, parent); + writer.end_tag ("ul"); } - protected void write_navi_namespace ( GLib.FileStream file, Namespace ns ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, ns, ns ); - this.write_navi_child_namespaces_inline ( file, ns, ns ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_namespace (Namespace ns) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (ns, ns); + this.write_navi_child_namespaces_inline (ns, ns); + writer.end_tag ("div"); } - protected void write_navi_error_domain ( GLib.FileStream file, ErrorDomain errdom, Api.Node? mself ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, errdom, mself ); - this.write_navi_error_domain_inline ( file, errdom, mself ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_error_domain (ErrorDomain errdom, Api.Node? parent) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (errdom, parent); + this.write_navi_error_domain_inline (errdom, parent); + writer.end_tag ("div"); } - protected void write_navi_class_inline ( GLib.FileStream file, Class cl, Api.Node? mself ) { - file.printf ( "
      \n", css_navi ); - this.write_navi_child_construction_methods ( file, cl, mself ); - this.write_navi_child_static_methods ( file, cl, mself ); - this.write_navi_child_classes_without_childs ( file, cl, mself ); - this.write_navi_child_structs_without_childs ( file, cl, mself ); - this.write_navi_child_enums_without_childs ( file, cl, mself ); - this.write_navi_child_delegates ( file, cl, mself ); - this.write_navi_child_methods ( file, cl, mself ); - this.write_navi_child_signals ( file, cl, mself ); - this.write_navi_child_properties ( file, cl, mself ); - this.write_navi_child_fields ( file, cl, mself ); - this.write_navi_child_constants ( file, cl, mself ); - file.puts ( "
    \n" ); + protected void write_navi_class_inline (Class cl, Api.Node? parent) { + writer.start_tag ("ul", css_navi); + this.write_navi_child_construction_methods (cl, parent); + this.write_navi_child_static_methods (cl, parent); + this.write_navi_child_classes_without_childs (cl, parent); + this.write_navi_child_structs_without_childs (cl, parent); + this.write_navi_child_enums_without_childs (cl, parent); + this.write_navi_child_delegates (cl, parent); + this.write_navi_child_methods (cl, parent); + this.write_navi_child_signals (cl, parent); + this.write_navi_child_properties (cl, parent); + this.write_navi_child_fields (cl, parent); + this.write_navi_child_constants (cl, parent); + writer.end_tag ("ul"); } - protected void write_navi_class ( GLib.FileStream file, Class cl, Api.Node? mself ) { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, cl, mself ); - this.write_navi_class_inline ( file, cl, mself ); - file.puts ( "\t\t\t
    \n" ); + protected void write_navi_class (Class cl, Api.Node? parent) { + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (cl, parent); + this.write_navi_class_inline (cl, parent); + writer.end_tag ("div"); } - protected void write_navi_method ( GLib.FileStream file, Method m ) { + protected void write_navi_method (Method m) { Api.Node parent = (Api.Node)m.parent; - if ( parent.name == null ) { - this.write_navi_file ( file, (Package)parent.parent, m ); + if (parent.name == null) { + this.write_navi_file ((Package)parent.parent, m); } else { - file.printf ( "\t\t\t
    \n", css_style_navigation ); + writer.start_tag ("div", css_style_navigation); - this.write_top_elements ( file, parent, m ); + this.write_top_elements (parent, m); - if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, m ); - else if ( m.parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, m ); - else if ( m.parent is Struct ) - this.write_navi_struct_inline ( file, (Struct)parent, m ); - else if ( m.parent is Enum ) - this.write_navi_enum_inline ( file, (Enum)parent, m ); - else if ( m.parent is ErrorDomain ) - this.write_navi_error_domain_inline ( file, (ErrorDomain)parent, m ); - else if ( m.parent is Namespace ) - this.write_navi_child_namespaces_inline ( file, (Namespace)parent, m ); + if (parent is Class) + this.write_navi_class_inline ((Class)parent, m); + else if (m.parent is Interface) + this.write_navi_interface_inline ((Interface)parent, m); + else if (m.parent is Struct) + this.write_navi_struct_inline ((Struct)parent, m); + else if (m.parent is Enum) + this.write_navi_enum_inline ((Enum)parent, m); + else if (m.parent is ErrorDomain) + this.write_navi_error_domain_inline ((ErrorDomain)parent, m); + else if (m.parent is Namespace) + this.write_navi_child_namespaces_inline ((Namespace)parent, m); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } } - protected void write_navi_property ( GLib.FileStream file, Property prop ) { + protected void write_navi_property (Property prop) { Api.Node parent = (Api.Node)prop.parent; - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, parent, prop ); + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (parent, prop); - if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, prop ); - else if ( parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, prop ); + if (parent is Class) + this.write_navi_class_inline ((Class)parent, prop); + else if (parent is Interface) + this.write_navi_interface_inline ((Interface)parent, prop); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } - protected void write_navi_signal ( GLib.FileStream file, Api.Signal sig ) { + protected void write_navi_signal (Api.Signal sig) { Api.Node parent = (Api.Node)sig.parent; - file.printf ( "\t\t\t
    \n", css_style_navigation ); + writer.start_tag ("div", css_style_navigation); - this.write_top_elements ( file, parent, sig ); + this.write_top_elements (parent, sig); - if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, sig ); - else if ( parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, sig ); + if (parent is Class) + this.write_navi_class_inline ((Class)parent, sig); + else if (parent is Interface) + this.write_navi_interface_inline ((Interface)parent, sig); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } - protected void write_navi_constant ( GLib.FileStream file, Constant c ) { + protected void write_navi_constant (Constant c) { Api.Node parent = (Api.Node)c.parent; - if ( parent.name == null ) { - this.write_navi_file ( file, (Package)parent.parent, c ); + if (parent.name == null) { + this.write_navi_file ((Package)parent.parent, c); } else { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, parent, c ); + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (parent, c); - if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, c ); - else if ( parent is Struct ) - this.write_navi_struct_inline ( file, (Struct)parent, c ); - else if ( parent is Namespace ) - this.write_navi_child_namespaces_inline ( file, (Namespace)parent, c ); - else if ( parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, c ); + if (parent is Class) + this.write_navi_class_inline ((Class)parent, c); + else if (parent is Struct) + this.write_navi_struct_inline ((Struct)parent, c); + else if (parent is Namespace) + this.write_navi_child_namespaces_inline ((Namespace)parent, c); + else if (parent is Interface) + this.write_navi_interface_inline ((Interface)parent, c); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } } - protected void write_navi_field ( GLib.FileStream file, Field f ) { + protected void write_navi_field (Field f) { Api.Node parent = (Api.Node)f.parent; - if ( parent.name == null ) { - this.write_navi_file ( file, (Package)parent.parent, f ); + if (parent.name == null) { + this.write_navi_file ((Package)parent.parent, f); } else { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, parent, f ); + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (parent, f); - if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, f ); - else if ( parent is Struct ) - this.write_navi_struct_inline ( file, (Struct)parent, f ); - else if ( parent is Namespace ) - this.write_navi_child_namespaces_inline ( file, (Namespace)parent, f ); - else if ( parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, f ); + if (parent is Class) + this.write_navi_class_inline ((Class)parent, f); + else if (parent is Struct) + this.write_navi_struct_inline ((Struct)parent, f); + else if (parent is Namespace) + this.write_navi_child_namespaces_inline ((Namespace)parent, f); + else if (parent is Interface) + this.write_navi_interface_inline ((Interface)parent, f); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } } - protected void write_navi_delegate ( GLib.FileStream file, Delegate del ) { + protected void write_navi_delegate (Delegate del) { Api.Node parent = (Api.Node)del.parent; - if ( parent.name == null ) { - this.write_navi_file ( file, (Package)parent.parent, del ); + if (parent.name == null) { + this.write_navi_file ((Package)parent.parent, del); } else { - file.printf ( "\t\t\t
    \n", css_style_navigation ); - this.write_top_elements ( file, parent, del ); + writer.start_tag ("div", css_style_navigation); + this.write_top_elements (parent, del); - if ( parent is Namespace ) - this.write_navi_child_namespaces_inline ( file, (Namespace)parent, del ); - else if ( parent is Class ) - this.write_navi_class_inline ( file, (Class)parent, del ); - else if ( parent is Interface ) - this.write_navi_interface_inline ( file, (Interface)parent, del ); + if (parent is Namespace) + this.write_navi_child_namespaces_inline ((Namespace)parent, del); + else if (parent is Class) + this.write_navi_class_inline ((Class)parent, del); + else if (parent is Interface) + this.write_navi_interface_inline ((Interface)parent, del); - file.puts ( "\t\t\t
    \n" ); + writer.end_tag ("div"); } } - protected void write_navi_child_methods_collection ( GLib.FileStream file, Gee.Collection methods, Api.Node? mself ) { - foreach ( Method m in methods ) { - if ( !m.is_static ) { + protected void write_navi_child_methods_collection (Gee.Collection methods, Api.Node? parent) { + foreach (Method m in methods) { + if (!m.is_static) { string css; - if ( m.is_virtual || m.is_override ) + if (m.is_virtual || m.is_override) css = css_navi_virtual_method; - else if ( m.is_abstract ) + else if (m.is_abstract) css = css_navi_abstract_method; else css = css_navi_method; - if ( m == mself ) - this.write_navi_entry ( file, m, mself, css, false ); + if (m == parent) + this.write_navi_entry (m, parent, css, false); else - this.write_navi_entry ( file, m, mself, css, true ); + this.write_navi_entry (m, parent, css, true); } } } - protected void write_navi_child_construction_methods_collection ( GLib.FileStream file, Gee.Collection methods, Api.Node? mself ) { - foreach ( Method m in methods ) { - if ( m == mself ) - this.write_navi_entry ( file, m, mself, css_navi_construction_method, false ); + protected void write_navi_child_construction_methods_collection (Gee.Collection methods, Api.Node? parent) { + foreach (Method m in methods) { + if (m == parent) + this.write_navi_entry (m, parent, css_navi_construction_method, false); else - this.write_navi_entry ( file, m, mself, css_navi_construction_method, true ); + this.write_navi_entry (m, parent, css_navi_construction_method, true); } } - protected void write_navi_child_static_methods_collection ( GLib.FileStream file, Gee.Collection methods, Api.Node? mself ) { - foreach ( Method m in methods ) { - if ( m.is_static ) { - if ( m == mself ) - this.write_navi_entry ( file, m, mself, css_navi_static_method, false ); + protected void write_navi_child_static_methods_collection (Gee.Collection methods, Api.Node? parent) { + foreach (Method m in methods) { + if (m.is_static) { + if (m == parent) + this.write_navi_entry (m, parent, css_navi_static_method, false); else - this.write_navi_entry ( file, m, mself, css_navi_static_method, true ); + this.write_navi_entry (m, parent, css_navi_static_method, true); } } } - protected void write_navi_child_methods ( GLib.FileStream file, MethodHandler mh, Api.Node? mself ) { - Gee.Collection methods = mh.get_method_list ( ); - this.write_navi_child_methods_collection ( file, methods, mself ); + protected void write_navi_child_methods (MethodHandler mh, Api.Node? parent) { + Gee.Collection methods = mh.get_method_list (); + this.write_navi_child_methods_collection (methods, parent); } - protected void write_navi_child_static_methods ( GLib.FileStream file, MethodHandler mh, Api.Node? mself ) { - Gee.Collection methods = mh.get_method_list ( ); - this.write_navi_child_static_methods_collection ( file, methods, mself ); + protected void write_navi_child_static_methods (MethodHandler mh, Api.Node? parent) { + Gee.Collection methods = mh.get_method_list (); + this.write_navi_child_static_methods_collection (methods, parent); } - protected void write_navi_child_classes_without_childs_collection ( GLib.FileStream file, Gee.Collection classes, Api.Node? mself ) { - foreach ( Class cl in classes ) { - if ( cl == mself ) - this.write_navi_entry ( file, cl, mself, (cl.is_abstract)? css_navi_abstract_class : css_navi_class, false ); + protected void write_navi_child_classes_without_childs_collection (Gee.Collection classes, Api.Node? parent) { + foreach (Class cl in classes) { + if (cl == parent) + this.write_navi_entry (cl, parent, (cl.is_abstract)? css_navi_abstract_class : css_navi_class, false); else - this.write_navi_entry ( file, cl, mself, (cl.is_abstract)? css_navi_abstract_class : css_navi_class, true ); + this.write_navi_entry (cl, parent, (cl.is_abstract)? css_navi_abstract_class : css_navi_class, true); } } - protected void write_navi_child_classes_without_childs ( GLib.FileStream file, ClassHandler clh, Api.Node? mself ) { - Gee.Collection classes = clh.get_class_list ( ); - this.write_navi_child_classes_without_childs_collection ( file, classes, mself ); + protected void write_navi_child_classes_without_childs (ClassHandler clh, Api.Node? parent) { + Gee.Collection classes = clh.get_class_list (); + this.write_navi_child_classes_without_childs_collection (classes, parent); } - protected void write_navi_child_construction_methods ( GLib.FileStream file, ConstructionMethodHandler cmh, Api.Node? mself ) { - Gee.Collection methods = cmh.get_construction_method_list ( ); - this.write_navi_child_construction_methods_collection ( file, methods, mself ); + protected void write_navi_child_construction_methods (ConstructionMethodHandler cmh, Api.Node? parent) { + Gee.Collection methods = cmh.get_construction_method_list (); + this.write_navi_child_construction_methods_collection (methods, parent); } - protected void write_navi_child_signals ( GLib.FileStream file, Api.SignalHandler sh, Api.Node? mself ) { - Gee.Collection signals = sh.get_signal_list ( ); + protected void write_navi_child_signals (Api.SignalHandler sh, Api.Node? parent) { + Gee.Collection signals = sh.get_signal_list (); - foreach ( Api.Signal sig in signals ) { - if ( sig == mself ) - this.write_navi_entry ( file, sig, mself, css_navi_sig, false ); + foreach (Api.Signal sig in signals) { + if (sig == parent) + this.write_navi_entry (sig, parent, css_navi_sig, false); else - this.write_navi_entry ( file, sig, mself, css_navi_sig, true ); + this.write_navi_entry (sig, parent, css_navi_sig, true); } } - protected void write_navi_child_properties ( GLib.FileStream file, PropertyHandler ph, Api.Node? mself ) { - Gee.Collection properties = ph.get_property_list ( ); + protected void write_navi_child_properties (PropertyHandler ph, Api.Node? parent) { + Gee.Collection properties = ph.get_property_list (); - foreach ( Property p in properties ) { + foreach (Property p in properties) { string css; - if ( p.is_virtual ) + if (p.is_virtual) css = css_navi_virtual_prop; - else if ( p.is_abstract ) + else if (p.is_abstract) css = css_navi_abstract_prop; else css = css_navi_prop; - if ( p == mself ) - this.write_navi_entry ( file, p, mself, css, false ); + if (p == parent) + this.write_navi_entry (p, parent, css, false); else - this.write_navi_entry ( file, p, mself, css, true ); + this.write_navi_entry (p, parent, css, true); } } - protected void write_navi_child_fields_collection ( GLib.FileStream file, Gee.Collection fields, Api.Node? mself ) { - foreach ( Field f in fields ) { - if ( f == mself ) - this.write_navi_entry ( file, f, mself, css_navi_field, false ); + protected void write_navi_child_fields_collection (Gee.Collection fields, Api.Node? parent) { + foreach (Field f in fields) { + if (f == parent) + this.write_navi_entry (f, parent, css_navi_field, false); else - this.write_navi_entry ( file, f, mself, css_navi_field, true ); + this.write_navi_entry (f, parent, css_navi_field, true); } } - protected void write_navi_child_fields ( GLib.FileStream file, FieldHandler fh, Api.Node? mself ) { - Gee.Collection fields = fh.get_field_list ( ); - this.write_navi_child_fields_collection ( file, fields, mself ); + protected void write_navi_child_fields (FieldHandler fh, Api.Node? parent) { + Gee.Collection fields = fh.get_field_list (); + this.write_navi_child_fields_collection (fields, parent); } - protected void write_navi_child_constants_collection ( GLib.FileStream file, Gee.Collection constants, Api.Node? mself ) { - foreach ( Constant c in constants ) { - if ( c == mself ) - this.write_navi_entry ( file, c, mself, css_navi_constant, false ); + protected void write_navi_child_constants_collection (Gee.Collection constants, Api.Node? parent) { + foreach (Constant c in constants) { + if (c == parent) + this.write_navi_entry (c, parent, css_navi_constant, false); else - this.write_navi_entry ( file, c, mself, css_navi_constant, true ); + this.write_navi_entry (c, parent, css_navi_constant, true); } } - protected void write_navi_child_constants ( GLib.FileStream file, ConstantHandler ch, Api.Node? mself ) { - Gee.Collection constants = ch.get_constant_list ( ); - this.write_navi_child_constants_collection ( file, constants, mself ); + protected void write_navi_child_constants (ConstantHandler ch, Api.Node? parent) { + Gee.Collection constants = ch.get_constant_list (); + this.write_navi_child_constants_collection (constants, parent); } - protected void write_navi_child_structs_without_childs_collection ( GLib.FileStream file, Gee.Collection structs, Api.Node? mself ) { - foreach ( Struct stru in structs ) { - if ( stru == mself ) - this.write_navi_entry ( file, stru, mself, css_navi_struct, false ); + protected void write_navi_child_structs_without_childs_collection (Gee.Collection structs, Api.Node? parent) { + foreach (Struct stru in structs) { + if (stru == parent) + this.write_navi_entry (stru, parent, css_navi_struct, false); else - this.write_navi_entry ( file, stru, mself, css_navi_struct, true ); + this.write_navi_entry (stru, parent, css_navi_struct, true); } } - protected void write_navi_child_structs_without_childs ( GLib.FileStream file, StructHandler strh, Api.Node? mself ) { - Gee.Collection structs = strh.get_struct_list ( ); - this.write_navi_child_structs_without_childs_collection ( file, structs, mself ); + protected void write_navi_child_structs_without_childs (StructHandler strh, Api.Node? parent) { + Gee.Collection structs = strh.get_struct_list (); + this.write_navi_child_structs_without_childs_collection (structs, parent); } - protected void write_navi_child_delegates_collection ( GLib.FileStream file, Gee.Collection delegates, Api.Node? mself ) { - foreach ( Delegate del in delegates ) { - if ( del == mself ) - this.write_navi_entry ( file, del, mself, css_navi_del, false ); + protected void write_navi_child_delegates_collection (Gee.Collection delegates, Api.Node? parent) { + foreach (Delegate del in delegates) { + if (del == parent) + this.write_navi_entry (del, parent, css_navi_del, false); else - this.write_navi_entry ( file, del, mself, css_navi_del, true ); + this.write_navi_entry (del, parent, css_navi_del, true); } } - protected void write_navi_child_delegates ( GLib.FileStream file, DelegateHandler delh, Api.Node? mself ) { - Gee.Collection delegates = delh.get_delegate_list ( ); - this.write_navi_child_delegates_collection ( file, delegates, mself ); + protected void write_navi_child_delegates (DelegateHandler delh, Api.Node? parent) { + Gee.Collection delegates = delh.get_delegate_list (); + this.write_navi_child_delegates_collection (delegates, parent); } - protected void write_navi_child_interfaces_without_childs_collection ( GLib.FileStream file, Gee.Collection interfaces, Api.Node? mself ) { - foreach ( Interface iface in interfaces ) { - if ( iface == mself ) - this.write_navi_entry ( file, iface, mself, css_navi_iface, false ); + protected void write_navi_child_interfaces_without_childs_collection (Gee.Collection interfaces, Api.Node? parent) { + foreach (Interface iface in interfaces) { + if (iface == parent) + this.write_navi_entry (iface, parent, css_navi_iface, false); else - this.write_navi_entry ( file, iface, mself, css_navi_iface, true ); + this.write_navi_entry (iface, parent, css_navi_iface, true); } } - protected void write_navi_child_interfaces_without_childs ( GLib.FileStream file, Namespace ifh, Api.Node? mself ) { - Gee.Collection interfaces = ifh.get_interface_list ( ); - this.write_navi_child_interfaces_without_childs_collection ( file, interfaces, mself ); + protected void write_navi_child_interfaces_without_childs (Namespace ifh, Api.Node? parent) { + Gee.Collection interfaces = ifh.get_interface_list (); + this.write_navi_child_interfaces_without_childs_collection (interfaces, parent); } - protected void write_navi_child_enums_without_childs_collection ( GLib.FileStream file, Gee.Collection enums, Api.Node? mself ) { - foreach ( Enum en in enums ) { - if ( en == mself ) - this.write_navi_entry ( file, en, mself, css_navi_enum, false ); + protected void write_navi_child_enums_without_childs_collection (Gee.Collection enums, Api.Node? parent) { + foreach (Enum en in enums) { + if (en == parent) + this.write_navi_entry (en, parent, css_navi_enum, false); else - this.write_navi_entry ( file, en, mself, css_navi_enum, true ); + this.write_navi_entry (en, parent, css_navi_enum, true); } } - protected void write_navi_child_enums_without_childs ( GLib.FileStream file, EnumHandler eh, Api.Node? mself ) { - Gee.Collection enums = eh.get_enum_list ( ); - this.write_navi_child_enums_without_childs_collection ( file, enums, mself ); + protected void write_navi_child_enums_without_childs (EnumHandler eh, Api.Node? parent) { + Gee.Collection enums = eh.get_enum_list (); + this.write_navi_child_enums_without_childs_collection (enums, parent); } - protected void write_navi_child_error_domains_without_childs_collection ( GLib.FileStream file, Gee.Collection errordomains, Api.Node? mself ) { - foreach ( ErrorDomain errdom in errordomains ) { - if ( errdom == mself ) - this.write_navi_entry ( file, errdom, mself, css_navi_error_domain, false ); + protected void write_navi_child_error_domains_without_childs_collection (Gee.Collection errordomains, Api.Node? parent) { + foreach (ErrorDomain errdom in errordomains) { + if (errdom == parent) + this.write_navi_entry (errdom, parent, css_navi_error_domain, false); else - this.write_navi_entry ( file, errdom, mself, css_navi_error_domain, true ); + this.write_navi_entry (errdom, parent, css_navi_error_domain, true); } } - protected void write_navi_child_error_domains_without_childs ( GLib.FileStream file, Namespace errdomh, Api.Node? mself ) { - Gee.Collection errordomains = errdomh.get_error_domain_list ( ); - this.write_navi_child_error_domains_without_childs_collection ( file, errordomains, mself ); + protected void write_navi_child_error_domains_without_childs (Namespace errdomh, Api.Node? parent) { + Gee.Collection errordomains = errdomh.get_error_domain_list (); + this.write_navi_child_error_domains_without_childs_collection (errordomains, parent); } - protected void write_navi_child_namespaces_without_childs ( GLib.FileStream file, NamespaceHandler nsh, Api.Node? mself ) { - Gee.Collection namespaces = nsh.get_namespace_list ( ); - foreach ( Namespace ns in namespaces ) { - if ( ns.name == null ) + protected void write_navi_child_namespaces_without_childs (NamespaceHandler nsh, Api.Node? parent) { + Gee.Collection namespaces = nsh.get_namespace_list (); + foreach (Namespace ns in namespaces) { + if (ns.name == null) continue ; - if ( ns == mself ) - this.write_navi_entry ( file, ns, mself, css_navi_namespace, false ); + if (ns == parent) + this.write_navi_entry (ns, parent, css_navi_namespace, false); else - this.write_navi_entry ( file, ns, mself, css_navi_namespace, true ); + this.write_navi_entry (ns, parent, css_navi_namespace, true); } } - protected void write_package_note ( GLib.FileStream file, Api.Node element ) { + protected void write_package_note (Api.Node element) { string package = element.package.name; - if ( package == null ) + if (package == null) return ; - file.printf ( "\n\n
    \nPackage: %s\n\n", package ); + writer.simple_tag ("br"); + writer.start_tag ("b").text ("Package:").end_tag ("b"); + writer.text (package); } - protected void write_namespace_note ( GLib.FileStream file, Api.Node element ) { + protected void write_namespace_note (Api.Node element) { Namespace? ns = element.nspace; - if ( ns == null ) + if (ns == null) return ; - if ( ns.name == null ) + if (ns.name == null) return ; - file.printf ( "\n\n
    \nNamespace: %s\n\n", ns.full_name() ); + writer.simple_tag ("br"); + writer.start_tag ("b").text ("Namespace:").end_tag ("b"); + writer.text (ns.full_name()); } - private void write_brief_description ( GLib.FileStream file, Api.Node element , Api.Node? pos ) { + private void write_brief_description (Api.Node element , Api.Node? pos) { Comment? doctree = element.documentation; - if ( doctree == null ) + if (doctree == null) return ; Gee.List description = doctree.content; - if ( description.size > 0 ) { - file.printf ( " - ", css_inline_navigation_brief_description ); + if (description.size > 0) { + writer.start_tag ("span", css_inline_navigation_brief_description); + writer.text (" - "); _renderer.set_container (pos); - _renderer.set_filestream (file); _renderer.render_children (description.get (0)); - file.printf ( " \n" ); + writer.end_tag ("span"); } } - private void write_documentation ( GLib.FileStream file, Api.Node element , Api.Node? pos ) { + private void write_documentation (Api.Node element , Api.Node? pos) { Comment? doctree = element.documentation; - if ( doctree == null ) + if (doctree == null) return ; _renderer.set_container (pos); - _renderer.set_filestream (file); _renderer.render (doctree); } - private void write_signature ( GLib.FileStream file, Api.Node element , Api.Node? pos ) { + private void write_signature (Api.Node element , Api.Node? pos) { _renderer.set_container (pos); - _renderer.set_filestream (file); _renderer.render (element.signature); } - public void write_navi_packages_inline ( GLib.FileStream file, Api.Tree tree ) { - file.printf ( "
      \n", css_navi ); - foreach ( Package pkg in tree.get_package_list() ) { + public void write_navi_packages_inline (Api.Tree tree) { + writer.start_tag ("ul", css_navi); + foreach (Package pkg in tree.get_package_list()) { if (pkg.is_visitor_accessible (settings)) { - file.printf ( "\t
    • %s\n", get_html_inline_navigation_link_css_class (pkg), css_navi_link, this.get_link(pkg, null), pkg.name ); + writer.start_tag ("li", get_html_inline_navigation_link_css_class (pkg)); + writer.link (css_navi_link, get_link (pkg, null), pkg.name); // brief description - file.puts ( "
    • \n" ); + writer.end_tag ("li"); } else { - file.printf ( "\t
    • %s
    • \n", get_html_inline_navigation_link_css_class (pkg), pkg.name ); + writer.start_tag ("li", get_html_inline_navigation_link_css_class (pkg)); + writer.text (pkg.name); + writer.end_tag ("li"); } } - file.puts ( "\n" ); + writer.end_tag ("li"); } - public void write_navi_packages ( GLib.FileStream file, Api.Tree tree ) { - file.printf ( "\t\t\t
      \n", css_style_navigation ); - this.write_navi_packages_inline ( file, tree ); - file.puts ( "\t\t\t
      \n" ); + public void write_navi_packages (Api.Tree tree) { + writer.start_tag ("div", css_style_navigation); + this.write_navi_packages_inline (tree); + writer.end_tag ("div"); } - public void write_packages_content ( GLib.FileStream file, Api.Tree tree ) { - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      Packages:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); + public void write_packages_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); - WikiPage? wikiindex = (tree.wikitree == null)? null : tree.wikitree.search ( "index.valadoc" ); - if ( wikiindex != null ) { + WikiPage? wikiindex = (tree.wikitree == null)? null : tree.wikitree.search ("index.valadoc"); + if (wikiindex != null) { _renderer.set_container (null); - _renderer.set_filestream (file); _renderer.render (wikiindex.documentation); } - file.printf ( "\t\t\t\t

      Content:

      \n", css_title ); - file.printf ( "\t\t\t\t

      Packages:

      \n", css_title ); - this.write_navi_packages_inline ( file, tree ); - file.puts ( "\t\t\t
      \n" ); + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + writer.start_tag ("h3", css_title).text ("Packages:").end_tag ("h3"); + this.write_navi_packages_inline (tree); + writer.end_tag ("div"); } - public void write_method_content (GLib.FileStream file, Method m) { - string full_name = m.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_method_content (Method m) { + string full_name = m.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (m.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", css_code_definition); - this.write_signature (file, m, m); + this.write_signature (m, m); - file.printf ( "\n\t\t\t\t
      \n" ); + writer.end_tag ("div"); - this.write_documentation ( file, m, m ); + this.write_documentation (m, m); - if ( m.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, m ); - this.write_package_note ( file, m ); + if (m.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (m); + this.write_package_note (m); } - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); } - public void write_child_error_values ( GLib.FileStream file, ErrorDomain errdom ) { + public void write_child_error_values (ErrorDomain errdom) { Gee.Collection error_codes = errdom.get_error_code_list (); - if ( error_codes.size > 0 ) { - file.printf ( "

      Error Codes:

      \n", css_title ); - file.printf ( "\n", css_errordomain_table ); - foreach ( ErrorCode errcode in error_codes ) { - file.puts ( "\n" ); - file.printf ( "\t\n", css_errordomain_table_name, errcode.name, errcode.name ); - file.printf ( "\t\n" ); - file.puts ( "\n" ); + if (error_codes.size > 0) { + writer.start_tag ("h3", css_title).text ("Error Codes:").end_tag ("h3"); + writer.start_tag ("table", css_errordomain_table); + foreach (ErrorCode errcode in error_codes) { + writer.start_tag ("tr"); + + writer.start_tag ("td", css_errordomain_table_name, errcode.name); + writer.text (errcode.name); + writer.end_tag ("td"); + + writer.start_tag ("td", css_errordomain_table_text); + this.write_documentation (errcode, errcode); + writer.end_tag ("td"); + + writer.end_tag ("tr"); } - file.puts ( "
      %s\n", css_errordomain_table_text ); - - this.write_documentation ( file, errcode, errcode ); - - file.puts ( "\t
      \n" ); + writer.end_tag ("table"); } } - public void write_signal_content ( GLib.FileStream file, Api.Signal sig ) { - string full_name = sig.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_signal_content (Api.Signal sig) { + string full_name = sig.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (sig.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", css_code_definition); - this.write_signature (file, sig, sig); + this.write_signature (sig, sig); - file.printf ( "\n\t\t\t\t
      \n" ); - this.write_documentation ( file, sig, sig ); - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); + this.write_documentation (sig, sig); + writer.end_tag ("div"); } - public void write_delegate_content ( GLib.FileStream file, Delegate del ) { - string full_name = del.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_delegate_content (Delegate del) { + string full_name = del.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (del.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", css_code_definition); - this.write_signature (file, del, del); + this.write_signature (del, del); - file.printf ( "\n\t\t\t\t
      \n" ); + writer.end_tag ("div"); - this.write_documentation ( file, del, del ); + this.write_documentation (del, del); - if ( del.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, del ); - this.write_package_note ( file, del ); + if (del.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (del); + this.write_package_note (del); } - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); } - public void write_field_content (GLib.FileStream file, Field field) { - string full_name = field.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_field_content (Field field) { + string full_name = field.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (field.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", css_code_definition); - this.write_signature (file, field, field); + this.write_signature (field, field); - file.printf ( "\n\t\t\t\t
      \n" ); + writer.end_tag ("div"); - this.write_documentation ( file, field, field ); + this.write_documentation (field, field); - if ( field.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, field ); - this.write_package_note ( file, field ); + if (field.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (field); + this.write_package_note (field); } - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); } - public void write_constant_content (GLib.FileStream file, Constant constant) { - string full_name = constant.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_constant_content (Constant constant) { + string full_name = constant.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (constant.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", css_code_definition); - this.write_signature (file, constant, constant); + this.write_signature (constant, constant); - file.printf ( "\n\t\t\t\t
      \n" ); + writer.end_tag ("div"); - this.write_documentation ( file, constant, constant ); + this.write_documentation (constant, constant); - if ( constant.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, constant ); - this.write_package_note ( file, constant ); + if (constant.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (constant); + this.write_package_note (constant); } - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); } - public void write_property_content ( GLib.FileStream file, Property prop ) { - string full_name = prop.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_property_content (Property prop) { + string full_name = prop.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (prop.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", css_code_definition); - this.write_signature (file, prop, prop); + this.write_signature (prop, prop); - file.printf ( "\n\t\t\t\t
      \n" ); - this.write_documentation ( file, prop, prop ); - file.puts ( "\t\t\t
      \n" ); + writer.end_tag ("div"); + this.write_documentation (prop, prop); + writer.end_tag ("div"); } - public void write_enum_content ( GLib.FileStream file, Enum en, Api.Node? mself ) { - string full_name = en.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); + public void write_enum_content (Enum en, Api.Node? parent) { + string full_name = en.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (en.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); - this.write_documentation ( file, en, en ); + this.write_documentation (en, en); - if ( en.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, en ); - this.write_package_note ( file, en ); + if (en.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (en); + this.write_package_note (en); } - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); - this.write_child_enum_values ( file, en ); - this.write_child_static_methods ( file, en, mself ); - this.write_child_methods ( file, en, mself ); - file.puts ( "\t\t\t
      \n" ); + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + this.write_child_enum_values (en); + this.write_child_static_methods (en, parent); + this.write_child_methods (en, parent); + writer.end_tag ("div"); } - private void write_child_enum_values ( GLib.FileStream file, Enum en ) { + private void write_child_enum_values (Enum en) { Gee.Collection enum_values = en.get_enum_values (); - if ( enum_values.size > 0 ) { - file.printf ( "

      Enum Values:

      \n", css_title ); - file.printf ( "\n", css_enum_table ); - foreach ( Api.EnumValue enval in enum_values ) { - file.puts ( "\n" ); - file.printf ( "\t\n", css_enum_table_name, enval.name, enval.name ); - file.printf ( "\t\n" ); - file.puts ( "\n" ); + if (enum_values.size > 0) { + writer.start_tag ("h3", css_title).text ("Enum Values:").end_tag ("h3"); + writer.start_tag ("table", css_enum_table); + foreach (Api.EnumValue enval in enum_values) { + writer.start_tag ("tr"); + + writer.start_tag ("td", css_enum_table_name, enval.name); + writer.text (enval.name); + writer.end_tag ("td"); + + writer.start_tag ("td", css_enum_table_text); + this.write_documentation (enval, en); + writer.end_tag ("td"); + + writer.end_tag ("tr"); } - file.puts ( "
      %s\n", css_enum_table_text ); - - this.write_documentation ( file, enval, en ); - - file.puts ( "\t
      \n" ); + writer.end_tag ("table"); } } - protected void write_child_namespaces ( GLib.FileStream file, NamespaceHandler nh, Api.Node? mself ) { + protected void write_child_namespaces (NamespaceHandler nh, Api.Node? parent) { Gee.ArrayList nsl = new Gee.ArrayList (); - this.fetch_subnamespace_names ( nh, nsl ); + this.fetch_subnamespace_names (nh, nsl); - if ( nsl.size == 0 ) + if (nsl.size == 0) return ; - if ( nsl.size == 1 ) { - if ( nsl.get(0).name == null ) + if (nsl.size == 1) { + if (nsl.get(0).name == null) return ; } - bool with_childs = (mself == null)? false : mself is Package; + bool with_childs = (parent == null)? false : parent is Package; - file.printf ("

      Namespaces:

      \n", css_title); - file.printf ("
        \n", css_inline_navigation); + writer.start_tag ("h3", css_title).text ("Namespaces:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); foreach (Namespace ns in nsl) { if (ns.name != null) { - file.printf ("\t
      • %s\n", css_inline_navigation_namespace, css_navi_link, this.get_link(ns, mself), ns.name); - this.write_brief_description (file, ns , mself); - file.printf ("
      • \n"); + writer.start_tag ("li", css_inline_navigation_namespace); + writer.link (css_navi_link, get_link (ns, parent), ns.name); + this.write_brief_description (ns , parent); + writer.end_tag ("li"); if (with_childs == true) { - this.write_child_classes (file, ns, mself); - this.write_child_interfaces (file, ns, mself); - this.write_child_structs (file, ns, mself); - this.write_child_enums (file, ns, mself); - this.write_child_errordomains (file, ns, mself); - this.write_child_delegates (file, ns, mself); - this.write_child_methods (file, ns, mself); - this.write_child_fields (file, ns, mself); - this.write_child_constants (file, ns, mself); + this.write_child_classes (ns, parent); + this.write_child_interfaces (ns, parent); + this.write_child_structs (ns, parent); + this.write_child_enums (ns, parent); + this.write_child_errordomains (ns, parent); + this.write_child_delegates (ns, parent); + this.write_child_methods (ns, parent); + this.write_child_fields (ns, parent); + this.write_child_constants (ns, parent); } } } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } - protected void write_child_methods ( GLib.FileStream file, MethodHandler mh, Api.Node? mself ) { + protected void write_child_methods (MethodHandler mh, Api.Node? parent) { Gee.Collection methods = mh.get_method_list (); - Gee.ArrayList imethods = new Gee.ArrayList ( ); - foreach ( Method m in methods ) { - if ( !m.is_static ) - imethods.add ( m ); - } - - if ( imethods.size > 0 ) { - file.printf ( "

      Methods:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Method m in imethods ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (m), css_navi_link, this.get_link(m, mself), m.name ); - this.write_brief_description ( file, m , mself ); - file.printf ( "
      • \n" ); + Gee.ArrayList imethods = new Gee.ArrayList (); + foreach (Method m in methods) { + if (!m.is_static) + imethods.add (m); + } + + if (imethods.size > 0) { + writer.start_tag ("h3", css_title).text ("Methods:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Method m in imethods) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (m)); + writer.link (css_navi_link, get_link (m, parent), m.name); + this.write_brief_description (m , parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_dependencies ( GLib.FileStream file, Package package, Api.Node? mself ) { + protected void write_child_dependencies (Package package, Api.Node? parent) { Gee.Collection deps = package.get_full_dependency_list (); - if ( deps.size == 0 ) + if (deps.size == 0) return ; - file.printf ( "

      Dependencies:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Package p in deps ) { - string link = this.get_link(p, mself); - if ( link == null ) - file.printf ( "\t
      • %s
      • \n", css_inline_navigation_package, p.name ); - else - file.printf ( "\t
      • %s
      • \n", css_inline_navigation_package, css_navi_link, link, p.name ); + writer.start_tag ("h2", css_title).text ("Dependencies:").end_tag ("h2"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Package p in deps) { + string link = this.get_link(p, parent); + if (link == null) + writer.start_tag ("li", css_inline_navigation_package, p.name).text (p.name).end_tag ("li"); + else { + writer.start_tag ("li", css_inline_navigation_package); + writer.link (css_navi_link, get_link (p, parent), p.name); + writer.end_tag ("li"); + } } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } - protected void write_child_static_methods ( GLib.FileStream file, MethodHandler mh, Api.Node? mself ) { + protected void write_child_static_methods (MethodHandler mh, Api.Node? parent) { Gee.Collection methods = mh.get_method_list (); - Gee.ArrayList static_methods = new Gee.ArrayList ( ); - foreach ( Method m in methods ) { - if ( m.is_static ) - static_methods.add ( m ); + Gee.ArrayList static_methods = new Gee.ArrayList (); + foreach (Method m in methods) { + if (m.is_static) + static_methods.add (m); } - if ( static_methods.size > 0 ) { - file.printf ( "

      Static Methods:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Method m in static_methods ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (m), css_navi_link, this.get_link(m, mself), m.name ); - this.write_brief_description ( file, m , mself ); - file.printf ( "
      • \n" ); + if (static_methods.size > 0) { + writer.start_tag ("h3", css_title).text ("Static Methods:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Method m in static_methods) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (m)); + writer.link (css_navi_link, get_link (m, parent), m.name); + this.write_brief_description (m , parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - public void write_class_content ( GLib.FileStream file, Class cl, Api.Node? mself ) { - string full_name = cl.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - this.write_image_block ( file, cl ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); + public void write_class_content (Class cl, Api.Node? parent) { + string full_name = cl.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (cl.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + this.write_image_block (cl); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); + writer.start_tag ("div", css_code_definition); - this.write_signature (file, cl, cl); + this.write_signature (cl, cl); - file.printf ( "\n\t\t\t\t
      \n" ); + writer.end_tag ("div"); - this.write_documentation ( file, cl, cl ); + this.write_documentation (cl, cl); - if ( cl.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, cl ); - this.write_package_note ( file, cl ); + if (cl.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (cl); + this.write_package_note (cl); } - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); - this.write_child_construction_methods ( file, cl, mself ); - this.write_child_static_methods ( file, cl, mself ); - this.write_child_classes ( file, cl, mself ); - this.write_child_structs ( file, cl, mself ); - this.write_child_enums ( file, cl, mself ); - this.write_child_delegates ( file, cl, mself ); - this.write_child_methods ( file, cl, mself ); - this.write_child_signals ( file, cl, mself ); - this.write_child_properties ( file, cl, mself ); - this.write_child_fields ( file, cl, mself ); - this.write_child_constants ( file, cl, mself ); - file.puts ( "\t\t\t
      \n" ); + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + this.write_child_construction_methods (cl, parent); + this.write_child_static_methods (cl, parent); + this.write_child_classes (cl, parent); + this.write_child_structs (cl, parent); + this.write_child_enums (cl, parent); + this.write_child_delegates (cl, parent); + this.write_child_methods (cl, parent); + this.write_child_signals (cl, parent); + this.write_child_properties (cl, parent); + this.write_child_fields (cl, parent); + this.write_child_constants (cl, parent); + writer.end_tag ("div"); } - public void write_interface_content ( GLib.FileStream file, Interface iface, Api.Node? mself ) { + public void write_interface_content (Interface iface, Api.Node? parent) { string full_name = iface.full_name (); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - this.write_image_block ( file, iface ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); - - this.write_signature (file, iface, iface); - - file.printf ( "\n\t\t\t\t
      \n" ); - - this.write_documentation ( file, iface, iface ); - - if ( iface.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, iface ); - this.write_package_note ( file, iface ); - } - file.printf ( "\t\t\t\t

      Content:

      \n", css_title ); - this.write_child_static_methods ( file, iface, mself ); - this.write_child_classes ( file, iface, mself ); - this.write_child_structs ( file, iface, mself ); - this.write_child_enums ( file, iface, mself ); - this.write_child_delegates ( file, iface, mself ); - this.write_child_methods ( file, iface, mself ); - this.write_child_signals ( file, iface, mself ); - this.write_child_properties ( file, iface, mself ); - this.write_child_fields ( file, iface, mself ); - this.write_child_constants ( file, iface, mself ); - file.puts ( "\t\t\t
      \n" ); - } - - public void write_error_domain_content ( GLib.FileStream file, ErrorDomain errdom, Api.Node? mself ) { - string full_name = errdom.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - - this.write_documentation ( file, errdom, errdom ); - - if ( errdom.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, errdom ); - this.write_package_note ( file, errdom ); - } - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); - this.write_child_error_values ( file, errdom ); - this.write_child_static_methods ( file, errdom, mself ); - this.write_child_methods ( file, errdom, mself ); - file.puts ( "\t\t\t
      \n" ); - } - - public void write_struct_content ( GLib.FileStream file, Struct stru, Api.Node? mself ) { - string full_name = stru.full_name ( ); - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, full_name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - this.write_image_block ( file, stru ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); - - file.printf ( "\t\t\t\t
      \n\t", css_code_definition ); - - this.write_signature (file, stru, stru); - - file.printf ( "\n\t\t\t\t
      \n" ); - - this.write_documentation ( file, stru, stru ); - - if ( stru.parent is Namespace ) { - file.puts ( "\t\t\t\t
      \n" ); - this.write_namespace_note ( file, stru ); - this.write_package_note ( file, stru ); - } - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); - this.write_child_construction_methods ( file, stru, mself ); - this.write_child_static_methods ( file, stru, mself ); - this.write_child_methods ( file, stru, mself ); - this.write_child_fields ( file, stru, mself ); - this.write_child_constants ( file, stru, mself ); - file.puts ( "\t\t\t
      \n" ); - } - - protected string get_img_path ( Api.Node element ) { + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (iface.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + this.write_image_block (iface); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); + writer.start_tag ("div", css_code_definition); + + this.write_signature (iface, iface); + + writer.end_tag ("div"); + + this.write_documentation (iface, iface); + + if (iface.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (iface); + this.write_package_note (iface); + } + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + this.write_child_static_methods (iface, parent); + this.write_child_classes (iface, parent); + this.write_child_structs (iface, parent); + this.write_child_enums (iface, parent); + this.write_child_delegates (iface, parent); + this.write_child_methods (iface, parent); + this.write_child_signals (iface, parent); + this.write_child_properties (iface, parent); + this.write_child_fields (iface, parent); + this.write_child_constants (iface, parent); + writer.end_tag ("div"); + } + + public void write_error_domain_content (ErrorDomain errdom, Api.Node? parent) { + string full_name = errdom.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (errdom.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); + + this.write_documentation (errdom, errdom); + + if (errdom.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (errdom); + this.write_package_note (errdom); + } + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + this.write_child_error_values (errdom); + this.write_child_static_methods (errdom, parent); + this.write_child_methods (errdom, parent); + writer.end_tag ("div"); + } + + public void write_struct_content (Struct stru, Api.Node? parent) { + string full_name = stru.full_name (); + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, full_name).text (stru.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + this.write_image_block (stru); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); + + writer.start_tag ("div", css_code_definition); + + this.write_signature (stru, stru); + + writer.end_tag ("div"); + + this.write_documentation (stru, stru); + + if (stru.parent is Namespace) { + writer.simple_tag ("br"); + this.write_namespace_note (stru); + this.write_package_note (stru); + } + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); + this.write_child_construction_methods (stru, parent); + this.write_child_static_methods (stru, parent); + this.write_child_methods (stru, parent); + this.write_child_fields (stru, parent); + this.write_child_constants (stru, parent); + writer.end_tag ("div"); + } + + protected string get_img_path (Api.Node element) { return "img/" + element.full_name () + ".png"; } - protected string get_img_real_path ( Api.Node element ) { + protected string get_img_real_path (Api.Node element) { return this.settings.path + "/" + element.package.name + "/" + "img/" + element.full_name () + ".png"; } - protected void write_child_constants ( GLib.FileStream file, ConstantHandler ch, Api.Node? mself ) { + protected void write_child_constants (ConstantHandler ch, Api.Node? parent) { Gee.Collection constants = ch.get_constant_list (); - if ( constants.size > 0 ) { - file.printf ( "

      Constants:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Constant c in constants ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (c), css_navi_link, this.get_link(c, mself), c.name ); - this.write_brief_description ( file, c, mself ); - file.printf ( "
      • \n" ); + if (constants.size > 0) { + writer.start_tag ("h3", css_title).text ("Constants:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Constant c in constants) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (c)); + writer.link (css_navi_link, get_link (c, parent), c.name); + this.write_brief_description (c, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_enums ( GLib.FileStream file, EnumHandler eh, Api.Node? mself ) { + protected void write_child_enums (EnumHandler eh, Api.Node? parent) { Gee.Collection enums = eh.get_enum_list (); - if ( enums.size > 0 ) { - file.printf ( "

      Enums:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Enum en in enums ) { - file.printf ( "\t
      • %s\n", get_html_inline_navigation_link_css_class (en), css_navi_link, this.get_link(en, mself), en.name ); - this.write_brief_description ( file, en, mself ); - file.printf ( "
      • \n" ); + if (enums.size > 0) { + writer.start_tag ("h3", css_title).text ("Enums:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Enum en in enums) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (en)); + writer.link (css_navi_link, get_link (en, parent), en.name); + this.write_brief_description (en, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_errordomains ( GLib.FileStream file, ErrorDomainHandler eh, Api.Node? mself ) { + protected void write_child_errordomains (ErrorDomainHandler eh, Api.Node? parent) { Gee.Collection errdoms = eh.get_error_domain_list (); - if ( errdoms.size > 0 ) { - file.printf ( "

      Errordomains:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( ErrorDomain err in errdoms ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (err), css_navi_link, this.get_link(err, mself), err.name ); - this.write_brief_description ( file, err, mself ); - file.printf ( "
      • \n" ); + if (errdoms.size > 0) { + writer.start_tag ("h3", css_title).text ("Errordomains:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (ErrorDomain err in errdoms) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (err)); + writer.link (css_navi_link, get_link (err, parent), err.name); + this.write_brief_description (err, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_construction_methods ( GLib.FileStream file, ConstructionMethodHandler cmh, Api.Node? mself ) { + protected void write_child_construction_methods (ConstructionMethodHandler cmh, Api.Node? parent) { Gee.Collection methods = cmh.get_construction_method_list (); - if ( methods.size > 0 ) { - file.printf ( "

      Construction Methods:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Method m in methods ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (m), css_navi_link, this.get_link(m, mself), m.name ); - this.write_brief_description ( file, m, mself ); - file.printf ( "
      • \n" ); + if (methods.size > 0) { + writer.start_tag ("h3", css_title).text ("Construction Methods:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Method m in methods) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (m)); + writer.link (css_navi_link, get_link (m, parent), m.name); + this.write_brief_description (m, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_image_block ( GLib.FileStream file, Api.Node element ) { - string realimgpath = this.get_img_real_path ( element ); - string imgpath = this.get_img_path ( element ); + protected void write_image_block (Api.Node element) { + string realimgpath = this.get_img_real_path (element); + string imgpath = this.get_img_path (element); - if ( element is Class ) { - Diagrams.write_class_diagram ( (Class)element, realimgpath ); + if (element is Class) { + Diagrams.write_class_diagram ((Class)element, realimgpath); } - else if ( element is Interface ) { - Diagrams.write_interface_diagram ( (Interface)element, realimgpath ); + else if (element is Interface) { + Diagrams.write_interface_diagram ((Interface)element, realimgpath); } - else if ( element is Struct ) { - Diagrams.write_struct_diagram ( (Struct)element, realimgpath ); + else if (element is Struct) { + Diagrams.write_struct_diagram ((Struct)element, realimgpath); } - file.printf ( "

      Object Hierarchy:

      \n", css_title ); - file.printf ( "\n", css_diagram, imgpath ); + writer.start_tag ("h2", css_title).text ("Object Hierarchy:").end_tag ("h2"); + writer.image (css_diagram, imgpath); } - protected void write_child_fields ( GLib.FileStream file, FieldHandler fh, Api.Node? mself ) { + protected void write_child_fields (FieldHandler fh, Api.Node? parent) { Gee.Collection fields = fh.get_field_list (); - if ( fields.size > 0 ) { - file.printf ( "

      Fields:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Field f in fields ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class(f), css_navi_link, this.get_link(f, mself), f.name ); - this.write_brief_description ( file, f, mself ); - file.printf ( "
      • \n" ); + if (fields.size > 0) { + writer.start_tag ("h3", css_title).text ("Fields:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Field f in fields) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class(f)); + writer.link (css_navi_link, get_link (f, parent), f.name); + this.write_brief_description (f, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_properties ( GLib.FileStream file, PropertyHandler ph, Api.Node? mself ) { + protected void write_child_properties (PropertyHandler ph, Api.Node? parent) { Gee.Collection properties = ph.get_property_list (); - if ( properties.size > 0 ) { - file.printf ( "

      Properties:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Property prop in properties ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (prop), css_navi_link, this.get_link(prop, mself), prop.name ); - this.write_brief_description ( file, prop, mself ); - file.printf ( "
      • \n" ); + if (properties.size > 0) { + writer.start_tag ("h3", css_title).text ("Properties:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Property prop in properties) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (prop)); + writer.link (css_navi_link, get_link (prop, parent), prop.name); + this.write_brief_description (prop, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_signals ( GLib.FileStream file, Api.SignalHandler sh, Api.Node? mself ) { + protected void write_child_signals (Api.SignalHandler sh, Api.Node? parent) { Gee.Collection signals = sh.get_signal_list (); - if ( signals.size > 0 ) { - file.printf ( "

      Api.Signals:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Api.Signal sig in signals ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (sig), css_navi_link, this.get_link(sig, mself), sig.name ); - this.write_brief_description ( file, sig, mself ); - file.printf ( "
      • \n" ); + if (signals.size > 0) { + writer.start_tag ("h3", css_title).text ("Api.Signals:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Api.Signal sig in signals) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (sig)); + writer.link (css_navi_link, get_link (sig, parent), sig.name); + this.write_brief_description (sig, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_classes ( GLib.FileStream file, ClassHandler clh, Api.Node? mself ) { + protected void write_child_classes (ClassHandler clh, Api.Node? parent) { Gee.Collection classes = clh.get_class_list (); - if ( classes.size > 0 ) { - file.printf ( "

      Classes:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Class subcl in classes ) { + if (classes.size > 0) { + writer.start_tag ("h3", css_title).text ("Classes:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Class subcl in classes) { string name; - if ( subcl.is_abstract ) { + if (subcl.is_abstract) { name = "" + subcl.name + ""; } else { name = subcl.name; } - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (subcl), css_navi_link, this.get_link(subcl, mself ), name ); - this.write_brief_description ( file, subcl, mself ); - file.printf ( "
      • \n" ); + writer.start_tag ("li", get_html_inline_navigation_link_css_class (subcl)); + writer.link (css_navi_link, get_link (subcl, parent), name); + this.write_brief_description (subcl, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_interfaces ( GLib.FileStream file, InterfaceHandler ih, Api.Node? mself ) { - Gee.Collection ifaces = ih.get_interface_list ( ); - if ( ifaces.size > 0 ) { - file.printf ( "

      Interfaces:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Interface iface in ifaces ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (iface), css_navi_link, this.get_link(iface, mself), iface.name ); - this.write_brief_description ( file, iface, mself ); - file.printf ( "
      • \n" ); + protected void write_child_interfaces (InterfaceHandler ih, Api.Node? parent) { + Gee.Collection ifaces = ih.get_interface_list (); + if (ifaces.size > 0) { + writer.start_tag ("h3", css_title).text ("Interfaces:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Interface iface in ifaces) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (iface)); + writer.link (css_navi_link, get_link (iface, parent), iface.name); + this.write_brief_description (iface, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_delegates ( GLib.FileStream file, DelegateHandler dh, Api.Node? mself ) { + protected void write_child_delegates (DelegateHandler dh, Api.Node? parent) { Gee.Collection delegates = dh.get_delegate_list (); - if ( delegates.size > 0 ) { - file.printf ( "

      Delegates:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Delegate d in delegates ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class (d), css_navi_link, this.get_link(d, mself), d.name ); - this.write_brief_description ( file, d, mself ); - file.printf ( "
      • \n" ); + if (delegates.size > 0) { + writer.start_tag ("h3", css_title).text ("Delegates:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Delegate d in delegates) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (d)); + writer.link (css_navi_link, get_link (d, parent), d.name); + this.write_brief_description (d, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - protected void write_child_structs ( GLib.FileStream file, StructHandler struh, Api.Node? mself ) { + protected void write_child_structs (StructHandler struh, Api.Node? parent) { Gee.Collection structs = struh.get_struct_list (); - if ( structs.size > 0 ) { - file.printf ( "

      Structs:

      \n", css_title ); - file.printf ( "
        \n", css_inline_navigation ); - foreach ( Struct stru in structs ) { - file.printf ( "\t
      • %s", get_html_inline_navigation_link_css_class ( stru ), css_navi_link, this.get_link(stru, mself), stru.name ); - this.write_brief_description ( file, stru, mself ); - file.printf ( "
      • \n" ); + if (structs.size > 0) { + writer.start_tag ("h3", css_title).text ("Structs:").end_tag ("h3"); + writer.start_tag ("ul", css_inline_navigation); + foreach (Struct stru in structs) { + writer.start_tag ("li", get_html_inline_navigation_link_css_class (stru)); + writer.link (css_navi_link, get_link (stru, parent), stru.name); + this.write_brief_description (stru, parent); + writer.end_tag ("li"); } - file.puts ( "
      \n" ); + writer.end_tag ("ul"); } } - public void write_namespace_content ( GLib.FileStream file, Namespace ns, Api.Node? mself ) { - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, (ns.name == null)? "Global Namespace" : ns.full_name () ); - file.printf ( "\t\t\t\t
      \n", css_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); + public void write_namespace_content (Namespace ns, Api.Node? parent) { + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title).text (ns.name == null ? "Global Namespace" : ns.full_name ()).end_tag ("h1"); + writer.simple_tag ("hr", css_hr); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); + + this.write_documentation (ns, ns); - this.write_documentation ( file, ns, ns ); + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); - if ( ns.name == null ) - this.write_child_namespaces ( file, (Package)ns.parent, mself ); + if (ns.name == null) + this.write_child_namespaces ((Package)ns.parent, parent); else - this.write_child_namespaces ( file, ns, mself ); - - this.write_child_classes ( file, ns, mself ); - this.write_child_interfaces ( file, ns, mself ); - this.write_child_structs ( file, ns, mself ); - this.write_child_enums ( file, ns, mself ); - this.write_child_errordomains ( file, ns, mself ); - this.write_child_delegates ( file, ns, mself ); - this.write_child_methods ( file, ns, mself ); - this.write_child_fields ( file, ns, mself ); - this.write_child_constants ( file, ns, mself ); - file.puts ( "\t\t\t
      \n" ); - } - - protected void write_file_content ( GLib.FileStream file, Package f, Api.Node? mself, WikiPage? wikipage = null) { - file.printf ( "\t\t\t
      \n", css_style_content ); - file.printf ( "\t\t\t\t

      %s:

      \n", css_title, f.name ); - file.printf ( "\t\t\t\t
      \n", css_headline_hr ); - file.printf ( "\t\t\t\t

      Description:

      \n", css_title ); + this.write_child_namespaces (ns, parent); + + this.write_child_classes (ns, parent); + this.write_child_interfaces (ns, parent); + this.write_child_structs (ns, parent); + this.write_child_enums (ns, parent); + this.write_child_errordomains (ns, parent); + this.write_child_delegates (ns, parent); + this.write_child_methods (ns, parent); + this.write_child_fields (ns, parent); + this.write_child_constants (ns, parent); + writer.end_tag ("div"); + } + + protected void write_file_content (Package f, Api.Node? parent, WikiPage? wikipage = null) { + writer.start_tag ("div", css_style_content); + writer.start_tag ("h1", css_title, f.name).text (f.name).end_tag ("h1"); + writer.simple_tag ("hr", css_headline_hr); + writer.start_tag ("h2", css_title).text ("Description:").end_tag ("h2"); if (wikipage != null) { - _renderer.set_container (mself); - _renderer.set_filestream (file); + _renderer.set_container (parent); _renderer.render (wikipage.documentation); } - file.printf ( "\n\t\t\t\t

      Content:

      \n", css_title ); + writer.start_tag ("h2", css_title).text ("Content:").end_tag ("h2"); - this.write_child_namespaces ( file, f, mself ); + this.write_child_namespaces (f, parent); - foreach ( Namespace ns in f.get_namespace_list() ) { - if ( ns.name == null ) { - this.write_child_classes ( file, ns, mself ); - this.write_child_interfaces ( file, ns, mself ); - this.write_child_structs ( file, ns, mself ); - this.write_child_enums ( file, ns, mself ); - this.write_child_errordomains ( file, ns, mself ); - this.write_child_delegates ( file, ns, mself ); - this.write_child_methods ( file, ns, mself ); - this.write_child_fields ( file, ns, mself ); - this.write_child_constants ( file, ns, mself ); + foreach (Namespace ns in f.get_namespace_list()) { + if (ns.name == null) { + this.write_child_classes (ns, parent); + this.write_child_interfaces (ns, parent); + this.write_child_structs (ns, parent); + this.write_child_enums (ns, parent); + this.write_child_errordomains (ns, parent); + this.write_child_delegates (ns, parent); + this.write_child_methods (ns, parent); + this.write_child_fields (ns, parent); + this.write_child_constants (ns, parent); } } - this.write_child_dependencies ( file, f, mself ); - file.puts ( "\t\t\t
      \n" ); - } - - protected void write_file_header ( GLib.FileStream file, string css, string? title ) { - file.puts ( "" ); - file.puts ( "\n" ); - file.puts ( "\t\n" ); - file.puts ( "\t\tVala Binding Reference\n" ); - file.printf ( "\t\t\n", css ); - file.puts ( "\t\n" ); - file.puts ( "\t\n\n" ); - file.printf ( "\t
      \n", css_site_header ); - file.printf ( "\t\t%s Reference Manual\n", (title == null)? "" : title ); - file.puts ( "\t
      \n\n" ); - file.printf ( "\t\t
      \n", css_style_body ); - } - - protected void write_file_footer ( GLib.FileStream file ) { - file.puts ( "\t
      \n" ); - file.puts ( "\t
      \n" ); - file.puts ( "\t\t
      \n" ); - file.puts ( "\t\t
      \n" ); - file.puts ( "\t\t\tcreated by valadoc\n" ); - file.puts ( "\t\t
      \n" ); - file.puts ( "\t
      \n" ); - file.puts ( "\t\n" ); - file.puts ( "" ); + this.write_child_dependencies (f, parent); + writer.end_tag ("div"); + } + + protected void write_file_header (string css, string? title) { + writer.start_tag ("html"); + writer.start_tag ("head"); + writer.start_tag ("title").text ("Vala Binding Reference").end_tag ("title"); + writer.stylesheet_link (css); + writer.end_tag ("head"); + writer.start_tag ("body"); + writer.start_tag ("div", css_site_header); + writer.text ("%s Reference Manual".printf (title == null ? "" : title)); + writer.end_tag ("div"); + writer.start_tag ("div", css_style_body); + } + + protected void write_file_footer () { + writer.end_tag ("div"); + writer.simple_tag ("br"); + writer.start_tag ("div", "site_foother"); + writer.text ("Generated by "); + writer.link ("site_foother", "http://www.valadoc.org/", "Valadoc"); + writer.end_tag ("div"); + writer.end_tag ("body"); + writer.end_tag ("html"); } } diff --git a/src/doclets/htmlhelpers/doclet/htmlrenderer.vala b/src/doclets/htmlhelpers/doclet/htmlrenderer.vala index 0d0cd1795..364712499 100755 --- a/src/doclets/htmlhelpers/doclet/htmlrenderer.vala +++ b/src/doclets/htmlhelpers/doclet/htmlrenderer.vala @@ -28,7 +28,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { private BasicDoclet _doclet; private Documentation? _container; - private unowned FileStream _stream; + private unowned MarkupWriter writer; public HtmlRenderer (BasicDoclet doclet) { _doclet = doclet; @@ -38,8 +38,8 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { _container = container; } - public void set_filestream (FileStream stream) { - _stream = stream; + public void set_writer (MarkupWriter writer) { + this.writer = writer; } public override void render (ContentElement element) { @@ -56,26 +56,25 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { private void write_symbol_link (Api.Node symbol, string label) { var url = get_url (symbol); - _stream.printf ("%s", - url, - (label == null || label == "") ? symbol.full_name () : label); + writer.link ("", url, (label == null || label == "") ? symbol.full_name () : label); } + private delegate void Write (); private delegate void TagletWrite (Taglet taglet); - private void write_taglets (string header, string footer, string separator, + private void write_taglets (Write header, Write footer, Write separator, Gee.List taglets, TagletWrite write) { if (taglets.size > 0) { - _stream.printf (header); + header (); bool first = true; foreach (var taglet in taglets) { if (!first) { - _stream.printf (separator); + separator (); } write (taglet); first = false; } - _stream.printf (footer); + footer (); } } @@ -84,9 +83,14 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Deprecated)); write_taglets ( - "

      Deprecated: ", - "

      ", - "", + () => { + writer.start_tag ("p", "main_title"); + writer.start_tag ("b").text ("Deprecated:").end_tag ("b"); + }, + () => { + writer.end_tag ("p"); + }, + () => {}, taglets, (taglet) => { var deprecated = taglet as Taglets.Deprecated; @@ -98,59 +102,94 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Param)); write_taglets ( - "

      Parameters:

      \n", - "
      ", - "", + () => { + writer.start_tag ("h2", "main_title").text ("Parameters:").end_tag ("h2"); + writer.start_tag ("table", "main_parameter_table"); + }, + () => { + writer.end_tag ("table"); + }, + () => {}, taglets, (taglet) => { var param = taglet as Taglets.Param; - _stream.printf ("%s", param.parameter_name); + writer.start_tag ("tr"); + writer.start_tag ("td", "main_parameter_table_name").text (param.parameter_name).end_tag ("td"); + writer.start_tag ("td"); param.accept_children (this); - _stream.printf (""); + writer.end_tag ("td"); + writer.end_tag ("tr"); }); taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Return)); write_taglets ( - "

      Returns:

      \n", - "
      ", - "", + () => { + writer.start_tag ("h2", "main_title").text ("Returns:").end_tag ("h2"); + writer.start_tag ("table", "main_parameter_table"); + }, + () => { + writer.end_tag ("table"); + }, + () => {}, taglets, (taglet) => { var param = taglet as Taglets.Return; - _stream.printf (""); + writer.start_tag ("tr"); + writer.start_tag ("td"); param.accept_children (this); - _stream.printf (""); + writer.end_tag ("td"); + writer.end_tag ("tr"); }); taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Throws)); write_taglets ( - "

      Throws:

      \n", - "
      ", - "", + () => { + writer.start_tag ("h2", "main_title").text ("Returns:").end_tag ("h2"); + writer.start_tag ("table", "main_parameter_table"); + }, + () => { + writer.end_tag ("table"); + }, + () => {}, taglets, (taglet) => { var exception = taglet as Taglets.Throws; - _stream.printf ("%s", exception.error_domain_name); + writer.start_tag ("tr"); + writer.start_tag ("td", "main_parameter_table_name").text (exception.error_domain_name).end_tag ("td"); + writer.start_tag ("td"); exception.accept_children (this); - _stream.printf (""); + writer.end_tag ("td"); + writer.end_tag ("tr"); }); taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.Since)); write_taglets ( - "

      Since:

      \n

      ", - "

      ", - ", ", + () => { + writer.start_tag ("h2", "main_title").text ("Since:").end_tag ("h2"); + writer.start_tag ("p"); + }, + () => { + writer.end_tag ("p"); + }, + () => {}, taglets, (taglet) => { var since = taglet as Taglets.Since; - _stream.printf ("%s", since.version); + writer.text (since.version); }); taglets = element.find_taglets ((Api.Node) _container, typeof (Taglets.See)); write_taglets ( - "

      See also:

      \n

      ", - "

      ", - ", ", + () => { + writer.start_tag ("h2", "main_title").text ("Since:").end_tag ("h2"); + writer.start_tag ("p"); + }, + () => { + writer.end_tag ("p"); + }, + () => { + writer.text (", "); + }, taglets, (taglet) => { var see = taglet as Taglets.See; @@ -160,31 +199,25 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { public override void visit_embedded (Embedded element) { var caption = element.caption; - if (caption == null) { - _stream.printf ("", element.url); - } else { - _stream.printf ("\"%s\"", element.url, caption); - } + writer.image ("", element.url, (caption == null || caption == "") ? "" : caption); } public override void visit_headline (Headline element) { - _stream.printf ("", element.level); + writer.start_tag ("h%d".printf (element.level)); element.accept_children (this); - _stream.printf ("", element.level); + writer.end_tag ("h%d".printf (element.level)); } public override void visit_link (Link element) { var label = element.label; - _stream.printf ("%s", - element.url, - (label == null || label == "") ? element.url : label); + writer.link ("", element.url, (label == null || label == "") ? element.url : label); } public override void visit_symbol_link (SymbolLink element) { if (element.symbol == _container || !element.symbol.is_visitor_accessible (_doclet.settings) || !element.symbol.package.is_visitor_accessible (_doclet.settings)) { - _stream.printf (element.label); + writer.text (element.label); } else { write_symbol_link (element.symbol, element.label); } @@ -201,9 +234,9 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { } public override void visit_paragraph (Paragraph element) { - _stream.printf ("

      "); + writer.start_tag ("p"); element.accept_children (this); - _stream.printf ("

      "); + writer.end_tag ("p"); } public override void visit_run (Run element) { @@ -239,39 +272,39 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { break; } if (tag != null) { - _stream.printf ("<%s%s>", tag, css_type != null ? " class=\"" + css_type + "\"" : ""); + writer.start_tag (tag, css_type); } element.accept_children (this); if (tag != null) { - _stream.printf ("", tag); + writer.end_tag (tag); } } public override void visit_source_code (SourceCode element) { - _stream.printf ("
      ");
      -		_stream.printf (element.code);
      -		_stream.printf ("
      "); + writer.start_tag ("pre"); + writer.raw_text (element.code); + writer.end_tag ("pre"); } public override void visit_table (Table element) { - _stream.printf (""); + writer.start_tag ("table", "main_table"); element.accept_children (this); - _stream.printf ("
      "); + writer.end_tag ("table"); } public override void visit_table_cell (TableCell element) { - _stream.printf ("", - element.colspan != 1 ? " colspan=\"%d\"".printf (element.colspan) : "", - element.rowspan != 1 ? " rowspan=\"%d\"".printf (element.rowspan) : "" + writer.start_tag_with_attrs ("td", "main_table", + { "colspan", "rowspan" }, + { element.colspan.to_string (), element.rowspan.to_string () } ); element.accept_children (this); - _stream.printf (""); + writer.end_tag ("td"); } public override void visit_table_row (TableRow element) { - _stream.printf (""); + writer.start_tag ("tr"); element.accept_children (this); - _stream.printf (""); + writer.end_tag ("tr"); } public override void visit_taglet (Taglet element) { @@ -289,27 +322,28 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer { for (i = 0; chr != '\0' ; i++, chr = content[i]) { switch (chr) { case '\n': - _stream.puts (content.substring (lpos, i-lpos)); - _stream.puts ("
      "); + writer.text (content.substring (lpos, i-lpos)); + writer.simple_tag ("br"); lpos = i+1; break; case '<': - _stream.puts (content.substring (lpos, i-lpos)); - _stream.puts ("<"); + writer.text (content.substring (lpos, i-lpos)); + writer.text ("<"); lpos = i+1; break; case '>': - _stream.puts (content.substring (lpos, i-lpos)); - _stream.puts (">"); + writer.text (content.substring (lpos, i-lpos)); + writer.text (">"); lpos = i+1; break; case '&': - _stream.puts (content.substring (lpos, i-lpos)); - _stream.puts ("&"); + writer.text (content.substring (lpos, i-lpos)); + writer.text ("&"); lpos = i+1; break; } } - _stream.puts (content.substring (lpos, i-lpos)); + writer.text (content.substring (lpos, i-lpos)); } } + diff --git a/src/doclets/htmlhelpers/doclet/markupwriter.vala b/src/doclets/htmlhelpers/doclet/markupwriter.vala new file mode 100644 index 000000000..30ce0d608 --- /dev/null +++ b/src/doclets/htmlhelpers/doclet/markupwriter.vala @@ -0,0 +1,222 @@ +/* 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 + */ + +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 const int MAX_COLUMN = 150; + + public MarkupWriter (FileStream stream) { + this.stream = stream; + do_write (""); + 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 ("".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; + } + + public MarkupWriter link (string css_class, string url, string label) { + indent++; + check_column ("a"); + do_write ("%s".printf ( + css_class, url, label)); + indent--; + last_was_tag = true; + return this; + } + + public MarkupWriter image (string css_class, string src, string? caption = null) { + indent++; + check_column ("img"); + do_write ("".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 ("".printf (url)); + indent--; + last_was_tag = true; + return this; + } + + public MarkupWriter text (string text) { + if (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 break_line () { + current_column = 0; + do_write ("\n%s".printf (get_indent_string ())); + } + + public void do_write (string text) { + stream.printf (text); + current_column += text.length; + } + + private void check_column (string name, bool end_tag = false) { + if (!end_tag && inline (name) && !last_was_tag) { + return; + } else if (end_tag && content_inline (name)) { + return; + } + break_line (); + } + + private bool inline (string name) { + return name != "html" + && name != "head" + && name != "title" + && name != "link" + && name != "body" + && name != "div" + && name != "p" + && name != "table" + && name != "tr" + && name != "td" + && name != "ul" + && name != "ol" + && name != "li" + && name != "h1" + && name != "h2" + && name != "h3" + && name != "h4" + && name != "h5" + && name != "hr" + && name != "img"; + } + + private bool content_inline (string name) { + return name == "title" + || name == "p" + || name == "a" + || name == "h1" + || name == "h2" + || name == "h3" + || name == "h4" + || name == "h5" + || name == "span" + || name == "code" + || name == "b" + || name == "i" + || name == "u" + || name == "stoke"; + } + + private string get_indent_string () { + return current_column == 0 ? string.nfill (indent * 2, ' ') : ""; + } +} + diff --git a/src/libvaladoc/api/package.vala b/src/libvaladoc/api/package.vala index 583031dac..f9f9c2b20 100644 --- a/src/libvaladoc/api/package.vala +++ b/src/libvaladoc/api/package.vala @@ -20,6 +20,8 @@ using Gee; using Valadoc.Content; + + public class Valadoc.Api.Package : Node, NamespaceHandler { private ArrayList vfiles = new ArrayList ();