annotate genshi/util.py @ 902:09cc3627654c experimental-inline

Sync `experimental/inline` branch with [source:trunk@1126].
author cmlenz
date Fri, 23 Apr 2010 21:08:26 +0000
parents 1837f39efd6f
children
rev   line source
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
2 #
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
3 # Copyright (C) 2006-2009 Edgewall Software
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
4 # All rights reserved.
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
5 #
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
6 # This software is licensed as described in the file COPYING, which
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
7 # you should have received as part of this distribution. The terms
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
8 # are also available at http://genshi.edgewall.org/wiki/License.
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
9 #
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
10 # This software consists of voluntary contributions made by many
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
11 # individuals. For the exact contribution history, see the revision
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
12 # history and logs, available at http://genshi.edgewall.org/log/.
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
13
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
14 """Various utility classes and functions."""
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
15
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
16 import htmlentitydefs as entities
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
17 import re
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
18
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
19 __docformat__ = 'restructuredtext en'
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
20
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
21
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
22 class LRUCache(dict):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
23 """A dictionary-like object that stores only a certain number of items, and
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
24 discards its least recently used item when full.
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
25
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
26 >>> cache = LRUCache(3)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
27 >>> cache['A'] = 0
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
28 >>> cache['B'] = 1
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
29 >>> cache['C'] = 2
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
30 >>> len(cache)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
31 3
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
32
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
33 >>> cache['A']
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
34 0
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
35
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
36 Adding new items to the cache does not increase its size. Instead, the least
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
37 recently used item is dropped:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
38
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
39 >>> cache['D'] = 3
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
40 >>> len(cache)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
41 3
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
42 >>> 'B' in cache
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
43 False
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
44
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
45 Iterating over the cache returns the keys, starting with the most recently
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
46 used:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
47
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
48 >>> for key in cache:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
49 ... print(key)
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
50 D
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
51 A
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
52 C
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
53
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
54 This code is based on the LRUCache class from ``myghtyutils.util``, written
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
55 by Mike Bayer and released under the MIT license. See:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
56
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
57 http://svn.myghty.org/myghtyutils/trunk/lib/myghtyutils/util.py
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
58 """
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
59
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
60 class _Item(object):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
61 def __init__(self, key, value):
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
62 self.prv = self.nxt = None
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
63 self.key = key
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
64 self.value = value
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
65 def __repr__(self):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
66 return repr(self.value)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
67
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
68 def __init__(self, capacity):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
69 self._dict = dict()
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
70 self.capacity = capacity
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
71 self.head = None
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
72 self.tail = None
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
73
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
74 def __contains__(self, key):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
75 return key in self._dict
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
76
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
77 def __iter__(self):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
78 cur = self.head
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
79 while cur:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
80 yield cur.key
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
81 cur = cur.nxt
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
82
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
83 def __len__(self):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
84 return len(self._dict)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
85
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
86 def __getitem__(self, key):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
87 item = self._dict[key]
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
88 self._update_item(item)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
89 return item.value
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
90
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
91 def __setitem__(self, key, value):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
92 item = self._dict.get(key)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
93 if item is None:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
94 item = self._Item(key, value)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
95 self._dict[key] = item
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
96 self._insert_item(item)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
97 else:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
98 item.value = value
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
99 self._update_item(item)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
100 self._manage_size()
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
101
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
102 def __repr__(self):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
103 return repr(self._dict)
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
104
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
105 def _insert_item(self, item):
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
106 item.prv = None
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
107 item.nxt = self.head
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
108 if self.head is not None:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
109 self.head.prv = item
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
110 else:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
111 self.tail = item
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
112 self.head = item
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
113 self._manage_size()
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
114
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
115 def _manage_size(self):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
116 while len(self._dict) > self.capacity:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
117 olditem = self._dict[self.tail.key]
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
118 del self._dict[self.tail.key]
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
119 if self.tail != self.head:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
120 self.tail = self.tail.prv
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
121 self.tail.nxt = None
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
122 else:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
123 self.head = self.tail = None
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
124
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
125 def _update_item(self, item):
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
126 if self.head == item:
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
127 return
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
128
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
129 prv = item.prv
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
130 prv.nxt = item.nxt
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
131 if item.nxt is not None:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
132 item.nxt.prv = prv
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
133 else:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
134 self.tail = prv
274
c5ec3146fcb6 Use an LRU cache for caching parsed templates in the `TemplateLoader`. LRU cache implementation is a simplified version of the `LRUCache` class in [http://www.myghty.org/ Myghty].
cmlenz
parents:
diff changeset
135
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
136 item.prv = None
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
137 item.nxt = self.head
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
138 self.head.prv = self.head = item
358
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
139
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
140
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
141 def flatten(items):
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
142 """Flattens a potentially nested sequence into a flat list.
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
143
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
144 :param items: the sequence to flatten
358
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
145
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
146 >>> flatten((1, 2))
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
147 [1, 2]
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
148 >>> flatten([1, (2, 3), 4])
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
149 [1, 2, 3, 4]
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
150 >>> flatten([1, (2, [3, 4]), 5])
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
151 [1, 2, 3, 4, 5]
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
152 """
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
153 retval = []
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
154 for item in items:
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
155 if isinstance(item, (frozenset, list, set, tuple)):
358
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
156 retval += flatten(item)
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
157 else:
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
158 retval.append(item)
028a9a50d95a inline branch: Merged [437].
cmlenz
parents: 274
diff changeset
159 return retval
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
160
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
161
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
162 def plaintext(text, keeplinebreaks=True):
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
163 """Return the text with all entities and tags removed.
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
164
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
165 >>> plaintext('<b>1 &lt; 2</b>')
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
166 u'1 < 2'
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
167
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
168 The `keeplinebreaks` parameter can be set to ``False`` to replace any line
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
169 breaks by simple spaces:
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
170
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
171 >>> plaintext('''<b>1
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
172 ... &lt;
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
173 ... 2</b>''', keeplinebreaks=False)
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
174 u'1 < 2'
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
175
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
176 :param text: the text to convert to plain text
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
177 :param keeplinebreaks: whether line breaks in the text should be kept intact
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
178 :return: the text with tags and entities removed
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
179 """
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
180 text = stripentities(striptags(text))
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
181 if not keeplinebreaks:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
182 text = text.replace('\n', ' ')
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
183 return text
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
184
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
185
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
186 _STRIPENTITIES_RE = re.compile(r'&(?:#((?:\d+)|(?:[xX][0-9a-fA-F]+));?|(\w+);)')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
187 def stripentities(text, keepxmlentities=False):
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
188 """Return a copy of the given text with any character or numeric entities
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
189 replaced by the equivalent UTF-8 characters.
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
190
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
191 >>> stripentities('1 &lt; 2')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
192 u'1 < 2'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
193 >>> stripentities('more &hellip;')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
194 u'more \u2026'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
195 >>> stripentities('&#8230;')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
196 u'\u2026'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
197 >>> stripentities('&#x2026;')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
198 u'\u2026'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
199
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
200 If the `keepxmlentities` parameter is provided and is a truth value, the
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
201 core XML entities (&amp;, &apos;, &gt;, &lt; and &quot;) are left intact.
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
202
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
203 >>> stripentities('1 &lt; 2 &hellip;', keepxmlentities=True)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
204 u'1 &lt; 2 \u2026'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
205 """
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
206 def _replace_entity(match):
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
207 if match.group(1): # numeric entity
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
208 ref = match.group(1)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
209 if ref.startswith('x'):
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
210 ref = int(ref[1:], 16)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
211 else:
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
212 ref = int(ref, 10)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
213 return unichr(ref)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
214 else: # character entity
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
215 ref = match.group(2)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
216 if keepxmlentities and ref in ('amp', 'apos', 'gt', 'lt', 'quot'):
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
217 return '&%s;' % ref
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
218 try:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
219 return unichr(entities.name2codepoint[ref])
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
220 except KeyError:
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
221 if keepxmlentities:
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
222 return '&amp;%s;' % ref
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
223 else:
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
224 return ref
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
225 return _STRIPENTITIES_RE.sub(_replace_entity, text)
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
226
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
227
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
228 _STRIPTAGS_RE = re.compile(r'(<!--.*?-->|<[^>]*>)')
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
229 def striptags(text):
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
230 """Return a copy of the text with any XML/HTML tags removed.
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
231
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
232 >>> striptags('<span>Foo</span> bar')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
233 'Foo bar'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
234 >>> striptags('<span class="bar">Foo</span>')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
235 'Foo'
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
236 >>> striptags('Foo<br />')
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
237 'Foo'
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
238
820
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
239 HTML/XML comments are stripped, too:
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
240
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
241 >>> striptags('<!-- <blub>hehe</blah> -->test')
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
242 'test'
1837f39efd6f Sync (old) experimental inline branch with trunk@1027.
cmlenz
parents: 500
diff changeset
243
500
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
244 :param text: the string to remove tags from
0742f421caba Merged revisions 487-603 via svnmerge from
cmlenz
parents: 398
diff changeset
245 :return: the text with tags removed
398
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
246 """
49aa525b8f83 inline branch: Merged [480:486/trunk].
cmlenz
parents: 358
diff changeset
247 return _STRIPTAGS_RE.sub('', text)
902
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
248
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
249
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
250 def stringrepr(string):
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
251 ascii = string.encode('ascii', 'backslashreplace')
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
252 quoted = "'" + ascii.replace("'", "\\'") + "'"
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
253 if len(ascii) > len(string):
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
254 return 'u' + quoted
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
255 return quoted
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
256
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
257
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
258 # Compatibility fallback implementations for older Python versions
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
259
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
260 try:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
261 all = all
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
262 any = any
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
263 except NameError:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
264 def any(S):
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
265 for x in S:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
266 if x:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
267 return True
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
268 return False
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
269
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
270 def all(S):
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
271 for x in S:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
272 if not x:
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
273 return False
09cc3627654c Sync `experimental/inline` branch with [source:trunk@1126].
cmlenz
parents: 820
diff changeset
274 return True
Copyright (C) 2012-2017 Edgewall Software