"Fossies" - the Fresh Open Source Software Archive

Member "Atom/resources/app/apm/node_modules/coffee-script/lib/coffee-script/optparse.js" (7 Feb 2017, 4143 Bytes) of archive /windows/misc/atom-windows.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Javascript source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 // Generated by CoffeeScript 1.9.0
    2 (function() {
    3   var LONG_FLAG, MULTI_FLAG, OPTIONAL, OptionParser, SHORT_FLAG, buildRule, buildRules, normalizeArguments, repeat;
    4 
    5   repeat = require('./helpers').repeat;
    6 
    7   exports.OptionParser = OptionParser = (function() {
    8     function OptionParser(rules, _at_banner) {
    9       this.banner = _at_banner;
   10       this.rules = buildRules(rules);
   11     }
   12 
   13     OptionParser.prototype.parse = function(args) {
   14       var arg, i, isOption, matchedRule, options, originalArgs, pos, rule, seenNonOptionArg, skippingArgument, value, _i, _j, _len, _len1, _ref;
   15       options = {
   16         "arguments": []
   17       };
   18       skippingArgument = false;
   19       originalArgs = args;
   20       args = normalizeArguments(args);
   21       for (i = _i = 0, _len = args.length; _i < _len; i = ++_i) {
   22         arg = args[i];
   23         if (skippingArgument) {
   24           skippingArgument = false;
   25           continue;
   26         }
   27         if (arg === '--') {
   28           pos = originalArgs.indexOf('--');
   29           options["arguments"] = options["arguments"].concat(originalArgs.slice(pos + 1));
   30           break;
   31         }
   32         isOption = !!(arg.match(LONG_FLAG) || arg.match(SHORT_FLAG));
   33         seenNonOptionArg = options["arguments"].length > 0;
   34         if (!seenNonOptionArg) {
   35           matchedRule = false;
   36           _ref = this.rules;
   37           for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
   38             rule = _ref[_j];
   39             if (rule.shortFlag === arg || rule.longFlag === arg) {
   40               value = true;
   41               if (rule.hasArgument) {
   42                 skippingArgument = true;
   43                 value = args[i + 1];
   44               }
   45               options[rule.name] = rule.isList ? (options[rule.name] || []).concat(value) : value;
   46               matchedRule = true;
   47               break;
   48             }
   49           }
   50           if (isOption && !matchedRule) {
   51             throw new Error("unrecognized option: " + arg);
   52           }
   53         }
   54         if (seenNonOptionArg || !isOption) {
   55           options["arguments"].push(arg);
   56         }
   57       }
   58       return options;
   59     };
   60 
   61     OptionParser.prototype.help = function() {
   62       var letPart, lines, rule, spaces, _i, _len, _ref;
   63       lines = [];
   64       if (this.banner) {
   65         lines.unshift(this.banner + "\n");
   66       }
   67       _ref = this.rules;
   68       for (_i = 0, _len = _ref.length; _i < _len; _i++) {
   69         rule = _ref[_i];
   70         spaces = 15 - rule.longFlag.length;
   71         spaces = spaces > 0 ? repeat(' ', spaces) : '';
   72         letPart = rule.shortFlag ? rule.shortFlag + ', ' : '    ';
   73         lines.push('  ' + letPart + rule.longFlag + spaces + rule.description);
   74       }
   75       return "\n" + (lines.join('\n')) + "\n";
   76     };
   77 
   78     return OptionParser;
   79 
   80   })();
   81 
   82   LONG_FLAG = /^(--\w[\w\-]*)/;
   83 
   84   SHORT_FLAG = /^(-\w)$/;
   85 
   86   MULTI_FLAG = /^-(\w{2,})/;
   87 
   88   OPTIONAL = /\[(\w+(\*?))\]/;
   89 
   90   buildRules = function(rules) {
   91     var tuple, _i, _len, _results;
   92     _results = [];
   93     for (_i = 0, _len = rules.length; _i < _len; _i++) {
   94       tuple = rules[_i];
   95       if (tuple.length < 3) {
   96         tuple.unshift(null);
   97       }
   98       _results.push(buildRule.apply(null, tuple));
   99     }
  100     return _results;
  101   };
  102 
  103   buildRule = function(shortFlag, longFlag, description, options) {
  104     var match;
  105     if (options == null) {
  106       options = {};
  107     }
  108     match = longFlag.match(OPTIONAL);
  109     longFlag = longFlag.match(LONG_FLAG)[1];
  110     return {
  111       name: longFlag.substr(2),
  112       shortFlag: shortFlag,
  113       longFlag: longFlag,
  114       description: description,
  115       hasArgument: !!(match && match[1]),
  116       isList: !!(match && match[2])
  117     };
  118   };
  119 
  120   normalizeArguments = function(args) {
  121     var arg, l, match, result, _i, _j, _len, _len1, _ref;
  122     args = args.slice(0);
  123     result = [];
  124     for (_i = 0, _len = args.length; _i < _len; _i++) {
  125       arg = args[_i];
  126       if (match = arg.match(MULTI_FLAG)) {
  127         _ref = match[1].split('');
  128         for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
  129           l = _ref[_j];
  130           result.push('-' + l);
  131         }
  132       } else {
  133         result.push(arg);
  134       }
  135     }
  136     return result;
  137   };
  138 
  139 }).call(this);