X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=JSDOC%2FBuildDocs.js;h=0dd71391fe133f1a43db89712fb3e09f188694cc;hb=7703cb76f002d7a1fd7e81659e6023a0688bfe3d;hp=6d4feed3e83c2b157cc0479c61e42b5c8ee39261;hpb=3b602a952f1cc99d97dd71682ef62583186ca1d1;p=gnome.introspection-doc-generator diff --git a/JSDOC/BuildDocs.js b/JSDOC/BuildDocs.js index 6d4feed..0dd7139 100644 --- a/JSDOC/BuildDocs.js +++ b/JSDOC/BuildDocs.js @@ -8,6 +8,8 @@ XObject = imports.XObject.XObject; File = imports.File.File; +Template = imports.JsTemplate.Template.Template; + Options = imports.Options.Options; Parser = imports.Parser.Parser; @@ -49,9 +51,10 @@ BuildDocs = { Options.srcFiles = this._getSrcFiles(); this._parseSrcFiles(); this.symbolSet = Parser.symbols; - - + // this currently uses the concept of publish.js... + + this.publish(); @@ -63,16 +66,18 @@ BuildDocs = { this.srcFiles = []; var ext = ["js"]; - if (JSDOC.opt.x) { - ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()}); + if (Options.ext) { + ext = Options.ext.split(",").map(function($) {return $.toLowerCase()}); } - for (var i = 0; i < JSDOC.opt._.length; i++) { + for (var i = 0; i < Options.src.length; i++) { this.srcFiles = this.srcFiles.concat( - IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter( + + File.list(Options.src[i] ).filter( function($) { var thisExt = $.split(".").pop().toLowerCase(); - return (ext.indexOf(thisExt) > -1 || thisExt in JSDOC.handlers); // we're only interested in files with certain extensions + return (ext.indexOf(thisExt) > -1); // || thisExt in JSDOC.handlers); + // we're only interested in files with certain extensions } ) ); @@ -93,6 +98,7 @@ BuildDocs = { var cacheFile = Options.cacheDirectory + srcFile.replace(/\//g, '_') + ".cache"; //println(cacheFile); + // disabled at present!@!! if (false && !Options.disablecache && File.exists(cacheFile)) { // check filetime? @@ -149,7 +155,213 @@ BuildDocs = { - + publish : function() { + + + // link!!! + + + + if (!File.exists(Options.target)) + File.mkdir(Options.target); + if (!File.exists(Options.target+"/symbols")) + File.mkdir(Options.target+"/symbols"); + if (!File.exists(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"); + } + + // used to check the details of things being linked to + Link.symbolSet = symbolSet; + + + var classTemplate = new Template({ + templateFile : Options.templatesDir + "/class.tmpl", + Link : Link + }); + var classesTemplate = new Template({ + templateFile : Options.templatesDir +"/allclasses.tmpl", + Link : Link + }); + var classesindexTemplate = new Template({ + templateFile : Options.templatesDir +"/index.tmpl", + Link : Link + }); + var fileindexTemplate = new Template({ + templateFile : Options.templatesDir +"/allfiles.tmpl", + Link: Link + }); + + + classTemplate.symbolSet = symbolSet; + + + function hasNoParent($) { + return ($.memberOf == "") + } + function isaFile($) { + return ($.is("FILE")) + } + function isaClass($) { + return ($.is("CONSTRUCTOR") || $.isNamespace); + } + + var symbols = symbolSet.toArray(); + + var files = Options.srcFiles; + + for (var i = 0, l = files.length; i < l; i++) { + var file = files[i]; + var srcDir = Options.target + "/symbols/src/"; + this.makeSrcFile(file, srcDir); + } + + var classes = symbols.filter(isaClass).sort(makeSortby("alias")); + + Link.base = "../"; + + publish.classesIndex = classesTemplate.process(classes); // kept in memory + + + + for (var i = 0, l = classes.length; i < l; i++) { + var symbol = classes[i]; + var output = ""; + + 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) + + + + } + + // regenrate the index with different relative links + Link.base = ""; + publish.classesIndex = classesTemplate.process(classes); + + + + File.write(Options.target + "/index."+ Options.publishExt, + classesindexTemplate.process(classes) + ); + + // blank everything???? classesindexTemplate = classesIndex = classes = null; + + + + var documentedFiles = symbols.filter(isaFile); + var allFiles = []; + + for (var i = 0; i < files.length; i++) { + allFiles.push(new JSDOC.Symbol(files[i], [], "FILE", new JSDOC.DocComment("/** */"))); + } + + for (var i = 0; i < documentedFiles.length; i++) { + var offset = files.indexOf(documentedFiles[i].alias); + allFiles[offset] = documentedFiles[i]; + } + + allFiles = allFiles.sort(makeSortby("name")); + + var filesIndex = fileindexTemplate.process(allFiles); + IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex); + fileindexTemplate = filesIndex = files = null; + } + + publishJSON = function(file, 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")); + + } + var props = []; + //println(cfgProperties.toSource()); + var p =''; + for(var i =0; i < cfgProperties.length;i++) { + p = cfgProperties[i]; + props.push( { + name : p.name, + type : p.type, + desc : p.desc, + memberOf : p.memberOf == data.alias ? '' : p.memberOf + }); + } + + + var ownEvents = data.methods.filter( function(e){ + return e.isEvent && !e.comment.getTag('hide').length; + }).sort(makeSortby("name")); + + + var events = []; + var m; + for(var i =0; i < ownEvents.length;i++) { + m = ownEvents[i]; + events.push( { + name : m.name.substring(1), + sig : makeFuncSkel(m.params), + type : 'function', + desc : m.desc + }); + } + //println(props.toSource()); + // we need to output: + //classname => { + // propname => + // type=> + // desc=> + // } + + var ret = { + props : props, + events: events + }; + File.write(file, JSON.stringify(ret, null, 2 )); + + + // b) methods + // c) events + + + }, + makeSrcFile: function(path, srcDir, name) { + if (Options.outputSource) return; + + return; // not done? + + if (!name) { + name = path.replace(/\.\.?[\\\/]/g, "").replace(/[\\\/]/g, "_"); + name = name.replace(/\:/g, "_"); + } + + var src = { + path: path, + name:name, + charset: IO.encoding, + hilited: "" + }; + + + if (src.hilited) { + IO.saveFile(srcDir, name+publish.conf.ext, src.hilited); + } + } };