123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- # markdown is released under the BSD license
- # Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later)
- # Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
- # Copyright 2004 Manfred Stienstra (the original version)
- #
- # All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are met:
- #
- # * Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- # * Neither the name of the <organization> nor the
- # names of its contributors may be used to endorse or promote products
- # derived from this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY
- # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- # DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT
- # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- # POSSIBILITY OF SUCH DAMAGE.
- """
- COMMAND-LINE SPECIFIC STUFF
- =============================================================================
- """
- import markdown
- import sys
- import optparse
- import logging
- from logging import DEBUG, INFO, CRITICAL
- logger = logging.getLogger('MARKDOWN')
- def parse_options():
- """
- Define and parse `optparse` options for command-line usage.
- """
- usage = """%prog [options] [INPUTFILE]
- (STDIN is assumed if no INPUTFILE is given)"""
- desc = "A Python implementation of John Gruber's Markdown. " \
- "http://packages.python.org/Markdown/"
- ver = "%%prog %s" % markdown.version
-
- parser = optparse.OptionParser(usage=usage, description=desc, version=ver)
- parser.add_option("-f", "--file", dest="filename", default=None,
- help="Write output to OUTPUT_FILE. Defaults to STDOUT.",
- metavar="OUTPUT_FILE")
- parser.add_option("-e", "--encoding", dest="encoding",
- help="Encoding for input and output files.",)
- parser.add_option("-q", "--quiet", default = CRITICAL,
- action="store_const", const=CRITICAL+10, dest="verbose",
- help="Suppress all warnings.")
- parser.add_option("-v", "--verbose",
- action="store_const", const=INFO, dest="verbose",
- help="Print all warnings.")
- parser.add_option("-s", "--safe", dest="safe", default=False,
- metavar="SAFE_MODE",
- help="'replace', 'remove' or 'escape' HTML tags in input")
- parser.add_option("-o", "--output_format", dest="output_format",
- default='xhtml1', metavar="OUTPUT_FORMAT",
- help="'xhtml1' (default), 'html4' or 'html5'.")
- parser.add_option("--noisy",
- action="store_const", const=DEBUG, dest="verbose",
- help="Print debug messages.")
- parser.add_option("-x", "--extension", action="append", dest="extensions",
- help = "Load extension EXTENSION.", metavar="EXTENSION")
- parser.add_option("-n", "--no_lazy_ol", dest="lazy_ol",
- action='store_false', default=True,
- help="Observe number of first item of ordered lists.")
- (options, args) = parser.parse_args()
- if len(args) == 0:
- input_file = None
- else:
- input_file = args[0]
- if not options.extensions:
- options.extensions = []
- return {'input': input_file,
- 'output': options.filename,
- 'safe_mode': options.safe,
- 'extensions': options.extensions,
- 'encoding': options.encoding,
- 'output_format': options.output_format,
- 'lazy_ol': options.lazy_ol}, options.verbose
- def run():
- """Run Markdown from the command line."""
- # Parse options and adjust logging level if necessary
- options, logging_level = parse_options()
- if not options: sys.exit(2)
- logger.setLevel(logging_level)
- logger.addHandler(logging.StreamHandler())
- # Run
- markdown.markdownFromFile(**options)
- if __name__ == '__main__':
- # Support running module as a commandline command.
- # Python 2.5 & 2.6 do: `python -m markdown.__main__ [options] [args]`.
- # Python 2.7 & 3.x do: `python -m markdown [options] [args]`.
- run()
|