Mercurial > piecrust2
comparison piecrust/admin/textutil.py @ 778:5e91bc0e3b4d
internal: Move admin panel code into the piecrust package.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 16 Jul 2016 15:02:24 +0200 |
parents | foodtruck/textutil.py@2713b54b5d76 |
children |
comparison
equal
deleted
inserted
replaced
777:8d633ca59bc5 | 778:5e91bc0e3b4d |
---|---|
1 from html.parser import HTMLParser | |
2 | |
3 | |
4 def text_preview(txt, length=100, *, max_length=None, offset=0): | |
5 max_length = max_length or (length + 50) | |
6 extract = txt[offset:offset + length] | |
7 if len(txt) > offset + length: | |
8 for i in range(offset + length, | |
9 min(offset + max_length, len(txt))): | |
10 c = txt[i] | |
11 if c not in [' ', '\t', '\r', '\n']: | |
12 extract += c | |
13 else: | |
14 extract += '...' | |
15 break | |
16 return extract | |
17 | |
18 | |
19 class MLStripper(HTMLParser): | |
20 def __init__(self): | |
21 super(MLStripper, self).__init__() | |
22 self.reset() | |
23 self.strict = False | |
24 self.convert_charrefs = True | |
25 self.fed = [] | |
26 | |
27 def handle_data(self, d): | |
28 self.fed.append(d) | |
29 | |
30 def handle_entityref(self, name): | |
31 self.fed.append('&%s;' % name) | |
32 | |
33 def get_data(self): | |
34 return ''.join(self.fed) | |
35 | |
36 | |
37 def html_to_text(html): | |
38 s = MLStripper() | |
39 s.feed(html) | |
40 return s.get_data() | |
41 |