sbin/res/app/lib/JSDOC/JsDoc.js
author hamidouk
Fri, 23 Dec 2011 10:59:23 +0100
branchjsdoc
changeset 519 46e21d060650
permissions -rw-r--r--
added jsdoc base files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
519
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     1
/**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     2
	@constructor
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     3
	@param [opt] Used to override the commandline options. Useful for testing.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     4
	@version $Id: JsDoc.js 831 2010-03-09 14:24:56Z micmath $
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     5
*/
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     6
JSDOC.JsDoc = function(/**object*/ opt) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     7
	if (opt) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     8
		JSDOC.opt = opt;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     9
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    10
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    11
	if (JSDOC.opt.h) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    12
		JSDOC.usage();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    13
		quit();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    14
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    15
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    16
	// defend against options that are not sane 
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    17
	if (JSDOC.opt._.length == 0) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    18
		LOG.warn("No source files to work on. Nothing to do.");
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    19
		quit();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    20
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    21
	if (JSDOC.opt.t === true || JSDOC.opt.d === true) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    22
		JSDOC.usage();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    23
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    24
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    25
	if (typeof JSDOC.opt.d == "string") {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    26
		if (!JSDOC.opt.d.charAt(JSDOC.opt.d.length-1).match(/[\\\/]/)) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    27
			JSDOC.opt.d = JSDOC.opt.d+"/";
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    28
		}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    29
		LOG.inform("Output directory set to '"+JSDOC.opt.d+"'.");
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    30
		IO.mkPath(JSDOC.opt.d);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    31
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    32
	if (JSDOC.opt.e) IO.setEncoding(JSDOC.opt.e);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    33
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    34
	// the -r option: scan source directories recursively
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    35
	if (typeof JSDOC.opt.r == "boolean") JSDOC.opt.r = 10;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    36
	else if (!isNaN(parseInt(JSDOC.opt.r))) JSDOC.opt.r = parseInt(JSDOC.opt.r);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    37
	else JSDOC.opt.r = 1;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    38
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    39
	// the -D option: define user variables
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    40
	var D = {};
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    41
	if (JSDOC.opt.D) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    42
		for (var i = 0; i < JSDOC.opt.D.length; i++) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    43
			var param = JSDOC.opt.D[i];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    44
			// remove first and last character if both == "
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    45
			if ( 
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    46
				param.length > 1
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    47
				&& param.charAt(0) == '"'
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    48
				&& param.charAt(param.length-1) == '"'
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    49
			) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    50
				param = param.substr(1, param.length-2);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    51
			}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    52
			var defineParts = param.split(":");
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    53
			if (defineParts && defineParts.length > 1) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    54
				for ( var dpIdx = 2; dpIdx < defineParts.length; dpIdx++ ) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    55
					defineParts[1] += ':' + defineParts[dpIdx];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    56
				}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    57
				D[defineParts[0]] = defineParts[1];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    58
			}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    59
		}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    60
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    61
	JSDOC.opt.D = D;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    62
	// combine any conf file D options with the commandline D options
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    63
	if (defined(JSDOC.conf)) for (var c in JSDOC.conf.D) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    64
 		if (!defined(JSDOC.opt.D[c])) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    65
 			JSDOC.opt.D[c] = JSDOC.conf.D[c];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    66
 		}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    67
 	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    68
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    69
	// Give plugins a chance to initialize
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    70
	if (defined(JSDOC.PluginManager)) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    71
		JSDOC.PluginManager.run("onInit", JSDOC.opt);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    72
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    73
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    74
	JSDOC.opt.srcFiles = JSDOC.JsDoc._getSrcFiles();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    75
	JSDOC.JsDoc._parseSrcFiles();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    76
	JSDOC.JsDoc.symbolSet = JSDOC.Parser.symbols;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    77
}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    78
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    79
/**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    80
	Retrieve source file list.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    81
	@returns {String[]} The pathnames of the files to be parsed.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    82
 */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    83
JSDOC.JsDoc._getSrcFiles = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    84
	JSDOC.JsDoc.srcFiles = [];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    85
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    86
	var ext = ["js"];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    87
	if (JSDOC.opt.x) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    88
		ext = JSDOC.opt.x.split(",").map(function($) {return $.toLowerCase()});
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    89
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    90
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    91
	for (var i = 0; i < JSDOC.opt._.length; i++) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    92
		JSDOC.JsDoc.srcFiles = JSDOC.JsDoc.srcFiles.concat(
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    93
			IO.ls(JSDOC.opt._[i], JSDOC.opt.r).filter(
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    94
				function($) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    95
					var thisExt = $.split(".").pop().toLowerCase();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    96
					
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    97
					if (JSDOC.opt.E) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    98
						for(var n = 0; n < JSDOC.opt.E.length; n++) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    99
							if ($.match(new RegExp(JSDOC.opt.E[n]))) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   100
								LOG.inform("Excluding " + $);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   101
								return false; // if the file matches the regex then it's excluded.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   102
							}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   103
						}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   104
					}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   105
					
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   106
					return (ext.indexOf(thisExt) > -1); // we're only interested in files with certain extensions
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   107
				}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   108
			)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   109
		);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   110
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   111
	
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   112
	return JSDOC.JsDoc.srcFiles;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   113
}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   114
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   115
JSDOC.JsDoc._parseSrcFiles = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   116
	JSDOC.Parser.init();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   117
	for (var i = 0, l = JSDOC.JsDoc.srcFiles.length; i < l; i++) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   118
		var srcFile = JSDOC.JsDoc.srcFiles[i];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   119
		
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   120
		if (JSDOC.opt.v) LOG.inform("Parsing file: " + srcFile);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   121
		
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   122
		try {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   123
			var src = IO.readFile(srcFile);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   124
		}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   125
		catch(e) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   126
			LOG.warn("Can't read source file '"+srcFile+"': "+e.message);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   127
		}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   128
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   129
		var tr = new JSDOC.TokenReader();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   130
		var ts = new JSDOC.TokenStream(tr.tokenize(new JSDOC.TextStream(src)));
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   131
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   132
		JSDOC.Parser.parse(ts, srcFile);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   133
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   134
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   135
	JSDOC.Parser.finish();
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   136
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   137
	if (JSDOC.PluginManager) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   138
		JSDOC.PluginManager.run("onFinishedParsing", JSDOC.Parser.symbols);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   139
	}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   140
}