this.parseSrcFiles();
+ DocParser.validateAugments();
+ DocParser.fillChildClasses();
+ DocParser.fillDocChildren();
+
+
this.symbolSet = DocParser.symbols();
- var classes = this.classes();
- foreach (var cls in classes) {
- foreach (var lookcls in classes) {
- if (lookcls.augments.contains(cls.alias)) {
- cls.addChildClass(lookcls.alias);
- }
- }
- }
+ var classes = DocParser.classes();
+
// this currently uses the concept of publish.js...
//print(JSON.stringify(symbols,null,4));
var jsonAll = new Json.Object();
+ var ar = new Json.Array();
for (var i = 0, l = classes.size; i < l; i++) {
var symbol = classes.get(i);
- jsonAll.set_object_member(symbol.alias, symbol.toClassJSON());
+ //
+ ar.add_object_element( symbol.toJson());
}
-
+ jsonAll.set_array_member("data", ar);
var generator = new Json.Generator ();
var root = new Json.Node(Json.NodeType.OBJECT);
}
- // prehaps move to symbolset?
- public Gee.ArrayList<Symbol> classes()
- {
- var classes = new Gee.ArrayList<Symbol>();
- foreach(var symbol in this.symbolSet.values()) {
- if (symbol.isaClass()) {
- classes.add(symbol);
- }
- }
- classes.sort( (a,b) => {
- return a.alias.collate(b.alias);
- });
- return classes;
- }
-
+
string tempdir;
this.makeSrcFile(file);
}
//print(JSON.stringify(symbols,null,4));
- var classes = this.classes();
+ var classes = DocParser.classes();
//GLib.debug("classTemplate Process : all classes");
var class_gen = new Json.Generator ();
var class_root = new Json.Node(Json.NodeType.OBJECT);
- class_root.init_object(symbol.toClassDocJSON(this));
+ class_root.init_object(symbol.toClassDocJSON());
class_gen.set_root (class_root);
class_gen.pretty= true;
class_gen.indent = 2;
}
- // outptu class truee
+ // outptu class tree
var class_tree_gen = new Json.Generator ();
var class_tree_root = new Json.Node(Json.NodeType.ARRAY);
add.set_string_member("name", name);
add.set_array_member("cn", new Json.Array());
add.set_boolean_member("is_class", is_class);
+
this.class_tree_map.set(name, add);
var bits = name.split(".");
if (bits.length == 1) {
namespace JSDOC
{
+ public errordomain DocParserError {
+ InvalidAugments
+ }
+
public class DocParser : Object
{
public static string currentSourceFile;
-
+ public static Gee.ArrayList<Symbol> classes()
+ {
+ var classes = new Gee.ArrayList<Symbol>();
+ foreach(var symbol in this.symbols().values()) {
+ if (symbol.isaClass()) {
+ classes.add(symbol);
+ }
+ }
+ classes.sort( (a,b) => {
+ return a.alias.collate(b.alias);
+ });
+ return classes;
+ }
+
+ public static void validateAugments()
+ {
+ var classes = DocParser.classes();
+ foreach (var cls in classes) {
+ for(var ii = 0, il = cls.augments.size; ii < il; ii++) {
+ var contributer = DocParser.symbols().getSymbol(cls.augments[ii]);
+ if (contributer == null) {
+ throw new DocParserError.InvalidAugments("Looking at Class %s, could not find augments %s",
+ cls.alias, class.augments[ii]);
+ continue;
+ }
+
+ }
+ }
+ }
+
+ public static void fillChildClasses()
+ {
+ var classes = DocParser.classes();
+ foreach (var cls in classes) {
+ foreach (var lookcls in classes) {
+ if (lookcls.augments.contains(cls.alias)) {
+ var extends = "";
+ if (lookcls.augments.size > 0) {
+ extends = lookcls.augments.get(0);
+ if ( extends == lookcls.alias) {
+ extends = lookcls.augments.size > 1 ? lookcls.augments.get(1) : "";
+ }
+ }
+ cls.addChildClass(lookcls.alias, extends);
+ }
+ }
+ }
+ }
-
+ public static void fillDocChildren()
+ {
+ // lookup symbol : builder.getSymbol()
+
+ var classes = DocParser.classes();
+ foreach (var cls in classes) {
+ var ar = classes.doc_children.slice(0, classes.doc_children.size); // copy?
+ classes.doc_children.clear();
+ foreach(var cn in ar) {
+ var sy = DocParser.symbols().getSymbol(cn);
+ if (contributer == null) {
+ throw new DocParserError.InvalidDocChildren("Looking at Class %s, could not find child %s",
+ cls.alias, cn);
+ continue;
+ }
+ classes.doc_children.add(cn);
+ foreach(var cc in sy.childClassList) {
+ classes.doc_children.add(cc);
+ }
+ }
+ }
+
+
+ }
public static void parse(TokenStream ts, string srcFile)
{
EnumClass enumc = (EnumClass) typeof (DocTagTitle).class_ref ();
unowned EnumValue? eval = enumc.get_value_by_name(
- "JSDOC_DOC_TAG_TITLE_"+ mi.fetch(1).up().replace("-", "_")
+ // "JSDOC_DOC_TAG_TITLE_"+ mi.fetch(1).up()
+ "JSDOC_DOC_TAG_TITLE_"+ mi.fetch(1).up().replace("-", "_")
);
if (eval == null) {
throw new DocTagException.INVALID_TITLE("title not supported ??");
}
var run_pack = false;
- if (opt_target != null || opt_debug_target != null || opt_dump_tokens) {
+ if (opt_target != null || opt_debug_target != null || opt_dump_tokens ) {
// do the actual packing...
p.pack( opt_target == null ? "" : opt_target ,
opt_debug_target == null ? "" : opt_debug_target );
}
return;
}
- if (opt_doc_target != null) {
+ if (opt_doc_target != null || opt_doc_dump_tree) {
// remove trailing /
- opt_doc_target = opt_doc_target.has_suffix("/") ?
- opt_doc_target.substring(0, opt_doc_target.length-1) : opt_doc_target;
+ if (opt_doc_target != null ) {
+ opt_doc_target = opt_doc_target.has_suffix("/") ?
+ opt_doc_target.substring(0, opt_doc_target.length-1) : opt_doc_target;
+ }
var d = new JSDOC.DocBuilder(p);
return;
}
return this.__index;
}
}
-
+ // CTOR - do nothing..?
public SymbolSet ()
{