]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
libvaladoc/html: introduce a new css resolver
authorFlorian Brosch <flo.brosch@gmail.com>
Tue, 23 Feb 2010 21:36:48 +0000 (22:36 +0100)
committerFlorian Brosch <flo.brosch@gmail.com>
Tue, 23 Feb 2010 21:36:48 +0000 (22:36 +0100)
src/libvaladoc/Makefile.am
src/libvaladoc/html/basicdoclet.vala
src/libvaladoc/html/cssclassresolver.vala [new file with mode: 0755]
src/libvaladoc/html/globals.vala [deleted file]
src/libvaladoc/html/htmlrenderer.vala

index 13d387ded16b6035c1f30dd6ffe2fc9ae5f552ca..6e2bd19e9ee5ca30c9ac328b1a4cda84336d9602 100644 (file)
@@ -120,7 +120,7 @@ libvaladoc_la_VALASOURCES = \
        taglets/tagletthrows.vala \
        html/basicdoclet.vala \
        html/linkhelper.vala \
-       html/globals.vala \
+       html/cssclassresolver.vala \
        html/htmlmarkupwriter.vala \
        html/htmlrenderer.vala \
        $(NULL)
index 636b4be29a2d0921da78d2433d8899992b30f67d..9479f8019beea1edf09811ee0fc2f0597d02cdad 100755 (executable)
@@ -31,11 +31,76 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
        protected HtmlRenderer _renderer;
        protected Html.MarkupWriter writer;
        protected Html.LinkHelper linker;
+       protected Html.CssClassResolver cssresolver;
 
+
+       // paths:
        protected string chart_directory = "img";
        protected string icon_directory = "..";
 
+
+       // CSS:
+       private const string css_inline_navigation = "navi_inline";
+       private const string css_package_index = "package_index";
+       private const string css_brief_description = "brief_description";
+       private const string css_description = "description";
+       private const string css_known_list = "known_nodes";
+       private const string css_leaf_brief_description = "leaf_brief_description";
+       private const string css_leaf_code_definition = "leaf_code_definition";
+
+       private const string css_box_headline_text = "text";
+       private const string css_box_headline_toggle = "toggle";
+       private const string css_box_headline = "headline";
+       private const string css_box_content = "content";
+       private const string css_box_column = "column";
+       private const string css_box = "box";
+
+       private const string css_namespace_note = "namespace_note";
+       private const string css_package_note = "package_note";
+
+       private const string css_site_header = "site_header";
+       private const string css_navi = "navi_main";
+       private const string css_navi_hr = "navi_hr";
+       private const string css_errordomain_table_name = "main_errordomain_table_name";
+       private const string css_errordomain_table_text = "main_errordomain_table_text";
+       private const string css_errordomain_table = "main_errordomain_table";
+       private const string css_enum_table_name = "main_enum_table_name";
+       private const string css_enum_table_text = "main_enum_table_text";
+       private const string css_enum_table = "main_enum_table";
+       private const string css_diagram = "main_diagram";
+       private const string css_see_list = "main_see_list";
+       private const string css_wiki_table = "main_table";
+       private const string css_notification_area = "main_notification";
+       private const string css_source_sample = "main_sourcesample";
+       private const string css_exception_table = "main_parameter_table";
+       private const string css_parameter_table_text = "main_parameter_table_text";
+       private const string css_parameter_table_name = "main_parameter_table_name";
+       private const string css_parameter_table = "main_parameter_table";
+       private const string css_title = "main_title";
+       private const string css_other_type = "main_other_type";
+       private const string css_basic_type  = "main_basic_type";
+       private const string css_keyword  = "main_keyword";
+       private const string css_optional_parameter  = "main_optional_parameter";
+       private const string css_code_definition = "main_code_definition";
+       private const string css_headline_hr = "main_hr";
+       private const string css_hr = "main_hr";
+       private const string css_list_errdom = "main_list_errdom";
+       private const string css_list_en = "main_list_en";
+       private const string css_list_ns = "main_list_ns";
+       private const string css_list_cl = "main_list_cl";
+       private const string css_list_iface = "main_list_iface";
+       private const string css_list_stru = "main_list_stru";
+       private const string css_list_field = "main_list_field";
+       private const string css_list_prop = "main_list_prop";
+       private const string css_list_del = "main_list_del";
+       private const string css_list_sig = "main_list_sig";
+       private const string css_list_m = "main_list_m";
+       private const string css_style_navigation = "site_navigation";
+       private const string css_style_content = "site_content";
+       private const string css_style_body = "site_body";
+
        construct {
+               this.cssresolver = CssClassResolver.get_instance ();
                this.linker = LinkHelper.get_instance ();
        }
 
@@ -115,7 +180,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
        }
 
        protected void write_navi_top_entry (Api.Node element, Api.Node? parent) {
-               string style = get_html_css_class (element);
+               string style = cssresolver.resolve (element);
 
                writer.start_tag ("ul", {"class", css_navi});
 
@@ -179,7 +244,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                        if (ns.name == null) {
                                globals = ns;
                        } else {
-                               this.write_navi_entry (ns, package, css_namespace, true, true);
+                               this.write_navi_entry (ns, package, cssresolver.resolve (ns), true, true);
                        }
                }
 
@@ -242,7 +307,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                var children = node.get_children_by_type (type);
                children.sort ();
                foreach (Api.Node child in children) {
-                       write_navi_entry (child, parent, get_html_css_class (child), child != parent);
+                       write_navi_entry (child, parent, cssresolver.resolve (child), child != parent);
                }
        }
 
@@ -328,13 +393,13 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                writer.start_tag ("ul", {"class", css_navi});
                foreach (Package pkg in tree.get_package_list()) {
                        if (pkg.is_visitor_accessible (settings)) {
-                               writer.start_tag ("li", {"class", get_html_css_class (pkg)});
+                               writer.start_tag ("li", {"class", cssresolver.resolve (pkg)});
                                writer.link (linker.get_package_link (pkg, settings), pkg.name);
                                // brief description
                                writer.end_tag ("li");
                        }
                        else {
-                               writer.start_tag ("li", {"class", get_html_css_class (pkg)});
+                               writer.start_tag ("li", {"class", cssresolver.resolve (pkg)});
                                writer.text (pkg.name);
                                writer.end_tag ("li");
                        }
@@ -403,7 +468,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
 
                                for (int p = 0; p < list_sizes[i] && iter.next (); p++) {
                                        var node = iter.get ();
-                                       writer.start_tag ("li", {"class", get_html_css_class (node)});
+                                       writer.start_tag ("li", {"class", cssresolver.resolve (node)});
                                        writer.link (get_link (node, container), node.name);
                                        writer.end_tag ("li");
                                }
@@ -500,7 +565,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                writer.start_tag ("ul", {"class", css_inline_navigation});
                foreach (Namespace child in namespaces) {
                        if (child.name != null) {
-                               writer.start_tag ("li", {"class", css_namespace});
+                               writer.start_tag ("li", {"class", cssresolver.resolve (child)});
                                writer.link (get_link (child, parent), child.name);
                                this.write_brief_description (child, parent);
                                writer.end_tag ("li");
@@ -529,11 +594,11 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                writer.start_tag ("h2", {"class", css_title}).text ("Dependencies:").end_tag ("h2");
                writer.start_tag ("ul", {"class", css_inline_navigation});
                foreach (Package p in deps) {
-                       string link = this.get_link(p, parent);
+                       string link = this.get_link (p, parent);
                        if (link == null) {
-                               writer.start_tag ("li", {"class", css_package, "id", p.name}).text (p.name).end_tag ("li");
+                               writer.start_tag ("li", {"class", cssresolver.resolve (p), "id", p.name}).text (p.name).end_tag ("li");
                        } else {
-                               writer.start_tag ("li", {"class", css_package});
+                               writer.start_tag ("li", {"class", cssresolver.resolve (p)});
                                writer.link (get_link (p, parent), p.name);
                                writer.end_tag ("li");
                        }
@@ -555,7 +620,7 @@ public abstract class Valadoc.Html.BasicDoclet : Api.Visitor, Doclet {
                        writer.start_tag ("h3", {"class", css_title}).text (type_string).text (":").end_tag ("h3");
                        writer.start_tag ("ul", {"class", css_inline_navigation});
                        foreach (Api.Node child in children) {
-                               writer.start_tag ("li", {"class", get_html_css_class (child)});
+                               writer.start_tag ("li", {"class", cssresolver.resolve (child)});
                                if (is_internal_node (child)) {
                                        writer.link (get_link (child, container), child.name);
                                        writer.text (" - ");
diff --git a/src/libvaladoc/html/cssclassresolver.vala b/src/libvaladoc/html/cssclassresolver.vala
new file mode 100755 (executable)
index 0000000..78a52a2
--- /dev/null
@@ -0,0 +1,130 @@
+/* globals.vala
+ *
+ * Copyright (C) 2008-2009 Florian Brosch
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ *
+ * Author:
+ *     Florian Brosch <flo.brosch@gmail.com>
+ */
+
+using Valadoc.Api;
+
+
+namespace Valadoc.Html {
+       public class CssClassResolver : Api.Visitor {
+               private static CssClassResolver _singleton = null;
+               private string? css_class = null;
+
+               private CssClassResolver () {
+               }
+
+               public static CssClassResolver get_instance () {
+                       if (_singleton == null) {
+                               _singleton = new CssClassResolver ();
+                       }
+                       return _singleton;
+               }
+
+               public string resolve (Api.Node node) {
+                       node.accept (this);
+                       return (owned) css_class;
+               }
+
+               public override void visit_package (Api.Package item) {
+                       css_class = "package";
+               }
+
+               public override void visit_namespace (Api.Namespace item) {
+                       css_class = "namespace";
+               }
+
+               public override void visit_interface (Api.Interface item) {
+                       css_class = "interface";
+               }
+
+               public override void visit_class (Api.Class item) {
+                       if (item.is_abstract) {
+                               css_class = "abstract_class";
+                       } else {
+                               css_class = "class";
+                       }
+               }
+
+               public override void visit_struct (Api.Struct item) {
+                       css_class = "struct";
+               }
+
+               public override void visit_property (Api.Property item) {
+                       if (item.is_virtual || item.is_override) {
+                               css_class = "virtual_property";
+                       } else if (item.is_abstract) {
+                               css_class = "abstract_property";
+                       } else {
+                               css_class = "property";
+                       }
+               }
+
+               public override void visit_field (Api.Field item) {
+                       css_class = "field";
+               }
+
+               public override void visit_constant (Api.Constant item) {
+                       css_class = "constant";
+               }
+
+               public override void visit_delegate (Api.Delegate item) {
+                       css_class = "delegate";
+               }
+
+               public override void visit_signal (Api.Signal item) {
+                       css_class = "signal";
+               }
+
+               public override void visit_creation_method (Api.Method item) {
+                       css_class = "creation_method";
+               }
+
+               public override void visit_method (Api.Method item) {
+                       if (item.is_static) {
+                               css_class = "static_method";
+                       } else if (item.is_abstract) {
+                               css_class = "abstract_method";
+                       } else if (item.is_virtual || item.is_override) {
+                               css_class = "virtual_method";
+                       } else {
+                               css_class = "method";
+                       }
+               }
+
+               public override void visit_error_domain (Api.ErrorDomain item) {
+                       css_class = "errordomain";
+               }
+
+               public override void visit_error_code (Api.ErrorCode item) {
+                       css_class = "errorcode";
+               }
+
+               public override void visit_enum (Api.Enum item) {
+                       css_class = "enum";
+               }
+
+               public override void visit_enum_value (Api.EnumValue item) {
+                       css_class = "enumvalue";
+               }
+       }
+}
+
+
diff --git a/src/libvaladoc/html/globals.vala b/src/libvaladoc/html/globals.vala
deleted file mode 100755 (executable)
index b38dd05..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/* globals.vala
- *
- * Copyright (C) 2008-2009 Florian Brosch
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
- *
- * Author:
- *     Florian Brosch <flo.brosch@gmail.com>
- */
-
-using Valadoc.Api;
-
-namespace Valadoc.Html {
-       public const string css_inline_navigation = "navi_inline";
-
-       public const string css_errorcode = "errorcode";
-       public const string css_enumvalue = "enumvalue";
-       public const string css_property = "property";
-       public const string css_virtual_property = "virtual_property";
-       public const string css_abstract_property = "abstract_property";
-       public const string css_method = "method";
-       public const string css_static_method = "static_method";
-       public const string css_virtual_method = "virtual_method";
-       public const string css_abstract_method = "abstract_method";
-       public const string css_creation_method = "creation_method";
-       public const string css_signal = "signal";
-       public const string css_field = "field";
-       public const string css_abstract_class = "abstract_class";
-       public const string css_class = "class";
-       public const string css_enum = "enum";
-       public const string css_struct = "struct";
-       public const string css_delegate = "delegate";
-       public const string css_constant = "constant";
-       public const string css_namespace = "namespace";
-       public const string css_package = "package";
-       public const string css_interface = "interface";
-       public const string css_errordomain = "errordomain";
-
-       public const string css_package_index = "package_index";
-       public const string css_brief_description = "brief_description";
-       public const string css_description = "description";
-       public const string css_known_list = "known_nodes";
-       public const string css_leaf_brief_description = "leaf_brief_description";
-       public const string css_leaf_code_definition = "leaf_code_definition";
-
-       public const string css_site_header = "site_header";
-       public const string css_navi = "navi_main";
-       public const string css_navi_hr = "navi_hr";
-       public const string css_errordomain_table_name = "main_errordomain_table_name";
-       public const string css_errordomain_table_text = "main_errordomain_table_text";
-       public const string css_errordomain_table = "main_errordomain_table";
-       public const string css_enum_table_name = "main_enum_table_name";
-       public const string css_enum_table_text = "main_enum_table_text";
-       public const string css_enum_table = "main_enum_table";
-       public const string css_diagram = "main_diagram";
-       public const string css_see_list = "main_see_list";
-       public const string css_wiki_table = "main_table";
-       public const string css_notification_area = "main_notification";
-       public const string css_source_sample = "main_sourcesample";
-       public const string css_exception_table = "main_parameter_table";
-       public const string css_parameter_table_text = "main_parameter_table_text";
-       public const string css_parameter_table_name = "main_parameter_table_name";
-       public const string css_parameter_table = "main_parameter_table";
-       public const string css_title = "main_title";
-       public const string css_other_type = "main_other_type";
-       public const string css_basic_type  = "main_basic_type";
-       public const string css_keyword  = "main_keyword";
-       public const string css_optional_parameter  = "main_optional_parameter";
-       public const string css_code_definition = "main_code_definition";
-       public const string css_headline_hr = "main_hr";
-       public const string css_hr = "main_hr";
-       public const string css_list_errdom = "main_list_errdom";
-       public const string css_list_en = "main_list_en";
-       public const string css_list_ns = "main_list_ns";
-       public const string css_list_cl = "main_list_cl";
-       public const string css_list_iface = "main_list_iface";
-       public const string css_list_stru = "main_list_stru";
-       public const string css_list_field = "main_list_field";
-       public const string css_list_prop = "main_list_prop";
-       public const string css_list_del = "main_list_del";
-       public const string css_list_sig = "main_list_sig";
-       public const string css_list_m = "main_list_m";
-       public const string css_style_navigation = "site_navigation";
-       public const string css_style_content = "site_content";
-       public const string css_style_body = "site_body";
-
-       public const string css_box_headline_text = "text";
-       public const string css_box_headline_toggle = "toggle";
-       public const string css_box_headline = "headline";
-       public const string css_box_content = "content";
-       public const string css_box_column = "column";
-       public const string css_box = "box";
-
-       public const string css_namespace_note = "namespace_note";
-       public const string css_package_note = "package_note";
-
-
-       public string get_html_type_link (Settings settings, Documentation element, Documentation? pos) {
-               string prefix = "";
-               string tmp = "";
-
-               bool tmp2 = (element is WikiPage)? ((WikiPage)element).name!="index.valadoc" : element != pos;
-               if ( tmp2 == true ) {
-                       prefix =  "../" + ((Api.Node)element).package.name;
-               }
-
-               if ( element is Api.EnumValue || element is Api.ErrorCode ) {
-                       tmp = "#" + ((Api.Node)element).name;
-                       element = (Api.Node)((Api.Node)element).parent;
-               }
-
-               return prefix + "/" + ((Api.Node)element).full_name() + ".html" + tmp;
-       }
-
-
-       public string get_html_css_class (Valadoc.Api.Item element) {
-               if ( element is Api.Namespace ) {
-                       return css_namespace;
-               }
-               else if ( element is Api.Struct ) {
-                       return css_struct;
-               }
-               else if ( element is Api.Interface ) {
-                       return css_interface;
-               }
-               else if ( element is Api.Class ) {
-                       return (((Class)element).is_abstract)? css_abstract_class : css_class;
-               }
-               else if ( element is Api.Enum ) {
-                       return css_enum;
-               }
-               else if ( element is Api.ErrorDomain ) {
-                       return css_errordomain;
-               }
-               else if ( element is Api.Delegate ) {
-                       return css_delegate;
-               }
-               else if ( element is Api.Method ) {
-                       if ( ((Api.Method)element).is_static )
-                               return css_static_method;
-                       else if ( ((Api.Method)element).is_static )
-                               return css_static_method;
-                       else if ( ((Api.Method)element).is_constructor )
-                               return css_creation_method;
-                       else if ( ((Api.Method)element).is_abstract )
-                               return css_abstract_method;
-                       else if ( ((Api.Method)element).is_virtual || ((Api.Method)element).is_override )
-                               return css_virtual_method;
-                       else
-                               return css_method;
-               }
-               else if ( element is Api.Signal ) {
-                       return css_signal;
-               }
-               else if ( element is Api.Property ) {
-                       if ( ((Api.Property)element).is_virtual || ((Property)element).is_override )
-                               return css_virtual_property;
-                       else if ( ((Api.Property)element).is_abstract )
-                               return css_abstract_property;
-                       else
-                               return css_property;
-               }
-               else if ( element is Api.Field ) {
-                       return css_field;
-               }
-               else if ( element is Api.Constant ) {
-                       return css_constant;
-               }
-               else if ( element is Api.EnumValue ) {
-                       return css_enumvalue;
-               }
-               else if ( element is Api.ErrorCode ) {
-                       return css_errorcode;
-               }
-               else if ( element is Api.Package ) {
-                       return css_package;
-               }
-               return "";
-       }
-}
-
-
-
-
index 07ae0dd0aa0d11548358a7fdc315095bf5766e1f..7b6457af90345318bcf72b5bcf90e21448fc038b 100755 (executable)
@@ -28,9 +28,11 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
        protected BasicDoclet _doclet;
        protected Documentation? _container;
        protected unowned MarkupWriter writer;
+       protected Html.CssClassResolver cssresolver;
        protected LinkHelper linker;
 
        public HtmlRenderer (BasicDoclet doclet) {
+               cssresolver = CssClassResolver.get_instance ();
                linker = LinkHelper.get_instance ();
                _doclet = doclet;
        }
@@ -59,7 +61,7 @@ public class Valadoc.Html.HtmlRenderer : ContentRenderer {
                var url = get_url (symbol);
                writer.link (url,
                             (label == null || label == "") ? symbol.full_name () : label,
-                            get_html_css_class (symbol));
+                            cssresolver.resolve (symbol));
        }
 
        private delegate void Write ();