summaryrefslogtreecommitdiff
path: root/src/mistune/__main__.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mistune/__main__.py')
-rw-r--r--src/mistune/__main__.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/mistune/__main__.py b/src/mistune/__main__.py
new file mode 100644
index 0000000..053a379
--- /dev/null
+++ b/src/mistune/__main__.py
@@ -0,0 +1,124 @@
+import sys
+import argparse
+from .renderers.rst import RSTRenderer
+from .renderers.markdown import MarkdownRenderer
+from . import (
+ create_markdown,
+ __version__ as version
+)
+
+
+def _md(args):
+ if args.plugin:
+ plugins = args.plugin
+ else:
+ # default plugins
+ plugins = ['strikethrough', 'footnotes', 'table', 'speedup']
+
+ if args.renderer == 'rst':
+ renderer = RSTRenderer()
+ elif args.renderer == 'markdown':
+ renderer = MarkdownRenderer()
+ else:
+ renderer = args.renderer
+ return create_markdown(
+ escape=args.escape,
+ hard_wrap=args.hardwrap,
+ renderer=renderer,
+ plugins=plugins,
+ )
+
+
+def _output(text, args):
+ if args.output:
+ with open(args.output, 'w') as f:
+ f.write(text)
+ else:
+ print(text)
+
+
+CMD_HELP = '''Mistune, a sane and fast python markdown parser.
+
+Here are some use cases of the command line tool:
+
+ $ python -m mistune -m "Hi **Markdown**"
+ <p>Hi <strong>Markdown</strong></p>
+
+ $ python -m mistune -f README.md
+ <p>...
+
+ $ cat README.md | python -m mistune
+ <p>...
+'''
+
+
+def cli():
+ parser = argparse.ArgumentParser(
+ prog='python -m mistune',
+ description=CMD_HELP,
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ )
+ parser.add_argument(
+ '-m', '--message',
+ help='the markdown message to convert',
+ )
+ parser.add_argument(
+ '-f', '--file',
+ help='the markdown file to convert',
+ )
+ parser.add_argument(
+ '-p', '--plugin',
+ metavar='NAME',
+ action='extend',
+ nargs='+',
+ help='specifiy a plugin to use',
+ )
+ parser.add_argument(
+ '--escape',
+ action='store_true',
+ help='turn on escape option',
+ )
+ parser.add_argument(
+ '--hardwrap',
+ action='store_true',
+ help='turn on hardwrap option',
+ )
+ parser.add_argument(
+ '-o', '--output',
+ help='write the rendered result into file',
+ )
+ parser.add_argument(
+ '-r', '--renderer',
+ default='html',
+ help='specify the output renderer',
+ )
+ parser.add_argument('--version', action='version', version='mistune ' + version)
+ args = parser.parse_args()
+
+ message = args.message
+ if not message and not args.file:
+ message = read_stdin()
+
+ if message:
+ md = _md(args)
+ text = md(message)
+ _output(text, args)
+ elif args.file:
+ md = _md(args)
+ text = md.read(args.file)[0]
+ _output(text, args)
+ else:
+ print('You MUST specify a message or file')
+ return sys.exit(1)
+
+
+def read_stdin():
+ is_stdin_pipe = not sys.stdin.isatty()
+ if is_stdin_pipe:
+ return sys.stdin.read()
+ else:
+ return None
+
+
+if __name__ == '__main__':
+ cli()