Allow --extension-set to be passed to bin/markdown (#198)
Allow --extension-set to be passed to bin/markdown
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4ab93a9..306b2b1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,16 @@
* Improve support for tab characters, and horizontal rules.
* The above fixes raise compliance with the CommonMark specs to 90%, and
compliance with the GFM specs to 87%.
+* Allow the binary script to take a `--extension-set` option.
+
+ A reminder: You can [run `bin/markdown.dart` from anywhere][pub-global] via:
+
+ ```shell
+ $ pub global activate markdown
+ $ markdown
+ ```
+
+[pub-global]: https://www.dartlang.org/tools/pub/cmd/pub-global#running-a-script-from-your-path
## 1.1.1
diff --git a/bin/markdown.dart b/bin/markdown.dart
index fb6a460..943d28f 100644
--- a/bin/markdown.dart
+++ b/bin/markdown.dart
@@ -1,40 +1,55 @@
import 'dart:async';
import 'dart:io';
+import 'package:args/args.dart';
import 'package:markdown/markdown.dart';
+final extensionSets = <String, ExtensionSet>{
+ 'none': ExtensionSet.none,
+ 'CommonMark': ExtensionSet.commonMark,
+ 'GitHubFlavored': ExtensionSet.gitHubFlavored,
+ 'GitHubWeb': ExtensionSet.gitHubWeb,
+};
+
Future main(List<String> args) async {
- if (args.length > 1) {
- print('Usage: markdown.dart [file]');
+ var parser = new ArgParser()
+ ..addFlag('help', negatable: false, help: 'Print help text and exit')
+ ..addFlag('version', negatable: false, help: 'Print version and exit')
+ ..addOption('extension-set',
+ allowed: ['none', 'CommonMark', 'GitHubFlavored', 'GitHubWeb'],
+ defaultsTo: 'CommonMark',
+ help: 'Specify a set of extensions',
+ allowedHelp: {
+ 'none': 'No extensions; similar to Markdown.pl',
+ 'CommonMark': 'Parse like CommonMark Markdown (default)',
+ 'GitHubFlavored': 'Parse like GitHub Flavored Markdown',
+ 'GitHubWeb': 'Parse like GitHub\'s Markdown-enabled web input fields',
+ });
+ var results = parser.parse(args);
+
+ if (results['help'] as bool) {
+ printUsage(parser);
+ return;
+ }
+
+ if (results['version'] as bool) {
+ print(version);
+ return;
+ }
+
+ var extensionSet = extensionSets[results['extension-set']];
+
+ if (results.rest.length > 1) {
+ printUsage(parser);
exitCode = 1;
return;
}
- if (args.length == 1) {
- switch (args.first) {
- case '--help':
- print('''Usage:
- markdown [markdown file]
- Convert [markdown-file] from Markdown to HTML. If no file is passed on
- the commandline, then the Markdown source is read from STDIN.
-
- markdown --version
- Print the markdown package version.
-
- markdown --help
- Print this help text.
- ''');
- return;
-
- case '--version':
- print(version);
- return;
-
- default:
- // Read argument as a file path.
- print(markdownToHtml(new File(args[0]).readAsStringSync()));
- return;
- }
+ if (results.rest.length == 1) {
+ // Read argument as a file path.
+ var input = new File(results.rest.first).readAsStringSync();
+ print(markdownToHtml(input, extensionSet: extensionSet));
+ return;
}
// Read from stdin.
@@ -43,5 +58,18 @@
while ((line = stdin.readLineSync()) != null) {
buffer.writeln(line);
}
- print(markdownToHtml(buffer.toString()));
+ print(markdownToHtml(buffer.toString(), extensionSet: extensionSet));
+}
+
+void printUsage(ArgParser parser) {
+ print('''Usage: markdown.dart [options] [file]
+
+Parse [file] as Markdown and print resulting HTML. If [file] is omitted,
+use stdin as input.
+
+By default, CommonMark Markdown will be parsed. This can be changed with
+the --extensionSet flag.
+
+${parser.usage}
+''');
}
diff --git a/pubspec.yaml b/pubspec.yaml
index d7e97b8..031b66a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,10 +3,17 @@
author: Dart Team <misc@dartlang.org>
description: A library for converting markdown to HTML.
homepage: https://github.com/dart-lang/markdown
+
+executables:
+ markdown:
+
environment:
sdk: '>=1.12.0 <2.0.0'
+dependencies:
+ args: '^1.0.0'
+
dev_dependencies:
- args: '>=0.13.3+1 <2.0.0'
+ args: '^1.0.0'
# Only for example/app.dart.
browser: any
collection: '^1.2.0'