aboutsummaryrefslogtreecommitdiffstats
path: root/mdx_rss.py
diff options
context:
space:
mode:
authorYuri Takhteyev <yuri@freewisdom.org>2007-03-19 01:00:19 +0000
committerYuri Takhteyev <yuri@freewisdom.org>2007-03-19 01:00:19 +0000
commit5cb38949a5b9275cce80bc658ab62fd891d0687e (patch)
tree38ee2e064086bb3dce60b2d35a14564e93b36092 /mdx_rss.py
parent9f7a4f2f71c929c8a2154008b70b039450afcc85 (diff)
downloadmarkdown-5cb38949a5b9275cce80bc658ab62fd891d0687e.tar.gz
markdown-5cb38949a5b9275cce80bc658ab62fd891d0687e.tar.bz2
markdown-5cb38949a5b9275cce80bc658ab62fd891d0687e.zip
Added support for content inside CDATA.
Diffstat (limited to 'mdx_rss.py')
-rw-r--r--mdx_rss.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/mdx_rss.py b/mdx_rss.py
new file mode 100644
index 0000000..c15c9a0
--- /dev/null
+++ b/mdx_rss.py
@@ -0,0 +1,115 @@
+import markdown
+
+DEFAULT_URL = "http://www.freewisdom.org/projects/python-markdown/"
+DEFAULT_CREATOR = "Yuri Takhteyev"
+DEFAULT_TITLE = "Markdown in Python"
+GENERATOR = "http://www.freewisdom.org/projects/python-markdown/markdown2rss"
+
+month_map = { "Jan" : "01",
+ "Feb" : "02",
+ "March" : "03",
+ "April" : "04",
+ "May" : "05",
+ "June" : "06",
+ "July" : "07",
+ "August" : "08",
+ "September" : "09",
+ "October" : "10",
+ "November" : "11",
+ "December" : "12" }
+
+def get_time(heading) :
+
+ heading = heading.split("-")[0]
+ heading = heading.strip().replace(",", " ").replace(".", " ")
+
+ month, date, year = heading.split()
+ month = month_map[month]
+
+ return rdftime(" ".join((month, date, year, "12:00:00 AM")))
+
+def rdftime(time) :
+
+ time = time.replace(":", " ")
+ time = time.replace("/", " ")
+ time = time.split()
+ return "%s-%s-%sT%s:%s:%s-08:00" % (time[0], time[1], time[2],
+ time[3], time[4], time[5])
+
+
+def get_date(text) :
+ return "date"
+
+class RssExtension (markdown.Extension):
+
+ def extendMarkdown(self, md, md_globals) :
+
+ self.config = { 'URL' : [DEFAULT_URL, "Main URL"],
+ 'CREATOR' : [DEFAULT_CREATOR, "Feed creator's name"],
+ 'TITLE' : [DEFAULT_TITLE, "Feed title"] }
+
+ md.xml_mode = True
+
+ # Insert a post-processor that would actually add the title tag
+ postprocessor = RssPostProcessor(self)
+ postprocessor.ext = self
+ md.postprocessors.append(postprocessor)
+ md.stripTopLevelTags = 0
+ md.docType = '<?xml version="1.0" encoding="utf-8"?>\n'
+
+class RssPostProcessor (markdown.Postprocessor):
+
+ def __init__(self, md) :
+
+ pass
+
+ def run (self, doc) :
+
+ oldDocElement = doc.documentElement
+ rss = doc.createElement("rss")
+ rss.setAttribute('version', '2.0')
+
+ doc.appendChild(rss)
+
+ channel = doc.createElement("channel")
+ rss.appendChild(channel)
+ for tag, text in (("title", self.ext.getConfig("TITLE")),
+ ("link", self.ext.getConfig("URL")),
+ ("description", None)):
+ channel.appendChild(doc.createElement(tag, textNode = text))
+
+ for child in oldDocElement.childNodes :
+
+ if child.type == "element" :
+
+ if child.nodeName in ["h1", "h2", "h3", "h4", "h5"] :
+
+ heading = child.childNodes[0].value.strip()
+
+ item = doc.createElement("item")
+ channel.appendChild(item)
+ item.appendChild(doc.createElement("link",
+ self.ext.getConfig("URL")))
+
+ item.appendChild(doc.createElement("title", heading))
+ item.appendChild(doc.createElement("guid", heading))
+
+ elif child.nodeName in ["p"] :
+
+ description = doc.createElement("description")
+
+
+ content = "\n".join([node.toxml()
+ for node in child.childNodes])
+
+ cdata = doc.createCDATA(content)
+
+ description.appendChild(cdata)
+
+ if item :
+ item.appendChild(description)
+
+
+def makeExtension(configs) :
+
+ return RssExtension(configs)