JSDOC/BuildDocs.js
authorAlan Knowles <alan@akbkhome.com>
Tue, 29 Jun 2010 09:18:34 +0000 (17:18 +0800)
committerAlan Knowles <alan@akbkhome.com>
Tue, 29 Jun 2010 09:18:34 +0000 (17:18 +0800)
JSDOC/BuildDocs.js

index 5199f68..2c70586 100644 (file)
@@ -52,7 +52,7 @@ BuildDocs = {
         
         // this currently uses the concept of publish.js...
              
-        
+        this.publish();
          
         
         
@@ -153,6 +153,132 @@ BuildDocs = {
     
      
         
+    publish  : function() {
+        
+        
+        
+        publish.conf = {  // trailing slash expected for dirs
+            ext: ".html",
+            
+            templatesDir: JSDOC.opt.t + "/",
+            symbolsDir: "symbols/",
+            srcDir: "symbols/src/"
+        };
+      
+        publish.conf.outDir = (JSDOC.opt.d.length > 0 ? JSDOC.opt.d : "/tmp/jsdoc/");
+        
+        
+        
+        
+        if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
+            Link.prototype._makeSrcLink = function(srcFilePath) {
+                return "&lt;"+srcFilePath+"&gt;";
+            }
+        }
+        
+        println(publish.conf.outDir);
+        
+        if (!File.exists(publish.conf.outDir))
+            File.mkdir(publish.conf.outDir);
+        if (!File.exists(publish.conf.outDir+"symbols"))
+            File.mkdir(publish.conf.outDir+"symbols");
+        if (!File.exists(publish.conf.outDir+"symbols/src"))
+            File.mkdir(publish.conf.outDir+"symbols/src");
+        
+        IO.copyFile (publish.conf.templatesDir+"static/default.css", publish.conf.outDir, "default.css");
+        IO.copyFile (publish.conf.templatesDir+"static/doc.js", publish.conf.outDir, "doc.js");
+        IO.copyFile (publish.conf.templatesDir+"static/page.js", publish.conf.outDir, "page.js");
+      
+        
+        //IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
+            
+        // used to check the details of things being linked to
+        Link.symbolSet = symbolSet;
+
+        //try {
+            var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
+            var classesTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allclasses.tmpl");
+        //}
+        //atch(e) {
+        //     print(e.message);
+        ///    quit();
+        //}
+        
+        // filters
+        
+        classTemplate.symbolSet = symbolSet;
+        
+        
+        function hasNoParent($) {return ($.memberOf == "")}
+        function isaFile($) {return ($.is("FILE"))}
+        function isaClass($) { return ($.is("CONSTRUCTOR") || $.isNamespace); }
+        
+        var symbols = symbolSet.toArray();
+        
+        var files = JSDOC.opt.srcFiles;
+        for (var i = 0, l = files.length; i < l; i++) {
+            var file = files[i];
+            var srcDir = publish.conf.outDir + "symbols/src/";
+            makeSrcFile(file, srcDir);
+        }
+        
+        var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
+        
+        Link.base = "../";
+        publish.classesIndex = classesTemplate.process(classes); // kept in memory
+        
+        IO.makeDir(publish.conf.outDir+"json");
+        
+        for (var i = 0, l = classes.length; i < l; i++) {
+            var symbol = classes[i];
+            var output = "";
+            
+            output = classTemplate.process(symbol);
+            println("write " + publish.conf.outDir+"symbols/" +symbol.alias+publish.conf.ext);
+            IO.saveFile(publish.conf.outDir+"symbols/", symbol.alias+publish.conf.ext, output);
+            // dump out a 
+            IO.saveFile(publish.conf.outDir+"json/",  symbol.alias+'.json' , publish.jsonRender(symbol));
+            
+            
+        }
+        
+        // regenrate the index with different relative links
+        Link.base = "";
+        publish.classesIndex = classesTemplate.process(classes);
+        
+        try {
+            var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
+        }
+        catch(e) { print(e.message); quit(); }
+        
+        var classesIndex = classesindexTemplate.process(classes);
+        IO.saveFile(publish.conf.outDir, "index"+publish.conf.ext, classesIndex);
+        classesindexTemplate = classesIndex = classes = null;
+        
+        try {
+            var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
+        }
+        catch(e) { print(e.message); quit(); }
+        
+        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;
+    }
+