aboutsummaryrefslogtreecommitdiffstats
path: root/markdown_extensions/tables.py
diff options
context:
space:
mode:
authorYuri Takhteyev <yuri@freewisdom.org>2008-08-15 10:40:52 -0700
committerYuri Takhteyev <yuri@freewisdom.org>2008-08-15 10:40:52 -0700
commit5e3d88cf03303c52956f258898def2cd6a294674 (patch)
tree7899797058a8ee712664eaad062824b5c9e2f716 /markdown_extensions/tables.py
parent3a78823a59e9d0c89d541b2bd259ecfc55aef2cd (diff)
parent88c72d709be87321b736778d19d9277db02422a8 (diff)
downloadmarkdown-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.py72
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)
+