rexleparser 0.9.6 → 0.9.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 122ee3f637f00c846d69e1b1b66b57a328ff3879b29b902e5517d81843e9c848
4
- data.tar.gz: 869adc2d257e1e01c2adf4956e8bba4b83678b267430d8d58a9c310f1aad48a3
3
+ metadata.gz: 6ab3ac71d4b2615369aa480a89962c79578eb04a3c149a929a23db877ed2e8d0
4
+ data.tar.gz: e3fec0abf560e6ab097ac72c869db24ebf62a901978162103cccaaa5c6b38f42
5
5
  SHA512:
6
- metadata.gz: 4ffa3bbed8f9ee4e840cc2c92fe6d3e5a20f18fc36154a474c4e050551c6662929364fd24fafb38578ad63f99efcbc97a9287f58594548cbf0a848eec31aabe9
7
- data.tar.gz: 9878555aa41e9ee664483ffbd8db2368b2dc2fd978110ebe7de30758f8b3e7d3373bdaba7336145686badab7a42524ac138aa270e4ae1f80b8a5df1b155a954a
6
+ metadata.gz: b8781aafeffd836f86f1a430e4fbb6dddf93a983237db4274db8c487a79ed6ec763994f02968471cc0665e67e5fec1daee099feda9654875d705aba15ef1b1e6
7
+ data.tar.gz: 389d4e385e9e965489fe09d13919656f3f0a24a9dc8a15a15d1672132927a87e0751368210747c9399d03460d673c742830d3448e385f328919dfddb2e837dcb
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexleparser.rb CHANGED
@@ -7,49 +7,58 @@
7
7
  class Attributes < Hash
8
8
 
9
9
  class Value < String
10
-
10
+
11
11
  def initialize(value)
12
12
  #jr2020-04-30 super(value.gsub("'", '&apos;'))
13
13
  super(value)
14
14
  end
15
-
15
+
16
16
  def <(val2)
17
17
  self.to_f < val2.to_f
18
- end
19
-
18
+ end
19
+
20
20
  def >(val2)
21
21
  self.to_f > val2.to_f
22
22
  end
23
-
23
+
24
24
  def inspect()
25
25
  super().gsub('&lt;','<',).gsub('&gt;','>').gsub('&pos;',"'")
26
26
  end
27
-
28
- def to_s()
29
- #jr2020-07-18 self.gsub('&lt;','<',).gsub('&gt;','>').gsub('&pos;',"'")
30
- self.gsub('&pos;',"'")
27
+
28
+ def to_s(unescape: true)
29
+ unescape ? self.gsub('&amp;','&').gsub('&pos;',"'") : self
31
30
  end
32
-
33
- end
34
-
31
+
32
+ end
33
+
35
34
  def initialize(h={})
36
35
  super().merge! h
37
36
  end
38
-
37
+
39
38
  def []=(k,v)
40
39
  super(k, k != :class ? Value.new(v) : v)
41
40
  end
42
-
41
+
42
+ def delete(key=nil)
43
+
44
+ if key then
45
+ super(key)
46
+ else
47
+ keys.each {|key| super(key)}
48
+ end
49
+
50
+ end
51
+
43
52
  def merge(h)
44
53
 
45
- h2 = h.inject({}) do |r, kv|
54
+ h2 = h.inject({}) do |r, kv|
46
55
  k, raw_v = kv
47
56
  v = raw_v.is_a?(String) ? Value.new(raw_v) : raw_v
48
- r.merge(k => v)
57
+ r.merge(k => v)
49
58
  end
50
-
59
+
51
60
  super(h2)
52
-
61
+
53
62
  end
54
63
  end
55
64
 
@@ -65,7 +74,7 @@ class RexleParser
65
74
  super()
66
75
  s = raw_s.clone.strip
67
76
  return if s.empty?
68
-
77
+
69
78
  raw_xml, raw_instrctns = if s.lines.first =~ /<?xml/ then
70
79
  s.split(/(?=\?>\s*<\w)/,2).reverse
71
80
  else
@@ -77,10 +86,10 @@ class RexleParser
77
86
  @to_a = reverse(parse_node(raw_xml.strip.reverse))
78
87
 
79
88
  end
80
-
89
+
81
90
  private
82
91
 
83
-
92
+
84
93
  def scan_next(r, tagname)
85
94
 
86
95
  j = tagname
@@ -89,7 +98,7 @@ class RexleParser
89
98
 
90
99
  # end tag match
91
100
  tag = r[/^>[^<]+</]
92
-
101
+
93
102
  if tag[1][/[ \w"']/] and tag[-2] != '/' then
94
103
 
95
104
  # is it the end tag to match the start tag?
@@ -97,18 +106,18 @@ class RexleParser
97
106
  end_tag = tag[/^>[^>]*#{j}<$/]
98
107
 
99
108
  if end_tag then
100
-
109
+
101
110
  j = nil
102
111
  return [:end_tag, end_tag]
103
112
 
104
113
  elsif tag[/^>[^>]*\w+<$/] then
105
114
  # broken tag found
106
115
  broken_tag = tag
107
- return [:child, [nil, [], broken_tag]] if broken_tag
116
+ return [:child, [nil, [], broken_tag]] if broken_tag
108
117
  else
109
-
118
+
110
119
  text, newtag = tag.sub('>',';tg&').split(/>/,2)
111
-
120
+
112
121
  if newtag then
113
122
  tag = newtag
114
123
  r.prepend '>' + tag
@@ -117,16 +126,16 @@ class RexleParser
117
126
  return [:child, text]
118
127
  end
119
128
  elsif r[0,3] == '>--' then # comment tag found
120
-
129
+
121
130
  r.slice!(0,3)
122
131
  i = r =~ /(\-\-!<)/
123
132
  s = r.slice!(0,i)
124
133
  r.slice!(0,4)
125
134
 
126
135
  tagname, content = ['-!',s]
127
-
136
+
128
137
  return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
129
-
138
+
130
139
  elsif r[0,3] == '>]]' then # CDATA tag found
131
140
 
132
141
  r.slice!(0,3)
@@ -136,22 +145,22 @@ class RexleParser
136
145
 
137
146
  tagname, content = ['[!',s]
138
147
 
139
- return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
140
-
148
+ return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
149
+
141
150
  elsif tag[/>\/|\/<$/] or tag[/^>.*[\w!]+\/<$/] then
142
-
143
- return [:newnode]
144
-
151
+
152
+ return [:newnode]
153
+
145
154
  else
146
-
147
- r.sub!('>',';tg&')
155
+
156
+ r.sub!('>',';tg&')
148
157
  i = r =~ />(?:[\-\/"'\w]|\]\])/ # collect until a tag is found or a CDATA element
149
158
  text = r.slice!(0,i)
150
159
 
151
160
  return [:child, text] if text
152
161
 
153
162
  end # end of tag match
154
-
163
+
155
164
  else
156
165
 
157
166
  # it's a text value
@@ -161,12 +170,12 @@ class RexleParser
161
170
  return [:child, text] if text
162
171
  end
163
172
  end
164
-
173
+
165
174
  def parse_node(r, j=nil)
166
-
175
+
167
176
  return unless r.length > 0
168
177
  tag = r.slice!(/^>[^<]+</) if (r =~ /^>[^<]+</) == 0
169
- tagname = tag[/([\w!:]+)\/?<$/,1]
178
+ tagname = tag[/([\w!:]+)\/?<$/,1]
170
179
 
171
180
  # self closing tag?
172
181
  if tag[/^>\/.*#{tagname}<$/m] then
@@ -180,16 +189,16 @@ class RexleParser
180
189
  start_tag.reverse + '; context: ' + r[0..120].reverse.inspect
181
190
  end
182
191
 
183
- until end_tag do
184
-
185
- key, res = scan_next r, tagname
186
-
187
- case key
192
+ until end_tag do
193
+
194
+ key, res = scan_next r, tagname
195
+
196
+ case key
188
197
  when :end_tag
189
198
  end_tag = res
190
199
  r2 = [start_tag, children, end_tag]
191
200
  end_tag = nil
192
-
201
+
193
202
  return r2
194
203
  when :child
195
204
  children << res
@@ -204,13 +213,13 @@ class RexleParser
204
213
  end
205
214
 
206
215
  def get_attributes(raw_attributes)
207
-
216
+
208
217
  r1 = /([\w\-:\(\)]+\='[^']*)'/
209
218
  r2 = /([\w\-:\(\)]+\="[^"]*)"/
210
-
219
+
211
220
  r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
212
221
  .flatten.inject(Attributes.new) do |r, x|
213
- attr_name, raw_val = x.split(/=/,2)
222
+ attr_name, raw_val = x.split(/=/,2)
214
223
  val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
215
224
  r.merge(attr_name.to_sym => val)
216
225
  end
@@ -219,17 +228,17 @@ class RexleParser
219
228
  end
220
229
 
221
230
  def reverse(raw_obj)
222
-
231
+
223
232
  return unless raw_obj
224
233
  obj = raw_obj.clone
225
234
  return obj.reverse! if obj.is_a? String
226
235
 
227
236
  tag = obj.pop.reverse
228
-
237
+
229
238
  children = obj[-1]
230
239
 
231
240
  r = children.reverse.map {|x| reverse(x)}
232
-
241
+
233
242
  return [tag[/[!\-\w:\[]+/], get_attributes(tag), *r]
234
- end
243
+ end
235
244
  end
data.tar.gz.sig CHANGED
@@ -1,2 +1,3 @@
1
- a��X�,}=U:��,���^�� ���l7v*�%o쑥O� j���R]�%HEI�I@���� �l i��'I����-�Pr&B5m��g�I��b2h�i���q�-70YTb������=$�����ȅe+�!"5���c�?y�������������aU.v���\�]�!�$ �7�q�~� 5�ID��%����\��KՔ0k��/���H�&:� �@2B�#���������.���� ��-�[Po.�7*J���
2
- ƙdb<�Ӥ�h���L�8o�~s=���b�ӉԺ�*���j���"Yw��/Q0�(l���vSGZd���th��y�7����- ��0{0Ld���ba嵵��ԛ�L����x'�
1
+ :JlhTd�^�L< ����;d�:�1Q����:W���<b J�;��o��}��zp����v�\�ZthJ��5&W�ӳ�/����SQ�Í�?��[��\���\ $���]��)r��6LS�zE�����3��-o(��)M�z�0~�Vɾ�*�ׂ�.��w�&�t�B6� �jc�,ʟF�\!��~��a��Z8��������ڢ��x�=P�%q�W��/���+�r��H�!5�5��Y�����*��Jw`f#\���*H�1�{�����UA'��/�K��l�r�fy
2
+ Mt��{�r��!jQA��f��h�����6�٢n�x
3
+ ���-�vP�x%vu3E�r3��n~ƽt`a��X��L�1B�r��;�F��&ܣM�
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rexleparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,34 +11,34 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTMwMjAwODA5WhcN
15
- MjAwOTI5MjAwODA5WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDk5pTR
17
- pX4gfQNbdtleggKLuPVnWNjmpA9dhXvIU5wmWsOFv9Iz9S6IcCo6jphqosofb8PI
18
- c79Jv3a0COalq4Qka3g84ew6SuUf1MeVN9Q8V4bhUiuNLC+I/zu66TldHOpGFG+F
19
- oz/GiusJvsDI5/VbsWasECR9zvrPcLEz8As+hKDsrQK0ugEWqcBwQv/DvGi/bwkS
20
- NSVhtms8DTWapCmF61ZtDzqtKHCInGNHgEb4t2VZ0CqvLVfbiD+H3E0OV2STh7Tj
21
- rmV6otJltarcdqmLc5Aq8mkrQPVd0263BtLYbvF0e/BuU9g6Vrs55VxPHrzt2zxz
22
- wL9ETVOXUbpMnjLEhlTjBqai+GALjFezpziR8SmK13luPMVmlT8CGBYVAvOTzvL7
23
- SDju4bVcCRXdx+BUwviB3m/Dbm26iE4HK/NIB5sydvnZcAu/FNrjI1POQirzQ640
24
- OJjtQnl40r7nNDJwCsDI4xHpOjgeacU6lJ0ttpS3Uakgwfe5Iwk7xPNrCUkCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUKZMicNOO
26
- WygILTKTnC128Qm/i9gwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjEwNDAxMTI1NDA1WhcN
15
+ MjIwNDAxMTI1NDA1WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC9tf0T
17
+ BYEECADFGYQisEHfQBwZtTbhsjWGAsDG1CCEg+Zje9gQIwCPVPUYtEiZkmPtb2en
18
+ YQ0gdCvrSdaxyeP+O7UnN2sR/Rb0G/4Nx3gzY5e+k1PeZ+YEHhehzF/CjpxCpief
19
+ Mhi2HgToCQ71U1iyUT3Squb3CBA6vwLJI6MMh71GWU01aqrMT/l9W3vN54SAZ5i7
20
+ Ud9nVF4JsMXwHyzikv5MH6WwIOzMhqKMUxaAeeGAlFN3u2G2DGW+7fd9/z5zpD6S
21
+ XJEvqjllf5fetAk77Lvw7hPfK0gHJHwTva7k87K704pYgKvi8bAwcnhk/aHXgyON
22
+ D42nLpNYipRRVTXiNXxo9svPTSDGsee5e0prmpC/U9bD2T4SxCrM7VvfVWXbhhEX
23
+ 47iZDeo2KllKmocjA02vfqtbaQXEATi3fSz/pdRpCr1g/Rd/JdAjRnxHgUu1q1TU
24
+ JU99/sfjaxBGvbL+C20cfMgdXdPrkGPNsiEDqfxK5IIBfaob8cp6jzKNDosCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUgG4OM1TJ
26
+ YfZh1FAIhnVN+TXDs64wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAWznQuPa0IAove4YVnnxZPpfBa4fA2acbeeigtMp8
29
- Y/WehyRBB60VNtRY/KuIdnJkgFmJntLnWK9E7YNw9cdexIZ3fw5uAqNqBgRx6+pW
30
- 5Aj3KfQq3ZP5WtWEXnOVq1A+S3/Id8xpJvHSI1GkQ6X/GCbq4AgHvouRWQNwywCR
31
- ssFgqF/VAwpp/5Xo/NiXsI4o6k9bWGuKM97T//HxVYjHNKFF+kUy8NtEIYryf76E
32
- +4tG+7dEUen0OkYgA/syu5OZHm+ARXVL7G+idlPkGv4ZyJZ7RNGg83cX0LpimoAX
33
- u+M+EVXoKE4kyNLbBsFySWQGP0958ELchC6pL3VSveL50NGhb6+Agp7Pavy4vcFC
34
- TFi1rfWwx2iTO1P17jHl8X0nNHB23O/MffFDU+kugutdTwLTajFUZNrf8R74c69S
35
- T71m/FVIgpvTDrvFUbSk75LOR+Sh7epwzIFUPsY3RNhBU1HuZrPEBI6IK8Xjc27P
36
- ahkta6LWar5SSzKmTY034ms+
28
+ BgkqhkiG9w0BAQsFAAOCAYEACka8bLaU+wG55T9M2lqOrmXMsKpHQ5xtmSQk29OJ
29
+ 4FUZ4aJEhTYxzJosvMNpauZVyrk+KyF/8uuGz5CfG/aPbOboB9+EIsmIcvRZ696M
30
+ BUXc6OuHE8SL0C9yuB9PloIZy2nxrRENFSV5xxyMS04bcaQjKCqtKw69+QT6lbra
31
+ iAU2EIebKyy0UIbrJSBIDKfig9KMEUrXvFUR4hu0lWpeT1bwq4sYeIeZNcg3v/y3
32
+ EbV3QK7AumvKgYvaz7iTu+9FKWT7AqIOH9wuPNPeXDLgyuKhLjdMaugz0wy6RYhT
33
+ Q8tgppTgSzQP8XwMg3xsaM+gWHbRLy8tO+3dkWTPN1m0xETWlSWFCiyi6oq8G4wC
34
+ t4pClPXscWrfmQa/u189WCF/O5BbsElrKQqx0vjq73l2apKjN9xViJi4LrEsZTuz
35
+ cF/nszU+U7PJ1WnQ+W7QTqoViru4N0S9bwi3YV5F5NPPeVnnrtmC2yruRfgTCI4b
36
+ 3nEas0DJDZbQSkPP1mVcybEA
37
37
  -----END CERTIFICATE-----
38
- date: 2020-07-18 00:00:00.000000000 Z
38
+ date: 2022-01-21 00:00:00.000000000 Z
39
39
  dependencies: []
40
40
  description:
41
- email: james@jamesrobertson.eu
41
+ email: digital.robertson@gmail.com
42
42
  executables: []
43
43
  extensions: []
44
44
  extra_rdoc_files: []
metadata.gz.sig CHANGED
Binary file