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: 10 # 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. 19 # 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. 31 32 33 """ 34 COMMAND-LINE SPECIFIC STUFF 35 ============================================================================= 36 37 """ 38 39 import markdown 40 import sys 41 import optparse 42 43 import logging 44 from logging import DEBUG, INFO, CRITICAL 45 46 logger = logging.getLogger('MARKDOWN') 47 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 57 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.") 84 85 (options, args) = parser.parse_args() 86 87 if len(args) == 0: 88 input_file = None 89 else: 90 input_file = args[0] 91 92 if not options.extensions: 93 options.extensions = [] 94 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 102 103 def run(): 104 """Run Markdown from the command line.""" 105 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()) 111 112 # Run 113 markdown.markdownFromFile(**options) 114 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() 120