diff options
author | Yuri Takhteyev <yuri@freewisdom.org> | 2008-08-15 10:40:52 -0700 |
---|---|---|
committer | Yuri Takhteyev <yuri@freewisdom.org> | 2008-08-15 10:40:52 -0700 |
commit | 5e3d88cf03303c52956f258898def2cd6a294674 (patch) | |
tree | 7899797058a8ee712664eaad062824b5c9e2f716 /markdown_extensions/tables.py | |
parent | 3a78823a59e9d0c89d541b2bd259ecfc55aef2cd (diff) | |
parent | 88c72d709be87321b736778d19d9277db02422a8 (diff) | |
download | markdown-5e3d88cf03303c52956f258898def2cd6a294674.tar.gz markdown-5e3d88cf03303c52956f258898def2cd6a294674.tar.bz2 markdown-5e3d88cf03303c52956f258898def2cd6a294674.zip |
Merge branch 'master' of git@gitorious.org:python-markdown/mainline
Diffstat (limited to 'markdown_extensions/tables.py')
-rw-r--r-- | markdown_extensions/tables.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/markdown_extensions/tables.py b/markdown_extensions/tables.py new file mode 100644 index 0000000..829044c --- /dev/null +++ b/markdown_extensions/tables.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python + +""" +Table extension for Python-Markdown +""" + +import markdown +from markdown import etree + +class TablePattern(markdown.Pattern) : + def __init__ (self, md): + markdown.Pattern.__init__(self, r'(^|\n)\|([^\n]*)\|') + self.md = md + + def handleMatch(self, m): + + # a single line represents a row + tr = etree.Element('tr') + + # chunks between pipes represent cells + + for t in m.group(3).split('|'): + + if len(t) >= 2 and t.startswith('*') and t.endswith('*'): + # if a cell is bounded by asterisks, it is a <th> + td = etree.Element('th') + t = t[1:-1] + else: + # otherwise it is a <td> + td = etree.Element('td') + + # add text ot inline section, later it will be + # processed by core + inline = etree.SubElement(td, "inline") + inline.text = t + + tr.append(td) + tr.tail = "\n" + + return tr + + +class TablePostprocessor: + + def _findElement(self, element, name): + result = [] + for child in element: + if child.tag == name: + result.append(child) + result += self._findElement(child, name) + return result + + def run(self, root): + + for element in self._findElement(root, "p"): + for child in element: + if child.tail: + element.tag = "table" + break + + + + +class TableExtension(markdown.Extension): + def extendMarkdown(self, md, md_globals): + md.inlinePatterns.insert(0, TablePattern(md)) + md.postprocessors.append(TablePostprocessor()) + + +def makeExtension(configs): + return TableExtension(configs) + |