1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
|
########################################################################
#
# File Name: __init__.py
#
#
"""
WWW: http://4suite.org/4XSLT e-mail: support@4suite.org
Copyright (c) 2000, 2001 Fourthought Inc, USA. All Rights Reserved.
See http://4suite.com/COPYRIGHT for license and copyright information
"""
XSL_NAMESPACE='http://www.w3.org/1999/XSL/Transform'
import xml.dom
from xml import xpath
from xml.xpath import g_xpathRecognizedNodes
SyntaxException = xpath.SyntaxException
InternalException = SyntaxException # not used
g_extElements = {}
g_xsltRecognizedNodes = g_xpathRecognizedNodes + [xml.dom.Node.DOCUMENT_FRAGMENT_NODE]
# Define ReleaseNode in a DOM-independent way
import xml.dom.ext
import xml.dom.minidom
def _releasenode(n):
if isinstance(n, xml.dom.minidom.Node):
n.unlink()
else:
xml.dom.ext.ReleaseNode(n)
try:
from Ft.Lib import pDomlette
def ReleaseNode(n):
if isinstance(n, pDomlette.Node):
pDomlette.ReleaseNode(n)
else:
_releasenode(n)
_XsltElementBase = pDomlette.Element
except ImportError:
ReleaseNode = _releasenode
from minisupport import _XsltElementBase
def RegisterExtensionModules(moduleNames, moduleList=g_extElements):
mod_names = moduleNames[:]
mods = []
for mod_name in mod_names:
module_used = 0
if mod_name:
mod = __import__(mod_name, {}, {}, ['ExtElements', 'ExtFunctions'])
if hasattr(mod, 'ExtFunctions'):
xpath.g_extFunctions.update(mod.ExtFunctions)
module_used = 1
if hasattr(mod, 'ExtElements'):
moduleList.update(mod.ExtElements)
module_used = 1
module_used and mods.append(mod)
return mods
class XsltException(Exception):
def __init__(self, errorCode, *args):
self.args = args
self.errorCode = errorCode
Exception.__init__(self, MessageSource.g_errorMessages[errorCode]%args)
class XsltElement(_XsltElementBase):
def __init__(self, doc, uri, localName, prefix, baseUri):
_XsltElementBase.__init__(self, doc, uri, localName, prefix)
self.baseUri = baseUri
def setup(self):
self._nss = xml.dom.ext.GetAllNs(self)
return
def instantiate(self, context, processor):
for child in self.childNodes:
if (child.namespaceURI, child.localName) == (XSL_NAMESPACE, 'fallback'):
child.instantiate(context, processor)
return (context,)
def __getinitargs__(self):
return (None, self.namespaceURI, self.localName, self.prefix, self.baseUri)
def __getstate__(self):
base_state = _XsltElementBase.__getstate__(self)
new_state = (base_state, self.baseUri,)
return new_state
return base_state
def __setstate__(self, state):
_XsltElementBase.__setstate__(self, state[0])
self.baseUri = state[1]
return
class Error:
INTERNAL_ERROR = 1
PATTERN_SYNTAX = 2
PATTERN_SEMANTIC = 3
NO_STYLESHEET = 4
AVT_SYNTAX = 5
STYLESHEET_MISSING_VERSION = 6
STYLESHEET_MISSING_VERSION_NOTE1 = 7
STYLESHEET_PARSE_ERROR = 8
SOURCE_PARSE_ERROR = 9
TOP_LEVEL_ELEM_WITH_NULL_NS = 10
XSLT_ILLEGAL_ATTR = 11
XSLT_ILLEGAL_ELEMENT = 12
STYLESHEET_ILLEGAL_ROOT = 13
CIRCULAR_VAR = 14
WHEN_AFTER_OTHERWISE = 111
MULTIPLE_OTHERWISE = 112
APPLYIMPORTS_WITH_NULL_CURR_TPL = 120
#xsl:import
ILLEGAL_IMPORT = 130
#xsl:choose
ILLEGAL_CHOOSE_CHILD = 140
CHOOSE_REQUIRES_WHEN_CHILD = 141
CHOOSE_WHEN_AFTER_OTHERWISE = 142
CHOOSE_MULTIPLE_OTHERWISE = 143
#xsl:call-template
ILLEGAL_CALLTEMPLATE_CHILD = 150
#xsl:template
ILLEGAL_TEMPLATE_PRIORITY = 160
#xsl:attribute
ATTRIBUTE_ADDED_AFTER_ELEMENT = 170
ATTRIBUTE_MISSING_NAME = 171
#xsl:element
UNDEFINED_ATTRIBUTE_SET = 180
#xsl:for-each
INVALID_FOREACH_SELECT = 190
#xsl:value-of
VALUEOF_MISSING_SELECT = 200
#xsl:copy-of
COPYOF_MISSING_SELECT = 210
#xsl:text
ILLEGAL_TEXT_CHILD = 220
#xsl:apply-template
ILLEGAL_APPLYTEMPLATE_CHILD = 230
#xsl:when
WHEN_MISSING_TEST = 240
#xsl:attribute-set
ILLEGAL_ATTRIBUTESET_CHILD = 250
ATTRIBUTESET_REQUIRES_NAME = 251
INVALID_PATTERN = 1000
INVALID_OPERAND_IN_PATTERN = 1001
INVALID_OPERAND_ID = 1002
INVALID_OPERAND_SREL = 1003
INVALID_OPERAND_REL = 1004
INVALID_OPERAND_IDREL = 1005
INVALID_LEFT_OR_RIGHT_OPERAND_S = 1006
INVALID_LEFT_OR_RIGHT_OPERAND_RELP = 1007
INVALID_AXIS_SPEC = 1008
INVALID_NODE_TEST = 1009
INVALID_PREDICATE_LIST = 1010
ILLEGAL_SORT_DATA_TYPE_VALUE = 2010
ILLEGAL_SORT_CASE_ORDER_VALUE = 2011
ILLEGAL_SORT_ORDER_VALUE = 2012
ILLEGAL_NUMBER_GROUPING_SIZE_VALUE = 2020
ILLEGAL_NUMBER_LEVEL_VALUE = 2021
ILLEGAL_NUMBER_LETTER_VALUE_VALUE = 2022
ILLEGAL_NUMBER_FORMAT_VALUE = 2023
INVALID_NAMESPACE_ALIAS = 2030
WRONG_NUMBER_OF_ARGUMENTS = 5000
WRONG_ARGUMENT_TYPE = 5001
RESTRICTED_OUTPUT_VIOLATION = 7000
FEATURE_NOT_SUPPORTED = 9999
STYLESHEET_REQUESTED_TERMINATION = 10000
class OutputParameters:
def __init__(self):
#Initialize with defaults according to spec
self.method = None
self.version = "1.0"
self.encoding = ""
self.omitXmlDeclaration = 'no'
self.standalone = None
self.doctypeSystem = ''
self.doctypePublic = ''
self.mediaType = None
self.cdataSectionElements = []
self.indent = None
g_registered = 0
def Register():
import os,string
from xml.xslt import XsltFunctions, BuiltInExtElements
xpath.g_extFunctions.update(XsltFunctions.ExtFunctions)
if os.environ.has_key('EXTMODULES'):
RegisterExtensionModules(
string.split(os.environ["EXTMODULES"], ':')
)
g_extElements.update(BuiltInExtElements.ExtElements)
global g_registered
g_registered = 1
def Init():
pass
Init()
import MessageSource
|