X-Git-Url: http://git.roojs.org/?p=gnome.introspection-doc-generator;a=blobdiff_plain;f=JSDOC%2FBuildDocs.js;h=8c8552e39bd43923087604ce4316791c25743863;hp=3a6529b1bb5adc3f5775ebac3438995f84d3261b;hb=HEAD;hpb=a67931117fc1f532da5016752f7dd3c625ce25d3 diff --git a/JSDOC/BuildDocs.js b/JSDOC/BuildDocs.js index 3a6529b..8c8552e 100644 --- a/JSDOC/BuildDocs.js +++ b/JSDOC/BuildDocs.js @@ -18,10 +18,20 @@ TokenStream = imports.TokenStream.TokenStream; Symbol = imports.Symbol.Symbol; DocComment = imports.DocComment.DocComment; -/****************** INCLUDES ARE ALL AT THE BOTTOM OF THIS FILE!!!!! *******************/ - + // should not realy be here -- or anywhere...?? +function makeSortby(attribute) { + return function(a, b) { + if (a[attribute] != undefined && b[attribute] != undefined) { + a = a[attribute]; //.toLowerCase(); + b = b[attribute];//.toLowerCase(); + if (a < b) return -1; + if (a > b) return 1; + return 0; + } + } +} Options = false; // refer to this everywhere! @@ -57,7 +67,10 @@ BuildDocs = { }, - + /** + * create a list of files in this.srcFiles using list of directories / files in Options.src + * + */ _getSrcFiles : function() { @@ -70,7 +83,10 @@ BuildDocs = { for (var i = 0; i < Options.src.length; i++) { // add to sourcefiles.. - + if (!File.isDirectory(Options.src[i])) { + _this.srcFiles.push(Options.src[i]); + continue; + } File.list(Options.src[i] ).forEach(function($) { if (Options['exclude-src'].indexOf($) > -1) { return; @@ -86,6 +102,10 @@ BuildDocs = { //Seed.print(JSON.stringify(this.srcFiles, null,4));Seed.quit(); return this.srcFiles; }, + /** + * Parse the source files. + * + */ _parseSrcFiles : function() { @@ -96,30 +116,46 @@ BuildDocs = { var srcFile = this.srcFiles[i]; - var cacheFile = Options.cacheDirectory + srcFile.replace(/\//g, '_') + ".cache"; + var cacheFile = !Options.cacheDirectory.length ? false : + Options.cacheDirectory + srcFile.replace(/\//g, '_') + ".cache"; - //println(cacheFile); + //print(cacheFile); // disabled at present!@!! - if (false && !Options.disablecache && File.exists(cacheFile)) { + if (cacheFile && File.exists(cacheFile)) { // check filetime? - var c_mt = File.getTimes(cacheFile); - var o_mt = File.getTimes(srcFile); + var c_mt = File.mtime(cacheFile); + var o_mt = File.mtime(srcFile); //println(c_mt.toSource()); // println(o_mt.toSource()); // this check does not appear to work according to the doc's - need to check it out. - if (c_mt[0] > o_mt[0]) { // cached time > original time! + if (c_mt > o_mt) { // cached time > original time! // use the cached mtimes.. - var syms = JSON.parse(File.read(cacheFile)); - - throw "Conversion of cache not done yet!"; - - for (var sy in syms) { - //println("ADD:" + sy ); - Parser.symbols.addSymbol(syms[sy]); + print("Read " + cacheFile); + var syms = JSON.parse(File.read(cacheFile), function(k, v) { + //print(k); + if (typeof(v) != 'object') { + return v; + } + if (typeof(v['*object']) == 'undefined') { + return v; + } + var cls = imports[v['*object']][v['*object']]; + //print(v['*object']); + delete v['*object']; + var ret = new cls(); + XObject.extend(ret, v); + return ret; + + + }); + //print("Add sybmols " + cacheFile); + for (var sy in syms._index) { + // print("ADD:" + sy ); + Parser.symbols.addSymbol(syms._index[sy]); } continue; } @@ -142,7 +178,16 @@ BuildDocs = { var ts = new TokenStream(tr.tokenize(txs)); Parser.parse(ts, srcFile); - + + if (cacheFile) { + File.write(cacheFile, + JSON.stringify( + Parser.symbolsToObject(srcFile), + null,2 + ) + ); + + } //var outstr = JSON.stringify( // Parser.filesSymbols[srcFile]._index //); @@ -190,20 +235,23 @@ BuildDocs = { Link.symbolSet = this.symbolSet; Link.base = "../"; + Link.srcFileFlatName = this.srcFileFlatName; + Link.srcFileRelName = this.srcFileRelName; + var classTemplate = new Template({ - templateFile : Options.templateDir + "/class.tmpl", + templateFile : Options.templateDir + "/class.html", Link : Link }); var classesTemplate = new Template({ - templateFile : Options.templateDir +"/allclasses.tmpl", + templateFile : Options.templateDir +"/allclasses.html", Link : Link }); var classesindexTemplate = new Template({ - templateFile : Options.templateDir +"/index.tmpl", + templateFile : Options.templateDir +"/index.html", Link : Link }); var fileindexTemplate = new Template({ - templateFile : Options.templateDir +"/allfiles.tmpl", + templateFile : Options.templateDir +"/allfiles.html", Link: Link }); @@ -217,19 +265,8 @@ BuildDocs = { function isaFile($) { return ($.is("FILE")) } - function isaClass($) { - return ($.is("CONSTRUCTOR") || $.isNamespace); - } - function makeSortby(attribute) { - return function(a, b) { - if (a[attribute] != undefined && b[attribute] != undefined) { - a = a[attribute]; //.toLowerCase(); - b = b[attribute];//.toLowerCase(); - if (a < b) return -1; - if (a > b) return 1; - return 0; - } - } + function isaClass($) { + return ($.is("CONSTRUCTOR") || $.isNamespace || $.isClass); } @@ -240,6 +277,7 @@ BuildDocs = { + var symbols = this.symbolSet.toArray(); var files = Options.srcFiles; @@ -249,6 +287,7 @@ BuildDocs = { var targetDir = Options.target + "/symbols/src/"; this.makeSrcFile(file, targetDir); } + //print(JSON.stringify(symbols,null,4)); var classes = symbols.filter(isaClass).sort(makeSortby("alias")); @@ -258,25 +297,34 @@ BuildDocs = { Options.LOG.inform("iterate classes"); + var jsonAll = {}; + for (var i = 0, l = classes.length; i < l; i++) { var symbol = classes[i]; var output = ""; Options.LOG.inform("classTemplate Process : " + symbol.alias); - File.write(Options.target+"/symbols/" +symbol.alias+'.' + Options.publishExt , - classTemplate.process(symbol)); - // dump out a + File.write(Options.target+"/symbols/" +symbol.alias+'.' + Options.publishExt , + classTemplate.process(symbol)); - this.publishJSON(Options.target+"/json/" + symbol.alias+'.json', symbol) + jsonAll[symbol.alias] = this.publishJSON(symbol); } + File.write(Options.target+"/json/roodata.json", + JSON.stringify({ + success : true, + data : jsonAll + }, null, 1) + ); + + // regenrate the index with different relative links Link.base = ""; //var classesIndex = classesTemplate.process(classes); @@ -313,6 +361,9 @@ BuildDocs = { fileindexTemplate.process(allFiles) ); + + + }, /** * JSON files are lookup files for the documentation @@ -320,14 +371,14 @@ BuildDocs = { * * */ - publishJSON : function(file, data) + publishJSON : function(data) { // what we need to output to be usefull... // a) props.. var cfgProperties = []; if (!data.comment.getTag('singleton').length) { cfgProperties = data.configToArray(); - cfgProperties = cfgProperties.sort(makeSortby("name")); + cfgProperties = cfgProperties.sort(makeSortby("alias")); } var props = []; @@ -335,12 +386,17 @@ BuildDocs = { var p =''; for(var i =0; i < cfgProperties.length;i++) { p = cfgProperties[i]; - props.push( { + var add = { name : p.name, type : p.type, desc : p.desc, + memberOf : p.memberOf == data.alias ? '' : p.memberOf - }); + } + if (p.optvalues) { + add.optvals = p.optvalues; + } + props.push(add ); } @@ -355,11 +411,29 @@ BuildDocs = { m = ownEvents[i]; events.push( { name : m.name.substring(1), - sig : makeFuncSkel(m.params), + sig : this.makeFuncSkel(m.params), type : 'function', desc : m.desc }); } + + var ownMethods = data.methods.filter( function(e){ + return !e.isEvent && !e.comment.getTag('hide').length; + }).sort(makeSortby("name")); + + + var methods = []; + + for(var i =0; i < ownMethods.length;i++) { + m = ownMethods[i]; + methods.push( { + name : m.name, + sig : this.makeMethodSkel(m.params), + type : 'function', + desc : m.desc + }); + } + //println(props.toSource()); // we need to output: //classname => { @@ -370,9 +444,11 @@ BuildDocs = { var ret = { props : props, - events: events + events: events, + methods : methods, }; - File.write(file, JSON.stringify(ret, null, 2 )); + return ret; + // b) methods @@ -380,28 +456,59 @@ BuildDocs = { }, + srcFileRelName : function(sourceFile) + { + return sourceFile.substring(Options.baseDir.length+1); + }, + srcFileFlatName: function(sourceFile) + { + var name = this.srcFileRelName(sourceFile); + name = name.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); + return name.replace(/\:/g, "_") + '.html'; //??; + + }, + makeSrcFile: function(sourceFile) { // this stuff works... - return; - - - name = sourceFile.substring(Options.baseDir.length+1); - name = name.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); + - name = name.replace(/\:/g, "_"); //?? + var name = this.srcFileFlatName(sourceFile); Options.LOG.inform("Write Source file : " + Options.target+"/symbols/src/" + name); - var pretty = imports.PrettyPrint.toPretty(File.read(sourceFile)); + var pretty = imports.PrettyPrint.toPretty(File.read( sourceFile)); File.write(Options.target+"/symbols/src/" + name, '' + '' + sourceFile + '' + - '' + + '' + '' + pretty + ''); + }, + /** + * used by JSON output to generate a function skeleton + */ + makeFuncSkel :function(params) { + if (!params) return "function ()\n{\n\n}"; + return "function (" + + params.filter( + function($) { + return $.name.indexOf(".") == -1; // don't show config params in signature + } + ).map( function($) { return $.name == 'this' ? '_self' : $.name; } ).join(", ") + + ")\n{\n\n}"; + }, + makeMethodSkel :function(params) { + if (!params) return "()"; + return "(" + + params.filter( + function($) { + return $.name.indexOf(".") == -1; // don't show config params in signature + } + ).map( function($) { return $.type + " " +( $.name == 'this' ? '_self' : $.name ); } ).join(", ") + + ")"; } - + };