111
113
return ElementTree().parse(f)
114
# performance tuning for elementree's serialiser. This should be
115
# sent upstream - RBC 20060523.
116
# the functions here are patched into elementtree at runtime.
118
escape_re = re.compile("[&'\"<>]")
121
"'":"'", # FIXME: overkill
126
def _escape_replace(match, map=escape_map):
127
return map[match.group()]
129
def _escape_attrib(text, encoding=None, replace=None):
130
# escape attribute value
134
text = elementtree.ElementTree._encode(text, encoding)
136
return elementtree.ElementTree._encode_entity(text)
138
return escape_re.sub(_escape_replace, text)
140
text = replace(text, "&", "&")
141
text = replace(text, "'", "'") # FIXME: overkill
142
text = replace(text, "\"", """)
143
text = replace(text, "<", "<")
144
text = replace(text, ">", ">")
146
except (TypeError, AttributeError):
147
elementtree.ElementTree._raise_serialization_error(text)
149
elementtree.ElementTree._escape_attrib = _escape_attrib
151
escape_cdata_re = re.compile("[&<>]")
157
def _escape_cdata_replace(match, map=escape_cdata_map):
158
return map[match.group()]
160
def _escape_cdata(text, encoding=None, replace=None):
161
# escape character data
165
text = elementtree.ElementTree._encode(text, encoding)
167
return elementtree.ElementTree._encode_entity(text)
169
return escape_cdata_re.sub(_escape_cdata_replace, text)
171
text = replace(text, "&", "&")
172
text = replace(text, "<", "<")
173
text = replace(text, ">", ">")
175
except (TypeError, AttributeError):
176
elementtree.ElementTree._raise_serialization_error(text)
178
elementtree.ElementTree._escape_cdata = _escape_cdata
181
116
def escape_invalid_chars(message):
182
117
"""Escape the XML-invalid characters in a commit message.