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.
Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +34 -34
  3. data/app/assets/javascripts/wirispluginengine/WIRISplugins.js +1040 -64
  4. data/app/controllers/wirispluginengine/application_controller.rb +84 -75
  5. data/app/helpers/wirispluginengine/application_helper.rb +4 -4
  6. data/config/routes.rb +4 -4
  7. data/lib/com/wiris/common/WInteger.rb +52 -51
  8. data/lib/com/wiris/plugin/api/Cas.rb +5 -5
  9. data/lib/com/wiris/plugin/api/CleanCache.rb +5 -5
  10. data/lib/com/wiris/plugin/api/Configuration.rb +5 -5
  11. data/lib/com/wiris/plugin/api/ConfigurationKeys.rb +94 -91
  12. data/lib/com/wiris/plugin/api/Editor.rb +5 -5
  13. data/lib/com/wiris/plugin/api/Filter.rb +5 -5
  14. data/lib/com/wiris/plugin/api/ImageFormatController.rb +5 -5
  15. data/lib/com/wiris/plugin/api/ParamsProvider.rb +5 -5
  16. data/lib/com/wiris/plugin/api/PluginBuilder.rb +88 -74
  17. data/lib/com/wiris/plugin/api/Render.rb +5 -5
  18. data/lib/com/wiris/plugin/api/ServiceResourceLoader.rb +5 -5
  19. data/lib/com/wiris/plugin/api/Test.rb +5 -5
  20. data/lib/com/wiris/plugin/api/TextService.rb +5 -5
  21. data/lib/com/wiris/plugin/configuration/ConfigurationUpdater.rb +5 -5
  22. data/lib/com/wiris/plugin/impl/CacheFormulaImpl.rb +15 -0
  23. data/lib/com/wiris/plugin/impl/CacheImpl.rb +124 -0
  24. data/lib/com/wiris/plugin/impl/CasImpl.rb +140 -138
  25. data/lib/com/wiris/plugin/impl/CleanCacheImpl.rb +103 -101
  26. data/lib/com/wiris/plugin/impl/ConfigurationImpl.rb +165 -166
  27. data/lib/com/wiris/plugin/impl/CustomConfigurationUpdater.rb +32 -30
  28. data/lib/com/wiris/plugin/impl/DefaultConfigurationUpdater.rb +24 -22
  29. data/lib/com/wiris/plugin/impl/EditorImpl.rb +80 -78
  30. data/lib/com/wiris/plugin/impl/FileConfigurationUpdater.rb +29 -27
  31. data/lib/com/wiris/plugin/impl/FileStorageAndCache.rb +55 -53
  32. data/lib/com/wiris/plugin/impl/FolderTreeStorageAndCache.rb +65 -134
  33. data/lib/com/wiris/plugin/impl/GenericParamsProviderImpl.rb +50 -48
  34. data/lib/com/wiris/plugin/impl/HttpImpl.rb +49 -48
  35. data/lib/com/wiris/plugin/impl/HttpListener.rb +5 -5
  36. data/lib/com/wiris/plugin/impl/ImageFormatControllerPng.rb +71 -63
  37. data/lib/com/wiris/plugin/impl/ImageFormatControllerSvg.rb +37 -28
  38. data/lib/com/wiris/plugin/impl/PluginBuilderImpl.rb +280 -248
  39. data/lib/com/wiris/plugin/impl/RenderImpl.rb +303 -257
  40. data/lib/com/wiris/plugin/impl/ServiceResourceLoaderImpl.rb +41 -39
  41. data/lib/com/wiris/plugin/impl/TestImpl.rb +177 -157
  42. data/lib/com/wiris/plugin/impl/TextFilter.rb +210 -194
  43. data/lib/com/wiris/plugin/impl/TextFilterTags.rb +57 -50
  44. data/lib/com/wiris/plugin/impl/TextServiceImpl.rb +158 -107
  45. data/lib/com/wiris/plugin/storage/StorageAndCache.rb +5 -5
  46. data/lib/com/wiris/util/json/JSon.rb +505 -493
  47. data/lib/com/wiris/util/json/JSonIntegerFormat.rb +17 -16
  48. data/lib/com/wiris/util/json/JsonAPIResponse.rb +70 -0
  49. data/lib/com/wiris/util/json/StringParser.rb +57 -56
  50. data/lib/com/wiris/util/sys/AccessProvider.rb +8 -0
  51. data/lib/com/wiris/util/sys/Cache.rb +8 -0
  52. data/lib/com/wiris/util/sys/HttpConnection.rb +14 -13
  53. data/lib/com/wiris/util/sys/HttpConnectionListener.rb +5 -5
  54. data/lib/com/wiris/util/sys/HttpSync.rb +28 -0
  55. data/lib/com/wiris/util/sys/IniFile.rb +132 -131
  56. data/lib/com/wiris/util/sys/Lock.rb +8 -0
  57. data/lib/com/wiris/util/sys/LockProvider.rb +8 -0
  58. data/lib/com/wiris/util/sys/Store.rb +126 -101
  59. data/lib/com/wiris/util/sys/StoreCache.rb +63 -0
  60. data/lib/com/wiris/util/sys/TimerProxy.rb +21 -0
  61. data/lib/com/wiris/util/sys/TimerTask.rb +8 -0
  62. data/lib/com/wiris/util/type/Arrays.rb +275 -0
  63. data/lib/com/wiris/util/type/ByteBuffer.rb +69 -0
  64. data/lib/com/wiris/util/type/Comparator.rb +8 -0
  65. data/lib/com/wiris/util/type/DataUtils.rb +24 -0
  66. data/lib/com/wiris/util/type/DoubleTools.rb +14 -0
  67. data/lib/com/wiris/util/type/HashCache.rb +43 -0
  68. data/lib/com/wiris/util/type/IntegerTools.rb +32 -0
  69. data/lib/com/wiris/util/type/Queue.rb +31 -0
  70. data/lib/com/wiris/util/type/SortArrayByStringLength.rb +26 -0
  71. data/lib/com/wiris/util/type/SortStringByLength.rb +26 -0
  72. data/lib/com/wiris/util/type/SortedHash.rb +45 -0
  73. data/lib/com/wiris/util/type/Stack.rb +31 -0
  74. data/lib/com/wiris/util/type/StringUtils.rb +56 -0
  75. data/lib/com/wiris/util/type/Tokenizer.rb +40 -0
  76. data/lib/com/wiris/util/type/UrlUtils.rb +78 -0
  77. data/lib/com/wiris/util/xml/ContentHandler.rb +8 -0
  78. data/lib/com/wiris/util/xml/DefaultHandler.rb +25 -0
  79. data/lib/com/wiris/util/xml/EntityResolver.rb +8 -0
  80. data/lib/com/wiris/util/xml/MathMLEntityResolver.rb +19 -0
  81. data/lib/com/wiris/util/xml/SAXParser.rb +470 -0
  82. data/lib/com/wiris/util/xml/SerializableImpl.rb +16 -15
  83. data/lib/com/wiris/util/xml/WCharacterBase.rb +968 -627
  84. data/lib/com/wiris/util/xml/WEntities.rb +11 -9
  85. data/lib/com/wiris/util/xml/WXmlUtils.rb +660 -490
  86. data/lib/com/wiris/util/xml/XmlSerializer.rb +517 -471
  87. data/lib/com/wiris/util/xml/XmlWriter.rb +260 -262
  88. data/lib/loader.rb +15 -12
  89. data/lib/src-generic/Array.rb +22 -22
  90. data/lib/src-generic/ArrayInt.rb +31 -31
  91. data/lib/src-generic/Base64.rb +14 -14
  92. data/lib/src-generic/BaseCode.rb +93 -93
  93. data/lib/src-generic/Boolean.rb +27 -0
  94. data/lib/src-generic/Bytes.rb +50 -50
  95. data/lib/src-generic/BytesInput.rb +37 -37
  96. data/lib/src-generic/EReg.rb +55 -55
  97. data/lib/src-generic/File.rb +35 -35
  98. data/lib/src-generic/FileLock.rb +26 -26
  99. data/lib/src-generic/FileSystem.rb +37 -37
  100. data/lib/src-generic/Hash.rb +42 -42
  101. data/lib/src-generic/Http.rb +111 -107
  102. data/lib/src-generic/HttpRequest.rb +25 -25
  103. data/lib/src-generic/HttpResponse.rb +70 -70
  104. data/lib/src-generic/Iterator.rb +20 -19
  105. data/lib/src-generic/Math.rb +14 -14
  106. data/lib/src-generic/Md5.rb +8 -8
  107. data/lib/src-generic/Md5Tools.rb +11 -11
  108. data/lib/src-generic/PropertiesTools.rb +32 -32
  109. data/lib/src-generic/Reflect.rb +16 -16
  110. data/lib/src-generic/RubyConfigurationUpdater.rb +49 -45
  111. data/lib/src-generic/Serializer.rb +84 -84
  112. data/lib/src-generic/Std.rb +74 -74
  113. data/lib/src-generic/Storage.rb +152 -152
  114. data/lib/src-generic/StringBuf.rb +40 -40
  115. data/lib/src-generic/StringTools.rb +44 -46
  116. data/lib/src-generic/Timer.rb +6 -6
  117. data/lib/src-generic/Type.rb +18 -18
  118. data/lib/src-generic/TypeTools.rb +31 -31
  119. data/lib/src-generic/Unserializer.rb +72 -72
  120. data/lib/src-generic/Utf8.rb +26 -26
  121. data/lib/src-generic/Xml.rb +199 -198
  122. data/lib/src-generic/extended/Integer.rb +5 -5
  123. data/lib/src-generic/extended/Math.rb +6 -6
  124. data/lib/src-generic/extended/Properties.rb +11 -11
  125. data/lib/src-generic/extended/String.rb +38 -38
  126. data/lib/src-generic/settings/PlatformSettings.rb +18 -18
  127. data/lib/src-generic/system/HttpProxy.rb +23 -0
  128. data/lib/src-generic/system/HttpProxyAuth.rb +10 -0
  129. data/lib/wirispluginengine.rb +5 -5
  130. data/lib/wirispluginengine/engine.rb +5 -5
  131. data/lib/wirispluginengine/integration/cleancache.rb +8 -8
  132. data/lib/wirispluginengine/integration/configurationjs.rb +8 -15
  133. data/lib/wirispluginengine/integration/configurationjson.rb +6 -6
  134. data/lib/wirispluginengine/integration/createimage.rb +7 -7
  135. data/lib/wirispluginengine/integration/getmathml.rb +18 -18
  136. data/lib/wirispluginengine/integration/resource.rb +8 -8
  137. data/lib/wirispluginengine/integration/service.rb +5 -5
  138. data/lib/wirispluginengine/integration/showimage.rb +28 -21
  139. data/lib/wirispluginengine/integration/test.rb +5 -5
  140. data/lib/wirispluginengine/integration/testfilter.rb +10 -0
  141. data/lib/wirispluginengine/version.rb +2 -2
  142. data/resources/VERSION +1 -1
  143. data/resources/WEB-INF/web.xml +25 -0
  144. data/resources/WIRISplugins.js +3809 -0
  145. data/resources/default-configuration.ini +47 -45
  146. data/resources/tech.txt +1 -1
  147. data/resources/wirisplugin.css +43 -42
  148. metadata +40 -4
  149. 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
- class XmlSerializer
5
- include Wiris
3
+ require('com/wiris/util/xml/WXmlUtils.rb')
4
+ class XmlSerializer
5
+ include Wiris
6
6
 
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
- @cacheTagStackCount = 0
32
- @ignoreTagStackCount = 0
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
- else
65
- if current==desired
66
- beginTag(tag)
34
+ def getMode()
35
+ return self.mode
67
36
  end
68
- end
69
- return current
70
- end
71
- def beginTagIfBool(tag,current,desired)
72
- if @mode==MODE_READ
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
- else
77
- if current==desired
78
- beginTag(tag)
43
+ def readXml(xml)
44
+ self.setCurrentElement(xml)
45
+ self.mode = XmlSerializer::MODE_READ
46
+ return readNode()
79
47
  end
80
- end
81
- return current
82
- end
83
- def beginTag(tag)
84
- if @mode==MODE_READ
85
- if ((currentChild()!=nil)&&(currentChild()::nodeType==Xml::Element))&&(tag==currentChild()::nodeName)
86
- pushState()
87
- setCurrentElement(currentChild())
88
- else
89
- return false
90
- end
91
- else
92
- if @mode==MODE_WRITE
93
- if isIgnoreTag(tag)||(@ignoreTagStackCount>0)
94
- @ignoreTagStackCount+=1
95
- else
96
- child = @element::createElement_(tag)
97
- @element::addChild(child)
98
- @element = child
99
- end
100
- else
101
- if (@mode==MODE_REGISTER)&&(@currentTag==nil)
102
- @currentTag = tag
103
- else
104
- if @mode==MODE_CACHE
105
- @cacheTagStackCount+=1
106
- end
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
- @mode = MODE_WRITE
130
- @element = @element::parent_()
76
+ if current == desired
77
+ beginTag(tag)
78
+ end
131
79
  end
132
- end
80
+ return current
133
81
  end
134
- end
135
- end
136
- def attributeString(name,value,def_)
137
- if @mode==XmlSerializer::MODE_READ
138
- value = WXmlUtils::getAttribute(@element,name)
139
- if value==nil
140
- value = def_
141
- end
142
- else
143
- if @mode==XmlSerializer::MODE_WRITE
144
- if ((value!=nil)&&!((value==def_)))&&(@ignoreTagStackCount==0)
145
- WXmlUtils::setAttribute(@element,name,value)
146
- end
147
- end
148
- end
149
- return value
150
- end
151
- def cacheAttribute(name,value,def_)
152
- if @mode==XmlSerializer::MODE_WRITE
153
- if @cache
154
- value = attributeString(name,value,def_)
155
- @mode = XmlSerializer::MODE_CACHE
156
- @cacheTagStackCount = 0
157
- end
158
- else
159
- value = attributeString(name,value,def_)
160
- end
161
- return value
162
- end
163
- def attributeBoolean(name,value,def_)
164
- return XmlSerializer::parseBoolean(attributeString(name,XmlSerializer::booleanToString(value),XmlSerializer::booleanToString(def_)))
165
- end
166
- def attributeInt(name,value,def_)
167
- return Std::parseInt(attributeString(name,""+value.to_s,""+def_.to_s))
168
- end
169
- def attributeIntArray(name,value,def_)
170
- return stringToArray(attributeString(name,arrayToString(value),arrayToString(def_)))
171
- end
172
- def arrayToString(a)
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
- end
469
- return false
470
- end
471
- def self.compareStrings(a,b)
472
- an = a::length()
473
- bn = b::length()
474
- n = (an>bn) ? bn : an
475
- for i in 0..n-1
476
- c = Std::charCodeAt(a,i)-Std::charCodeAt(b,i)
477
- if c!=0
478
- return c
479
- end
480
- i+=1
481
- end
482
- return a::length()-b::length()
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