| Index: pkg/args/lib/src/options.dart
 | 
| diff --git a/pkg/args/lib/src/options.dart b/pkg/args/lib/src/options.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..00c0ad8dc22b2f190b418b6436846cc054a4c139
 | 
| --- /dev/null
 | 
| +++ b/pkg/args/lib/src/options.dart
 | 
| @@ -0,0 +1,47 @@
 | 
| +library options;
 | 
| +
 | 
| +/**
 | 
| + * A command-line option. Includes both flags and options which take a value.
 | 
| + */
 | 
| +class Option {
 | 
| +  final String name;
 | 
| +  final String abbreviation;
 | 
| +  final List<String> allowed;
 | 
| +  final defaultValue;
 | 
| +  final Function callback;
 | 
| +  final String help;
 | 
| +  final Map<String, String> allowedHelp;
 | 
| +  final bool isFlag;
 | 
| +  final bool negatable;
 | 
| +  final bool allowMultiple;
 | 
| +
 | 
| +  Option(this.name, this.abbreviation, this.help, this.allowed,
 | 
| +      this.allowedHelp, this.defaultValue, this.callback, {this.isFlag,
 | 
| +      this.negatable, this.allowMultiple: false}) {
 | 
| +
 | 
| +    if (name.isEmpty) {
 | 
| +      throw new ArgumentError('Name cannot be empty.');
 | 
| +    } else if (name.startsWith('-')) {
 | 
| +      throw new ArgumentError('Name $name cannot start with "-".');
 | 
| +    }
 | 
| +
 | 
| +    // Ensure name does not contain any invalid characters.
 | 
| +    if (_invalidChars.hasMatch(name)) {
 | 
| +      throw new ArgumentError('Name "$name" contains invalid characters.');
 | 
| +    }
 | 
| +
 | 
| +    if (abbreviation != null) {
 | 
| +      if (abbreviation.length != 1) {
 | 
| +        throw new ArgumentError('Abbreviation must be null or have length 1.');
 | 
| +      } else if(abbreviation == '-') {
 | 
| +        throw new ArgumentError('Abbreviation cannot be "-".');
 | 
| +      }
 | 
| +
 | 
| +      if (_invalidChars.hasMatch(abbreviation)) {
 | 
| +        throw new ArgumentError('Abbreviation is an invalid character.');
 | 
| +      }
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  static final _invalidChars = new RegExp(r'''[ \t\r\n"'\\/]''');
 | 
| +}
 | 
| 
 |