Roll WebRTC 9745:9761, Libjingle 9742:9761
[chromium-blink-merge.git] / third_party / markdown / __main__.py
blob052706c048bc5d943fde60c0031c8846db5c5d90
1 # markdown is released under the BSD license
2 # Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
3 # Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
4 # Copyright 2004 Manfred Stienstra (the original version)
5 #
6 # All rights reserved.
7 #
8 # Redistribution and use in source and binary forms, with or without
9 # modification, are permitted provided that the following conditions are met:
11 # * Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer.
13 # * Redistributions in binary form must reproduce the above copyright
14 # notice, this list of conditions and the following disclaimer in the
15 # documentation and/or other materials provided with the distribution.
16 # * Neither the name of the <organization> nor the
17 # names of its contributors may be used to endorse or promote products
18 # derived from this software without specific prior written permission.
20 # THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
21 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 # DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
24 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 # POSSIBILITY OF SUCH DAMAGE.
33 """
34 COMMAND-LINE SPECIFIC STUFF
35 =============================================================================
37 """
39 import markdown
40 import sys
41 import optparse
43 import logging
44 from logging import DEBUG, INFO, CRITICAL
46 logger = logging.getLogger('MARKDOWN')
48 def parse_options():
49 """
50 Define and parse `optparse` options for command-line usage.
51 """
52 usage = """%prog [options] [INPUTFILE]
53 (STDIN is assumed if no INPUTFILE is given)"""
54 desc = "A Python implementation of John Gruber's Markdown. " \
55 "http://packages.python.org/Markdown/"
56 ver = "%%prog %s" % markdown.version
58 parser = optparse.OptionParser(usage=usage, description=desc, version=ver)
59 parser.add_option("-f", "--file", dest="filename", default=None,
60 help="Write output to OUTPUT_FILE. Defaults to STDOUT.",
61 metavar="OUTPUT_FILE")
62 parser.add_option("-e", "--encoding", dest="encoding",
63 help="Encoding for input and output files.",)
64 parser.add_option("-q", "--quiet", default = CRITICAL,
65 action="store_const", const=CRITICAL+10, dest="verbose",
66 help="Suppress all warnings.")
67 parser.add_option("-v", "--verbose",
68 action="store_const", const=INFO, dest="verbose",
69 help="Print all warnings.")
70 parser.add_option("-s", "--safe", dest="safe", default=False,
71 metavar="SAFE_MODE",
72 help="'replace', 'remove' or 'escape' HTML tags in input")
73 parser.add_option("-o", "--output_format", dest="output_format",
74 default='xhtml1', metavar="OUTPUT_FORMAT",
75 help="'xhtml1' (default), 'html4' or 'html5'.")
76 parser.add_option("--noisy",
77 action="store_const", const=DEBUG, dest="verbose",
78 help="Print debug messages.")
79 parser.add_option("-x", "--extension", action="append", dest="extensions",
80 help = "Load extension EXTENSION.", metavar="EXTENSION")
81 parser.add_option("-n", "--no_lazy_ol", dest="lazy_ol",
82 action='store_false', default=True,
83 help="Observe number of first item of ordered lists.")
85 (options, args) = parser.parse_args()
87 if len(args) == 0:
88 input_file = None
89 else:
90 input_file = args[0]
92 if not options.extensions:
93 options.extensions = []
95 return {'input': input_file,
96 'output': options.filename,
97 'safe_mode': options.safe,
98 'extensions': options.extensions,
99 'encoding': options.encoding,
100 'output_format': options.output_format,
101 'lazy_ol': options.lazy_ol}, options.verbose
103 def run():
104 """Run Markdown from the command line."""
106 # Parse options and adjust logging level if necessary
107 options, logging_level = parse_options()
108 if not options: sys.exit(2)
109 logger.setLevel(logging_level)
110 logger.addHandler(logging.StreamHandler())
112 # Run
113 markdown.markdownFromFile(**options)
115 if __name__ == '__main__':
116 # Support running module as a commandline command.
117 # Python 2.5 & 2.6 do: `python -m markdown.__main__ [options] [args]`.
118 # Python 2.7 & 3.x do: `python -m markdown [options] [args]`.
119 run()