aboutsummaryrefslogtreecommitdiffstats
path: root/markdown/extensions
diff options
context:
space:
mode:
authorWaylan Limberg <waylan@gmail.com>2013-02-27 09:10:47 -0500
committerWaylan Limberg <waylan@gmail.com>2013-02-27 09:10:47 -0500
commit579288c5eb684dd09d1ef298929a566f40151205 (patch)
treed10a50f91b8606cd1dea38764168abab92958b0f /markdown/extensions
parentb37ab16ba56ac6fe4e64f87521996bad323058f2 (diff)
downloadmarkdown-579288c5eb684dd09d1ef298929a566f40151205.tar.gz
markdown-579288c5eb684dd09d1ef298929a566f40151205.tar.bz2
markdown-579288c5eb684dd09d1ef298929a566f40151205.zip
Now using universal code for Python 2 & 3.
The most notable changes are the use of unicode_literals and absolute_imports. Actually, absolute_imports was the biggest deal as it gives us relative imports. For the first time extensions import markdown relative to themselves. This allows other packages to embed the markdown lib in a subdir of their project and still be able to use our extensions.
Diffstat (limited to 'markdown/extensions')
-rw-r--r--markdown/extensions/__init__.py7
-rw-r--r--markdown/extensions/abbr.py20
-rw-r--r--markdown/extensions/admonition.py15
-rw-r--r--markdown/extensions/attr_list.py15
-rw-r--r--markdown/extensions/codehilite.py13
-rw-r--r--markdown/extensions/def_list.py14
-rw-r--r--markdown/extensions/extra.py7
-rw-r--r--markdown/extensions/fenced_code.py20
-rw-r--r--markdown/extensions/footnotes.py27
-rw-r--r--markdown/extensions/headerid.py22
-rw-r--r--markdown/extensions/html_tidy.py14
-rw-r--r--markdown/extensions/meta.py17
-rw-r--r--markdown/extensions/nl2br.py10
-rw-r--r--markdown/extensions/sane_lists.py12
-rw-r--r--markdown/extensions/smart_strong.py12
-rw-r--r--markdown/extensions/tables.py12
-rw-r--r--markdown/extensions/toc.py13
-rw-r--r--markdown/extensions/wikilinks.py28
18 files changed, 144 insertions, 134 deletions
diff --git a/markdown/extensions/__init__.py b/markdown/extensions/__init__.py
index 0222c91..960d8f9 100644
--- a/markdown/extensions/__init__.py
+++ b/markdown/extensions/__init__.py
@@ -1,9 +1,10 @@
+from __future__ import unicode_literals
"""
Extensions
-----------------------------------------------------------------------------
"""
-class Extension:
+class Extension(object):
""" Base class for extensions to subclass. """
def __init__(self, configs = {}):
"""Create an instance of an Extention.
@@ -46,6 +47,6 @@ class Extension:
* md_globals: Global variables in the markdown module namespace.
"""
- raise NotImplementedError, 'Extension "%s.%s" must define an "extendMarkdown"' \
- 'method.' % (self.__class__.__module__, self.__class__.__name__)
+ raise NotImplementedError('Extension "%s.%s" must define an "extendMarkdown"' \
+ 'method.' % (self.__class__.__module__, self.__class__.__name__))
diff --git a/markdown/extensions/abbr.py b/markdown/extensions/abbr.py
index 45663c0..76a08cd 100644
--- a/markdown/extensions/abbr.py
+++ b/markdown/extensions/abbr.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
'''
Abbreviation Extension for Python-Markdown
==========================================
@@ -23,14 +24,17 @@ Copyright 2007-2008
'''
+from __future__ import absolute_import
+from . import Extension
+from ..preprocessors import Preprocessor
+from ..inlinepatterns import Pattern
+from ..util import etree
import re
-import markdown
-from markdown.util import etree
# Global Vars
ABBR_REF_RE = re.compile(r'[*]\[(?P<abbr>[^\]]*)\][ ]?:\s*(?P<title>.*)')
-class AbbrExtension(markdown.Extension):
+class AbbrExtension(Extension):
""" Abbreviation Extension for Python-Markdown. """
def extendMarkdown(self, md, md_globals):
@@ -38,7 +42,7 @@ class AbbrExtension(markdown.Extension):
md.preprocessors.add('abbr', AbbrPreprocessor(md), '<reference')
-class AbbrPreprocessor(markdown.preprocessors.Preprocessor):
+class AbbrPreprocessor(Preprocessor):
""" Abbreviation Preprocessor - parse text for abbr references. """
def run(self, lines):
@@ -75,11 +79,11 @@ class AbbrPreprocessor(markdown.preprocessors.Preprocessor):
return r'(?P<abbr>\b%s\b)' % (r''.join(chars))
-class AbbrPattern(markdown.inlinepatterns.Pattern):
+class AbbrPattern(Pattern):
""" Abbreviation inline pattern. """
def __init__(self, pattern, title):
- markdown.inlinepatterns.Pattern.__init__(self, pattern)
+ super(AbbrPattern, self).__init__(pattern)
self.title = title
def handleMatch(self, m):
@@ -90,7 +94,3 @@ class AbbrPattern(markdown.inlinepatterns.Pattern):
def makeExtension(configs=None):
return AbbrExtension(configs=configs)
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
diff --git a/markdown/extensions/admonition.py b/markdown/extensions/admonition.py
index 122eb87..98dcb3a 100644
--- a/markdown/extensions/admonition.py
+++ b/markdown/extensions/admonition.py
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+from __future__ import unicode_literals
"""
Admonition extension for Python-Markdown
========================================
@@ -42,12 +41,14 @@ By [Tiago Serafim](http://www.tiagoserafim.com/).
"""
+from __future__ import absolute_import
+from . import Extension
+from ..blockprocessors import BlockProcessor
+from ..util import etree
import re
-import markdown
-from markdown.util import etree
-class AdmonitionExtension(markdown.Extension):
+class AdmonitionExtension(Extension):
""" Admonition extension for Python-Markdown. """
def extendMarkdown(self, md, md_globals):
@@ -59,7 +60,7 @@ class AdmonitionExtension(markdown.Extension):
'_begin')
-class AdmonitionProcessor(markdown.blockprocessors.BlockProcessor):
+class AdmonitionProcessor(BlockProcessor):
CLASSNAME = 'admonition'
CLASSNAME_TITLE = 'admonition-title'
@@ -84,7 +85,7 @@ class AdmonitionProcessor(markdown.blockprocessors.BlockProcessor):
if m:
klass, title = self.get_class_and_title(m)
div = etree.SubElement(parent, 'div')
- div.set('class', u'%s %s' % (self.CLASSNAME, klass))
+ div.set('class', '%s %s' % (self.CLASSNAME, klass))
if title:
p = etree.SubElement(div, 'p')
p.text = title
diff --git a/markdown/extensions/attr_list.py b/markdown/extensions/attr_list.py
index 3a79d85..d0d4873 100644
--- a/markdown/extensions/attr_list.py
+++ b/markdown/extensions/attr_list.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
"""
Attribute List Extension for Python-Markdown
============================================
@@ -18,9 +19,11 @@ Dependencies:
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..treeprocessors import Treeprocessor
+from ..util import isBlockLevel
import re
-from markdown.util import isBlockLevel
try:
Scanner = re.Scanner
@@ -41,9 +44,9 @@ def _handle_key_value(s, t):
def _handle_word(s, t):
if t.startswith('.'):
- return u'.', t[1:]
+ return '.', t[1:]
if t.startswith('#'):
- return u'id', t[1:]
+ return 'id', t[1:]
return t, t
_scanner = Scanner([
@@ -61,7 +64,7 @@ def get_attrs(str):
def isheader(elem):
return elem.tag in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
-class AttrListTreeprocessor(markdown.treeprocessors.Treeprocessor):
+class AttrListTreeprocessor(Treeprocessor):
BASE_RE = r'\{\:?([^\}]*)\}'
HEADER_RE = re.compile(r'[ ]*%s[ ]*$' % BASE_RE)
@@ -128,7 +131,7 @@ class AttrListTreeprocessor(markdown.treeprocessors.Treeprocessor):
return self.NAME_RE.sub('_', name)
-class AttrListExtension(markdown.extensions.Extension):
+class AttrListExtension(Extension):
def extendMarkdown(self, md, md_globals):
md.treeprocessors.add('attr_list', AttrListTreeprocessor(md), '>prettify')
diff --git a/markdown/extensions/codehilite.py b/markdown/extensions/codehilite.py
index fd8e2f4..89c0251 100644
--- a/markdown/extensions/codehilite.py
+++ b/markdown/extensions/codehilite.py
@@ -1,5 +1,4 @@
-#!/usr/bin/python
-
+from __future__ import unicode_literals
"""
CodeHilite Extension for Python-Markdown
========================================
@@ -20,7 +19,9 @@ Dependencies:
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..treeprocessors import Treeprocessor
import warnings
try:
from pygments import highlight
@@ -31,7 +32,7 @@ except ImportError:
pygments = False
# ------------------ The Main CodeHilite Class ----------------------
-class CodeHilite:
+class CodeHilite(object):
"""
Determine language of source code, and pass it into the pygments hilighter.
@@ -167,7 +168,7 @@ class CodeHilite:
# ------------------ The Markdown Extension -------------------------------
-class HiliteTreeprocessor(markdown.treeprocessors.Treeprocessor):
+class HiliteTreeprocessor(Treeprocessor):
""" Hilight source code in code blocks. """
def run(self, root):
@@ -193,7 +194,7 @@ class HiliteTreeprocessor(markdown.treeprocessors.Treeprocessor):
block.text = placeholder
-class CodeHiliteExtension(markdown.Extension):
+class CodeHiliteExtension(Extension):
""" Add source code hilighting to markdown codeblocks. """
def __init__(self, configs):
diff --git a/markdown/extensions/def_list.py b/markdown/extensions/def_list.py
index 382445c..cd9dc9c 100644
--- a/markdown/extensions/def_list.py
+++ b/markdown/extensions/def_list.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+from __future__ import unicode_literals
"""
Definition List Extension for Python-Markdown
=============================================
@@ -19,12 +19,14 @@ Copyright 2008 - [Waylan Limberg](http://achinghead.com)
"""
+from __future__ import absolute_import
+from . import Extension
+from ..blockprocessors import BlockProcessor, ListIndentProcessor
+from ..util import etree
import re
-import markdown
-from markdown.util import etree
-class DefListProcessor(markdown.blockprocessors.BlockProcessor):
+class DefListProcessor(BlockProcessor):
""" Process Definition Lists. """
RE = re.compile(r'(^|\n)[ ]{0,3}:[ ]{1,3}(.*?)(\n|$)')
@@ -85,7 +87,7 @@ class DefListProcessor(markdown.blockprocessors.BlockProcessor):
if theRest:
blocks.insert(0, theRest)
-class DefListIndentProcessor(markdown.blockprocessors.ListIndentProcessor):
+class DefListIndentProcessor(ListIndentProcessor):
""" Process indented children of definition list items. """
ITEM_TYPES = ['dd']
@@ -98,7 +100,7 @@ class DefListIndentProcessor(markdown.blockprocessors.ListIndentProcessor):
-class DefListExtension(markdown.Extension):
+class DefListExtension(Extension):
""" Add definition lists to Markdown. """
def extendMarkdown(self, md, md_globals):
diff --git a/markdown/extensions/extra.py b/markdown/extensions/extra.py
index ba646f5..5b8876c 100644
--- a/markdown/extensions/extra.py
+++ b/markdown/extensions/extra.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+from __future__ import unicode_literals
"""
Python-Markdown Extra Extension
===============================
@@ -27,7 +27,8 @@ when you upgrade to any future version of Python-Markdown.
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
extensions = ['smart_strong',
'fenced_code',
@@ -39,7 +40,7 @@ extensions = ['smart_strong',
]
-class ExtraExtension(markdown.Extension):
+class ExtraExtension(Extension):
""" Add various extensions to Markdown class."""
def extendMarkdown(self, md, md_globals):
diff --git a/markdown/extensions/fenced_code.py b/markdown/extensions/fenced_code.py
index 76d644f..91c59ee 100644
--- a/markdown/extensions/fenced_code.py
+++ b/markdown/extensions/fenced_code.py
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+from __future__ import unicode_literals
"""
Fenced Code Extension for Python Markdown
=========================================
@@ -75,9 +74,11 @@ Dependencies:
"""
+from __future__ import absolute_import
+from . import Extension
+from ..preprocessors import Preprocessor
+from .codehilite import CodeHilite, CodeHiliteExtension
import re
-import markdown
-from markdown.extensions.codehilite import CodeHilite, CodeHiliteExtension
# Global vars
FENCED_BLOCK_RE = re.compile( \
@@ -87,7 +88,7 @@ FENCED_BLOCK_RE = re.compile( \
CODE_WRAP = '<pre><code%s>%s</code></pre>'
LANG_TAG = ' class="%s"'
-class FencedCodeExtension(markdown.Extension):
+class FencedCodeExtension(Extension):
def extendMarkdown(self, md, md_globals):
""" Add FencedBlockPreprocessor to the Markdown instance. """
@@ -98,10 +99,10 @@ class FencedCodeExtension(markdown.Extension):
">normalize_whitespace")
-class FencedBlockPreprocessor(markdown.preprocessors.Preprocessor):
+class FencedBlockPreprocessor(Preprocessor):
def __init__(self, md):
- markdown.preprocessors.Preprocessor.__init__(self, md)
+ super(FencedBlockPreprocessor, self).__init__(md)
self.checked_for_codehilite = False
self.codehilite_conf = {}
@@ -158,8 +159,3 @@ class FencedBlockPreprocessor(markdown.preprocessors.Preprocessor):
def makeExtension(configs=None):
return FencedCodeExtension(configs=configs)
-
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
diff --git a/markdown/extensions/footnotes.py b/markdown/extensions/footnotes.py
index 0a0ddea..b7ebc35 100644
--- a/markdown/extensions/footnotes.py
+++ b/markdown/extensions/footnotes.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
"""
========================= FOOTNOTES =================================
@@ -23,16 +24,22 @@ Example:
"""
+from __future__ import absolute_import
+from . import Extension
+from ..preprocessors import Preprocessor
+from ..inlinepatterns import Pattern
+from ..treeprocessors import Treeprocessor
+from ..postprocessors import Postprocessor
+from ..util import etree, text_type
+from ..odict import OrderedDict
import re
-import markdown
-from markdown.util import etree
FN_BACKLINK_TEXT = "zz1337820767766393qq"
NBSP_PLACEHOLDER = "qq3936677670287331zz"
DEF_RE = re.compile(r'[ ]{0,3}\[\^([^\]]*)\]:\s*(.*)')
TABBED_RE = re.compile(r'((\t)|( ))(.*)')
-class FootnoteExtension(markdown.Extension):
+class FootnoteExtension(Extension):
""" Footnote Extension. """
def __init__ (self, configs):
@@ -83,7 +90,7 @@ class FootnoteExtension(markdown.Extension):
def reset(self):
""" Clear the footnotes on reset, and prepare for a distinct document. """
- self.footnotes = markdown.odict.OrderedDict()
+ self.footnotes = OrderedDict()
self.unique_prefix += 1
def findFootnotesPlaceholder(self, root):
@@ -155,7 +162,7 @@ class FootnoteExtension(markdown.Extension):
return div
-class FootnotePreprocessor(markdown.preprocessors.Preprocessor):
+class FootnotePreprocessor(Preprocessor):
""" Find all footnote references and store for later use. """
def __init__ (self, footnotes):
@@ -246,11 +253,11 @@ class FootnotePreprocessor(markdown.preprocessors.Preprocessor):
return items, i
-class FootnotePattern(markdown.inlinepatterns.Pattern):
+class FootnotePattern(Pattern):
""" InlinePattern for footnote markers in a document's body text. """
def __init__(self, pattern, footnotes):
- markdown.inlinepatterns.Pattern.__init__(self, pattern)
+ super(FootnotePattern, self).__init__(pattern)
self.footnotes = footnotes
def handleMatch(self, m):
@@ -263,13 +270,13 @@ class FootnotePattern(markdown.inlinepatterns.Pattern):
if self.footnotes.md.output_format not in ['html5', 'xhtml5']:
a.set('rel', 'footnote') # invalid in HTML5
a.set('class', 'footnote-ref')
- a.text = unicode(self.footnotes.footnotes.index(id) + 1)
+ a.text = text_type(self.footnotes.footnotes.index(id) + 1)
return sup
else:
return None
-class FootnoteTreeprocessor(markdown.treeprocessors.Treeprocessor):
+class FootnoteTreeprocessor(Treeprocessor):
""" Build and append footnote div to end of document. """
def __init__ (self, footnotes):
@@ -291,7 +298,7 @@ class FootnoteTreeprocessor(markdown.treeprocessors.Treeprocessor):
else:
root.append(footnotesDiv)
-class FootnotePostprocessor(markdown.postprocessors.Postprocessor):
+class FootnotePostprocessor(Postprocessor):
""" Replace placeholders with html entities. """
def __init__(self, footnotes):
self.footnotes = footnotes
diff --git a/markdown/extensions/headerid.py b/markdown/extensions/headerid.py
index cf3df17..33d7d90 100644
--- a/markdown/extensions/headerid.py
+++ b/markdown/extensions/headerid.py
@@ -1,5 +1,4 @@
-#!/usr/bin/python
-
+from __future__ import unicode_literals
"""
HeaderID Extension for Python-Markdown
======================================
@@ -76,7 +75,9 @@ Dependencies:
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..treeprocessors import Treeprocessor
import re
import logging
import unicodedata
@@ -120,7 +121,7 @@ def itertext(elem):
yield e.tail
-class HeaderIdTreeprocessor(markdown.treeprocessors.Treeprocessor):
+class HeaderIdTreeprocessor(Treeprocessor):
""" Assign IDs to headers. """
IDs = set()
@@ -135,7 +136,7 @@ class HeaderIdTreeprocessor(markdown.treeprocessors.Treeprocessor):
if "id" in elem.attrib:
id = elem.get('id')
else:
- id = slugify(u''.join(itertext(elem)), sep)
+ id = slugify(''.join(itertext(elem)), sep)
elem.set('id', unique(id, self.IDs))
if start_level:
level = int(elem.tag[-1]) + start_level
@@ -149,9 +150,9 @@ class HeaderIdTreeprocessor(markdown.treeprocessors.Treeprocessor):
level = int(self.config['level']) - 1
force = self._str2bool(self.config['forceid'])
if hasattr(self.md, 'Meta'):
- if self.md.Meta.has_key('header_level'):
+ if 'header_level' in self.md.Meta:
level = int(self.md.Meta['header_level'][0]) - 1
- if self.md.Meta.has_key('header_forceid'):
+ if 'header_forceid' in self.md.Meta:
force = self._str2bool(self.md.Meta['header_forceid'][0])
return level, force
@@ -165,7 +166,7 @@ class HeaderIdTreeprocessor(markdown.treeprocessors.Treeprocessor):
return default
-class HeaderIdExtension (markdown.Extension):
+class HeaderIdExtension(Extension):
def __init__(self, configs):
# set defaults
self.config = {
@@ -196,8 +197,3 @@ class HeaderIdExtension (markdown.Extension):
def makeExtension(configs=None):
return HeaderIdExtension(configs=configs)
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
-
diff --git a/markdown/extensions/html_tidy.py b/markdown/extensions/html_tidy.py
index 80272a3..e5f060c 100644
--- a/markdown/extensions/html_tidy.py
+++ b/markdown/extensions/html_tidy.py
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+from __future__ import unicode_literals
"""
HTML Tidy Extension for Python-Markdown
=======================================
@@ -28,13 +27,16 @@ Dependencies:
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..postprocessors import Postprocessor
+from ..util import text_type
try:
import tidy
except ImportError:
tidy = None
-class TidyExtension(markdown.Extension):
+class TidyExtension(Extension):
def __init__(self, configs):
# Set defaults to match typical markdown behavior.
@@ -54,13 +56,13 @@ class TidyExtension(markdown.Extension):
md.postprocessors['tidy'] = TidyProcessor(md)
-class TidyProcessor(markdown.postprocessors.Postprocessor):
+class TidyProcessor(Postprocessor):
def run(self, text):
# Pass text to Tidy. As Tidy does not accept unicode we need to encode
# it and decode its return value.
enc = self.markdown.tidy_options.get('char_encoding', 'utf8')
- return unicode(tidy.parseString(text.encode(enc),
+ return text_type(tidy.parseString(text.encode(enc),
**self.markdown.tidy_options),
encoding=enc)
diff --git a/markdown/extensions/meta.py b/markdown/extensions/meta.py
index a3ee6fb..a2fbe80 100644
--- a/markdown/extensions/meta.py
+++ b/markdown/extensions/meta.py
@@ -1,5 +1,4 @@
-#!usr/bin/python
-
+from __future__ import unicode_literals
"""
Meta Data Extension for Python-Markdown
=======================================
@@ -40,15 +39,17 @@ Contact: markdown@freewisdom.org
License: BSD (see ../LICENSE.md for details)
"""
-import re
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..preprocessors import Preprocessor
+import re
# Global Vars
META_RE = re.compile(r'^[ ]{0,3}(?P<key>[A-Za-z0-9_-]+):\s*(?P<value>.*)')
META_MORE_RE = re.compile(r'^[ ]{4,}(?P<value>.*)')
-class MetaExtension (markdown.Extension):
+class MetaExtension (Extension):
""" Meta-Data extension for Python-Markdown. """
def extendMarkdown(self, md, md_globals):
@@ -57,7 +58,7 @@ class MetaExtension (markdown.Extension):
md.preprocessors.add("meta", MetaPreprocessor(md), "_begin")
-class MetaPreprocessor(markdown.preprocessors.Preprocessor):
+class MetaPreprocessor(Preprocessor):
""" Get Meta-Data. """
def run(self, lines):
@@ -90,7 +91,3 @@ class MetaPreprocessor(markdown.preprocessors.Preprocessor):
def makeExtension(configs={}):
return MetaExtension(configs=configs)
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
diff --git a/markdown/extensions/nl2br.py b/markdown/extensions/nl2br.py
index 3967c75..5636214 100644
--- a/markdown/extensions/nl2br.py
+++ b/markdown/extensions/nl2br.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
"""
NL2BR Extension
===============
@@ -20,17 +21,18 @@ Dependencies:
"""
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..inlinepatterns import SubstituteTagPattern
BR_RE = r'\n'
-class Nl2BrExtension(markdown.Extension):
+class Nl2BrExtension(Extension):
def extendMarkdown(self, md, md_globals):
- br_tag = markdown.inlinepatterns.SubstituteTagPattern(BR_RE, 'br')
+ br_tag = SubstituteTagPattern(BR_RE, 'br')
md.inlinePatterns.add('nl', br_tag, '_end')
def makeExtension(configs=None):
return Nl2BrExtension(configs)
-
diff --git a/markdown/extensions/sane_lists.py b/markdown/extensions/sane_lists.py
index dce04ea..5620ccd 100644
--- a/markdown/extensions/sane_lists.py
+++ b/markdown/extensions/sane_lists.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+from __future__ import unicode_literals
"""
Sane List Extension for Python-Markdown
=======================================
@@ -19,23 +19,25 @@ Copyright 2011 - [Waylan Limberg](http://achinghead.com)
"""
+from __future__ import absolute_import
+from . import Extension
+from ..blockprocessors import OListProcessor, UListProcessor
import re
-import markdown
-class SaneOListProcessor(markdown.blockprocessors.OListProcessor):
+class SaneOListProcessor(OListProcessor):
CHILD_RE = re.compile(r'^[ ]{0,3}((\d+\.))[ ]+(.*)')
SIBLING_TAGS = ['ol']
-class SaneUListProcessor(markdown.blockprocessors.UListProcessor):
+class SaneUListProcessor(UListProcessor):
CHILD_RE = re.compile(r'^[ ]{0,3}(([*+-]))[ ]+(.*)')
SIBLING_TAGS = ['ul']
-class SaneListExtension(markdown.Extension):
+class SaneListExtension(Extension):
""" Add sane lists to Markdown. """
def extendMarkdown(self, md, md_globals):
diff --git a/markdown/extensions/smart_strong.py b/markdown/extensions/smart_strong.py
index 7166989..7ce2d4d 100644
--- a/markdown/extensions/smart_strong.py
+++ b/markdown/extensions/smart_strong.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
'''
Smart_Strong Extension for Python-Markdown
==========================================
@@ -22,13 +23,14 @@ Copyright 2011
'''
-import markdown
-from markdown.inlinepatterns import SimpleTagPattern
+from __future__ import absolute_import
+from . import Extension
+from ..inlinepatterns import SimpleTagPattern
SMART_STRONG_RE = r'(?<!\w)(_{2})(?!_)(.+?)(?<!_)\2(?!\w)'
STRONG_RE = r'(\*{2})(.+?)\2'
-class SmartEmphasisExtension(markdown.extensions.Extension):
+class SmartEmphasisExtension(Extension):
""" Add smart_emphasis extension to Markdown class."""
def extendMarkdown(self, md, md_globals):
@@ -38,7 +40,3 @@ class SmartEmphasisExtension(markdown.extensions.Extension):
def makeExtension(configs={}):
return SmartEmphasisExtension(configs=dict(configs))
-
-if __name__ == '__main__':
- import doctest
- doctest.testmod()
diff --git a/markdown/extensions/tables.py b/markdown/extensions/tables.py
index 1388cb5..3edaccf 100644
--- a/markdown/extensions/tables.py
+++ b/markdown/extensions/tables.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+from __future__ import unicode_literals
"""
Tables Extension for Python-Markdown
====================================
@@ -14,11 +14,13 @@ A simple example:
Copyright 2009 - [Waylan Limberg](http://achinghead.com)
"""
-import markdown
-from markdown.util import etree
+from __future__ import absolute_import
+from . import Extension
+from ..blockprocessors import BlockProcessor
+from ..util import etree
-class TableProcessor(markdown.blockprocessors.BlockProcessor):
+class TableProcessor(BlockProcessor):
""" Process Tables. """
def test(self, parent, block):
@@ -84,7 +86,7 @@ class TableProcessor(markdown.blockprocessors.BlockProcessor):
return row.split('|')
-class TableExtension(markdown.Extension):
+class TableExtension(Extension):
""" Add tables to Markdown. """
def extendMarkdown(self, md, md_globals):
diff --git a/markdown/extensions/toc.py b/markdown/extensions/toc.py
index 1d6639e..f50f11b 100644
--- a/markdown/extensions/toc.py
+++ b/markdown/extensions/toc.py
@@ -1,3 +1,4 @@
+from __future__ import unicode_literals
"""
Table of Contents Extension for Python-Markdown
* * *
@@ -8,10 +9,12 @@ Dependencies:
* [Markdown 2.1+](http://packages.python.org/Markdown/)
"""
-import markdown
-from markdown.util import etree
-from markdown.extensions.headerid import slugify, unique, itertext
+from __future__ import absolute_import
+from . import Extension
+from ..treeprocessors import Treeprocessor
+from ..util import etree
+from .headerid import slugify, unique, itertext
import re
@@ -77,7 +80,7 @@ def order_toc_list(toc_list):
return ordered_list
-class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
+class TocTreeprocessor(Treeprocessor):
# Iterator wrapper to get parent and child all at once
def iterparent(self, root):
@@ -182,7 +185,7 @@ class TocTreeprocessor(markdown.treeprocessors.Treeprocessor):
self.markdown.toc = toc
-class TocExtension(markdown.Extension):
+class TocExtension(Extension):
TreeProcessorClass = TocTreeprocessor
diff --git a/markdown/extensions/wikilinks.py b/markdown/extensions/wikilinks.py
index 5384adb..de4d9aa 100644
--- a/markdown/extensions/wikilinks.py
+++ b/markdown/extensions/wikilinks.py
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-
+from __future__ import unicode_literals
'''
WikiLinks Extension for Python-Markdown
======================================
@@ -78,7 +77,10 @@ Dependencies:
* [Markdown 2.0+](http://packages.python.org/Markdown/)
'''
-import markdown
+from __future__ import absolute_import
+from . import Extension
+from ..inlinepatterns import Pattern
+from ..util import etree
import re
def build_url(label, base, end):
@@ -87,7 +89,7 @@ def build_url(label, base, end):
return '%s%s%s'% (base, clean_label, end)
-class WikiLinkExtension(markdown.Extension):
+class WikiLinkExtension(Extension):
def __init__(self, configs):
# set extension defaults
self.config = {
@@ -111,9 +113,9 @@ class WikiLinkExtension(markdown.Extension):
md.inlinePatterns.add('wikilink', wikilinkPattern, "<not_strong")
-class WikiLinks(markdown.inlinepatterns.Pattern):
+class WikiLinks(Pattern):
def __init__(self, pattern, config):
- markdown.inlinepatterns.Pattern.__init__(self, pattern)
+ super(WikiLinks, self).__init__(pattern)
self.config = config
def handleMatch(self, m):
@@ -121,7 +123,7 @@ class WikiLinks(markdown.inlinepatterns.Pattern):
base_url, end_url, html_class = self._getMeta()
label = m.group(2).strip()
url = self.config['build_url'](label, base_url, end_url)
- a = markdown.util.etree.Element('a')
+ a = etree.Element('a')
a.text = label
a.set('href', url)
if html_class:
@@ -136,20 +138,14 @@ class WikiLinks(markdown.inlinepatterns.Pattern):
end_url = self.config['end_url']
html_class = self.config['html_class']
if hasattr(self.md, 'Meta'):
- if self.md.Meta.has_key('wiki_base_url'):
+ if 'wiki_base_url' in self.md.Meta:
base_url = self.md.Meta['wiki_base_url'][0]
- if self.md.Meta.has_key('wiki_end_url'):
+ if 'wiki_end_url' in self.md.Meta:
end_url = self.md.Meta['wiki_end_url'][0]
- if self.md.Meta.has_key('wiki_html_class'):
+ if 'wiki_html_class' in self.md.Meta:
html_class = self.md.Meta['wiki_html_class'][0]
return base_url, end_url, html_class
def makeExtension(configs=None) :
return WikiLinkExtension(configs=configs)
-
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
-