annotate roundup/cgi/TAL/TALDefs.py @ 4117:4d1fa6e1fe8c 1.4.8

release stuff
author Richard Jones <richard@users.sourceforge.net>
date Wed, 18 Mar 2009 03:39:58 +0000
parents 8c2402a78bb0
children 63868084b8bb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 ##############################################################################
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001, 2002 Zope Corporation and Contributors.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # All Rights Reserved.
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
5 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # This software is subject to the provisions of the Zope Public License,
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 # Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
11 # FOR A PARTICULAR PURPOSE.
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
12 #
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 ##############################################################################
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
14 # Modifications for Roundup:
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
15 # 1. commented out ITALES references
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 """
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
17 Common definitions used by TAL and METAL compilation an transformation.
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
18 """
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 from types import ListType, TupleType
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
22 #from ITALES import ITALESErrorInfo
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
23
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
24 TAL_VERSION = "1.4"
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 XML_NS = "http://www.w3.org/XML/1998/namespace" # URI for XML namespace
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 XMLNS_NS = "http://www.w3.org/2000/xmlns/" # URI for XML NS declarations
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 ZOPE_TAL_NS = "http://xml.zope.org/namespaces/tal"
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 ZOPE_METAL_NS = "http://xml.zope.org/namespaces/metal"
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
31 ZOPE_I18N_NS = "http://xml.zope.org/namespaces/i18n"
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
33 # This RE must exactly match the expression of the same name in the
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
34 # zope.i18n.simpletranslationservice module:
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
35 NAME_RE = "[a-zA-Z_][-a-zA-Z0-9_]*"
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 KNOWN_METAL_ATTRIBUTES = [
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 "define-macro",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 "use-macro",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 "define-slot",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 "fill-slot",
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
42 "slot",
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 ]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 KNOWN_TAL_ATTRIBUTES = [
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 "define",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 "condition",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 "content",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 "replace",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 "repeat",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 "attributes",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 "on-error",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 "omit-tag",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 "tal tag",
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 ]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
57 KNOWN_I18N_ATTRIBUTES = [
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
58 "translate",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
59 "domain",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
60 "target",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
61 "source",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
62 "attributes",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
63 "data",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
64 "name",
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
65 ]
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
66
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 class TALError(Exception):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 def __init__(self, msg, position=(None, None)):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 assert msg != ""
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 self.msg = msg
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 self.lineno = position[0]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self.offset = position[1]
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
74 self.filename = None
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
75
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
76 def setFile(self, filename):
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
77 self.filename = filename
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 def __str__(self):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 result = self.msg
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 if self.lineno is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 result = result + ", at line %d" % self.lineno
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 if self.offset is not None:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 result = result + ", column %d" % (self.offset + 1)
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
85 if self.filename is not None:
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
86 result = result + ', in file %s' % self.filename
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 return result
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 class METALError(TALError):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 class TALESError(TALError):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 pass
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
95 class I18NError(TALError):
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
96 pass
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
97
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
98
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 class ErrorInfo:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
101 #__implements__ = ITALESErrorInfo
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
102
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 def __init__(self, err, position=(None, None)):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 if isinstance(err, Exception):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 self.type = err.__class__
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 self.value = err
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 else:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 self.type = err
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 self.value = None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 self.lineno = position[0]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 self.offset = position[1]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
113
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
114
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 import re
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 _attr_re = re.compile(r"\s*([^\s]+)\s+([^\s].*)\Z", re.S)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 _subst_re = re.compile(r"\s*(?:(text|structure)\s+)?(.*)\Z", re.S)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 del re
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
120 def parseAttributeReplacements(arg, xml):
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 dict = {}
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 for part in splitParts(arg):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 m = _attr_re.match(part)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 if not m:
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
125 raise TALError("Bad syntax in attributes: " + `part`)
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 name, expr = m.group(1, 2)
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
127 if not xml:
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
128 name = name.lower()
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 if dict.has_key(name):
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
130 raise TALError("Duplicate attribute name in attributes: " + `part`)
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 dict[name] = expr
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 return dict
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 def parseSubstitution(arg, position=(None, None)):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 m = _subst_re.match(arg)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 if not m:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 raise TALError("Bad syntax in substitution text: " + `arg`, position)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 key, expr = m.group(1, 2)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 if not key:
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 key = "text"
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 return key, expr
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 def splitParts(arg):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 # Break in pieces at undoubled semicolons and
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 # change double semicolons to singles:
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
146 arg = arg.replace(";;", "\0")
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
147 parts = arg.split(';')
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
148 parts = [p.replace("\0", ";") for p in parts]
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
149 if len(parts) > 1 and not parts[-1].strip():
1049
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 del parts[-1] # It ended in a semicolon
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 return parts
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 def isCurrentVersion(program):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 version = getProgramVersion(program)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 return version == TAL_VERSION
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 def getProgramMode(program):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 version = getProgramVersion(program)
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 if (version == TAL_VERSION and isinstance(program[1], TupleType) and
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 len(program[1]) == 2):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 opcode, mode = program[1]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 if opcode == "mode":
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 return mode
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 return None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 def getProgramVersion(program):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 if (len(program) >= 2 and
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 isinstance(program[0], TupleType) and len(program[0]) == 2):
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 opcode, version = program[0]
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 if opcode == "version":
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 return version
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 return None
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173
2348
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
174 import re
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
175 _ent1_re = re.compile('&(?![A-Z#])', re.I)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
176 _entch_re = re.compile('&([A-Z][A-Z0-9]*)(?![A-Z0-9;])', re.I)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
177 _entn1_re = re.compile('&#(?![0-9X])', re.I)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
178 _entnx_re = re.compile('&(#X[A-F0-9]*)(?![A-F0-9;])', re.I)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
179 _entnd_re = re.compile('&(#[0-9][0-9]*)(?![0-9;])')
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
180 del re
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
181
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
182 def attrEscape(s):
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
183 """Replace special characters '&<>' by character entities,
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
184 except when '&' already begins a syntactically valid entity."""
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
185 s = _ent1_re.sub('&amp;', s)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
186 s = _entch_re.sub(r'&amp;\1', s)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
187 s = _entn1_re.sub('&amp;#', s)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
188 s = _entnx_re.sub(r'&amp;\1', s)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
189 s = _entnd_re.sub(r'&amp;\1', s)
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
190 s = s.replace('<', '&lt;')
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
191 s = s.replace('>', '&gt;')
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
192 s = s.replace('"', '&quot;')
8c2402a78bb0 beginning getting ZPT up to date: TAL first
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
193 return s

Roundup Issue Tracker: http://roundup-tracker.org/