Skip to content

Commit

Permalink
Update markdown to 2.3.1.
Browse files Browse the repository at this point in the history
  • Loading branch information
user-none committed Sep 25, 2013
1 parent b2dc290 commit cc3466e
Show file tree
Hide file tree
Showing 34 changed files with 2,663 additions and 1,808 deletions.
443 changes: 443 additions & 0 deletions src/calibre/ebooks/markdown/__init__.py

Large diffs are not rendered by default.

87 changes: 87 additions & 0 deletions src/calibre/ebooks/markdown/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
"""
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()
28 changes: 28 additions & 0 deletions src/calibre/ebooks/markdown/__version__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#
# markdown/__version__.py
#
# version_info should conform to PEP 386
# (major, minor, micro, alpha/beta/rc/final, #)
# (1, 1, 2, 'alpha', 0) => "1.1.2.dev"
# (1, 2, 0, 'beta', 2) => "1.2b2"
version_info = (2, 3, 1, 'final', 0)

def _get_version():
" Returns a PEP 386-compliant version number from version_info. "
assert len(version_info) == 5
assert version_info[3] in ('alpha', 'beta', 'rc', 'final')

parts = 2 if version_info[2] == 0 else 3
main = '.'.join(map(str, version_info[:parts]))

sub = ''
if version_info[3] == 'alpha' and version_info[4] == 0:
# TODO: maybe append some sort of git info here??
sub = '.dev'
elif version_info[3] != 'final':
mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'c'}
sub = mapping[version_info[3]] + str(version_info[4])

return str(main + sub)

version = _get_version()
24 changes: 14 additions & 10 deletions src/calibre/ebooks/markdown/blockparser.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@

import markdown
from __future__ import unicode_literals
from __future__ import absolute_import
from . import util
from . import odict

class State(list):
""" Track the current and nested state of the parser.
Expand Down Expand Up @@ -41,9 +43,10 @@ class BlockParser:
looping through them and creating an ElementTree object.
"""

def __init__(self):
self.blockprocessors = markdown.odict.OrderedDict()
def __init__(self, markdown):
self.blockprocessors = odict.OrderedDict()
self.state = State()
self.markdown = markdown

def parseDocument(self, lines):
""" Parse a markdown document into an ElementTree.
Expand All @@ -56,9 +59,9 @@ def parseDocument(self, lines):
"""
# Create a ElementTree from the lines
self.root = markdown.etree.Element(markdown.DOC_TAG)
self.root = util.etree.Element(self.markdown.doc_tag)
self.parseChunk(self.root, '\n'.join(lines))
return markdown.etree.ElementTree(self.root)
return util.etree.ElementTree(self.root)

def parseChunk(self, parent, text):
""" Parse a chunk of markdown text and attach to given etree node.
Expand Down Expand Up @@ -87,9 +90,10 @@ def parseBlocks(self, parent, blocks):
"""
while blocks:
for processor in self.blockprocessors.values():
if processor.test(parent, blocks[0]):
processor.run(parent, blocks)
break
for processor in self.blockprocessors.values():
if processor.test(parent, blocks[0]):
if processor.run(parent, blocks) is not False:
# run returns True or None
break


Loading

0 comments on commit cc3466e

Please sign in to comment.