wirispluginengine 3.62.0.1322 → 7.14.0.1422
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +34 -34
- data/app/assets/javascripts/wirispluginengine/WIRISplugins.js +1040 -64
- data/app/controllers/wirispluginengine/application_controller.rb +84 -75
- data/app/helpers/wirispluginengine/application_helper.rb +4 -4
- data/config/routes.rb +4 -4
- data/lib/com/wiris/common/WInteger.rb +52 -51
- data/lib/com/wiris/plugin/api/Cas.rb +5 -5
- data/lib/com/wiris/plugin/api/CleanCache.rb +5 -5
- data/lib/com/wiris/plugin/api/Configuration.rb +5 -5
- data/lib/com/wiris/plugin/api/ConfigurationKeys.rb +94 -91
- data/lib/com/wiris/plugin/api/Editor.rb +5 -5
- data/lib/com/wiris/plugin/api/Filter.rb +5 -5
- data/lib/com/wiris/plugin/api/ImageFormatController.rb +5 -5
- data/lib/com/wiris/plugin/api/ParamsProvider.rb +5 -5
- data/lib/com/wiris/plugin/api/PluginBuilder.rb +88 -74
- data/lib/com/wiris/plugin/api/Render.rb +5 -5
- data/lib/com/wiris/plugin/api/ServiceResourceLoader.rb +5 -5
- data/lib/com/wiris/plugin/api/Test.rb +5 -5
- data/lib/com/wiris/plugin/api/TextService.rb +5 -5
- data/lib/com/wiris/plugin/configuration/ConfigurationUpdater.rb +5 -5
- data/lib/com/wiris/plugin/impl/CacheFormulaImpl.rb +15 -0
- data/lib/com/wiris/plugin/impl/CacheImpl.rb +124 -0
- data/lib/com/wiris/plugin/impl/CasImpl.rb +140 -138
- data/lib/com/wiris/plugin/impl/CleanCacheImpl.rb +103 -101
- data/lib/com/wiris/plugin/impl/ConfigurationImpl.rb +165 -166
- data/lib/com/wiris/plugin/impl/CustomConfigurationUpdater.rb +32 -30
- data/lib/com/wiris/plugin/impl/DefaultConfigurationUpdater.rb +24 -22
- data/lib/com/wiris/plugin/impl/EditorImpl.rb +80 -78
- data/lib/com/wiris/plugin/impl/FileConfigurationUpdater.rb +29 -27
- data/lib/com/wiris/plugin/impl/FileStorageAndCache.rb +55 -53
- data/lib/com/wiris/plugin/impl/FolderTreeStorageAndCache.rb +65 -134
- data/lib/com/wiris/plugin/impl/GenericParamsProviderImpl.rb +50 -48
- data/lib/com/wiris/plugin/impl/HttpImpl.rb +49 -48
- data/lib/com/wiris/plugin/impl/HttpListener.rb +5 -5
- data/lib/com/wiris/plugin/impl/ImageFormatControllerPng.rb +71 -63
- data/lib/com/wiris/plugin/impl/ImageFormatControllerSvg.rb +37 -28
- data/lib/com/wiris/plugin/impl/PluginBuilderImpl.rb +280 -248
- data/lib/com/wiris/plugin/impl/RenderImpl.rb +303 -257
- data/lib/com/wiris/plugin/impl/ServiceResourceLoaderImpl.rb +41 -39
- data/lib/com/wiris/plugin/impl/TestImpl.rb +177 -157
- data/lib/com/wiris/plugin/impl/TextFilter.rb +210 -194
- data/lib/com/wiris/plugin/impl/TextFilterTags.rb +57 -50
- data/lib/com/wiris/plugin/impl/TextServiceImpl.rb +158 -107
- data/lib/com/wiris/plugin/storage/StorageAndCache.rb +5 -5
- data/lib/com/wiris/util/json/JSon.rb +505 -493
- data/lib/com/wiris/util/json/JSonIntegerFormat.rb +17 -16
- data/lib/com/wiris/util/json/JsonAPIResponse.rb +70 -0
- data/lib/com/wiris/util/json/StringParser.rb +57 -56
- data/lib/com/wiris/util/sys/AccessProvider.rb +8 -0
- data/lib/com/wiris/util/sys/Cache.rb +8 -0
- data/lib/com/wiris/util/sys/HttpConnection.rb +14 -13
- data/lib/com/wiris/util/sys/HttpConnectionListener.rb +5 -5
- data/lib/com/wiris/util/sys/HttpSync.rb +28 -0
- data/lib/com/wiris/util/sys/IniFile.rb +132 -131
- data/lib/com/wiris/util/sys/Lock.rb +8 -0
- data/lib/com/wiris/util/sys/LockProvider.rb +8 -0
- data/lib/com/wiris/util/sys/Store.rb +126 -101
- data/lib/com/wiris/util/sys/StoreCache.rb +63 -0
- data/lib/com/wiris/util/sys/TimerProxy.rb +21 -0
- data/lib/com/wiris/util/sys/TimerTask.rb +8 -0
- data/lib/com/wiris/util/type/Arrays.rb +275 -0
- data/lib/com/wiris/util/type/ByteBuffer.rb +69 -0
- data/lib/com/wiris/util/type/Comparator.rb +8 -0
- data/lib/com/wiris/util/type/DataUtils.rb +24 -0
- data/lib/com/wiris/util/type/DoubleTools.rb +14 -0
- data/lib/com/wiris/util/type/HashCache.rb +43 -0
- data/lib/com/wiris/util/type/IntegerTools.rb +32 -0
- data/lib/com/wiris/util/type/Queue.rb +31 -0
- data/lib/com/wiris/util/type/SortArrayByStringLength.rb +26 -0
- data/lib/com/wiris/util/type/SortStringByLength.rb +26 -0
- data/lib/com/wiris/util/type/SortedHash.rb +45 -0
- data/lib/com/wiris/util/type/Stack.rb +31 -0
- data/lib/com/wiris/util/type/StringUtils.rb +56 -0
- data/lib/com/wiris/util/type/Tokenizer.rb +40 -0
- data/lib/com/wiris/util/type/UrlUtils.rb +78 -0
- data/lib/com/wiris/util/xml/ContentHandler.rb +8 -0
- data/lib/com/wiris/util/xml/DefaultHandler.rb +25 -0
- data/lib/com/wiris/util/xml/EntityResolver.rb +8 -0
- data/lib/com/wiris/util/xml/MathMLEntityResolver.rb +19 -0
- data/lib/com/wiris/util/xml/SAXParser.rb +470 -0
- data/lib/com/wiris/util/xml/SerializableImpl.rb +16 -15
- data/lib/com/wiris/util/xml/WCharacterBase.rb +968 -627
- data/lib/com/wiris/util/xml/WEntities.rb +11 -9
- data/lib/com/wiris/util/xml/WXmlUtils.rb +660 -490
- data/lib/com/wiris/util/xml/XmlSerializer.rb +517 -471
- data/lib/com/wiris/util/xml/XmlWriter.rb +260 -262
- data/lib/loader.rb +15 -12
- data/lib/src-generic/Array.rb +22 -22
- data/lib/src-generic/ArrayInt.rb +31 -31
- data/lib/src-generic/Base64.rb +14 -14
- data/lib/src-generic/BaseCode.rb +93 -93
- data/lib/src-generic/Boolean.rb +27 -0
- data/lib/src-generic/Bytes.rb +50 -50
- data/lib/src-generic/BytesInput.rb +37 -37
- data/lib/src-generic/EReg.rb +55 -55
- data/lib/src-generic/File.rb +35 -35
- data/lib/src-generic/FileLock.rb +26 -26
- data/lib/src-generic/FileSystem.rb +37 -37
- data/lib/src-generic/Hash.rb +42 -42
- data/lib/src-generic/Http.rb +111 -107
- data/lib/src-generic/HttpRequest.rb +25 -25
- data/lib/src-generic/HttpResponse.rb +70 -70
- data/lib/src-generic/Iterator.rb +20 -19
- data/lib/src-generic/Math.rb +14 -14
- data/lib/src-generic/Md5.rb +8 -8
- data/lib/src-generic/Md5Tools.rb +11 -11
- data/lib/src-generic/PropertiesTools.rb +32 -32
- data/lib/src-generic/Reflect.rb +16 -16
- data/lib/src-generic/RubyConfigurationUpdater.rb +49 -45
- data/lib/src-generic/Serializer.rb +84 -84
- data/lib/src-generic/Std.rb +74 -74
- data/lib/src-generic/Storage.rb +152 -152
- data/lib/src-generic/StringBuf.rb +40 -40
- data/lib/src-generic/StringTools.rb +44 -46
- data/lib/src-generic/Timer.rb +6 -6
- data/lib/src-generic/Type.rb +18 -18
- data/lib/src-generic/TypeTools.rb +31 -31
- data/lib/src-generic/Unserializer.rb +72 -72
- data/lib/src-generic/Utf8.rb +26 -26
- data/lib/src-generic/Xml.rb +199 -198
- data/lib/src-generic/extended/Integer.rb +5 -5
- data/lib/src-generic/extended/Math.rb +6 -6
- data/lib/src-generic/extended/Properties.rb +11 -11
- data/lib/src-generic/extended/String.rb +38 -38
- data/lib/src-generic/settings/PlatformSettings.rb +18 -18
- data/lib/src-generic/system/HttpProxy.rb +23 -0
- data/lib/src-generic/system/HttpProxyAuth.rb +10 -0
- data/lib/wirispluginengine.rb +5 -5
- data/lib/wirispluginengine/engine.rb +5 -5
- data/lib/wirispluginengine/integration/cleancache.rb +8 -8
- data/lib/wirispluginengine/integration/configurationjs.rb +8 -15
- data/lib/wirispluginengine/integration/configurationjson.rb +6 -6
- data/lib/wirispluginengine/integration/createimage.rb +7 -7
- data/lib/wirispluginengine/integration/getmathml.rb +18 -18
- data/lib/wirispluginengine/integration/resource.rb +8 -8
- data/lib/wirispluginengine/integration/service.rb +5 -5
- data/lib/wirispluginengine/integration/showimage.rb +28 -21
- data/lib/wirispluginengine/integration/test.rb +5 -5
- data/lib/wirispluginengine/integration/testfilter.rb +10 -0
- data/lib/wirispluginengine/version.rb +2 -2
- data/resources/VERSION +1 -1
- data/resources/WEB-INF/web.xml +25 -0
- data/resources/WIRISplugins.js +3809 -0
- data/resources/default-configuration.ini +47 -45
- data/resources/tech.txt +1 -1
- data/resources/wirisplugin.css +43 -42
- metadata +40 -4
- data/configuration.ini.dist +0 -104
@@ -1,485 +1,531 @@
|
|
1
1
|
module WirisPlugin
|
2
2
|
include Wiris
|
3
|
-
require('com/wiris/util/xml/WXmlUtils.rb')
|
4
|
-
|
5
|
-
|
3
|
+
require('com/wiris/util/xml/WXmlUtils.rb')
|
4
|
+
class XmlSerializer
|
5
|
+
include Wiris
|
6
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
|
-
end
|
34
|
-
def getMode()
|
35
|
-
return @mode
|
36
|
-
end
|
37
|
-
def read(xml)
|
38
|
-
document = Xml::parse(xml)
|
39
|
-
setCurrentElement(document)
|
40
|
-
@mode = XmlSerializer::MODE_READ
|
41
|
-
return readNode()
|
42
|
-
end
|
43
|
-
def write(s)
|
44
|
-
@mode = XmlSerializer::MODE_WRITE
|
45
|
-
@element = Xml::createDocument()
|
46
|
-
@rawxmls = Array.new()
|
47
|
-
s::onSerialize(self)
|
48
|
-
res = element::toString()
|
49
|
-
for i in 0..rawxmls::length()-1
|
50
|
-
start = res::indexOf(("<rawXml id=\""+i.to_s)+"\"")
|
51
|
-
if start!=-1
|
52
|
-
_end = res::indexOf(">",start)
|
53
|
-
res = (Std::substr(res,0,start).to_s+rawxmls::_(i).to_s)+Std::substr(res,_end+1).to_s
|
54
|
-
end
|
55
|
-
i+=1
|
56
|
-
end
|
57
|
-
return res
|
58
|
-
end
|
59
|
-
def beginTagIf(tag,current,desired)
|
60
|
-
if @mode==MODE_READ
|
61
|
-
if beginTag(tag)
|
62
|
-
return desired
|
7
|
+
MODE_READ = 0
|
8
|
+
MODE_WRITE = 1
|
9
|
+
MODE_REGISTER = 2
|
10
|
+
MODE_CACHE = 3
|
11
|
+
attr_accessor :mode
|
12
|
+
attr_accessor :element
|
13
|
+
attr_accessor :children
|
14
|
+
attr_accessor :child
|
15
|
+
attr_accessor :elementStack
|
16
|
+
attr_accessor :childrenStack
|
17
|
+
attr_accessor :childStack
|
18
|
+
attr_accessor :tags
|
19
|
+
attr_accessor :rawxmls
|
20
|
+
attr_accessor :currentTag
|
21
|
+
attr_accessor :cache
|
22
|
+
attr_accessor :cacheTagStackCount
|
23
|
+
attr_accessor :ignore
|
24
|
+
attr_accessor :ignoreTagStackCount
|
25
|
+
def initialize()
|
26
|
+
super()
|
27
|
+
@tags = Hash.new()
|
28
|
+
@elementStack = Array.new()
|
29
|
+
@childrenStack = Array.new()
|
30
|
+
@childStack = Array.new()
|
31
|
+
self.cacheTagStackCount = 0
|
32
|
+
self.ignoreTagStackCount = 0
|
63
33
|
end
|
64
|
-
|
65
|
-
|
66
|
-
beginTag(tag)
|
34
|
+
def getMode()
|
35
|
+
return self.mode
|
67
36
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
if beginTag(tag)
|
74
|
-
return desired
|
37
|
+
def read(xml)
|
38
|
+
document = Xml::parse(xml)
|
39
|
+
self.setCurrentElement(document)
|
40
|
+
self.mode = XmlSerializer::MODE_READ
|
41
|
+
return readNode()
|
75
42
|
end
|
76
|
-
|
77
|
-
|
78
|
-
|
43
|
+
def readXml(xml)
|
44
|
+
self.setCurrentElement(xml)
|
45
|
+
self.mode = XmlSerializer::MODE_READ
|
46
|
+
return readNode()
|
79
47
|
end
|
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
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
return true
|
111
|
-
end
|
112
|
-
def endTag()
|
113
|
-
if @mode==MODE_READ
|
114
|
-
@element = @element::parent_()
|
115
|
-
popState()
|
116
|
-
nextChild()
|
117
|
-
else
|
118
|
-
if @mode==MODE_WRITE
|
119
|
-
if @ignoreTagStackCount>0
|
120
|
-
@ignoreTagStackCount-=1
|
121
|
-
else
|
122
|
-
@element = @element::parent_()
|
123
|
-
end
|
124
|
-
else
|
125
|
-
if @mode==MODE_CACHE
|
126
|
-
if @cacheTagStackCount>0
|
127
|
-
@cacheTagStackCount-=1
|
48
|
+
def write(s)
|
49
|
+
self.mode = XmlSerializer::MODE_WRITE
|
50
|
+
self.element = Xml::createDocument()
|
51
|
+
self.rawxmls = Array.new()
|
52
|
+
s::onSerialize(self)
|
53
|
+
res = self.element::toString()
|
54
|
+
if StringTools::startsWith(res,"<__document")
|
55
|
+
res = Std::substr(res,res::indexOf(">") + 1)
|
56
|
+
end
|
57
|
+
if StringTools::endsWith(res,"</__document>")
|
58
|
+
res = Std::substr(res,0,res::length() - "</__document>"::length())
|
59
|
+
end
|
60
|
+
for i in 0..self.rawxmls::length() - 1
|
61
|
+
start = res::indexOf(("<rawXml id=\"" + i.to_s) + "\"")
|
62
|
+
if start != -1
|
63
|
+
_end = res::indexOf(">",start)
|
64
|
+
res = (Std::substr(res,0,start).to_s + self.rawxmls::_(i).to_s) + Std::substr(res,_end + 1).to_s
|
65
|
+
end
|
66
|
+
i+=1
|
67
|
+
end
|
68
|
+
return res
|
69
|
+
end
|
70
|
+
def beginTagIf(tag, current, desired)
|
71
|
+
if @mode == MODE_READ
|
72
|
+
if beginTag(tag)
|
73
|
+
return desired
|
74
|
+
end
|
128
75
|
else
|
129
|
-
|
130
|
-
|
76
|
+
if current == desired
|
77
|
+
beginTag(tag)
|
78
|
+
end
|
131
79
|
end
|
132
|
-
|
80
|
+
return current
|
133
81
|
end
|
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
|
-
if a==nil
|
174
|
-
return nil
|
175
|
-
end
|
176
|
-
sb = StringBuf.new()
|
177
|
-
for i in 0..a::length-1
|
178
|
-
if i!=0
|
179
|
-
sb::add(",")
|
180
|
-
end
|
181
|
-
sb::add(a[i].to_s+"")
|
182
|
-
i+=1
|
183
|
-
end
|
184
|
-
return sb::toString()
|
185
|
-
end
|
186
|
-
def stringToArray(s)
|
187
|
-
if s==nil
|
188
|
-
return nil
|
189
|
-
end
|
190
|
-
ss = s::split(",")
|
191
|
-
a = []
|
192
|
-
for i in 0..ss::length-1
|
193
|
-
a[i] = Std::parseInt(ss[i])
|
194
|
-
i+=1
|
195
|
-
end
|
196
|
-
return a
|
197
|
-
end
|
198
|
-
def attributeFloat(name,value,def_)
|
199
|
-
return Std::parseFloat(attributeString(name,""+value.to_s,""+def_.to_s))
|
200
|
-
end
|
201
|
-
def textContent(content)
|
202
|
-
if @mode==MODE_READ
|
203
|
-
content = XmlSerializer::getXmlTextContent(@element)
|
204
|
-
else
|
205
|
-
if ((@mode==MODE_WRITE)&&(content!=nil))&&(@ignoreTagStackCount==0)
|
206
|
-
if (content::length()>100)||(StringTools::startsWith(content,"<")&&StringTools::endsWith(content,">"))
|
207
|
-
textNode = @element::createCData_(content)
|
208
|
-
else
|
209
|
-
textNode = WXmlUtils::createPCData(@element,content)
|
210
|
-
end
|
211
|
-
element::addChild(textNode)
|
212
|
-
end
|
213
|
-
end
|
214
|
-
return content
|
215
|
-
end
|
216
|
-
def base64Content(data)
|
217
|
-
b64 = BaseCode.new(Bytes::ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))
|
218
|
-
if @mode==MODE_READ
|
219
|
-
content = textContent(nil)
|
220
|
-
data = b64::decodeBytes(Bytes::ofString(content))
|
221
|
-
else
|
222
|
-
if @mode==MODE_WRITE
|
223
|
-
textContent(b64::encodeBytes(data)::toString())
|
224
|
-
end
|
225
|
-
end
|
226
|
-
return data
|
227
|
-
end
|
228
|
-
def rawXml(xml)
|
229
|
-
if @mode==MODE_READ
|
230
|
-
raise Exception,"Should not use rawXml() function on read operation!"
|
231
|
-
else
|
232
|
-
if @mode==MODE_WRITE
|
233
|
-
raw = @element::createElement_("rawXml")
|
234
|
-
raw::set("id",""+rawxmls::length().to_s)
|
235
|
-
rawxmls::push(xml)
|
236
|
-
element::addChild(raw)
|
237
|
-
else
|
238
|
-
if @mode==MODE_REGISTER
|
239
|
-
@currentTag = getMainTag(xml)
|
240
|
-
end
|
241
|
-
end
|
242
|
-
end
|
243
|
-
return xml
|
244
|
-
end
|
245
|
-
def booleanContent(content)
|
246
|
-
return XmlSerializer::parseBoolean(textContent(XmlSerializer::booleanToString(content)))
|
247
|
-
end
|
248
|
-
def floatContent(d)
|
249
|
-
return Std::parseFloat(textContent(d.to_s+""))
|
250
|
-
end
|
251
|
-
def self.getXmlTextContent(element)
|
252
|
-
if (element::nodeType==Xml::CData)||(element::nodeType==Xml::PCData)
|
253
|
-
return WXmlUtils::getNodeValue(element)
|
254
|
-
else
|
255
|
-
if (element::nodeType==Xml::Document)||(element::nodeType==Xml::Element)
|
256
|
-
sb = StringBuf.new()
|
257
|
-
children = element::iterator()
|
258
|
-
while children::hasNext()
|
259
|
-
sb::add(getXmlTextContent(children::next()))
|
260
|
-
end
|
261
|
-
return sb::toString()
|
262
|
-
else
|
263
|
-
return ""
|
264
|
-
end
|
265
|
-
end
|
266
|
-
end
|
267
|
-
def serializeChild(s)
|
268
|
-
if @mode==XmlSerializer::MODE_READ
|
269
|
-
child = currentChild()
|
270
|
-
if child!=nil
|
271
|
-
s = (readNode())
|
272
|
-
else
|
273
|
-
s = nil
|
274
|
-
end
|
275
|
-
else
|
276
|
-
if (@mode==XmlSerializer::MODE_WRITE)&&(s!=nil)
|
277
|
-
(s)::onSerialize(self)
|
278
|
-
end
|
279
|
-
end
|
280
|
-
return s
|
281
|
-
end
|
282
|
-
def serializeArray(array,tagName)
|
283
|
-
if @mode==XmlSerializer::MODE_READ
|
284
|
-
array = Array.new()
|
285
|
-
child = currentChild()
|
286
|
-
while (child!=nil)&&((tagName==nil)||(tagName==child::nodeName))
|
287
|
-
elem = (readNode())
|
288
|
-
array::push(elem)
|
289
|
-
child = currentChild()
|
290
|
-
end
|
291
|
-
else
|
292
|
-
if ((@mode==XmlSerializer::MODE_WRITE)&&(array!=nil))&&(array::length()>0)
|
293
|
-
items = array::iterator()
|
294
|
-
while items::hasNext()
|
295
|
-
(items::next())::onSerialize(self)
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
299
|
-
return array
|
300
|
-
end
|
301
|
-
def serializeChildName(s,tagName)
|
302
|
-
if @mode==MODE_READ
|
303
|
-
child = currentChild()
|
304
|
-
if (child!=nil)&&(child::nodeName==tagName)
|
305
|
-
s = serializeChild(s)
|
306
|
-
end
|
307
|
-
else
|
308
|
-
if @mode==MODE_WRITE
|
309
|
-
s = serializeChild(s)
|
310
|
-
end
|
311
|
-
end
|
312
|
-
return s
|
313
|
-
end
|
314
|
-
def serializeArrayName(array,tagName)
|
315
|
-
if @mode==MODE_READ
|
316
|
-
if beginTag(tagName)
|
317
|
-
array = serializeArray(array,nil)
|
318
|
-
endTag()
|
319
|
-
end
|
320
|
-
else
|
321
|
-
if ((@mode==MODE_WRITE)&&(array!=nil))&&(array::length()>0)
|
322
|
-
element = @element
|
323
|
-
@element = element::createElement_(tagName)
|
324
|
-
element::addChild(@element)
|
325
|
-
array = serializeArray(array,nil)
|
326
|
-
@element = element
|
327
|
-
else
|
328
|
-
if @mode==MODE_REGISTER
|
329
|
-
beginTag(tagName)
|
330
|
-
end
|
331
|
-
end
|
332
|
-
end
|
333
|
-
return array
|
334
|
-
end
|
335
|
-
def register(elem)
|
336
|
-
tags::set(getTagName(elem),elem)
|
337
|
-
end
|
338
|
-
def getTagName(elem)
|
339
|
-
mode = @mode
|
340
|
-
@mode = XmlSerializer::MODE_REGISTER
|
341
|
-
@currentTag = nil
|
342
|
-
elem::onSerialize(self)
|
343
|
-
@mode = mode
|
344
|
-
return @currentTag
|
345
|
-
end
|
346
|
-
def readNode()
|
347
|
-
if !tags::exists(currentChild()::nodeName)
|
348
|
-
raise Exception,("Tag "+currentChild()::nodeName.to_s)+" not registered."
|
349
|
-
end
|
350
|
-
model = tags::get(currentChild()::nodeName)
|
351
|
-
return readNodeModel(model)
|
352
|
-
end
|
353
|
-
def readNodeModel(model)
|
354
|
-
node = model::newInstance()
|
355
|
-
node::onSerialize(self)
|
356
|
-
return node
|
357
|
-
end
|
358
|
-
def setCurrentElement(element)
|
359
|
-
@element = element
|
360
|
-
@children = element::elements()
|
361
|
-
@child = nil
|
362
|
-
end
|
363
|
-
def nextChild()
|
364
|
-
if @children::hasNext()
|
365
|
-
@child = @children::next()
|
366
|
-
else
|
367
|
-
@child = nil
|
368
|
-
end
|
369
|
-
return @child
|
370
|
-
end
|
371
|
-
def currentChild()
|
372
|
-
if (@child==nil)&&@children::hasNext()
|
373
|
-
@child = @children::next()
|
374
|
-
end
|
375
|
-
return @child
|
376
|
-
end
|
377
|
-
def pushState()
|
378
|
-
elementStack::push(@element)
|
379
|
-
childrenStack::push(@children)
|
380
|
-
childStack::push(@child)
|
381
|
-
end
|
382
|
-
def popState()
|
383
|
-
@element = elementStack::pop()
|
384
|
-
@children = childrenStack::pop()
|
385
|
-
@child = childStack::pop()
|
386
|
-
end
|
387
|
-
def self.parseBoolean(s)
|
388
|
-
return (s::toLowerCase()=="true")||(s=="1")
|
389
|
-
end
|
390
|
-
def self.booleanToString(b)
|
391
|
-
return b ? "true" : "false"
|
392
|
-
end
|
393
|
-
def childString(name,value,def_)
|
394
|
-
if !((@mode==MODE_WRITE)&&(((value==nil)&&(def_==nil))||((value!=nil)&&(value==def_))))
|
395
|
-
if beginTag(name)
|
396
|
-
value = textContent(value)
|
397
|
-
endTag()
|
398
|
-
end
|
399
|
-
end
|
400
|
-
return value
|
401
|
-
end
|
402
|
-
def childInt(name,value,def_)
|
403
|
-
return Std::parseInt(childString(name,""+value.to_s,""+def_.to_s))
|
404
|
-
end
|
405
|
-
def setCached(cache)
|
406
|
-
@cache = cache
|
407
|
-
end
|
408
|
-
def beginCache()
|
409
|
-
if @cache&&(@mode==XmlSerializer::MODE_WRITE)
|
410
|
-
@mode = XmlSerializer::MODE_CACHE
|
411
|
-
end
|
412
|
-
end
|
413
|
-
def endCache()
|
414
|
-
if @mode==XmlSerializer::MODE_CACHE
|
415
|
-
@mode = XmlSerializer::MODE_WRITE
|
416
|
-
end
|
417
|
-
end
|
418
|
-
def getMainTag(xml)
|
419
|
-
i = 0
|
420
|
-
loop do
|
421
|
-
i = xml::indexOf("<",i)
|
422
|
-
i+=1
|
423
|
-
c = Std::charCodeAt(xml,i)
|
424
|
-
break if not (c!=33)&&(c!=63)
|
425
|
-
end
|
426
|
-
_end = [">", " ", "/"]
|
427
|
-
min = 0
|
428
|
-
for j in 0.._end::length-1
|
429
|
-
n = xml::indexOf(_end[j])
|
430
|
-
if (n!=-1)&&(n<min)
|
431
|
-
n = min
|
432
|
-
end
|
433
|
-
j+=1
|
434
|
-
end
|
435
|
-
return Std::substr(xml,i,min)
|
436
|
-
end
|
437
|
-
def serializeXml(tag,elem)
|
438
|
-
if @mode==MODE_READ
|
439
|
-
if (tag==nil)||((currentChild()!=nil)&&(currentChild()::nodeName==tag))
|
440
|
-
elem = currentChild()
|
441
|
-
nextChild()
|
442
|
-
end
|
443
|
-
else
|
444
|
-
if @mode==MODE_WRITE
|
445
|
-
if (elem!=nil)&&(@ignoreTagStackCount==0)
|
446
|
-
imported = WXmlUtils::importXml(elem,@element)
|
447
|
-
element::addChild(imported)
|
448
|
-
end
|
449
|
-
else
|
450
|
-
if @mode==MODE_REGISTER
|
451
|
-
beginTag(tag)
|
452
|
-
end
|
453
|
-
end
|
454
|
-
end
|
455
|
-
return elem
|
456
|
-
end
|
457
|
-
def setIgnoreTags(ignore)
|
458
|
-
@ignore = ignore
|
459
|
-
end
|
460
|
-
def isIgnoreTag(s)
|
461
|
-
if @ignore!=nil
|
462
|
-
i = ignore::iterator()
|
463
|
-
while i::hasNext()
|
464
|
-
if (i::next()==s)
|
82
|
+
def beginTagIfBool(tag, current, desired)
|
83
|
+
if @mode == MODE_READ
|
84
|
+
if beginTag(tag)
|
85
|
+
return desired
|
86
|
+
end
|
87
|
+
else
|
88
|
+
if current == desired
|
89
|
+
beginTag(tag)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
return current
|
93
|
+
end
|
94
|
+
def beginTag(tag)
|
95
|
+
if @mode == MODE_READ
|
96
|
+
if ((self.currentChild() != nil) && (self.currentChild()::nodeType == Xml::Element)) && (tag == self.currentChild()::nodeName)
|
97
|
+
self.pushState()
|
98
|
+
self.setCurrentElement(self.currentChild())
|
99
|
+
else
|
100
|
+
return false
|
101
|
+
end
|
102
|
+
else
|
103
|
+
if @mode == MODE_WRITE
|
104
|
+
if self.isIgnoreTag(tag) || (self.ignoreTagStackCount > 0)
|
105
|
+
self.ignoreTagStackCount+=1
|
106
|
+
else
|
107
|
+
child = @element::createElement_(tag)
|
108
|
+
@element::addChild(child)
|
109
|
+
@element = child
|
110
|
+
end
|
111
|
+
else
|
112
|
+
if (@mode == MODE_REGISTER) && (self.currentTag == nil)
|
113
|
+
self.currentTag = tag
|
114
|
+
else
|
115
|
+
if @mode == MODE_CACHE
|
116
|
+
self.cacheTagStackCount+=1
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
465
121
|
return true
|
466
|
-
end
|
467
122
|
end
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
123
|
+
def endTag()
|
124
|
+
if self.mode == MODE_READ
|
125
|
+
self.element = @element::parent_()
|
126
|
+
self.popState()
|
127
|
+
self.nextChild()
|
128
|
+
else
|
129
|
+
if self.mode == MODE_WRITE
|
130
|
+
if self.ignoreTagStackCount > 0
|
131
|
+
self.ignoreTagStackCount-=1
|
132
|
+
else
|
133
|
+
self.element = @element::parent_()
|
134
|
+
end
|
135
|
+
else
|
136
|
+
if self.mode == MODE_CACHE
|
137
|
+
if self.cacheTagStackCount > 0
|
138
|
+
self.cacheTagStackCount-=1
|
139
|
+
else
|
140
|
+
self.mode = MODE_WRITE
|
141
|
+
self.element = @element::parent_()
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
def attributeString(name, value, def_)
|
148
|
+
if self.mode == XmlSerializer::MODE_READ
|
149
|
+
value = WXmlUtils::getAttribute(self.element,name)
|
150
|
+
if value == nil
|
151
|
+
value = def_
|
152
|
+
end
|
153
|
+
else
|
154
|
+
if self.mode == XmlSerializer::MODE_WRITE
|
155
|
+
if ((value != nil) && !((value == def_))) && (self.ignoreTagStackCount == 0)
|
156
|
+
WXmlUtils::setAttribute(self.element,name,value)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
return value
|
161
|
+
end
|
162
|
+
def cacheAttribute(name, value, def_)
|
163
|
+
if self.mode == XmlSerializer::MODE_WRITE
|
164
|
+
if self.cache
|
165
|
+
value = attributeString(name,value,def_)
|
166
|
+
self.mode = XmlSerializer::MODE_CACHE
|
167
|
+
self.cacheTagStackCount = 0
|
168
|
+
end
|
169
|
+
else
|
170
|
+
value = attributeString(name,value,def_)
|
171
|
+
end
|
172
|
+
return value
|
173
|
+
end
|
174
|
+
def attributeBoolean(name, value, def_)
|
175
|
+
return XmlSerializer::parseBoolean(attributeString(name,XmlSerializer::booleanToString(value),XmlSerializer::booleanToString(def_)))
|
176
|
+
end
|
177
|
+
def attributeInt(name, value, def_)
|
178
|
+
return Std::parseInt(attributeString(name,"" + value.to_s,"" + def_.to_s))
|
179
|
+
end
|
180
|
+
def attributeIntArray(name, value, def_)
|
181
|
+
return stringToArray(attributeString(name,arrayToString(value),arrayToString(def_)))
|
182
|
+
end
|
183
|
+
def attributeStringArray(name, value, def_)
|
184
|
+
return stringToArrayString(attributeString(name,stringArrayToString(value),stringArrayToString(def_)))
|
185
|
+
end
|
186
|
+
def arrayToString(a)
|
187
|
+
if a == nil
|
188
|
+
return nil
|
189
|
+
end
|
190
|
+
sb = StringBuf.new()
|
191
|
+
for i in 0..a::length - 1
|
192
|
+
if i != 0
|
193
|
+
sb::add(",")
|
194
|
+
end
|
195
|
+
sb::add(a[i].to_s + "")
|
196
|
+
i+=1
|
197
|
+
end
|
198
|
+
return sb::toString()
|
199
|
+
end
|
200
|
+
def stringArrayToString(a)
|
201
|
+
if a == nil
|
202
|
+
return nil
|
203
|
+
end
|
204
|
+
sb = StringBuf.new()
|
205
|
+
for i in 0..a::length - 1
|
206
|
+
if i != 0
|
207
|
+
sb::add(",")
|
208
|
+
end
|
209
|
+
sb::add(a[i])
|
210
|
+
i+=1
|
211
|
+
end
|
212
|
+
return sb::toString()
|
213
|
+
end
|
214
|
+
def stringToArrayString(s)
|
215
|
+
if s == nil
|
216
|
+
return nil
|
217
|
+
end
|
218
|
+
return s::split(",")
|
219
|
+
end
|
220
|
+
def stringToArray(s)
|
221
|
+
if s == nil
|
222
|
+
return nil
|
223
|
+
end
|
224
|
+
ss = s::split(",")
|
225
|
+
a = []
|
226
|
+
for i in 0..ss::length - 1
|
227
|
+
a[i] = Std::parseInt(ss[i])
|
228
|
+
i+=1
|
229
|
+
end
|
230
|
+
return a
|
231
|
+
end
|
232
|
+
def attributeFloat(name, value, def_)
|
233
|
+
return Std::parseFloat(attributeString(name,"" + value.to_s,"" + def_.to_s))
|
234
|
+
end
|
235
|
+
def textContent(content)
|
236
|
+
if self.mode == MODE_READ
|
237
|
+
content = XmlSerializer::getXmlTextContent(self.element)
|
238
|
+
else
|
239
|
+
if ((self.mode == MODE_WRITE) && (content != nil)) && (self.ignoreTagStackCount == 0)
|
240
|
+
if (content::length() > 100) || (StringTools::startsWith(content,"<") && StringTools::endsWith(content,">"))
|
241
|
+
k = content::indexOf("]]>")
|
242
|
+
i = 0
|
243
|
+
while k > -1
|
244
|
+
subcontent = Std::substr(content,i,(k - i) + 2)
|
245
|
+
textNode = @element::createCData_(subcontent)
|
246
|
+
self.element::addChild(textNode)
|
247
|
+
i = k + 2
|
248
|
+
k = content::indexOf("]]>",i)
|
249
|
+
end
|
250
|
+
str = Std::substr(content,i)
|
251
|
+
textNode = @element::createCData_(str)
|
252
|
+
self.element::addChild(textNode)
|
253
|
+
else
|
254
|
+
textNode = WXmlUtils::createPCData(@element,content)
|
255
|
+
self.element::addChild(textNode)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
return content
|
260
|
+
end
|
261
|
+
def base64Content(data)
|
262
|
+
b64 = BaseCode.new(Bytes::ofString("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))
|
263
|
+
if @mode == MODE_READ
|
264
|
+
content = textContent(nil)
|
265
|
+
data = b64::decodeBytes(Bytes::ofString(content))
|
266
|
+
else
|
267
|
+
if @mode == MODE_WRITE
|
268
|
+
textContent(b64::encodeBytes(data)::toString())
|
269
|
+
end
|
270
|
+
end
|
271
|
+
return data
|
272
|
+
end
|
273
|
+
def rawXml(xml)
|
274
|
+
if self.mode == MODE_READ
|
275
|
+
raise Exception,"Should not use rawXml() function on read operation!"
|
276
|
+
else
|
277
|
+
if self.mode == MODE_WRITE
|
278
|
+
raw = @element::createElement_("rawXml")
|
279
|
+
raw::set("id","" + self.rawxmls::length().to_s)
|
280
|
+
self.rawxmls::push(xml)
|
281
|
+
self.element::addChild(raw)
|
282
|
+
else
|
283
|
+
if self.mode == MODE_REGISTER
|
284
|
+
self.currentTag = self.getMainTag(xml)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
288
|
+
return xml
|
289
|
+
end
|
290
|
+
def booleanContent(content)
|
291
|
+
return XmlSerializer::parseBoolean(textContent(XmlSerializer::booleanToString(content)))
|
292
|
+
end
|
293
|
+
def floatContent(d)
|
294
|
+
return Std::parseFloat(textContent(d.to_s + ""))
|
295
|
+
end
|
296
|
+
def self.getXmlTextContent(element)
|
297
|
+
if (element::nodeType == Xml::CData) || (element::nodeType == Xml::PCData)
|
298
|
+
return WXmlUtils::getNodeValue(element)
|
299
|
+
else
|
300
|
+
if (element::nodeType == Xml::Document) || (element::nodeType == Xml::Element)
|
301
|
+
sb = StringBuf.new()
|
302
|
+
children = element::iterator()
|
303
|
+
while children::hasNext()
|
304
|
+
sb::add(XmlSerializer.getXmlTextContent(children::next()))
|
305
|
+
end
|
306
|
+
return sb::toString()
|
307
|
+
else
|
308
|
+
return ""
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|
312
|
+
def serializeChild(s)
|
313
|
+
if self.mode == XmlSerializer::MODE_READ
|
314
|
+
child = self.currentChild()
|
315
|
+
if child != nil
|
316
|
+
s = (self.readNode())
|
317
|
+
else
|
318
|
+
s = nil
|
319
|
+
end
|
320
|
+
else
|
321
|
+
if (self.mode == XmlSerializer::MODE_WRITE) && (s != nil)
|
322
|
+
(s)::onSerialize(self)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
return s
|
326
|
+
end
|
327
|
+
def serializeArray(array, tagName)
|
328
|
+
if self.mode == XmlSerializer::MODE_READ
|
329
|
+
array = Array.new()
|
330
|
+
child = self.currentChild()
|
331
|
+
while (child != nil) && ((tagName == nil) || (tagName == child::nodeName))
|
332
|
+
elem = (self.readNode())
|
333
|
+
array::push(elem)
|
334
|
+
child = self.currentChild()
|
335
|
+
end
|
336
|
+
else
|
337
|
+
if ((self.mode == XmlSerializer::MODE_WRITE) && (array != nil)) && (array::length() > 0)
|
338
|
+
items = array::iterator()
|
339
|
+
while items::hasNext()
|
340
|
+
(items::next())::onSerialize(self)
|
341
|
+
end
|
342
|
+
end
|
343
|
+
end
|
344
|
+
return array
|
345
|
+
end
|
346
|
+
def serializeChildName(s, tagName)
|
347
|
+
if self.mode == MODE_READ
|
348
|
+
child = self.currentChild()
|
349
|
+
if (child != nil) && (child::nodeName == tagName)
|
350
|
+
s = self.serializeChild(s)
|
351
|
+
end
|
352
|
+
else
|
353
|
+
if self.mode == MODE_WRITE
|
354
|
+
s = self.serializeChild(s)
|
355
|
+
end
|
356
|
+
end
|
357
|
+
return s
|
358
|
+
end
|
359
|
+
def serializeArrayName(array, tagName)
|
360
|
+
if self.mode == MODE_READ
|
361
|
+
if beginTag(tagName)
|
362
|
+
array = serializeArray(array,nil)
|
363
|
+
endTag()
|
364
|
+
end
|
365
|
+
else
|
366
|
+
if ((self.mode == MODE_WRITE) && (array != nil)) && (array::length() > 0)
|
367
|
+
element = self.element
|
368
|
+
self.element = element::createElement_(tagName)
|
369
|
+
element::addChild(self.element)
|
370
|
+
array = self.serializeArray(array,nil)
|
371
|
+
self.element = element
|
372
|
+
else
|
373
|
+
if self.mode == MODE_REGISTER
|
374
|
+
self.beginTag(tagName)
|
375
|
+
end
|
376
|
+
end
|
377
|
+
end
|
378
|
+
return array
|
379
|
+
end
|
380
|
+
def register(elem)
|
381
|
+
self.tags::set(self.getTagName(elem),elem)
|
382
|
+
end
|
383
|
+
def getTagName(elem)
|
384
|
+
mode = self.mode
|
385
|
+
self.mode = XmlSerializer::MODE_REGISTER
|
386
|
+
self.currentTag = nil
|
387
|
+
elem::onSerialize(self)
|
388
|
+
self.mode = mode
|
389
|
+
return self.currentTag
|
390
|
+
end
|
391
|
+
def readNode()
|
392
|
+
if !self.tags::exists(self.currentChild()::nodeName)
|
393
|
+
raise Exception,("Tag " + self.currentChild()::nodeName.to_s) + " not registered."
|
394
|
+
end
|
395
|
+
model = self.tags::get(self.currentChild()::nodeName)
|
396
|
+
return readNodeModel(model)
|
397
|
+
end
|
398
|
+
def readNodeModel(model)
|
399
|
+
node = model::newInstance()
|
400
|
+
node::onSerialize(self)
|
401
|
+
return node
|
402
|
+
end
|
403
|
+
def setCurrentElement(element)
|
404
|
+
self.element = element
|
405
|
+
self.children = self.element::elements()
|
406
|
+
self.child = nil
|
407
|
+
end
|
408
|
+
def nextChild()
|
409
|
+
if @children::hasNext()
|
410
|
+
self.child = @children::next()
|
411
|
+
else
|
412
|
+
self.child = nil
|
413
|
+
end
|
414
|
+
return self.child
|
415
|
+
end
|
416
|
+
def currentChild()
|
417
|
+
if (self.child == nil) && @children::hasNext()
|
418
|
+
self.child = @children::next()
|
419
|
+
end
|
420
|
+
return self.child
|
421
|
+
end
|
422
|
+
def pushState()
|
423
|
+
self.elementStack::push(self.element)
|
424
|
+
self.childrenStack::push(self.children)
|
425
|
+
self.childStack::push(self.child)
|
426
|
+
end
|
427
|
+
def popState()
|
428
|
+
self.element = self.elementStack::pop()
|
429
|
+
self.children = self.childrenStack::pop()
|
430
|
+
self.child = self.childStack::pop()
|
431
|
+
end
|
432
|
+
def self.parseBoolean(s)
|
433
|
+
return (s::toLowerCase() == "true") || (s == "1")
|
434
|
+
end
|
435
|
+
def self.booleanToString(b)
|
436
|
+
return b ? "true" : "false"
|
437
|
+
end
|
438
|
+
def childString(name, value, def_)
|
439
|
+
if !((@mode == MODE_WRITE) && (((value == nil) && (def_ == nil)) || ((value != nil) && (value == def_))))
|
440
|
+
if self.beginTag(name)
|
441
|
+
value = textContent(value)
|
442
|
+
self.endTag()
|
443
|
+
end
|
444
|
+
end
|
445
|
+
return value
|
446
|
+
end
|
447
|
+
def childInt(name, value, def_)
|
448
|
+
return Std::parseInt(childString(name,"" + value.to_s,"" + def_.to_s))
|
449
|
+
end
|
450
|
+
def setCached(cache)
|
451
|
+
self.cache = cache
|
452
|
+
end
|
453
|
+
def beginCache()
|
454
|
+
if self.cache && (self.mode == XmlSerializer::MODE_WRITE)
|
455
|
+
self.mode = XmlSerializer::MODE_CACHE
|
456
|
+
end
|
457
|
+
end
|
458
|
+
def endCache()
|
459
|
+
if self.mode == XmlSerializer::MODE_CACHE
|
460
|
+
self.mode = XmlSerializer::MODE_WRITE
|
461
|
+
end
|
462
|
+
end
|
463
|
+
def getMainTag(xml)
|
464
|
+
i = 0
|
465
|
+
loop do
|
466
|
+
i = xml::indexOf("<",i)
|
467
|
+
i+=1
|
468
|
+
c = Std::charCodeAt(xml,i)
|
469
|
+
break if not (c != 33) && (c != 63)
|
470
|
+
end
|
471
|
+
_end = [">", " ", "/"]
|
472
|
+
min = 0
|
473
|
+
for j in 0.._end::length - 1
|
474
|
+
n = xml::indexOf(_end[j])
|
475
|
+
if (n != -1) && (n < min)
|
476
|
+
n = min
|
477
|
+
end
|
478
|
+
j+=1
|
479
|
+
end
|
480
|
+
return Std::substr(xml,i,min)
|
481
|
+
end
|
482
|
+
def serializeXml(tag, elem)
|
483
|
+
if self.mode == MODE_READ
|
484
|
+
if (tag == nil) || ((self.currentChild() != nil) && (self.currentChild()::nodeName == tag))
|
485
|
+
elem = self.currentChild()
|
486
|
+
self.nextChild()
|
487
|
+
end
|
488
|
+
else
|
489
|
+
if self.mode == MODE_WRITE
|
490
|
+
if (elem != nil) && (self.ignoreTagStackCount == 0)
|
491
|
+
imported = WXmlUtils::importXml(elem,self.element)
|
492
|
+
self.element::addChild(imported)
|
493
|
+
end
|
494
|
+
else
|
495
|
+
if self.mode == MODE_REGISTER
|
496
|
+
self.beginTag(tag)
|
497
|
+
end
|
498
|
+
end
|
499
|
+
end
|
500
|
+
return elem
|
501
|
+
end
|
502
|
+
def setIgnoreTags(ignore)
|
503
|
+
self.ignore = ignore
|
504
|
+
end
|
505
|
+
def isIgnoreTag(s)
|
506
|
+
if self.ignore != nil
|
507
|
+
i = self.ignore::iterator()
|
508
|
+
while i::hasNext()
|
509
|
+
if (i::next() == s)
|
510
|
+
return true
|
511
|
+
end
|
512
|
+
end
|
513
|
+
end
|
514
|
+
return false
|
515
|
+
end
|
516
|
+
def self.compareStrings(a, b)
|
517
|
+
an = a::length()
|
518
|
+
bn = b::length()
|
519
|
+
n = (an > bn) ? bn : an
|
520
|
+
for i in 0..n - 1
|
521
|
+
c = Std::charCodeAt(a,i) - Std::charCodeAt(b,i)
|
522
|
+
if c != 0
|
523
|
+
return c
|
524
|
+
end
|
525
|
+
i+=1
|
526
|
+
end
|
527
|
+
return a::length() - b::length()
|
528
|
+
end
|
529
|
+
|
483
530
|
end
|
484
|
-
end
|
485
531
|
end
|