react / wstein / node_modules / jest-cli / node_modules / jasmine-only / node_modules / coffee-script / lib / coffee-script / optparse.js
81145 views// Generated by CoffeeScript 1.6.31(function() {2var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;34repeat = require('./helpers').repeat;56exports.OptionParser = OptionParser = (function() {7function OptionParser(rules, banner) {8this.banner = banner;9this.rules = buildRules(rules);10}1112OptionParser.prototype.parse = function(args) {13var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;14options = {15"arguments": []16};17skippingArgument = false;18originalArgs = args;19args = normalizeArguments(args);20for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {21arg = args[i];22if (skippingArgument) {23skippingArgument = false;24continue;25}26if (arg === '--') {27pos = originalArgs.indexOf('--');28options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));29break;30}31isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));32seenNonOptionArg = options["arguments"].length > 0;33if (!seenNonOptionArg) {34matchedRule = false;35_ref = this.rules;36for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {37rule = _ref[_j];38if (rule.shortFlag === arg || rule.longFlag === arg) {39value = true;40if (rule.hasArgument) {41skippingArgument = true;42value = args[i + 1];43}44options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;45matchedRule = true;46break;47}48}49if (isOption && !matchedRule) {50throw new Error("unrecognized option: " + arg);51}52}53if (seenNonOptionArg || !isOption) {54options["arguments"].push(arg);55}56}57return options;58};5960OptionParser.prototype.help = function() {61var letPart, lines, rule, spaces, _i, _len, _ref;62lines = [];63if (this.banner) {64lines.unshift("" + this.banner + "\n");65}66_ref = this.rules;67for (_i = 0, _len = _ref.length; _i < _len; _i++) {68rule = _ref[_i];69spaces = 15 - rule.longFlag.length;70spaces = spaces > 0 ? repeat(' ', spaces) : '';71letPart = rule.shortFlag ? rule.shortFlag + ', ' : ' ';72lines.push(' ' + letPart + rule.longFlag + spaces + rule.description);73}74return "\n" + (lines.join('\n')) + "\n";75};7677return OptionParser;7879})();8081LONG_FLAG = /^(--\w[\w\-]*)/;8283SHORT_FLAG = /^(-\w)$/;8485MULTI_FLAG = /^-(\w{2,})/;8687OPTIONAL = /\[(\w+(\*?))\]/;8889buildRules = function(rules) {90var tuple, _i, _len, _results;91_results = [];92for (_i = 0, _len = rules.length; _i < _len; _i++) {93tuple = rules[_i];94if (tuple.length < 3) {95tuple.unshift(null);96}97_results.push(buildRule.apply(null, tuple));98}99return _results;100};101102buildRule = function(shortFlag, longFlag, description, options) {103var match;104if (options == null) {105options = {};106}107match = longFlag.match(OPTIONAL);108longFlag = longFlag.match(LONG_FLAG)[1];109return {110name: longFlag.substr(2),111shortFlag: shortFlag,112longFlag: longFlag,113description: description,114hasArgument: !!(match && match[1]),115isList: !!(match && match[2])116};117};118119normalizeArguments = function(args) {120var arg, l, match, result, _i, _j, _len, _len1, _ref;121args = args.slice(0);122result = [];123for (_i = 0, _len = args.length; _i < _len; _i++) {124arg = args[_i];125if (match = arg.match(MULTI_FLAG)) {126_ref = match[1].split('');127for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {128l = _ref[_j];129result.push('-' + l);130}131} else {132result.push(arg);133}134}135return result;136};137138}).call(this);139140141