From: Florian Brosch Date: Tue, 21 Jul 2009 11:46:18 +0000 (+0200) Subject: - valadoc.org doclet improvements X-Git-Tag: 0.37.1~3^2~594 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb854b46fdf9c75479e4037e5bafe19e019e8591;p=thirdparty%2Fvala.git - valadoc.org doclet improvements - html-writer, initial work - bug fixes --- diff --git a/configure.in b/configure.in index 850e887b0..f76e937f1 100644 --- a/configure.in +++ b/configure.in @@ -71,6 +71,8 @@ AC_CONFIG_FILES([Makefile src/doclets/Makefile src/doclets/htmlhelpers/Makefile src/doclets/htmlhelpers/deps/Makefile + src/doclets/htmlhelpers/html/Makefile + src/doclets/htmlhelpers/languages/Makefile src/doclets/htmlhelpers/doclet/Makefile src/doclets/htmlhelpers/taglets/Makefile src/doclets/htmlhelpers/taglets/see/Makefile diff --git a/src/doclets/devhelp/Makefile.am b/src/doclets/devhelp/Makefile.am index 6a563cf49..47c7e60da 100644 --- a/src/doclets/devhelp/Makefile.am +++ b/src/doclets/devhelp/Makefile.am @@ -4,3 +4,4 @@ NULL = SUBDIRS = doclet \ $(NULL) + diff --git a/src/doclets/htmlhelpers/Makefile.am b/src/doclets/htmlhelpers/Makefile.am index e8a7c0792..10df17349 100644 --- a/src/doclets/htmlhelpers/Makefile.am +++ b/src/doclets/htmlhelpers/Makefile.am @@ -1,8 +1,10 @@ NULL = -SUBDIRS = \ - doclet \ - taglets \ - deps \ +SUBDIRS = \ + html \ + languages \ + doclet \ + taglets \ + deps \ $(NULL) diff --git a/src/doclets/htmlhelpers/html/Makefile.am b/src/doclets/htmlhelpers/html/Makefile.am new file mode 100644 index 000000000..f0e283d83 --- /dev/null +++ b/src/doclets/htmlhelpers/html/Makefile.am @@ -0,0 +1,55 @@ +NULL = + + +AM_CFLAGS = -g \ + $(GLIB_CFLAGS) \ + $(LIBVALA_CFLAGS) \ + $(NULL) + + +BUILT_SOURCES = libhtmlwriter.vala.stamp + + +htmlwriterdir = $(libdir)/valadoc/plugins/htmlhelpers/ + + +htmlwriter_LTLIBRARIES = \ + libhtmlwriter.la \ + $(NULL) + + +libhtmlwriter_la_VALASOURCES = \ + htmlwriter.vala \ + attribute.vala \ + block.vala \ + inline.vala \ + $(NULL) + + +libhtmlwriter_la_SOURCES = \ + libhtmlwriter.vala.stamp \ + $(libhtmlwriter_la_VALASOURCES:.vala=.c) \ + $(NULL) + + +libhtmlwriter.vala.stamp: $(libhtmlwriter_la_VALASOURCES) + $(VALAC) -C --pkg vala-1.0 --basedir . --save-temps --library htmlwriter-1.0 -H htmlwriter-1.0.h $^ + touch $@ + + +libhtmlwriter_la_LDFLAGS = $(NULL) + + +libhtmlwriter_la_LIBADD = \ + $(GLIB_LIBS) \ + $(LIBVALA_LIBS) \ + $(NULL) + + +EXTRA_DIST = $(libhtmlwriter_la_VALASOURCES) libhtmlwriter.vala.stamp + + +MAINTAINERCLEANFILES = \ + $(libhtmlwriter_la_VALASOURCES:.vala=.c) \ + $(NULL) + diff --git a/src/doclets/htmlhelpers/html/attribute.vala b/src/doclets/htmlhelpers/html/attribute.vala new file mode 100644 index 000000000..8c061c8b6 --- /dev/null +++ b/src/doclets/htmlhelpers/html/attribute.vala @@ -0,0 +1,18 @@ + +using Gee; + + +public class Valadoc.Html.Attribute { + private string name; + private string val; + + public Attribute (string name, string val) { + this.name = name; + this.val = val; + } + + public string to_string (string path) { + return " %s=\"%s\"".printf (this.name, this.val); + } +} + diff --git a/src/doclets/htmlhelpers/html/block.vala b/src/doclets/htmlhelpers/html/block.vala new file mode 100644 index 000000000..08aef6aa4 --- /dev/null +++ b/src/doclets/htmlhelpers/html/block.vala @@ -0,0 +1,65 @@ + +using Gee; + + +public abstract class Valadoc.Html.BlockElement : Valadoc.Html.Element { + public override string to_string (uint depth, string path) { + string depthstr = string.nfill (depth, '\t'); + StringBuilder str = new StringBuilder (depthstr); + str.append_c ('<'); + str.append (this.tag); + str.append (this.attributes_to_string (path)); + if (this.children.size > 0) { + str.append (">\n"); + + str.append (this.children_to_string (depth+1, path)); + + str.append_c ('\n'); + str.append (depthstr); + str.append ("\n"); + } + else { + str.append (" />\n"); + } + return str.str; + } +} + + +public class Valadoc.Html.Html : Valadoc.Html.BlockElement { + private static string mytag = "html"; + + public Html () { + this.tag = mytag; + } +} + + +public class Valadoc.Html.Head : Valadoc.Html.BlockElement { + private static string mytag = "head"; + + public Head () { + this.tag = mytag; + } +} + + +public class Valadoc.Html.Body : Valadoc.Html.BlockElement { + private static string mytag = "body"; + + public Body () { + this.tag = mytag; + } +} + + +public class Valadoc.Html.Div : Valadoc.Html.BlockElement { + private static string mytag = "div"; + + public Div () { + this.tag = mytag; + } +} + diff --git a/src/doclets/htmlhelpers/html/htmlwriter.vala b/src/doclets/htmlhelpers/html/htmlwriter.vala new file mode 100644 index 000000000..e78623f29 --- /dev/null +++ b/src/doclets/htmlhelpers/html/htmlwriter.vala @@ -0,0 +1,87 @@ + +using Gee; + + +public abstract class Valadoc.Html.Entry { + public abstract string to_string (uint depth, string path); +} + + +public class Valadoc.Html.String : Valadoc.Html.Entry { + private string str; + + public String (string str) { + this.str = str; + } + + public override string to_string (uint depth, string path) { + return this.str; + } +} + + +public abstract class Valadoc.Html.Element : Valadoc.Html.Entry { + protected ArrayList attributes = new ArrayList (); + protected ArrayList children = new ArrayList (); + protected weak string tag; + + public void add_attribute (Attribute att) { + this.attributes.add (att); + } + + public void add_attributes (Collection attributes) { + foreach (Attribute att in attributes) { + this.attributes.add (att); + } + } + + public void add_child (Entry el) { + this.children.add (el); + } + + public void add_childs (Collection elements) { + foreach (Entry el in elements) { + this.children.add (el); + } + } + + protected string children_to_string (uint depth, string path) { + StringBuilder str = new StringBuilder (); + + foreach (Entry child in this.children) { + str.append (child.to_string(depth, path)); + } + return str.str; + } + + protected string attributes_to_string (string path) { + if (this.attributes == null) { + return ""; + } + + StringBuilder str = new StringBuilder (); + + foreach (Attribute att in this.attributes) { + str.append (att.to_string(path)); + } + return str.str; + } +} + + +public class Valadoc.Html.Document { + private Html root; + + public void set_root (Html root) { + this.root = root; + } + + public string to_string (string path) { + if (this.root == null) { + return ""; + } + + return this.root.to_string (0, path); + } +} + diff --git a/src/doclets/htmlhelpers/html/inline.vala b/src/doclets/htmlhelpers/html/inline.vala new file mode 100644 index 000000000..cc96e752e --- /dev/null +++ b/src/doclets/htmlhelpers/html/inline.vala @@ -0,0 +1,74 @@ + +using Gee; + + +public abstract class Valadoc.Html.InlineElement : Valadoc.Html.Element { + public override string to_string (uint depth, string path) { + StringBuilder str = new StringBuilder ("<"); + str.append (this.tag); + str.append (this.attributes_to_string (path)); + if (this.children.size > 0) { + str.append_c ('>'); + + str.append (this.children_to_string (depth+1, path)); + + str.append (""); + } + else { + str.append (" />"); + } + return str.str; + } +} + + +public class Valadoc.Html.Span : Valadoc.Html.InlineElement { + private static string mytag = "span"; + + public Span () { + this.tag = mytag; + } + + public Span.from_list (Collection list) { + this.tag = mytag; + + foreach (Entry e in list) { + this.children.add (e); + } + } +} + + +public class Valadoc.Html.Link : Valadoc.Html.InlineElement { + private static string mytag = "a"; + private Attribute path; + + public class Link (string path, Entry desc) { + this.path = new Attribute ("href", path); + this.add_attribute (this.path); + this.children.add (desc); + this.tag = mytag; + } + + public Link.from_list (string path, Collection descs) { + this.path = new Attribute ("href", path); + this.add_attribute (this.path); + this.tag = mytag; + + foreach (Entry desc in descs) { + this.children.add (desc); + } + } +} + + +public class Valadoc.Html.Image : Valadoc.Html.InlineElement { + private static string mytag = "img"; + + public Image (string path) { + this.tag = mytag; + } +} + diff --git a/src/doclets/htmlhelpers/languages/Makefile.am b/src/doclets/htmlhelpers/languages/Makefile.am new file mode 100644 index 000000000..398160e4b --- /dev/null +++ b/src/doclets/htmlhelpers/languages/Makefile.am @@ -0,0 +1,57 @@ +NULL = + + +AM_CFLAGS = -g \ + -I ../../../libvaladoc/ \ + -I ../html/ \ + $(GLIB_CFLAGS) \ + $(LIBVALA_CFLAGS) \ + $(NULL) + + +BUILT_SOURCES = libapiwriter.vala.stamp + + +apiwriterdir = $(libdir)/valadoc/plugins/htmlhelpers/ + + +apiwriter_LTLIBRARIES = \ + libapiwriter.la \ + $(NULL) + + +libapiwriter_la_VALASOURCES = \ + vala.vala \ + $(NULL) + + +libapiwriter_la_SOURCES = \ + libapiwriter.vala.stamp \ + $(libapiwriter_la_VALASOURCES:.vala=.c) \ + $(NULL) + + +libapiwriter.vala.stamp: $(libapiwriter_la_VALASOURCES) + $(VALAC) -C --vapidir ../../../vapi --pkg valadoc-1.0 --vapidir ../html/ --pkg htmlwriter-1.0 --basedir . --save-temps -H apiwriter-1.0.h --library apiwriter-1.0 $^ + touch $@ + + +libapiwriter_la_LDFLAGS = -module -avoid-version + + +libapiwriter_la_LIBADD = \ + ../../../libvaladoc/libvaladoc.la \ + ../html/libhtmlwriter.la \ + $(LIBGVC_LIBS) \ + $(LIBVALA_LIBS) \ + $(GLIB_LIBS) \ + $(NULL) + + +EXTRA_DIST = $(libapiwriter_la_VALASOURCES) libapiwriter.vala.stamp + + +MAINTAINERCLEANFILES = \ + $(libapiwriter_la_VALASOURCES:.vala=.c) \ + $(NULL) + diff --git a/src/doclets/htmlhelpers/languages/vala.vala b/src/doclets/htmlhelpers/languages/vala.vala new file mode 100644 index 000000000..99eb791b2 --- /dev/null +++ b/src/doclets/htmlhelpers/languages/vala.vala @@ -0,0 +1,615 @@ + + +using Valadoc.Html; +using Valadoc; +using Gee; + +public class Valadoc.Html.Api.Vala { + private Attribute csskeyword = new Attribute ("class", "apikeyword"); + private Attribute cssformalparam = new Attribute ("class", "apiformalparameter"); + private Attribute cssparamlist = new Attribute ("class", "apiparameterlist"); + private Attribute cssexclist = new Attribute ("class", "apiexceptionlist"); + private Attribute cssapi = new Attribute ("class", "api"); + private Attribute csstype = new Attribute ("class", "apitype"); + private Attribute cssbasictype = new Attribute ("class", "apibasictype"); + private Attribute csslink = new Attribute ("class", "apilink"); + private Attribute cssoptparamlist = new Attribute ("class", "apioptparameterlist"); + + + private Entry keyword (string str) { + Span span = new Span (); + span.add_attribute (this.csskeyword); + span.add_child (new String(str)); + return span; + } + + private Entry type (Basic? type, out bool documentedelement) { + ArrayList elements = new ArrayList (); + weak Attribute css = this.csstype; + documentedelement = false; + + while (true) { + if (type == null) { + elements.insert (0, this.keyword("void")); + break; + } + else if (type is Pointer) { + elements.add (new String("*")); + type = ((Pointer)type).data_type; + } + else if (type is Array) { + //TODO: multidim. arrays + elements.add (new String("[]")); + type = ((Array)type).data_type; + } + else if (type is TypeParameter) { + elements.insert (0, new String (((TypeParameter)type).name)); + break; + } + else if (type is DocumentedElement) { + weak DocumentedElement dtype = (DocumentedElement)type; + if (dtype.package.name == "glib-2.0" && dtype.nspace.name == null && (dtype is Struct || dtype is Class)) { + css = this.cssbasictype; + } + + Link link = new Link ("/%s/%s.html".printf (dtype.package.name, dtype.full_name ()), new String (dtype.name)); + link.add_attribute (csslink); + elements.insert (0, link); + documentedelement = true; + break; + } + else { // typereference + // prepend: + ArrayList lst = this.type_reference (((TypeReference)type)); + foreach (Entry e in elements) { + lst.add (e); + } + elements = lst; + break; + } + } + + Span span = new Span.from_list (elements); + span.add_attribute (css); + return span; + } + + private ArrayList? type_parameter_list (TemplateParameterListHandler tplh) { + Collection tpllist = tplh.get_template_param_list (); + if (tpllist.size == 0) { + return null; + } + + ArrayList cnt = new ArrayList (); + int i = 0; + + cnt.add (new String ("<")); + + foreach (TypeParameter tpl in tpllist ) { + Span span = new Span (); + span.add_child (new String (tpl.name)); + span.add_attribute (this.csstype); + cnt.add (span); + + if (++i != tpllist.size) { + cnt.add (new String (", ")); + } + } + + cnt.add (new String (">")); + return cnt; + } + + private ArrayList type_reference (TypeReference typeref) { + ArrayList list = new ArrayList (); + bool documentedelement; + + StringBuilder str = new StringBuilder (); + //if(typeref.pass_ownership) { + //} + + if(typeref.is_dynamic) { + str.append ("dynamic "); + } + + if(typeref.is_owned) { + str.append ("owned "); + } + + if(typeref.is_unowned) { + str.append ("unowned "); + } + + if(typeref.is_weak) { + str.append ("weak "); + } + + if (str.len > 0) { + list.add (this.keyword (str.str)); + } + + list.add (this.type (typeref.data_type, out documentedelement)); + + Collection typeargs = typeref.get_type_arguments (); + if (typeargs.size != 0) { + list.add (new String ("<")); + int i = 0; + + foreach (TypeReference tref in typeargs) { + foreach (Entry e in this.type_reference (tref)) { + list.add (e); + } + + if (++i != typeargs.size) { + list.add (new String (", ")); + } + } + + list.add (new String (">")); + } + + if(typeref.is_nullable && documentedelement) { + list.add(new String("?")); + } + + return list; + } + + private Entry formal_parameter (FormalParameter param) { + Span span = new Span (); + span.add_attribute (this.cssformalparam); + + if (param.ellipsis) { + span.add_child (new String ("...")); + return span; + } + else { + if (param.is_out) { + span.add_child (this.keyword("out ")); + } + else if (param.is_ref) { + span.add_child (this.keyword("ref ")); + } + + span.add_childs (this.type_reference(param.type_reference)); + span.add_child (new String(" "+param.name)); + return span; + } + } + + private Entry parameter_list (ParameterListHandler paramh) { + Span rspan = new Span (); + Span span = rspan; + + span.add_attribute (cssparamlist); + + span.add_child (new String("(")); + bool default_value = false; + int i = 0; + + foreach (FormalParameter param in paramh.param_list) { + if (param.has_default_value) { + default_value = true; + + span = new Span (); + span.add_attribute (this.cssoptparamlist); + span.add_child (new String("[")); + rspan.add_child (span); + } + + span.add_child (this.formal_parameter(param)); + if (++i != paramh.param_list.size) { + span.add_child (new String (", ")); + } + } + + if (default_value) { + span.add_child (new String("]")); + span = rspan; + } + + span.add_child (new String(")")); + return rspan; + } + + private string symbol_accessibility (SymbolAccessibility symbol) { + if (symbol.is_public) { + return "public"; + } + else if (symbol.is_protected) { + return "protected "; + } + else { + return "private "; + } + } + + private Entry exception (DocumentedElement element) { + Span span = new Span(); + span.add_child (new String (element.full_name())); + return span; + } + + private Entry? exceptions (ExceptionHandler exh) { + Collection errs = exh.get_error_domains (); + if (errs.size == 0) { + return null; + } + + Span span = new Span (); + span.add_attribute (cssexclist); + + span.add_child (this.keyword(" throws ")); + + foreach (DocumentedElement type in errs) { + span.add_child (this.exception(type)); + } + + return span; + } + + public Div from_method (Method m) { + Div api = new Div (); + api.add_attribute (cssapi); + + StringBuilder str = new StringBuilder (this.symbol_accessibility (m)); + str.append_c (' '); + + if ( m.is_abstract ) { + str.append ("abstract "); + } + else if ( m.is_virtual ) { + str.append ("virtual "); + } + else if ( m.is_override ) { + str.append ("override "); + } + + if ( m.is_static ) { + str.append ("static "); + } + + if ( m.is_inline ) { + str.append ("inline "); + } + + api.add_child (this.keyword(str.str)); + str = null; + + + // return type: + if (m.is_constructor == false) { + Collection lst = this.type_reference (m.type_reference); + api.add_childs (lst); + } + + api.add_child (new String (" "+m.name)); + + + Collection lst = this.type_parameter_list ((m.is_constructor)? (TemplateParameterListHandler)m.parent: m); + if (lst != null) { + api.add_childs (lst); + } + + api.add_child (new String (" ")); + + // type parameters + api.add_child (this.parameter_list (m)); + Entry? exceptions = this.exceptions (m); + if (exceptions != null) { + api.add_child (exceptions); + } + + if (m.is_yields) { + api.add_child (this.keyword(" yields")); + } + + api.add_child (new String(";")); + return api; + } + + public Div from_delegate (Delegate del) { + Div api = new Div (); + api.add_attribute (cssapi); + + + api.add_child (this.keyword(this.symbol_accessibility (del) + " delegate ")); + + + // return type: + Collection lst = this.type_reference (del.type_reference); + foreach (Entry e in lst) { + api.add_child (e); + } + + api.add_child (new String (" "+del.name)); + + lst = this.type_parameter_list (del); + if (lst != null) { + api.add_childs (lst); + } + + api.add_child (new String (" ")); + + + // type parameters + api.add_child (this.parameter_list (del)); + Entry? exceptions = this.exceptions (del); + if (exceptions != null) { + api.add_child (exceptions); + } + + api.add_child (new String(";")); + return api; + } + + public Div from_signal (Signal sig) { + Div api = new Div (); + api.add_attribute (cssapi); + + + api.add_child (this.keyword(this.symbol_accessibility (sig) + " signal ")); + + // return type: + Collection lst = this.type_reference (sig.type_reference); + foreach (Entry e in lst) { + api.add_child (e); + } + + api.add_child (new String (" "+sig.name+" ")); + // type parameters + api.add_child (this.parameter_list (sig)); + api.add_child (new String(";")); + return api; + } + + public Div from_field (Field field) { + Div api = new Div (); + api.add_attribute (cssapi); + + StringBuilder str = new StringBuilder (this.symbol_accessibility (field)); + str.append_c (' '); + + if (field.is_volatile) { + str.append ("volatile "); + } + + if (field.is_static) { + str.append ("static "); + } + + api.add_child (this.keyword (str.str)); + + foreach (Entry e in this.type_reference (field.type_reference)) { + api.add_child (e); + } + + api.add_child (new String(" "+field.name+";")); + return api; + } + + public Div from_constant (Constant c) { + Div api = new Div (); + api.add_attribute (cssapi); + + api.add_child (this.keyword (this.symbol_accessibility (c)+" const ")); + + foreach (Entry e in this.type_reference (c.type_reference)) { + api.add_child (e); + } + + api.add_child (new String(" "+c.name+";")); + return api; + } + + public Div from_namespace (Namespace ns) { + Div api = new Div (); + api.add_attribute (cssapi); + + api.add_child (this.keyword ("namespace ")); + api.add_child (new String (ns.name+";")); + return api; + } + + public Div from_enum (Enum en) { + Div api = new Div (); + api.add_attribute (cssapi); + + api.add_child (this.keyword (this.symbol_accessibility (en) + " enum ")); + api.add_child (new String (en.name+";")); + return api; + } + + public Div from_errordomain (ErrorDomain err) { + Div api = new Div (); + api.add_attribute (cssapi); + + api.add_child (this.keyword (this.symbol_accessibility (err) + " errordomain ")); + api.add_child (new String (err.name+";")); + return api; + } + + public Div from_enumvalue (EnumValue env) { + Div api = new Div (); + api.add_attribute (cssapi); + api.add_child (new String (env.name)); + return api; + } + + public Div from_errorcode (ErrorCode errc) { + Div api = new Div (); + api.add_attribute (cssapi); + api.add_child (new String (errc.name)); + return api; + } + + public Div from_struct (Struct stru) { + Div api = new Div (); + api.add_attribute (cssapi); + + api.add_child (this.keyword (this.symbol_accessibility (stru) + " struct ")); + api.add_child (new String (stru.name)); + + Collection lst = this.type_parameter_list (stru); + if (lst != null) { + api.add_childs (lst); + } + + api.add_child (new String (";")); + return api; + } + + public Div from_class (Class cl) { + Div api = new Div (); + api.add_attribute (cssapi); + + StringBuilder str = new StringBuilder (this.symbol_accessibility (cl)); + if (cl.is_abstract) { + str.append (" abstract"); + } + + str.append (" class "); + + api.add_child (this.keyword(str.str)); + str = null; + + api.add_child (new String (cl.name)); + + Collection lst = this.type_parameter_list (cl); + if (lst != null) { + api.add_childs (lst); + } + + api.add_child (new String (";")); + return api; + } + + public Div from_interface (Interface iface) { + Div api = new Div (); + api.add_attribute (cssapi); + + + api.add_child (this.keyword (this.symbol_accessibility (iface)+" interface ")); + api.add_child (new String (iface.name)); + + Collection lst = this.type_parameter_list (iface); + if (lst != null) { + api.add_childs (lst); + } + + api.add_child (new String (";")); + return api; + } + + private Entry from_property_accessor (PropertyAccessor propac) { + StringBuilder str = new StringBuilder (); + + if (propac.is_private) { + str.append ("private "); + } + else if (propac.is_public) { + str.append ("public "); + } + else { + str.append ("protected "); + } + + if (propac.is_owned) { + str.append ("owned "); + } + + if (propac.is_get ) { + str.append ("get "); + } + else { + str.append ("set "); + } + + Span span = new Span (); + span.add_child (this.keyword (str.str)); + span.add_child (new String ("; ")); + return span; + } + + public Div from_property (Property prop) { + Div api = new Div (); + api.add_attribute (cssapi); + + + StringBuilder str = new StringBuilder (this.symbol_accessibility (prop)); + if (prop.is_virtual) { + str.append ( " virtual " ); + } + else if (prop.is_abstract) { + str.append ( " abstract " ); + } + else { + str.append ( " override " ); + } + + api.add_child (this.keyword (str.str)); + + foreach (Entry e in this.type_reference (prop.type_reference)) { + api.add_child (e); + } + + api.add_child (new String(" "+prop.name+" { ")); + if (prop.setter != null) { + api.add_child(from_property_accessor (prop.setter)); + } + + if (prop.getter != null) { + api.add_child(from_property_accessor (prop.getter)); + } + + api.add_child (new String("}")); + return api; + } + + public Div from_documented_element (DocumentedElement el) { + if (el is Method) { + return this.from_method ((Method)el); + } + else if (el is Delegate) { + return this.from_delegate ((Delegate)el); + } + else if (el is Signal) { + return this.from_signal ((Signal)el); + } + else if (el is Field) { + return this.from_field ((Field)el); + } + else if (el is Constant) { + return this.from_constant ((Constant)el); + } + else if (el is Namespace) { + return this.from_namespace ((Namespace)el); + } + else if (el is Enum) { + return this.from_enum ((Enum)el); + } + else if (el is ErrorDomain) { + return this.from_errordomain ((ErrorDomain)el); + } + else if (el is EnumValue) { + return this.from_enumvalue ((EnumValue)el); + } + else if (el is ErrorCode) { + return this.from_errorcode ((ErrorCode)el); + } + else if (el is Struct) { + return this.from_struct ((Struct)el); + } + else if (el is Class) { + return this.from_class ((Class)el); + } + else if (el is Interface) { + return this.from_interface ((Interface)el); + } + else { + return this.from_property ((Property)el); + } + } +} + + diff --git a/src/doclets/valadoc.org/doclet/Makefile.am b/src/doclets/valadoc.org/doclet/Makefile.am index 5953bf8af..0545451cb 100644 --- a/src/doclets/valadoc.org/doclet/Makefile.am +++ b/src/doclets/valadoc.org/doclet/Makefile.am @@ -12,7 +12,7 @@ BUILT_SOURCES = libdoclet.vala.stamp libdoclet.vala.stamp: $(libdoclet_VALASOURCES) - $(VALAC) -C --vapidir ../../../vapi --pkg mysql --pkg valadoc-1.0 --basedir . --save-temps $^ + $(VALAC) -C --vapidir ../../htmlhelpers/html/ --pkg htmlwriter-1.0 --vapidir ../../htmlhelpers/languages/ --pkg apiwriter-1.0 --pkg valadoc-1.0 --basedir . --save-temps $^ touch $@ @@ -31,11 +31,13 @@ libdoclet_la_SOURCES = \ -AM_CFLAGS = -g \ - -I ../../../libvaladoc/ \ - `mysql_config --cflags` \ - $(GLIB_CFLAGS) \ - $(LIBVALA_CFLAGS) \ +AM_CFLAGS = -g \ + -I ../../../libvaladoc/ \ + -I ../../htmlhelpers/html \ + -I ../../htmlhelpers/languages \ + `mysql_config --cflags` \ + $(GLIB_CFLAGS) \ + $(LIBVALA_CFLAGS) \ $(NULL) @@ -44,10 +46,12 @@ libdoclet_la_LDFLAGS = -module -avoid-version \ $(NULL) -libdoclet_la_LIBADD = \ - ../../../libvaladoc/libvaladoc.la \ - $(GLIB_LIBS) \ - $(LIBVALA_LIBS) \ +libdoclet_la_LIBADD = \ + ../../../libvaladoc/libvaladoc.la \ + ../../htmlhelpers/html/libhtmlwriter.la \ + ../../htmlhelpers/languages/libapiwriter.la \ + $(GLIB_LIBS) \ + $(LIBVALA_LIBS) \ $(NULL) diff --git a/src/doclets/valadoc.org/doclet/template.vala b/src/doclets/valadoc.org/doclet/template.vala index 3669dfa3c..360559c15 100644 --- a/src/doclets/valadoc.org/doclet/template.vala +++ b/src/doclets/valadoc.org/doclet/template.vala @@ -17,14 +17,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +using Valadoc.Diagrams; +using Valadoc.Html; using Valadoc; -using Mysql; using GLib; using Gee; public class Valadoc.HtmlDoclet : Valadoc.Doclet { + private Valadoc.Html.Api.Vala langwriter = new Valadoc.Html.Api.Vala (); private Settings settings; private FileStream file; private bool run; @@ -46,6 +48,10 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { } } + private string get_image_path (DocumentedElement element) { + return Path.build_filename (this.settings.path, element.package.name, element.package.name, element.full_name () + ".png"); + } + // get_type_path() private void write_insert_into_valadoc_element_str (string name, string pkgname, string fullname) { string fullname2 = (pkgname == fullname)? pkgname : pkgname+"/"+fullname; @@ -81,11 +87,9 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { // get_type_path() private void write_insert_into_code_element (DocumentedElement element) { - string api = "foo bar foobaro"; + string api = this.langwriter.from_documented_element (element).to_string (0, ""); string parentnodepkgname; string parentnodename; - string typename; - string cname; Basic parent = element.parent; if (parent is DocumentedElement) { @@ -111,6 +115,11 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { return ; } + if (GLib.DirUtils.create (Path.build_filename(path, pkg.name), 0777) == -1) { + this.run = false; + return ; + } + path = Path.build_filename(path, "dump.sql"); this.file = FileStream.open (path , "w"); if (this.file == null) { @@ -234,6 +243,8 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { } public override void visit_interface ( Interface iface ) { + write_interface_diagram (iface, this.get_image_path (iface)); + this.write_insert_into_valadoc_element (iface); if (this.run == false) { return ; @@ -312,6 +323,8 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { } public override void visit_class ( Class cl ) { + write_class_diagram (cl, this.get_image_path (cl)); + this.write_insert_into_valadoc_element (cl); if (this.run == false) { return ; @@ -322,6 +335,14 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { return ; } + foreach (Method m in cl.get_construction_method_list ()) { + m.visit(this, cl); + + if (this.run == false) { + return ; + } + } + foreach (Delegate del in cl.get_delegate_list()) { del.visit(this); @@ -406,6 +427,8 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { } public override void visit_struct ( Struct stru ) { + write_struct_diagram (stru, this.get_image_path (stru)); + this.write_insert_into_valadoc_element (stru); if (this.run == false) { return ; @@ -416,6 +439,14 @@ public class Valadoc.HtmlDoclet : Valadoc.Doclet { return ; } + foreach (Method m in stru.get_construction_method_list ()) { + m.visit(this, stru); + + if (this.run == false) { + return ; + } + } + foreach (Method m in stru.get_method_list()) { m.visit(this, stru); diff --git a/src/libvaladoc/apitree.vala b/src/libvaladoc/apitree.vala index 354fd14c7..e608f11d7 100755 --- a/src/libvaladoc/apitree.vala +++ b/src/libvaladoc/apitree.vala @@ -611,7 +611,6 @@ public interface Valadoc.NamespaceHandler : Basic { return ns.get_namespace_helper ( node, vnspaces, pos+1 ); } - // TODO: Rename vars protected Namespace get_namespace ( Vala.Symbol node ) { Vala.Symbol vnd = ((Vala.Symbol)node).parent_symbol; if ( vnd is Vala.Namespace == false ) @@ -1704,14 +1703,6 @@ public class Valadoc.TypeReference : Basic { return this.is_weak_helper ( ((Vala.FormalParameter)parent).parameter_type ); } - // return type - if ( parent is Vala.Method == true ) - return this.is_weak_helper ( ((Vala.Method)parent).return_type ); - else if ( parent is Vala.Signal == true ) - return this.is_weak_helper ( ((Vala.Signal)parent).return_type ); - else if ( parent is Vala.Delegate == true ) - return this.is_weak_helper ( ((Vala.Delegate)parent).return_type ); - return false; } } @@ -1744,6 +1735,22 @@ public class Valadoc.TypeReference : Basic { public bool is_weak { get { + Vala.CodeNode parent = this.vtyperef.parent_node; + + if (parent is Vala.FormalParameter) { + return false; + } + + if (parent is Vala.Method == true) { + return this.is_weak_helper ( ((Vala.Method)parent).return_type ); + } + else if (parent is Vala.Signal == true) { + return this.is_weak_helper ( ((Vala.Signal)parent).return_type ); + } + else if (parent is Vala.Delegate == true) { + return this.is_weak_helper ( ((Vala.Delegate)parent).return_type ); + } + return ( this.vtyperef.parent_node is Field )? this.is_weak_helper( this.vtyperef ) : false; } } @@ -2221,11 +2228,8 @@ public class Valadoc.Method : DocumentedElement, ParameterListHandler, Exception var vparamlst = this.vmethod.get_parameters (); this.add_parameter_list ( vparamlst ); -// var vtparams = this.vmethod.get_type_parameters (); -// this.set_template_parameter_list ( vtparams ); - - //var vexceptionlst = this.vmethod.get_error_types (); - //this.add_error_domains ( vexceptionlst ); + var vtparams = this.vmethod.get_type_parameters (); + this.set_template_parameter_list ( vtparams ); } // intern @@ -4111,6 +4115,7 @@ public class Valadoc.Tree : Vala.CodeVisitor { private Valadoc.Settings settings; private CodeContext context; private ErrorReporter reporter; + private Package sourcefiles = null; public WikiPageTree? wikitree { private set; @@ -4233,8 +4238,8 @@ public class Valadoc.Tree : Vala.CodeVisitor { return ; Vala.SourceFile vfile = vcl.source_reference.file; - Package file = this.find_file( vfile ); - Namespace ns = file.get_namespace ( vcl ); + Package file = this.find_file(vfile); + Namespace ns = file.get_namespace (vcl); ns.add_class ( vcl ); } @@ -4448,8 +4453,15 @@ public class Valadoc.Tree : Vala.CodeVisitor { var rpath = realpath (source); if (source.has_suffix (".vala") || source.has_suffix (".gs")) { var source_file = new SourceFile (context, rpath); - Package vdpkg = new Package (this.settings, source_file, this, false); - this.packages.add (vdpkg); + + + if (this.sourcefiles == null) { + this.sourcefiles = new Package (this.settings, source_file, this, false); + this.packages.add (this.sourcefiles); + } + else { + this.sourcefiles.add_file (source_file); + } if (context.profile == Profile.POSIX) { // import the Posix namespace by default (namespace of backend-specific standard library) diff --git a/src/vapi/valadoc-1.2.0.deps b/src/vapi/valadoc-1.2.0.deps new file mode 100644 index 000000000..58713595c --- /dev/null +++ b/src/vapi/valadoc-1.2.0.deps @@ -0,0 +1,2 @@ +vala-1.0 +libgvc