nokolexbor 0.3.0-x64-mingw-ucrt → 0.3.2-x64-mingw-ucrt
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/lib/nokolexbor/3.1/nokolexbor.so +0 -0
- data/lib/nokolexbor/document.rb +4 -0
- data/lib/nokolexbor/node.rb +45 -1
- data/lib/nokolexbor/node_set.rb +17 -0
- data/lib/nokolexbor/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84dbcded2e705c7a97e6e2409e504aaa8d88f668a9a951e9d116bd80fa6187c3
|
4
|
+
data.tar.gz: 5bf9ec35839e7736e75815e5f45f0d8f516c6b8a6ab69ba17e1a29caff8e3686
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc908e49de45ba73f0a488a8e287231bfdc25447ce1fa8d543220effdc59c9e906b3bc621959b8d0acbaf70f5a302f9039cc8baf65b4db73f1260339662f5c56
|
7
|
+
data.tar.gz: f321b363e12b9b7c30fb7fe4d8e1e581a643a2c15f6bad122bef70a6b7540eb61535a87d9ae17a1442fb4eadca0ed286365d1125ec07edccdb3472550d0fab4a
|
Binary file
|
data/lib/nokolexbor/document.rb
CHANGED
data/lib/nokolexbor/node.rb
CHANGED
@@ -192,6 +192,16 @@ module Nokolexbor
|
|
192
192
|
at_css_impl(args.join(', '))
|
193
193
|
end
|
194
194
|
|
195
|
+
def nokogiri_css(*args)
|
196
|
+
rules, handler, ns, _ = extract_params(args)
|
197
|
+
|
198
|
+
nokogiri_css_internal(self, rules, handler, ns)
|
199
|
+
end
|
200
|
+
|
201
|
+
def nokogiri_at_css(*args)
|
202
|
+
nokogiri_css(*args).first
|
203
|
+
end
|
204
|
+
|
195
205
|
def xpath(*args)
|
196
206
|
paths, handler, ns, binds = extract_params(args)
|
197
207
|
|
@@ -299,6 +309,10 @@ module Nokolexbor
|
|
299
309
|
|
300
310
|
private
|
301
311
|
|
312
|
+
def nokogiri_css_internal(node, rules, handler, ns)
|
313
|
+
xpath_internal(node, css_rules_to_xpath(rules, ns), handler, ns, nil)
|
314
|
+
end
|
315
|
+
|
302
316
|
def xpath_internal(node, paths, handler, ns, binds)
|
303
317
|
# document = node.document
|
304
318
|
# return NodeSet.new(document) unless document
|
@@ -326,6 +340,34 @@ module Nokolexbor
|
|
326
340
|
ctx.evaluate(path, handler)
|
327
341
|
end
|
328
342
|
|
343
|
+
def css_rules_to_xpath(rules, ns)
|
344
|
+
rules.map { |rule| xpath_query_from_css_rule(rule, ns) }
|
345
|
+
end
|
346
|
+
|
347
|
+
def ensure_nokogiri
|
348
|
+
unless defined?(Nokogiri) && defined?(Nokogiri::CSS)
|
349
|
+
require 'nokogiri'
|
350
|
+
end
|
351
|
+
rescue LoadError
|
352
|
+
fail('nokogiri_css and nokogiri_at_css require Nokogiri to be installed')
|
353
|
+
end
|
354
|
+
|
355
|
+
def xpath_query_from_css_rule(rule, ns)
|
356
|
+
ensure_nokogiri
|
357
|
+
if defined? Nokogiri::CSS::XPathVisitor::BuiltinsConfig
|
358
|
+
visitor = Nokogiri::CSS::XPathVisitor.new(
|
359
|
+
builtins: Nokogiri::CSS::XPathVisitor::BuiltinsConfig::OPTIMAL,
|
360
|
+
doctype: :html4,
|
361
|
+
)
|
362
|
+
else
|
363
|
+
visitor = Nokogiri::CSS::XPathVisitorOptimallyUseBuiltins.new
|
364
|
+
end
|
365
|
+
self.class::IMPLIED_XPATH_CONTEXTS.map do |implied_xpath_context|
|
366
|
+
Nokogiri::CSS.xpath_for(rule.to_s, { prefix: implied_xpath_context, ns: ns,
|
367
|
+
visitor: visitor, })
|
368
|
+
end.join(" | ")
|
369
|
+
end
|
370
|
+
|
329
371
|
def extract_params(params)
|
330
372
|
handler = params.find do |param|
|
331
373
|
![Hash, String, Symbol].include?(param.class)
|
@@ -344,5 +386,7 @@ module Nokolexbor
|
|
344
386
|
|
345
387
|
[params, handler, ns, binds]
|
346
388
|
end
|
389
|
+
|
390
|
+
IMPLIED_XPATH_CONTEXTS = [".//"].freeze
|
347
391
|
end
|
348
|
-
end
|
392
|
+
end
|
data/lib/nokolexbor/node_set.rb
CHANGED
@@ -126,6 +126,23 @@ module Nokolexbor
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
+
|
130
|
+
def nokogiri_css(*args)
|
131
|
+
rules, handler, ns, _ = extract_params(args)
|
132
|
+
paths = css_rules_to_xpath(rules, ns)
|
133
|
+
|
134
|
+
NodeSet.new(@document) do |set|
|
135
|
+
each do |node|
|
136
|
+
node.send(:xpath_internal, node, paths, handler, ns, nil).each do |inner_node|
|
137
|
+
set << inner_node
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
private
|
144
|
+
|
145
|
+
IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
|
129
146
|
|
130
147
|
end
|
131
148
|
end
|
data/lib/nokolexbor/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokolexbor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: x64-mingw-ucrt
|
6
6
|
authors:
|
7
7
|
- Yicheng Zhou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|