#!/usr/bin/python

import common
import re

base_template = '''\
<?xml version="1.0" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:idealog="http://www.idealog.info/rss/idealog/"
  xmlns="http://purl.org/rss/1.0/"
>

<channel rdf:about="http://tom.idealog.info/">
  <title>Intermediate Form</title>
  <link>http://tom.idealog.info/</link>
  <idealog:divclass>tom</idealog:divclass>
  <idealog:name>Tom</idealog:name>

  <description>
    Intermediate Form blog, a grad student writing about current events, computer science, and whatever else interests him.
  </description>

  <items>
    <rdf:Seq>
%(seq)s
    </rdf:Seq>
  </items>
</channel>

%(items)s

</rdf:RDF>
'''

standard_template = '''\
<item rdf:about="%(url)s">
  <title>%(title)s</title>
  <link>%(url)s</link>
  <description>
%(description)s
  </description>
  <dc:date>%(rssdate)s</dc:date>
</item>
'''

idealog_template = '''\
<item rdf:about="%(url)s">
  <title>%(title)s</title>
  <link>%(url)s</link>
  <content:encoded><![CDATA[<p>%(body)s</p>]]></content:encoded>
  <dc:date>%(rssdate)s</dc:date>
</item>
'''

seq_template = '''\
      <rdf:li rdf:resource="%(url)s" />
'''

def description(text):
    lines = text.split("\n")[1:]

    rv = [ ]
    count = 0

    for l in lines:

        if count >= 5:
            continue

        if re.match(r"\s*$", l):
            rv.append(l)
            continue

        if re.match(r"(\w+ )?http://", l):
            continue

        count += 1

        if re.search(r"<spoiler", l):
            break

        if re.search(r"<.?blockquote", l):
            count -= 1

        l = l.replace("\\&", "&amp;")
        l = l.replace("\\<", "&lt;")
        l = l.replace("\\<", "&gt;")
        l = l.replace("\\\"", "\"")
        l = l.replace("\\\\", "\\")

        l = re.sub(r"<blockquote.*?>", r"[quote]", l)
        l = re.sub(r"</blockquote.*?>", r"[end quote]", l)

        l = re.sub(r"<.*?>", " ", l)
        l = re.sub(r"<.*?$", "", l)

        rv.append(l)

    return "\n".join(rv) + "..."
        

def rss(post_template):

    items = ""
    seq = ""
    
    for bp in common.blog_posts(common.front_page_posts):
        subs = bp.subs()

        subs['description'] = description(bp.text)
        subs['url'] = "http://tom.idealog.info/blog/%s" % bp.permalink

        items += post_template % subs
        seq += seq_template % subs

    subs = {
        'items' : items,
        'seq' : seq,
        }

    return base_template % subs

def main():
    f = file(common.webdir + "/rss.xml", "w")
    f.write(rss(standard_template))
    f.close()

    f = file(common.webdir + "/rss_idealog.xml", "w")
    f.write(rss(idealog_template))
    f.close()


if __name__ == "__main__":
    main()

