JSDOC/ScopeParser.js
[gnome.introspection-doc-generator] / docs.js
diff --git a/docs.js b/docs.js
index 43cdc37..a34e3ef 100644 (file)
--- a/docs.js
+++ b/docs.js
@@ -4,133 +4,181 @@ Gtk = imports.gi.Gtk;
 Gio = imports.gi.Gio;
 Gdk = imports.gi.Gdk;
 
-imports['Array.js']; 
-JSDOC   = imports['JSDOC.js'].JSDOC; 
-console = imports['console.js'].console; 
-Roo     = imports['Roo.js'].Roo; 
+// generic libraries
+XObject     = imports.XObject.XObject;
+File        = imports.File.File; 
+console     = imports.console.console; 
+Template    = imports.JsTemplate.Template.Template; 
 
-Introspect = imports['JSDOC/Introspect.js'].Introspect; 
+// Introspecion specific..
+NameSpace   = imports.Introspect.NameSpace.NameSpace; 
+Link        = imports.Introspect.Link.Link; 
 
-   
 
-//var outputdir = '/home2/www/devel/seed';
-var outputdir = '/var/www/seed';
-
-// list namespace..
-//var ns_list = [ 'GIRepository' ];
-
-var ns_list = JSDOC.Introspect.namespaces().sort();
-//console.dump(ns_list);
- // ns_list = [ 'Gio' ];
-//ns_list = [ 'Gtk' ];
- /* 'Gdk',
-    'Gtk',  
-    'GLib',
-    'Gio',
-    'GObject',
-    'GIRepository',
-    'Gst',
-    'Pango']
-*/
-var cls_list = [];
-
-var cls_template = new JSDOC.Template(__script_path__ + '/docs/class.html');
-var cls_ix_template = new JSDOC.Template(__script_path__ + '/docs/class_ix.tmpl');
-var reference_template = new JSDOC.Template(__script_path__ + '/docs/references.html');
-
-Roo.each(ns_list, function(ns_name) {
-    var core;
-    //if (ns_name == 'Epiphany') {
-     //   return;
-    //} 
-    if (ns_name == 'GnomeGamesSupport') { // on gnome dev cd stuff.
+
+var outputdir = Seed.argv[2];
+
+if (!outputdir) {
+    throw {
+        name: "ArgumentError", 
+        message: "No output directory specified on the command line\n" +
+          "Usage seed docs.js /var/www/seed  [Gtk] \n"
+    };
+}
+
+
+if (!File.isDirectory(outputdir)) {
+    console.log("Creating directory " + outputdir);
+    File.mkdir(outputdir);
+};
+
+// Which libraries to build.
+
+var ns_list = NameSpace.namespaces();
+if (typeof(Seed.argv[3]) == 'string') {
+    console.log(Seed.argv.length);
+    ns_list = Seed.argv[3].split(',');
+}
+
+ns_list = ns_list.sort();
+
+
+// which languages do we want to output for.
+langs=[];
+File.list(__script_path__ + '/templates/').forEach(function(f) {
+    if (!File.isDirectory(__script_path__ + '/templates/' + f)) {
         return;
     }
+    if (f == 'resources') {
+        return;
+    }
+    langs.push({
+        name : f,
+        cls_template       : new Template( {
+            templateFile : __script_path__ + '/templates/' + f + '/class.html',
+            Link : Link // links might be specific to languages..
+        }),
+        cls_ix_template    : new Template( {
+            templateFile : __script_path__ + '/templates/' + f + '/class_ix.html',
+            Link : Link // links might be specific to languages..
+        }),
+        reference_template : new Template({
+            templateFile : __script_path__ + '/templates/' + f + '/references.html',
+            Link : Link // links might be specific to languages..
+        }),
+    });
+});
+
+
+/*
+var cls_template = new Template(__script_path__ + '/templates/class.html');
+var cls_ix_template = new Template(__script_path__ + '/templates/class_ix.html');
+var reference_template = new Template(__script_path__ + '/templates/references.html');
+*/
+
+
+var ns_idx = [];
+ns_list.forEach(function(ns_name) 
+{
     
-    //try {
-        core = imports.gi[ns_name];
-    //} catch (e) {
-    //    Seed.print("SKIP (no import): "+ ns_name + ": " +  e);
-        
-    //    return;
-    //}
-    Seed.print("START:" + ns_name);
-    // ones that cause problems.
+    //if (ns_idx.length) {         return ;/* do one - for testing */ } 
+    
+    var  core = imports.gi[ns_name];
+    var idx = { name: ns_name}; 
+    console.log("START:" + ns_name);
+   
+    var ns = NameSpace.ns(ns_name);
+    
+    // gir goes in top level...
+    if (File.exists(ns.gir_file)) {
+        File.copyFile(ns.gir_file, outputdir + '/'+ ns.gir_filename, Gio.FileCopyFlags.OVERWRITE);
+    }
     
     
     
-    // Namespace file..
-    var ns = Introspect.ns(ns_name);
 
-    Gio.simple_write(outputdir + '/'+ ns_name +  '.shtml', cls_template.process(ns));
-    cls_list.push({
-        alias : ns_name 
+    langs.forEach(function(lang) {
+        ns['left_bar'] = lang.cls_ix_template.process(ns);
+        // namespace template
+        Gio.simple_write(outputdir + '/'+ lang.name+ '/' +ns_name +  '.html', lang.cls_template.process(ns));
+        
+        // left bar index of elements in namespace...
+        Gio.simple_write(outputdir + '/'+ lang.name + '/_ix_'+ ns_name +  '.shtml', lang.cls_ix_template.process(ns));
+            
     });
-    
-    // left bar index of elements in namespace...
-    Gio.simple_write(outputdir + '/_ix_'+ ns_name +  '.shtml', cls_ix_template.process(ns));
      
-    // index...
-    
     
-    Roo.each(ns.objects, function(n) {
-        
-        
-        Gio.simple_write(outputdir + '/'+ ns_name + '.' + n + '.shtml', 
-            cls_template.process( Introspect.factory('Class', ns_name, n)));
-        Seed.print(ns_name + '.' +n);
-    });
-     Roo.each(ns.interfaces, function(n) {
-        
-        
-        Gio.simple_write(outputdir + '/'+ ns_name + '.' + n + '.shtml', 
-            cls_template.process( Introspect.factory('Interface', ns_name, n)));
-        Seed.print(ns_name + '.' +n);
-    });
-    Roo.each(ns.structs, function(n) {
-        
-        
-        Gio.simple_write(outputdir + '/'+ ns_name + '.' + n + '.shtml', 
-            cls_template.process( Introspect.factory('Struct', ns_name, n)));
-        
-        
-        Seed.print(ns_name + '.' +n);
-    });
+    var actions = {
+        'objects' : 'Class',
+        'interfaces' : 'Interface',
+        'structs' : 'Struct',
+        'unions' : 'Union',
+        'enums' : 'Enum'
+        
+    };
+    for (var i in actions) {
+        // we flag GLib as a GObject lib...
+        idx[i]= ns_name == 'GLib' ? 1 : ns[i].length ;
+        ns[i].forEach( function(n) {
+            var odata = XObject.extend(
+                NameSpace.factory(actions[i], ns_name, n),
+                { 'left_bar' :ns['left_bar'] }
+            );
+            langs.forEach(function(lang) {
+                Gio.simple_write(outputdir +  '/'+ lang.name + '/' + ns_name + '.' + n + '.html', 
+                    lang.cls_template.process(odata)
+                )
+            });
+            console.log(ns_name + '.' +n);
+        }); 
+    }
+    ns_idx.push(idx);
     
-    Roo.each(ns.unions, function(n) {
-        
-        
-        Gio.simple_write(outputdir + '/'+ ns_name + '.' + n + '.shtml', 
-            cls_template.process( Introspect.factory('Union', ns_name, n)));
-        
-        
-        Seed.print(ns_name + '.' +n);
-    });
+});
+
+var refs = '';
+var html_file_path = '';
+var html = ''
+
+// output cross reference data..
+langs.forEach(function(lang) {
     
-    Roo.each(ns.enums, function(n) {
+    for (var i in NameSpace.references) {
         
+        html_file_path = [ outputdir, lang.name, i + '.html'].join('/');
+      
+        if (i == 'undefined') {
+          console.log("Undefined name space - ignored");
+          continue;
+        }
         
-        Gio.simple_write(outputdir + '/'+ ns_name + '.' + n + '.shtml', 
-            cls_template.process( Introspect.factory('Enum', ns_name, n)));
+        if (!File.isFile(html_file_path)) {
+          console.log("No HTML file " + html_file_path + " to insert references into - ignored");
+          continue;
+        }
         
-        
-        Seed.print(ns_name + '.' +n);
-    });
-    
-})
+        refs = langs.reference_template.process(NameSpace.references[i]);
 
-for (var i in Introspect.references) {
-    
-    console.log("REFERENCE: " + i + ' : ' + Introspect.references[i].length);
-    Gio.simple_write(outputdir + '/references.'+ i + '.html', 
-            reference_template.process( Introspect.references[i] ));
-       
-}
+          // HTML to put refs into
+        html =  File.read(html_file_path);
 
-var ix_template = new JSDOC.Template(__script_path__ + '/docs/index.tmpl');
-Gio.simple_write(outputdir + '/index.shtml', ix_template.process(ns_list));
+          // do the replacement
+        html = html.replace(/\<!--references--\>/, refs);
 
+          // write back to file
+        Gio.simple_write(html_file_path, html);
 
+    }
+});
 
+// set up index and resources.
+langs.forEach(function(lang) {
+    var ix_template = new Template({
+        templateFile : __script_path__ + '/templates/' + lang.name + '/index.html',
+        Link : Link, // lang specifc?
+    });
+    Gio.simple_write(outputdir + '/' + lang.name +  '/index.html', ix_template.process(ns_idx));
+    File.silentRecursiveCopy(__script_path__ + '/templates/resources/', 
+        outputdir + '/'  + lang.name , Gio.FileCopyFlags.OVERWRITE);
+});
\ No newline at end of file