X-Git-Url: https://git.sommitrealweird.co.uk/rss2maildir.git/blobdiff_plain/e6e6c337ac79ea307329843153e477f5f4f784c8..e7a1184b64e99278b75386776949a92f08033fab:/rss2maildir.py diff --git a/rss2maildir.py b/rss2maildir.py index 2af32bc..b0bc441 100755 --- a/rss2maildir.py +++ b/rss2maildir.py @@ -99,6 +99,7 @@ class HTML2Text(HTMLParser): self.ignorenodata = False self.listcount = [] self.urls = [] + self.images = {} HTMLParser.__init__(self) def handle_starttag(self, tag, attrs): @@ -187,16 +188,31 @@ class HTML2Text(HTMLParser): elif attr[0] == 'src': url = attr[1].decode('utf-8') if url: - self.curdata = self.curdata \ - + u' [img:' \ - + url if alt: - self.curdata = self.curdata \ - + u'(' \ - + alt \ - + u')' - self.curdata = self.curdata \ - + u']' + if self.images.has_key(alt): + if self.images[alt]["url"] == url: + self.curdata = self.curdata \ + + u'|%s|' %(alt,) + else: + while self.images.has_key(alt): + alt = alt + "_" + self.images[alt]["url"] = url + self.curdata = self.curdata \ + + u'|%s|' %(alt,) + else: + self.images[alt] = {} + self.images[alt]["url"] = url + self.curdata = self.curdata \ + + u'|%s|' %(alt,) + else: + if self.images.has_key(url): + self.curdata = self.curdata \ + + u'|%s|' %(url,) + else: + self.images[url] = {} + self.images[url]["url"] =url + self.curdata = self.curdata \ + + u'|%s|' %(url,) def handle_curdata(self): @@ -235,7 +251,7 @@ class HTML2Text(HTMLParser): if tag_thats_done in ["h1", "h2", "h3", "h4", "h5", "h6"]: underline = u'' underlinechar = u'=' - headingtext = self.curdata + headingtext = " ".join(self.curdata.split()) seperator = u'\n' + u' '*self.indentlevel headingtext = seperator.join( \ textwrap.wrap( \ @@ -260,7 +276,8 @@ class HTML2Text(HTMLParser): + underline elif tag_thats_done in [u'p', u'div']: paragraph = unicode( \ - self.curdata.strip().encode("utf-8"), "utf-8") + " ".join(self.curdata.strip().encode("utf-8").split()), \ + "utf-8") seperator = u'\n' + u' ' * self.indentlevel self.text = self.text \ + u' ' * self.indentlevel \ @@ -269,10 +286,11 @@ class HTML2Text(HTMLParser): paragraph, self.textwidth - self.indentlevel)) elif tag_thats_done == "pre": self.text = self.text + unicode( \ - self.curdata.encode("utf-8"), "utf-8") + " ".join(self.curdata.encode("utf-8").split()), "utf-8") elif tag_thats_done == u'blockquote': quote = unicode( \ - self.curdata.encode("utf-8").strip(), "utf-8") + " ".join(self.curdata.encode("utf-8").strip().split()), \ + "utf-8") seperator = u'\n' + u' ' * self.indentlevel + u'> ' if len(self.text) > 0 and self.text[-1] != u'\n': self.text = self.text + u'\n' @@ -324,7 +342,9 @@ class HTML2Text(HTMLParser): ) self.curdata = u'' elif tag_thats_done == u'dt': - definition = unicode(self.curdata.encode("utf-8").strip(), "utf-8") + definition = unicode(" ".join( \ + self.curdata.encode("utf-8").strip().split()), \ + "utf-8") if len(self.text) > 0 and self.text[-1] != u'\n': self.text = self.text + u'\n\n' elif len(self.text) > 1 and self.text[-2] != u'\n': @@ -337,7 +357,9 @@ class HTML2Text(HTMLParser): self.textwidth - self.indentlevel - 1)) self.curdata = u'' elif tag_thats_done == u'dd': - definition = unicode(self.curdata.encode("utf-8").strip(), "utf-8") + definition = unicode(" ".join( \ + self.curdata.encode("utf-8").strip().split()), + "utf-8") if len(definition) > 0: if len(self.text) > 0 and self.text[-1] != u'\n': self.text = self.text + u'\n' @@ -438,6 +460,12 @@ class HTML2Text(HTMLParser): if len(self.urls) > 0: self.text = self.text + u'\n__ ' + u'\n__ '.join(self.urls) + u'\n' self.urls = [] + if len(self.images.keys()) > 0: + self.text = self.text + u'\n.. ' \ + + u'.. '.join( \ + ["|%s| image:: %s" %(a, self.images[a]["url"]) \ + for a in self.images.keys()]) + u'\n' + self.images = {} return self.text def open_url(method, url):