toolkit: add NotifiablePluginBrowser
[enigma2-plugins.git] / toolkit / src / TagStrip.py
1 # -*- coding: utf-8 -*-
2 from re import sub, finditer
3
4 try:
5         import htmlentitydefs
6         iteritems = lambda d: d.iteritems()
7 except ImportError as ie:
8         from html import entities as htmlentitydefs
9         iteritems = lambda d: d.items()
10         unichr = chr
11
12 def strip_readable(html):
13         # Newlines are rendered as whitespace in html
14         html = html.replace('\n', ' ')
15
16         # Replace <br> by newlines
17         html = sub('<br(\s*/)?>', '\n', html)
18
19         # Replace <p>, <ul>, <ol> and end of these tags by newline
20         html = sub('</?(p|ul|ol)(\s+.*?)?>', '\n', html)
21
22         # Replace <li> by - and </li> by newline
23         html = sub('<li(\s+.*?)?>', '-', html)
24         html = html.replace('</li>', '\n')
25
26         # Replace </div> by newline
27         html = html.replace('</div>', '\n')
28
29         # And 'normal' stripping
30         return strip(html)
31
32 def strip(html):
33         # Strip remaining enclosed tags
34         html = sub('<.*?>', '', html)
35
36         # Multiple whitespaces are rendered as a single one
37         html = sub('[ \t\r\f\v]{2,}', ' ', html)
38         html = html.replace('\n ', '\n')
39
40         entitydict = {}
41
42         entities = finditer('&([^#]\D{1,5}?);', html)
43         for x in entities:
44                 key = x.group(0)
45                 if key not in entitydict:
46                         entitydict[key] = htmlentitydefs.name2codepoint[x.group(1)]
47
48         entities = finditer('&#x([0-9A-Fa-f]{2,2}?);', html)
49         for x in entities:
50                 key = x.group(0)
51                 if key not in entitydict:
52                         entitydict[key] = "%d" % int(key[3:5], 16)
53
54         entities = finditer('&#(\d{1,5}?);', html)
55         for x in entities:
56                 key = x.group(0)
57                 if key not in entitydict:
58                         entitydict[key] = x.group(1)
59
60         for key, codepoint in iteritems(entitydict):
61                 html = html.replace(key, unichr(int(codepoint)))
62
63         # Return result with leading/trailing whitespaces removed
64         return html.strip()
65