#!/usr/bin/env node var path = require('path'), fs = require('fs'), sys = require('sys'); require.paths.unshift(path.join(__dirname, '..', 'lib')); var mess = require('mess'); var args = process.argv.slice(1); var options = { compress: false, optimization: 1, silent: false, json: false }; args = args.filter(function (arg) { var match; if (match = arg.match(/^--?([a-z][0-9a-z-]*)$/i)) { arg = match[1] } else { return arg } switch (arg) { case 'v': case 'version': sys.puts("messc " + mess.version.join('.') + " (MESS Compiler) [JavaScript]"); process.exit(0); case 'verbose': options.verbose = true; break; case 'j': options.json = true; case 's': case 'silent': options.silent = true; break; case 'h': case 'help': sys.puts("Usage: messc source"); sys.puts("Options:"); sys.puts(" -j\tParse JSON map manifest"); process.exit(0); case 'x': case 'compress': options.compress = true; break; case 'O0': options.optimization = 0; break; case 'O1': options.optimization = 1; break; case 'O2': options.optimization = 2; break; } }); var input = args[1]; if (input && input[0] != '/') { input = path.join(process.cwd(), input); } var output = args[2]; if (output && output[0] != '/') { output = path.join(process.cwd(), output); } if (! input) { sys.puts("messc: no input files"); process.exit(1); } fs.readFile(input, 'utf-8', function (e, data) { if (e) { sys.puts("messc: " + e.message); process.exit(1); } if (options.json) { new(mess.Renderer)({ paths: [path.dirname(input)], optimization: options.optimization, filename: input }).render(data, function (err, output) { if (err) { mess.writeError(err, options); process.exit(1); } else { sys.puts(output); } }); } else { new(mess.Parser)({ paths: [path.dirname(input)], optimization: options.optimization, filename: input }).parse(data, function (err, tree) { if (err) { less.writeError(err, options); process.exit(1); } else { try { css = tree.toCSS({ compress: options.compress }); sys.print(css); } catch (e) { less.writeError(e, options); process.exit(2); } } }); } });