~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/xml_serializer.py

Added more docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
71
71
 
72
72
    def _read_element(self, f):
73
73
        return ElementTree().parse(f)
74
 
 
75
 
 
76
 
# performance tuning for elementree's serialiser. THis should be
77
 
# sent upstream - RBC 20060523.
78
 
# the functions here are patched into elementree at runtime.
79
 
import elementtree.ElementTree
80
 
import re
81
 
escape_re = re.compile("[&'\"<>]")
82
 
escape_map = {
83
 
    "&":'&amp;',
84
 
    "'":"&apos;", # FIXME: overkill
85
 
    "\"":"&quot;",
86
 
    "<":"&lt;",
87
 
    ">":"&gt;",
88
 
    }
89
 
def _escape_replace(match, map=escape_map):
90
 
    return map[match.group()]
91
 
 
92
 
def _escape_attrib(text, encoding=None, replace=None):
93
 
    # escape attribute value
94
 
    try:
95
 
        if encoding:
96
 
            try:
97
 
                text = elementtree.ElementTree._encode(text, encoding)
98
 
            except UnicodeError:
99
 
                return elementtree.ElementTree._encode_entity(text)
100
 
        if replace is None:
101
 
            return escape_re.sub(_escape_replace, text)
102
 
        else:
103
 
            text = replace(text, "&", "&amp;")
104
 
            text = replace(text, "'", "&apos;") # FIXME: overkill
105
 
            text = replace(text, "\"", "&quot;")
106
 
            text = replace(text, "<", "&lt;")
107
 
            text = replace(text, ">", "&gt;")
108
 
            return text
109
 
    except (TypeError, AttributeError):
110
 
        elementtree.ElementTree._raise_serialization_error(text)
111
 
 
112
 
elementtree.ElementTree._escape_attrib = _escape_attrib
113
 
 
114
 
escape_cdata_re = re.compile("[&<>]")
115
 
escape_cdata_map = {
116
 
    "&":'&amp;',
117
 
    "<":"&lt;",
118
 
    ">":"&gt;",
119
 
    }
120
 
def _escape_cdata_replace(match, map=escape_cdata_map):
121
 
    return map[match.group()]
122
 
 
123
 
def _escape_cdata(text, encoding=None, replace=None):
124
 
    # escape character data
125
 
    try:
126
 
        if encoding:
127
 
            try:
128
 
                text = elementtree.ElementTree._encode(text, encoding)
129
 
            except UnicodeError:
130
 
                return elementtree.ElementTree._encode_entity(text)
131
 
        if replace is None:
132
 
            return escape_cdata_re.sub(_escape_cdata_replace, text)
133
 
        else:
134
 
            text = replace(text, "&", "&amp;")
135
 
            text = replace(text, "<", "&lt;")
136
 
            text = replace(text, ">", "&gt;")
137
 
            return text
138
 
    except (TypeError, AttributeError):
139
 
        elementtree.ElementTree._raise_serialization_error(text)
140
 
 
141
 
elementtree.ElementTree._escape_cdata = _escape_cdata