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)
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.
34 COMMAND-LINE SPECIFIC STUFF
35 =============================================================================
44 from logging
import DEBUG
, INFO
, CRITICAL
46 logger
= logging
.getLogger('MARKDOWN')
50 Define and parse `optparse` options for command-line usage.
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,
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()
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
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())
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]`.