namespace JSDOC
{
- class DocBuilder : Object
+ public class DocBuilder : Object
{
private SymbolSet symbolSet;
+ public Symbol getSymbol(string name) // wrapper for read only...
+ {
+ return this.symbolSet.getSymbol(name);
+ }
+
+
+
+
private Packer packer;
public DocBuilder (Packer p)
this.parseSrcFiles();
+ DocParser.validateAugments();
+ DocParser.fillChildClasses();
+ DocParser.fillTreeChildren();
+
+
this.symbolSet = DocParser.symbols();
+
+
+ var classes = DocParser.classes();
- // this currently uses the concept of publish.js...
+ // this currently uses the concept of publish.js...
+
if (PackerRun.singleton().opt_doc_dump_tree) {
- var symbols = this.symbolSet.values();
-
-
+
//print(JSON.stringify(symbols,null,4));
- var classes = new Gee.ArrayList<Symbol>();
-
- foreach(var symbol in symbols) {
- if (symbol.isaClass()) {
- classes.add(symbol);
- }
- }
- classes.sort( (a,b) => {
- return a.alias.collate(b.alias);
- });
-
+
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, this.publishJSON(symbol));
+ var symbol = classes.get(i);
+ //
+ 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);
DocParser.parse(ts, srcFile);
- /*
- if (useCache) {
-
- var ar = DocParser.symbolsToObject(srcFile);
-
- var builder = new Json.Builder ();
- builder.begin_array ();
- for (var i=0;i<ar.size;i++) {
-
- builder.add_object_value (ar.get(i));
- }
- builder.end_array ();
- Json.Generator generator = new Json.Generator ();
- Json.Node root = builder.get_root ();
- generator.set_root (root);
- generator.pretty= true;
- generator.ident = 2;
- generator.to_file(cacheFile);
-
-
-
- }
- */
+
}
DocParser.finish();
- }
- /*
-
- //var txs =
-
- var tr = new TokenReader(this.packer);
- tr.keepDocs = true;
- tr.keepWhite = true;
- tr.keepComments = true;
- tr.sepIdents = false;
- tr.collapseWhite = false;
- tr.filename = src;
-
+
+
+ // this is probably not the best place for this..
+
+
- var toks = tr.tokenize( new TextStream(src));
- if (PackerRun.opt_dump_tokens) {
- toks.dump();
- return "";
- //GLib.Process.exit(0);
- }
-
-
- var ts = new TokenStream(toks);
-
-
-
-
- DocParser.parse(ts, srcFile);
-
- if (useCache) {
-
- var ar = DocParser.symbolsToObject(srcFile);
-
- var builder = new Json.Builder ();
- builder.begin_array ();
- for (var i=0;i<ar.size;i++) {
-
- builder.add_object_value (ar.get(i));
- }
- builder.end_array ();
- Json.Generator generator = new Json.Generator ();
- Json.Node root = builder.get_root ();
- generator.set_root (root);
- generator.pretty= true;
- generator.ident = 2;
- generator.to_file(cacheFile);
-
-
-
- // }
- }
-
-
-
- Parser.finish();
- }
-
- */
+
+
+
+ }
+
+
+
+
string tempdir;
void publish()
this.makeSrcFile(file);
}
//print(JSON.stringify(symbols,null,4));
- var classes = new Gee.ArrayList<Symbol>();
-
- foreach(var symbol in symbols) {
- if (symbol.isaClass()) {
- classes.add(symbol);
- }
- }
- classes.sort( (a,b) => {
- return a.alias.collate(b.alias);
- });
+ 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(this.class_to_json(symbol));
+ class_root.init_object(symbol.toClassDocJSON());
class_gen.set_root (class_root);
class_gen.pretty= true;
class_gen.indent = 2;
- GLib.warning("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/symbols/" +symbol.alias+".json");
+ GLib.debug("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/symbols/" +symbol.alias+".json");
this.writeJson(class_gen, PackerRun.singleton().opt_doc_target+"/symbols/" +symbol.alias+".json");
- jsonAll.set_object_member(symbol.alias, this.publishJSON(symbol));
+ jsonAll.set_object_member(symbol.alias, symbol.toClassJSON());
}
- // outptu class truee
+ // outptu class tree
var class_tree_gen = new Json.Generator ();
var class_tree_root = new Json.Node(Json.NodeType.ARRAY);
class_tree_gen.set_root (class_tree_root);
class_tree_gen.pretty= true;
class_tree_gen.indent = 2;
- GLib.warning("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/tree.json");
+ GLib.debug("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/tree.json");
this.writeJson(class_tree_gen,PackerRun.singleton().opt_doc_target+"/tree.json");
size_t class_tree_l;
//GLib.debug("JSON: %s", class_tree_gen.to_data(out class_tree_l));
generator.set_root (root);
generator.pretty= true;
generator.indent = 2;
- GLib.warning("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/json/roodata.json");
+ GLib.debug("writing JSON: %s", PackerRun.singleton().opt_doc_target+"/json/roodata.json");
this.writeJson(generator,PackerRun.singleton().opt_doc_target+"/json/roodata.json");
}
- Json.Object class_to_json (Symbol cls)
- {
- var ret = new Json.Object();
- ret.set_string_member("name", cls.alias);
- var ag = new Json.Array();
- ret.set_array_member("augments", ag);
- for(var ii = 0, il = cls.augments.size; ii < il; ii++) {
- var contributer = this.symbolSet.getSymbol(cls.augments[ii]);
- if (contributer == null) {
- continue;
- }
- ag.add_string_element(contributer.alias);
- }
- ret.set_string_member("name", cls.alias);
- ret.set_string_member("desc", cls.desc);
- ret.set_boolean_member("isSingleton", cls.comment.getTag(DocTagTitle.SINGLETON).size > 0);
- ret.set_boolean_member("isStatic", cls.isa != "CONSTRUCTOR");
- ret.set_boolean_member("isBuiltin", cls.isBuiltin());
-
- // needded so that the class can fake a ctor..
- ret.set_string_member("memberOf", cls.name);
- ret.set_string_member("example", cls.comment.getTagAsString(DocTagTitle.EXAMPLE));
- ret.set_string_member("deprecated", // as depricated is used as a flag...
- cls.comment.getTag(DocTagTitle.DEPRECATED).size > 0 ?
- "This has been deprecated: "+ cls.comment.getTagAsString(DocTagTitle.DEPRECATED) :
- "");
- ret.set_string_member("since", cls.comment.getTagAsString(DocTagTitle.SINCE));
- ret.set_string_member("see", cls.comment.getTagAsString(DocTagTitle.SINCE));
- // not supported or used yet?
- //add.set_string_member("exceptions", m.comment.getTagAsString(DocTagTitle.EXCEPTIONS));
- //add.set_string_member("requires", m.comment.getTagAsString(DocTagTitle.REQUIRES));
- ret.set_array_member("params", cls.paramsToJson());
- ret.set_array_member("returns", new Json.Array());
-
- //ret.set_string_member("desc", cls.comment.getTagAsString(DocTagTitle.DESC));
- /// fixme - @see ... any others..
-
- var props = new Json.Array();
- ret.set_array_member("config", props);
- var cfgProperties = cls.configToArray();
- for(var i =0; i < cfgProperties.size;i++) {
- var p = cfgProperties.get(i);
- var add = new Json.Object();
- add.set_string_member("name",p.name);
- add.set_string_member("type",p.type);
- add.set_string_member("desc",p.desc);
- add.set_string_member("memberOf", p.memberOf);
- add.set_array_member("optvals",p.optvalues.size > 0 ? p.optvalue_as_json_array() : new Json.Array());
- props.add_object_element(add );
- }
-
- // methods
-
-
- var methods = new Json.Array();
- ret.set_array_member("methods", methods);
- foreach(var m in cls.methods) {
- if (m.isEvent || m.isIgnored) {
- continue;
- }
-
- var add = new Json.Object();
- add.set_string_member("name",m.name);
- //add.set_string_member("type","function");
- add.set_string_member("desc",m.desc);
- //add.set_string_member("sig", m.makeMethodSkel());
- add.set_boolean_member("isStatic", m.isStatic);
- add.set_boolean_member("isConstructor", m.isa == "CONSTRUCTOR");
- add.set_boolean_member("isPrivate", m.isPrivate);
- //add.set_string_member("instanceOf", m.comment.getTagAsString(DocTagTitle.INSTANCEOF));
- add.set_string_member("memberOf", m.memberOf);
- add.set_string_member("example", m.comment.getTagAsString(DocTagTitle.EXAMPLE));
- add.set_string_member("deprecated", // as depricated is used as a flag...
- m.comment.getTag(DocTagTitle.DEPRECATED).size > 0 ?
- "This has been deprecated: "+ m.comment.getTagAsString(DocTagTitle.DEPRECATED) :
- "");
- add.set_string_member("since", m.comment.getTagAsString(DocTagTitle.SINCE));
- add.set_string_member("see", m.comment.getTagAsString(DocTagTitle.SINCE));
- // not supported or used yet?
- //add.set_string_member("exceptions", m.comment.getTagAsString(DocTagTitle.EXCEPTIONS));
- //add.set_string_member("requires", m.comment.getTagAsString(DocTagTitle.REQUIRES));
- add.set_array_member("params", m.paramsToJson());
- add.set_array_member("returns", m.returnsToJson());
-
- /// fixme - @see ... any others..
-
-
- methods.add_object_element(add);
- }
-
-
- var events = new Json.Array();
- ret.set_array_member("events", events);
- foreach(var m in cls.methods) {
- if (!m.isEvent || m.isIgnored) {
- continue;
- }
-
- var add = new Json.Object();
- add.set_string_member("name",m.name.substring(1)); // all prefixed with '*'...
- //add.set_string_member("type","function");
- add.set_string_member("desc",m.desc);
- //add.set_string_member("sig", m.makeMethodSkel());
-
- add.set_string_member("memberOf", m.memberOf);
- add.set_string_member("example", m.comment.getTagAsString(DocTagTitle.EXAMPLE));
- add.set_string_member("deprecated", // as depricated is used as a flag...
- m.comment.getTag(DocTagTitle.DEPRECATED).size > 0 ?
- "This has been deprecated: "+ m.comment.getTagAsString(DocTagTitle.DEPRECATED) :
- "");
- add.set_string_member("since", m.comment.getTagAsString(DocTagTitle.SINCE));
- add.set_string_member("see", m.comment.getTagAsString(DocTagTitle.SINCE));
- // not supported or used yet?
- //add.set_string_member("exceptions", m.comment.getTagAsString(DocTagTitle.EXCEPTIONS));
- //add.set_string_member("requires", m.comment.getTagAsString(DocTagTitle.REQUIRES));
-
- add.set_array_member("params", m.paramsToJson());
- add.set_array_member("returns", m.returnsToJson());
-
- /// fixme - @see ... any others..
-
-
- events.add_object_element(add);
- }
-
-
-
-
- return ret;
- }
+
/**
* needed as Json dumps .xXXX into same directory as it writes...
*/
GLib.File.new_for_path(tmp).move( File.new_for_path(fname), GLib.FileCopyFlags.OVERWRITE);
}
-
- /**
- * JSON files are lookup files for the documentation
- * - can be used by IDE's or AJAX based doc tools
- *
- *
- */
- Json.Object publishJSON (Symbol data)
- {
- // what we need to output to be usefull...
- // a) props..
- var cfgProperties = new Gee.ArrayList<DocTag>();
- if (data.comment.getTag(DocTagTitle.SINGLETON).size < 1) {
- cfgProperties = data.configToArray();
- cfgProperties.sort((a,b) =>{
- return a.name.collate(b.name);
- });
-
- }
-
- var props = new Json.Array();
- //println(cfgProperties.toSource());
-
- for(var i =0; i < cfgProperties.size;i++) {
- var p = cfgProperties.get(i);
- var add = new Json.Object();
- add.set_string_member("name",p.name);
- add.set_string_member("type",p.type);
- add.set_string_member("desc",p.desc);
- add.set_string_member("memberOf", p.memberOf == data.alias ? "" : p.memberOf);
-
- if (p.optvalues.size > 0) {
- add.set_array_member("optvals",p.optvalue_as_json_array());
- }
-
- props.add_object_element(add );
- }
-
- ///// --- events
- var ownEvents = new Gee.ArrayList<Symbol>();
- for(var i =0; i < data.methods.size;i++) {
- var e = data.methods.get(i);
- if (e.isEvent && !e.isIgnored) {
- ownEvents.add(e);
- }
- };
- ownEvents.sort((a,b) => {
- return a.name.collate(b.name);
- });
-
- var events = new Json.Array();
-
- for(var i =0; i < ownEvents.size;i++) {
- var m = ownEvents.get(i);
- var add = new Json.Object();
- add.set_string_member("name",m.name.substring(1,-1)); // remove'*' on events..
- add.set_string_member("type","function");
- add.set_string_member("desc",m.desc);
- add.set_string_member("sig", m.makeFuncSkel());
- add.set_string_member("memberOf", m.memberOf == data.alias ? "" : m.memberOf);
- events.add_object_element(add);
- }
-
- // methods
- var ownMethods = new Gee.ArrayList<Symbol>();
- for(var i =0; i < data.methods.size;i++) {
- var e = data.methods.get(i);
- if (!e.isEvent && !e.isIgnored) {
- ownMethods.add(e);
- }
- };
- ownMethods.sort((a,b) => {
- return a.name.collate(b.name);
- });
-
- var methods = new Json.Array();
-
- for(var i =0; i < ownMethods.size;i++) {
- var m = ownMethods.get(i);
- var add = new Json.Object();
- add.set_string_member("name",m.name);
- add.set_string_member("type","function");
- add.set_string_member("desc",m.desc);
- add.set_string_member("sig", m.makeMethodSkel());
- add.set_boolean_member("static", m.isStatic);
- add.set_string_member("memberOf", m.memberOf == data.alias ? "" : m.memberOf);
- methods.add_object_element(add);
- }
-
- //println(props.toSource());
- // we need to output:
- //classname => {
- // propname =>
- // type=>
- // desc=>
- // }
- var ret = new Json.Object();
- ret.set_array_member("props", props);
- ret.set_array_member("events", events);
- ret.set_array_member("methods", methods);
-
- return ret;
-
-
- // b) methods
- // c) events
-
-
- }
+
Gee.HashMap<string,Json.Object> class_tree_map;
Json.Array class_tree_top;
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) {