cahrehn
8/13/2014 - 4:15 PM

rhino-handlebars-precompiler.js

importPackage(java.io);

(function(args) {
	var output = [],
	console = {
		log: print
	},
	showUsage = function() {
	  console.log('Usage: java -jar <rhino.jar> rhino-handlebars-compiler.js --handlebars <handlebars library path> --template <template file> --output <output file>');
	},
	handlebarsLibrary,
	outStream,
	templateFile,
	templateContents,
	argumentsParser,
	options;

	argumentsParser = function() {
		var arg, parse = function(args) {
			var options = {};
			args = Array.prototype.slice.call(args);
			arg = args.shift();
			while (arg) {
				if (arg.indexOf("--") === 0) {
					options[arg.substring(2)] = args.shift();
				}
				arg = args.shift();
			}
			return options;
		};

		return { parse: parse };
	};

	options = new argumentsParser().parse(args);
	console.log(options)
	handlebarsLibrary = options.handlebars;

	if (undefined === handlebarsLibrary) {
		showUsage();
		java.lang.System.exit(1);
	}
	load(handlebarsLibrary);

	templateFile = new File(options.template);
	templateName = templateFile.getName();
	templateContents = Handlebars.precompile(readFile(templateFile.getAbsolutePath()));

	output.push('(function() {');
	output.push('\n  var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {};\n');
	output.push('templates[\'' + templateName + '\'] = template(' + templateContents + ');\n');
	output.push('})();');

	outStream = new BufferedWriter(new FileWriter(options.output));
	outStream.write(output.join(''));
	outStream.close();

}(arguments));