Version 1
[yaffs-website] / node_modules / coffee-script / lib / coffee-script / optparse.js
diff --git a/node_modules/coffee-script/lib/coffee-script/optparse.js b/node_modules/coffee-script/lib/coffee-script/optparse.js
new file mode 100644 (file)
index 0000000..1790c46
--- /dev/null
@@ -0,0 +1,139 @@
+// Generated by CoffeeScript 1.10.0
+(function() {
+  var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;
+
+  repeat = require('./helpers').repeat;
+
+  exports.OptionParser = OptionParser = (function() {
+    function OptionParser(rules, banner) {
+      this.banner = banner;
+      this.rules = buildRules(rules);
+    }
+
+    OptionParser.prototype.parse = function(args) {
+      var arg, i, isOption, j, k, len, len1, matchedRule, options, originalArgs, pos, ref, rule, seenNonOptionArg, skippingArgument, value;
+      options = {
+        "arguments": []
+      };
+      skippingArgument = false;
+      originalArgs = args;
+      args = normalizeArguments(args);
+      for (i = j = 0, len = args.length; j < len; i = ++j) {
+        arg = args[i];
+        if (skippingArgument) {
+          skippingArgument = false;
+          continue;
+        }
+        if (arg === '--') {
+          pos = originalArgs.indexOf('--');
+          options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
+          break;
+        }
+        isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
+        seenNonOptionArg = options["arguments"].length > 0;
+        if (!seenNonOptionArg) {
+          matchedRule = false;
+          ref = this.rules;
+          for (k = 0, len1 = ref.length; k < len1; k++) {
+            rule = ref[k];
+            if (rule.shortFlag === arg || rule.longFlag === arg) {
+              value = true;
+              if (rule.hasArgument) {
+                skippingArgument = true;
+                value = args[i + 1];
+              }
+              options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
+              matchedRule = true;
+              break;
+            }
+          }
+          if (isOption && !matchedRule) {
+            throw new Error("unrecognized option: " + arg);
+          }
+        }
+        if (seenNonOptionArg || !isOption) {
+          options["arguments"].push(arg);
+        }
+      }
+      return options;
+    };
+
+    OptionParser.prototype.help = function() {
+      var j, len, letPart, lines, ref, rule, spaces;
+      lines = [];
+      if (this.banner) {
+        lines.unshift(this.banner + "\n");
+      }
+      ref = this.rules;
+      for (j = 0, len = ref.length; j < len; j++) {
+        rule = ref[j];
+        spaces = 15 - rule.longFlag.length;
+        spaces = spaces > 0 ? repeat(' ', spaces) : '';
+        letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
+        lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
+      }
+      return "\n" + (lines.join('\n')) + "\n";
+    };
+
+    return OptionParser;
+
+  })();
+
+  LONG_FLAG = /^(--\w[\w\-]*)/;
+
+  SHORT_FLAG = /^(-\w)$/;
+
+  MULTI_FLAG = /^-(\w{2,})/;
+
+  OPTIONAL = /\[(\w+(\*?))\]/;
+
+  buildRules = function(rules) {
+    var j, len, results, tuple;
+    results = [];
+    for (j = 0, len = rules.length; j < len; j++) {
+      tuple = rules[j];
+      if (tuple.length < 3) {
+        tuple.unshift(null);
+      }
+      results.push(buildRule.apply(null, tuple));
+    }
+    return results;
+  };
+
+  buildRule = function(shortFlag, longFlag, description, options) {
+    var match;
+    if (options == null) {
+      options = {};
+    }
+    match = longFlag.match(OPTIONAL);
+    longFlag = longFlag.match(LONG_FLAG)[1];
+    return {
+      name: longFlag.substr(2),
+      shortFlag: shortFlag,
+      longFlag: longFlag,
+      description: description,
+      hasArgument: !!(match && match[1]),
+      isList: !!(match && match[2])
+    };
+  };
+
+  normalizeArguments = function(args) {
+    var arg, j, k, l, len, len1, match, ref, result;
+    args = args.slice(0);
+    result = [];
+    for (j = 0, len = args.length; j < len; j++) {
+      arg = args[j];
+      if (match = arg.match(MULTI_FLAG)) {
+        ref = match[1].split('');
+        for (k = 0, len1 = ref.length; k < len1; k++) {
+          l = ref[k];
+          result.push('-' + l);
+        }
+      } else {
+        result.push(arg);
+      }
+    }
+    return result;
+  };
+
+}).call(this);