rexleparser 0.9.7 → 0.9.8

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: 557d2710c7631f795fa2c25c7f48e4ed92cb0a8662a7de7df5389550a801ff1c
4
- data.tar.gz: 1e1e2bc8f108e6d86ceff57fe4b8d88b82536c2d6074780414073d909c079bb5
3
+ metadata.gz: 6b2983f6245146772e1fb82307a06168ed3d3c07b3a96d85c4089aec35712a9d
4
+ data.tar.gz: e1b14339a868bc524e424e648e64ff957aa4b8aa25123d8359cb0e5c8c08939d
5
5
  SHA512:
6
- metadata.gz: 46e367a488b16fd54ee1098e4a1acc69b9f9d7162ad98b0a81c6d4ef276f7adb88b5fac977778ccc9de8ef15e56235f84fd25547ee4038316ff00fe7552d08ac
7
- data.tar.gz: 85eebfdf359c8c1f7f2c326cbfa05ce2bcf5a116fcf844b7ce2c95ab3d874606b5c12f479215afe515a483eaec92e7219bb79afdc7178fe2aeb54fe216c06e29
6
+ metadata.gz: 21e7bd2777aaff51cfe10f83d4b39b268d6fe3f188bea5ef08cedd5e899ae7d5798d19c176219e02fb64526348bacd939b3871984cff428e5d96d74095c20c99
7
+ data.tar.gz: 0b243a97ec7983176aff54db53482abf0449fd1c8c2294ea8b7995957e76fda61cee56f1155aa57d59bf3f969276f927932e9dff2d549d1d62a9ecec7c3e9e7d
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rexleparser.rb CHANGED
@@ -7,49 +7,49 @@
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()
27
+
28
+ def to_s(unescape: true)
29
29
  #jr2020-07-18 self.gsub('&lt;','<',).gsub('&gt;','>').gsub('&pos;',"'")
30
- self.gsub('&amp;','&').gsub('&pos;',"'")
30
+ self.gsub('&amp;','&').gsub('&pos;',"'") if unescape
31
31
  end
32
-
33
- end
34
-
32
+
33
+ end
34
+
35
35
  def initialize(h={})
36
36
  super().merge! h
37
37
  end
38
-
38
+
39
39
  def []=(k,v)
40
40
  super(k, k != :class ? Value.new(v) : v)
41
41
  end
42
-
42
+
43
43
  def merge(h)
44
44
 
45
- h2 = h.inject({}) do |r, kv|
45
+ h2 = h.inject({}) do |r, kv|
46
46
  k, raw_v = kv
47
47
  v = raw_v.is_a?(String) ? Value.new(raw_v) : raw_v
48
- r.merge(k => v)
48
+ r.merge(k => v)
49
49
  end
50
-
50
+
51
51
  super(h2)
52
-
52
+
53
53
  end
54
54
  end
55
55
 
@@ -65,7 +65,7 @@ class RexleParser
65
65
  super()
66
66
  s = raw_s.clone.strip
67
67
  return if s.empty?
68
-
68
+
69
69
  raw_xml, raw_instrctns = if s.lines.first =~ /<?xml/ then
70
70
  s.split(/(?=\?>\s*<\w)/,2).reverse
71
71
  else
@@ -77,10 +77,10 @@ class RexleParser
77
77
  @to_a = reverse(parse_node(raw_xml.strip.reverse))
78
78
 
79
79
  end
80
-
80
+
81
81
  private
82
82
 
83
-
83
+
84
84
  def scan_next(r, tagname)
85
85
 
86
86
  j = tagname
@@ -89,7 +89,7 @@ class RexleParser
89
89
 
90
90
  # end tag match
91
91
  tag = r[/^>[^<]+</]
92
-
92
+
93
93
  if tag[1][/[ \w"']/] and tag[-2] != '/' then
94
94
 
95
95
  # is it the end tag to match the start tag?
@@ -97,18 +97,18 @@ class RexleParser
97
97
  end_tag = tag[/^>[^>]*#{j}<$/]
98
98
 
99
99
  if end_tag then
100
-
100
+
101
101
  j = nil
102
102
  return [:end_tag, end_tag]
103
103
 
104
104
  elsif tag[/^>[^>]*\w+<$/] then
105
105
  # broken tag found
106
106
  broken_tag = tag
107
- return [:child, [nil, [], broken_tag]] if broken_tag
107
+ return [:child, [nil, [], broken_tag]] if broken_tag
108
108
  else
109
-
109
+
110
110
  text, newtag = tag.sub('>',';tg&').split(/>/,2)
111
-
111
+
112
112
  if newtag then
113
113
  tag = newtag
114
114
  r.prepend '>' + tag
@@ -117,16 +117,16 @@ class RexleParser
117
117
  return [:child, text]
118
118
  end
119
119
  elsif r[0,3] == '>--' then # comment tag found
120
-
120
+
121
121
  r.slice!(0,3)
122
122
  i = r =~ /(\-\-!<)/
123
123
  s = r.slice!(0,i)
124
124
  r.slice!(0,4)
125
125
 
126
126
  tagname, content = ['-!',s]
127
-
127
+
128
128
  return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
129
-
129
+
130
130
  elsif r[0,3] == '>]]' then # CDATA tag found
131
131
 
132
132
  r.slice!(0,3)
@@ -136,22 +136,22 @@ class RexleParser
136
136
 
137
137
  tagname, content = ['[!',s]
138
138
 
139
- return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
140
-
139
+ return [:child, [">#{tagname}<", [content], ">#{tagname}/<"]]
140
+
141
141
  elsif tag[/>\/|\/<$/] or tag[/^>.*[\w!]+\/<$/] then
142
-
143
- return [:newnode]
144
-
142
+
143
+ return [:newnode]
144
+
145
145
  else
146
-
147
- r.sub!('>',';tg&')
146
+
147
+ r.sub!('>',';tg&')
148
148
  i = r =~ />(?:[\-\/"'\w]|\]\])/ # collect until a tag is found or a CDATA element
149
149
  text = r.slice!(0,i)
150
150
 
151
151
  return [:child, text] if text
152
152
 
153
153
  end # end of tag match
154
-
154
+
155
155
  else
156
156
 
157
157
  # it's a text value
@@ -161,12 +161,12 @@ class RexleParser
161
161
  return [:child, text] if text
162
162
  end
163
163
  end
164
-
164
+
165
165
  def parse_node(r, j=nil)
166
-
166
+
167
167
  return unless r.length > 0
168
168
  tag = r.slice!(/^>[^<]+</) if (r =~ /^>[^<]+</) == 0
169
- tagname = tag[/([\w!:]+)\/?<$/,1]
169
+ tagname = tag[/([\w!:]+)\/?<$/,1]
170
170
 
171
171
  # self closing tag?
172
172
  if tag[/^>\/.*#{tagname}<$/m] then
@@ -180,16 +180,16 @@ class RexleParser
180
180
  start_tag.reverse + '; context: ' + r[0..120].reverse.inspect
181
181
  end
182
182
 
183
- until end_tag do
184
-
185
- key, res = scan_next r, tagname
186
-
187
- case key
183
+ until end_tag do
184
+
185
+ key, res = scan_next r, tagname
186
+
187
+ case key
188
188
  when :end_tag
189
189
  end_tag = res
190
190
  r2 = [start_tag, children, end_tag]
191
191
  end_tag = nil
192
-
192
+
193
193
  return r2
194
194
  when :child
195
195
  children << res
@@ -204,13 +204,13 @@ class RexleParser
204
204
  end
205
205
 
206
206
  def get_attributes(raw_attributes)
207
-
207
+
208
208
  r1 = /([\w\-:\(\)]+\='[^']*)'/
209
209
  r2 = /([\w\-:\(\)]+\="[^"]*)"/
210
-
210
+
211
211
  r = raw_attributes.scan(/#{r1}|#{r2}/).map(&:compact)\
212
212
  .flatten.inject(Attributes.new) do |r, x|
213
- attr_name, raw_val = x.split(/=/,2)
213
+ attr_name, raw_val = x.split(/=/,2)
214
214
  val = attr_name != 'class' ? raw_val[1..-1] : raw_val[1..-1].split
215
215
  r.merge(attr_name.to_sym => val)
216
216
  end
@@ -219,17 +219,17 @@ class RexleParser
219
219
  end
220
220
 
221
221
  def reverse(raw_obj)
222
-
222
+
223
223
  return unless raw_obj
224
224
  obj = raw_obj.clone
225
225
  return obj.reverse! if obj.is_a? String
226
226
 
227
227
  tag = obj.pop.reverse
228
-
228
+
229
229
  children = obj[-1]
230
230
 
231
231
  r = children.reverse.map {|x| reverse(x)}
232
-
232
+
233
233
  return [tag[/[!\-\w:\[]+/], get_attributes(tag), *r]
234
- end
234
+ end
235
235
  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.7
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,10 +35,10 @@ cert_chain:
35
35
  cF/nszU+U7PJ1WnQ+W7QTqoViru4N0S9bwi3YV5F5NPPeVnnrtmC2yruRfgTCI4b
36
36
  3nEas0DJDZbQSkPP1mVcybEA
37
37
  -----END CERTIFICATE-----
38
- date: 2021-04-01 00:00:00.000000000 Z
38
+ date: 2022-01-01 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