X-Git-Url: http://git.roojs.org/?p=gnome.introspection-doc-generator;a=blobdiff_plain;f=JSDOC%2FBuildDocs.js;h=024d628a809853872438bbdcf66502d5fe95f143;hp=256cc0c73c2b5ab5bce63be725d5d6b05273d33c;hb=25f36ac6f41ae48994b75fd710b5fb9bfc851727;hpb=47edd81b0e3580564fa2bbe04ecf11ec6fe554a9 diff --git a/JSDOC/BuildDocs.js b/JSDOC/BuildDocs.js index 256cc0c..024d628 100644 --- a/JSDOC/BuildDocs.js +++ b/JSDOC/BuildDocs.js @@ -3,23 +3,36 @@ This is the main container for the JSDOC application. @namespace */ - +Gio = imports.gi.Gio; XObject = imports.XObject.XObject; File = imports.File.File; Template = imports.JsTemplate.Template.Template; +Link = imports.JsTemplate.Link.Link; // ?? fixme!?? - -Parser = imports.Parser.Parser; -TextStream = imports.TextStream.TextStream; +Parser = imports.Parser.Parser; +TextStream = imports.TextStream.TextStream; TokenReader = imports.TokenReader.TokenReader; TokenStream = imports.TokenStream.TokenStream; -Symbol = imports.Symbol.Symbol; +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! @@ -49,7 +62,7 @@ BuildDocs = { this.symbolSet = Parser.symbols; // this currently uses the concept of publish.js... - + this.publish(); @@ -125,7 +138,7 @@ BuildDocs = { var src = '' try { - Options.LOG.warn("reading : " + srcFile); + Options.LOG.inform("reading : " + srcFile); src = File.read(srcFile); } catch(e) { @@ -135,7 +148,7 @@ BuildDocs = { var txs = new TextStream(src); - var tr = new TokenReader({ keepComments : true, keepWhite : true }); + var tr = new TokenReader({ keepComments : true, keepWhite : true , sepIdents: false }); var ts = new TokenStream(tr.tokenize(txs)); @@ -158,50 +171,55 @@ BuildDocs = { publish : function() { - + Options.LOG.inform("Publishing"); // link!!! - - if (!File.exists(Options.target)) + Options.LOG.inform("Making directories"); + if (!File.isDirectory(Options.target)) File.mkdir(Options.target); - if (!File.exists(Options.target+"/symbols")) + if (!File.isDirectory(Options.target+"/symbols")) File.mkdir(Options.target+"/symbols"); - if (!File.exists(Options.target+"/symbols/src")) + if (!File.isDirectory(Options.target+"/symbols/src")) File.mkdir(Options.target+"/symbols/src"); - // copy everything in 'static' into - File.list(Options.templatesDir + '/static').forEach(function (f) { - File.copy(Options.templatesDir + '/static/' + f, Options.target + '/' + f); - }); if (!File.isDirectory(Options.target +"/json")) { - File.makeDir(Options.target +"/json"); + File.mkdir(Options.target +"/json"); } + Options.LOG.inform("Copying files from static: " +Options.templateDir); + // copy everything in 'static' into + File.list(Options.templateDir + '/static').forEach(function (f) { + Options.LOG.inform("Copy " + Options.templateDir + '/static/' + f + ' to ' + Options.target + '/' + f); + File.copyFile(Options.templateDir + '/static/' + f, Options.target + '/' + f, Gio.FileCopyFlags.OVERWRITE); + }); + + + Options.LOG.inform("Setting up templates"); // used to check the details of things being linked to - Link.symbolSet = symbolSet; + Link.symbolSet = this.symbolSet; Link.base = "../"; var classTemplate = new Template({ - templateFile : Options.templatesDir + "/class.tmpl", + templateFile : Options.templateDir + "/class.html", Link : Link }); var classesTemplate = new Template({ - templateFile : Options.templatesDir +"/allclasses.tmpl", + templateFile : Options.templateDir +"/allclasses.html", Link : Link }); var classesindexTemplate = new Template({ - templateFile : Options.templatesDir +"/index.tmpl", + templateFile : Options.templateDir +"/index.html", Link : Link }); var fileindexTemplate = new Template({ - templateFile : Options.templatesDir +"/allfiles.tmpl", + templateFile : Options.templateDir +"/allfiles.html", Link: Link }); - classTemplate.symbolSet = symbolSet; + classTemplate.symbolSet = this.symbolSet; function hasNoParent($) { @@ -214,7 +232,16 @@ BuildDocs = { return ($.is("CONSTRUCTOR") || $.isNamespace); } - var symbols = symbolSet.toArray(); + + + + + + + + + + var symbols = this.symbolSet.toArray(); var files = Options.srcFiles; @@ -226,22 +253,26 @@ BuildDocs = { var classes = symbols.filter(isaClass).sort(makeSortby("alias")); - var classesIndex = classesTemplate.process(classes); // kept in memory - + //Options.LOG.inform("classTemplate Process : all classes"); + + // var classesIndex = classesTemplate.process(classes); // kept in memory + Options.LOG.inform("iterate classes"); 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)); - print("write " + Options.target+"/symbols/" +symbol.alias+'.' + Options.publishExt); + // dump out a - this.publishJSON(Options.target+"/json/", symbol.alias+'.json', symbol) + this.publishJSON(Options.target+"/json/" + symbol.alias+'.json', symbol) @@ -249,9 +280,9 @@ BuildDocs = { // regenrate the index with different relative links Link.base = ""; - var classesIndex = classesTemplate.process(classes); + //var classesIndex = classesTemplate.process(classes); - + Options.LOG.inform("build index"); File.write(Options.target + "/index."+ Options.publishExt, classesindexTemplate.process(classes) @@ -268,7 +299,7 @@ BuildDocs = { var allFiles = []; for (var i = 0; i < files.length; i++) { - allFiles.push(new Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */"))); + allFiles.push(new Symbol(files[i], [], "FILE", new DocComment("/** */"))); } for (var i = 0; i < documentedFiles.length; i++) { @@ -277,12 +308,19 @@ BuildDocs = { } allFiles = allFiles.sort(makeSortby("name")); - File.write(Options.target , "/files."+Options.publishExt, + Options.LOG.inform("write files index"); + + File.write(Options.target + "/files."+Options.publishExt, fileindexTemplate.process(allFiles) ); }, - + /** + * JSON files are lookup files for the documentation + * - can be used by IDE's or AJAX based doc tools + * + * + */ publishJSON : function(file, data) { // what we need to output to be usefull... @@ -318,7 +356,7 @@ 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 }); @@ -345,14 +383,19 @@ BuildDocs = { }, makeSrcFile: function(sourceFile) { + // this stuff works... + - - name = sourceFile.substring(Options.baseDir.length); + print("SF: " + sourceFile); + var name = sourceFile.substring(Options.baseDir.length+1); + print("SHORT NAME: " + name); name = name.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); + print("SHORT NAME _: " + name); name = name.replace(/\:/g, "_"); //?? + print("SHORT NAME :: " + name); - - var pretty = imports.PrettyPrint.toPretty(File.read(sourceFile)); + Options.LOG.inform("Write Source file : " + Options.target+"/symbols/src/" + name); + var pretty = imports.PrettyPrint.toPretty(File.read( sourceFile)); File.write(Options.target+"/symbols/src/" + name, '' + '' + sourceFile + '' + @@ -360,8 +403,22 @@ BuildDocs = { '' + 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}"; } - + + };