1 /**
  2  * @version $Id: main.js 795 2009-06-19 07:03:22Z micmath $
  3  */
  4 
  5 function main() {
  6 	IO.include("lib/JSDOC.js");
  7 	IO.includeDir("plugins/");
  8 	
  9 	// process the options
 10 	
 11 	// the -c option: options are defined in a configuration file
 12 	if (JSDOC.opt.c) {
 13 		eval("JSDOC.conf = " + IO.readFile(JSDOC.opt.c));
 14 		
 15 		LOG.inform("Using configuration file at '"+JSDOC.opt.c+"'.");
 16 		
 17 		for (var c in JSDOC.conf) {
 18 			if (c !== "D" && !defined(JSDOC.opt[c])) { // commandline overrules config file
 19 				JSDOC.opt[c] = JSDOC.conf[c];
 20 			}
 21 		}
 22 		
 23 		if (typeof JSDOC.conf["_"] != "undefined") {
 24 			JSDOC.opt["_"] = JSDOC.opt["_"].concat(JSDOC.conf["_"]);
 25 		}
 26 		
 27 		LOG.inform("With configuration: ");
 28 		for (var o in JSDOC.opt) {
 29 			LOG.inform("    "+o+": "+JSDOC.opt[o]);
 30 		}
 31 	}
 32 	
 33 	// be verbose
 34 	if (JSDOC.opt.v) LOG.verbose = true;
 35 	
 36 	// send log messages to a file
 37 	if (JSDOC.opt.o) LOG.out = IO.open(JSDOC.opt.o);
 38 	
 39 	// run the unit tests
 40 	if (JSDOC.opt.T) {
 41 		LOG.inform("JsDoc Toolkit running in test mode at "+new Date()+".");
 42 		IO.include("frame/Testrun.js");
 43 		IO.include("test.js");
 44 	}
 45 	else {
 46 		// a template must be defined and must be a directory path
 47 		if (!JSDOC.opt.t && System.getProperty("jsdoc.template.dir")) {
 48 			JSDOC.opt.t = System.getProperty("jsdoc.template.dir");
 49 		}
 50 		if (JSDOC.opt.t && !JSDOC.opt.t.charAt(JSDOC.opt.t.length-1).match(/[\\\/]/)) {
 51 			JSDOC.opt.t += SYS.slash;
 52 		}
 53 		
 54 		// verbose messages about the options we were given
 55 		LOG.inform("JsDoc Toolkit main() running at "+new Date()+".");
 56 		LOG.inform("With options: ");
 57 		for (var o in JSDOC.opt) {
 58 			LOG.inform("    "+o+": "+JSDOC.opt[o]);
 59 		}
 60 		
 61 		// initialize and build a symbolSet from your code
 62 		JSDOC.JsDoc();
 63 		
 64 		// debugger's option: dump the entire symbolSet produced from your code
 65 		if (JSDOC.opt.Z) {
 66 			LOG.warn("So you want to see the data structure, eh? This might hang if you have circular refs...");
 67 			IO.include("frame/Dumper.js");
 68 			var symbols = JSDOC.JsDoc.symbolSet.toArray();
 69 			for (var i = 0, l = symbols.length; i < l; i++) {
 70 				var symbol = symbols[i];
 71 				print("// symbol: " + symbol.alias);
 72 				print(symbol.serialize());
 73 			}
 74 		}
 75 		else {
 76 			if (typeof JSDOC.opt.t != "undefined") {
 77 				try {
 78 					// a file named "publish.js" must exist in the template directory
 79 					load(JSDOC.opt.t+"publish.js");
 80 					
 81 					// and must define a function named "publish"
 82 					if (!publish) {
 83 						LOG.warn("No publish() function is defined in that template so nothing to do.");
 84 					}
 85 					else {
 86 						// which will be called with the symbolSet produced from your code
 87 						publish(JSDOC.JsDoc.symbolSet);
 88 					}
 89 				}
 90 				catch(e) {
 91 					LOG.warn("Sorry, that doesn't seem to be a valid template: "+JSDOC.opt.t+"publish.js : "+e);
 92 				}
 93 			}
 94 			else {
 95 				LOG.warn("No template given. Might as well read the usage notes.");
 96 				JSDOC.usage();
 97 			}
 98 		}
 99 	}
100 	
101 	// notify of any warnings
102 	if (!JSDOC.opt.q && LOG.warnings.length) {
103 		print(LOG.warnings.length+" warning"+(LOG.warnings.length != 1? "s":"")+".");
104 	}
105 	
106 	// stop sending log messages to a file
107 	if (LOG.out) {
108 		LOG.out.flush();
109 		LOG.out.close();
110 	}
111 }