rexleparser 0.9.10 → 1.0.1

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: 6ab3ac71d4b2615369aa480a89962c79578eb04a3c149a929a23db877ed2e8d0
4
- data.tar.gz: e3fec0abf560e6ab097ac72c869db24ebf62a901978162103cccaaa5c6b38f42
3
+ metadata.gz: a98589dfd93cc2c5a4946f9dc5a2bc5418bd30cbfc4662330d7698bf13b1e107
4
+ data.tar.gz: 92a35568634aa47b9032aeb26cc193830adee7ba0c3d48dc2a53458119671791
5
5
  SHA512:
6
- metadata.gz: b8781aafeffd836f86f1a430e4fbb6dddf93a983237db4274db8c487a79ed6ec763994f02968471cc0665e67e5fec1daee099feda9654875d705aba15ef1b1e6
7
- data.tar.gz: 389d4e385e9e965489fe09d13919656f3f0a24a9dc8a15a15d1672132927a87e0751368210747c9399d03460d673c742830d3448e385f328919dfddb2e837dcb
6
+ metadata.gz: 1132a312974ad5eaef5b1267bf18f35e0228138a3247a867e6e9de4f366f8c654b6f24220e68922cca90698520c07bf45cdc52d44390fedf50e8c97df3ac0666
7
+ data.tar.gz: 211dddd0cd0411e4311541dd88e8742dbb1f32a2d5cdd6a25b48d90ef25ffd4a4bab7525180c5bdfe7a0b8afb1610e4b532e2fefec4980acae2d22dc160b0602
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexleparser.rb CHANGED
@@ -7,20 +7,20 @@
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
@@ -28,13 +28,13 @@ class Attributes < Hash
28
28
  def to_s(unescape: true)
29
29
  unescape ? self.gsub('&amp;','&').gsub('&pos;',"'") : self
30
30
  end
31
-
32
- end
33
-
31
+
32
+ end
33
+
34
34
  def initialize(h={})
35
35
  super().merge! h
36
36
  end
37
-
37
+
38
38
  def []=(k,v)
39
39
  super(k, k != :class ? Value.new(v) : v)
40
40
  end
@@ -48,17 +48,17 @@ class Attributes < Hash
48
48
  end
49
49
 
50
50
  end
51
-
51
+
52
52
  def merge(h)
53
53
 
54
- h2 = h.inject({}) do |r, kv|
54
+ h2 = h.inject({}) do |r, kv|
55
55
  k, raw_v = kv
56
56
  v = raw_v.is_a?(String) ? Value.new(raw_v) : raw_v
57
- r.merge(k => v)
57
+ r.merge(k => v)
58
58
  end
59
-
59
+
60
60
  super(h2)
61
-
61
+
62
62
  end
63
63
  end
64
64
 
@@ -74,7 +74,7 @@ class RexleParser
74
74
  super()
75
75
  s = raw_s.clone.strip
76
76
  return if s.empty?
77
-
77
+
78
78
  raw_xml, raw_instrctns = if s.lines.first =~ /<?xml/ then
79
79
  s.split(/(?=\?>\s*<\w)/,2).reverse
80
80
  else
@@ -86,10 +86,10 @@ class RexleParser
86
86
  @to_a = reverse(parse_node(raw_xml.strip.reverse))
87
87
 
88
88
  end
89
-
89
+
90
90
  private
91
91
 
92
-
92
+
93
93
  def scan_next(r, tagname)
94
94
 
95
95
  j = tagname
@@ -98,7 +98,7 @@ class RexleParser
98
98
 
99
99
  # end tag match
100
100
  tag = r[/^>[^<]+</]
101
-
101
+
102
102
  if tag[1][/[ \w"']/] and tag[-2] != '/' then
103
103
 
104
104
  # is it the end tag to match the start tag?
@@ -106,18 +106,18 @@ class RexleParser
106
106
  end_tag = tag[/^>[^>]*#{j}<$/]
107
107
 
108
108
  if end_tag then
109
-
109
+
110
110
  j = nil
111
111
  return [:end_tag, end_tag]
112
112
 
113
113
  elsif tag[/^>[^>]*\w+<$/] then
114
114
  # broken tag found
115
115
  broken_tag = tag
116
- return [:child, [nil, [], broken_tag]] if broken_tag
116
+ return [:child, [nil, [], broken_tag]] if broken_tag
117
117
  else
118
-
118
+
119
119
  text, newtag = tag.sub('>',';tg&').split(/>/,2)
120
-
120
+
121
121
  if newtag then
122
122
  tag = newtag
123
123
  r.prepend '>' + tag
@@ -126,16 +126,16 @@ class RexleParser
126
126
  return [:child, text]
127
127
  end
128
128
  elsif r[0,3] == '>--' then # comment tag found
129
-
129
+
130
130
  r.slice!(0,3)
131
131
  i = r =~ /(\-\-!<)/
132
132
  s = r.slice!(0,i)
133
133
  r.slice!(0,4)
134
134
 
135
135
  tagname, content = ['-!',s]
136
-
136
+
137
137
  return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
138
-
138
+
139
139
  elsif r[0,3] == '>]]' then # CDATA tag found
140
140
 
141
141
  r.slice!(0,3)
@@ -145,22 +145,22 @@ class RexleParser
145
145
 
146
146
  tagname, content = ['[!',s]
147
147
 
148
- return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
149
-
148
+ return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
149
+
150
150
  elsif tag[/>\/|\/<$/] or tag[/^>.*[\w!]+\/<$/] then
151
-
152
- return [:newnode]
153
-
151
+
152
+ return [:newnode]
153
+
154
154
  else
155
-
156
- r.sub!('>',';tg&')
155
+
156
+ r.sub!('>',';tg&')
157
157
  i = r =~ />(?:[\-\/"'\w]|\]\])/ # collect until a tag is found or a CDATA element
158
158
  text = r.slice!(0,i)
159
159
 
160
160
  return [:child, text] if text
161
161
 
162
162
  end # end of tag match
163
-
163
+
164
164
  else
165
165
 
166
166
  # it's a text value
@@ -170,12 +170,12 @@ class RexleParser
170
170
  return [:child, text] if text
171
171
  end
172
172
  end
173
-
173
+
174
174
  def parse_node(r, j=nil)
175
-
175
+
176
176
  return unless r.length > 0
177
177
  tag = r.slice!(/^>[^<]+</) if (r =~ /^>[^<]+</) == 0
178
- tagname = tag[/([\w!:]+)\/?<$/,1]
178
+ tagname = tag[/([\w!:]+)\/?<$/,1]
179
179
 
180
180
  # self closing tag?
181
181
  if tag[/^>\/.*#{tagname}<$/m] then
@@ -189,16 +189,16 @@ class RexleParser
189
189
  start_tag.reverse + '; context: ' + r[0..120].reverse.inspect
190
190
  end
191
191
 
192
- until end_tag do
193
-
194
- key, res = scan_next r, tagname
195
-
196
- case key
192
+ until end_tag do
193
+
194
+ key, res = scan_next r, tagname
195
+
196
+ case key
197
197
  when :end_tag
198
198
  end_tag = res
199
199
  r2 = [start_tag, children, end_tag]
200
200
  end_tag = nil
201
-
201
+
202
202
  return r2
203
203
  when :child
204
204
  children << res
@@ -213,13 +213,13 @@ class RexleParser
213
213
  end
214
214
 
215
215
  def get_attributes(raw_attributes)
216
-
216
+
217
217
  r1 = /([\w\-:\(\)]+\='[^']*)'/
218
218
  r2 = /([\w\-:\(\)]+\="[^"]*)"/
219
-
219
+
220
220
  r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
221
221
  .flatten.inject(Attributes.new) do |r, x|
222
- attr_name, raw_val = x.split(/=/,2)
222
+ attr_name, raw_val = x.split(/=/,2)
223
223
  val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
224
224
  r.merge(attr_name.to_sym => val)
225
225
  end
@@ -228,17 +228,17 @@ class RexleParser
228
228
  end
229
229
 
230
230
  def reverse(raw_obj)
231
-
231
+
232
232
  return unless raw_obj
233
233
  obj = raw_obj.clone
234
234
  return obj.reverse! if obj.is_a? String
235
235
 
236
236
  tag = obj.pop.reverse
237
-
237
+
238
238
  children = obj[-1]
239
239
 
240
240
  r = children.reverse.map {|x| reverse(x)}
241
-
241
+
242
242
  return [tag[/[!\-\w:\[]+/], get_attributes(tag), *r]
243
- end
243
+ end
244
244
  end
data.tar.gz.sig CHANGED
Binary file
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.10
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,32 +10,33 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
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
- c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
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
13
+ MIIEljCCAv6gAwIBAgIBATANBgkqhkiG9w0BAQsFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTIzMDMwNzEyNDM0MVoXDTI0MDMwNjEyNDM0MVowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoC
18
+ ggGBAMXdVvebuQa1+janwRx6yjABUKs2WSd6ns81LBol0KgH8Lmjj5CdIJHK/IFZ
19
+ pcjvbJCSNJS9eREO4RnHkJTUpYE6xgTboCsSMdTpJU3MK2Y+PHXQu5YJHBQQBWSe
20
+ LORpuKuhQuhU+oQgxnuszksIO1UBU+Xh0D5dntbWpiFBGPzTctoBTtJqBdClZwXc
21
+ s1mAmXhAkeK2hmT0Rw/IY2CqZAMeMbrVZBaqazYvqXvfDisRPMMZVZMz9al3w6IE
22
+ L9E4tDbU1sExjUgVGB+BIV6SIG5kYrOzpDKnZXhvPbmUR08iZeTe0IpUIFMIYPIy
23
+ kPJxO45OaxLwnabV+jC38P2CV4Pbx6dij/M/mWisD/az4kzmw1kGUMGJiPIn/XRX
24
+ mLOOxuCQxHDts+7tvD+/wTtSIxklsvVKz49QH1ybNrOdoYQuB8qNnLPFzKFr+5SC
25
+ ojuaJ45mf/Uv3Orps8LXj8WmOBvbJWC1/Lglhy+hhGV/7gh1EKVMpx6AwKcJ1+85
26
+ R19PMQIDAQABo4GKMIGHMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
27
+ BBQiPSrne0dHxLynj/1izBmEwv/lkTAmBgNVHREEHzAdgRtnZW1tYXN0ZXJAamFt
28
+ ZXNyb2JlcnRzb24uZXUwJgYDVR0SBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
29
+ c29uLmV1MA0GCSqGSIb3DQEBCwUAA4IBgQBWIQG28MQXuVSHsAw/rQuaE1FpOmz0
30
+ AXWhHK1oDWxkoPTBIoLil2M2PI3htcBBRLUzyli9XFvqjzuO+J8LpWqs2iddxjXP
31
+ 3xtUg0h+0urVRk00xwsnPLppwT7VxvycQifN31En8rMEzd24V5FKkn90brdokVQC
32
+ 5aL/9LD3S5k3t4AyUcGeOFuU+k87lEz8bzKk2wjOjzpgxjNyqeK6h0iFeA94rhnp
33
+ HPaebr7ytgAR3dKU/Zr/gmZdQroli86LaOqGK1AJQ9E1RFBKwKluNa27dR3VyqBA
34
+ VG1Z/9QNxm0ivqKr7samwkNUGiql+s4CPZndbJD/hmDDdmCtYf1mywCAUOh+DrfU
35
+ iKwWhO5Qmo/RUOvr0a4KtP5i0N7qY1LFMSCpfCRTS9zTlfTIjs1ipAnWhLcqp5Js
36
+ NMSYHad41dFYLrVyE7mdZdIVlFqIdG+V1x7iY+zPpg7FS/8EUnK5zUxMC0YoLeK2
37
+ hcHycb1NL9Ujb7onXEop5Dobym6xO6V+yBY=
37
38
  -----END CERTIFICATE-----
38
- date: 2022-01-21 00:00:00.000000000 Z
39
+ date: 2023-03-07 00:00:00.000000000 Z
39
40
  dependencies: []
40
41
  description:
41
42
  email: digital.robertson@gmail.com
@@ -63,8 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
64
  - !ruby/object:Gem::Version
64
65
  version: '0'
65
66
  requirements: []
66
- rubyforge_project:
67
- rubygems_version: 2.7.10
67
+ rubygems_version: 3.4.4
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: Rexleparser is an XML parser used by the Rexle gem
metadata.gz.sig CHANGED
Binary file