nokolexbor 0.3.1-x64-mingw-ucrt → 0.3.3-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/document_fragment.rb +31 -0
- data/lib/nokolexbor/node.rb +49 -1
- data/lib/nokolexbor/node_set.rb +17 -0
- data/lib/nokolexbor/version.rb +1 -1
- data/lib/nokolexbor.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3a9ae41e4e72bc88b565954821978a8aceefd5cad7834addd14270aa97d974a
|
4
|
+
data.tar.gz: 965ae4b6706d44027dc96453bdcf75a8990257a6e00ec43cfc813a2aa622ee21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c3a908f950c137e317a3030a9e2b0b63d7fd94b688e50a3deac249baff9f3c95aadcb735ec401e59bb28fa563320c7157574852724641ab6fbbf8c846b0846d
|
7
|
+
data.tar.gz: 59f4f3b30a2e77d04d4a716f765da0c243fdca766409076fe373a219450240e18e002e8240dc63bc1bb2fe95262ae24f96b958d3f16f5c9813c3c6679f57b330
|
Binary file
|
data/lib/nokolexbor/document.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nokolexbor
|
4
|
+
class DocumentFragment < Nokolexbor::Node
|
5
|
+
def self.parse(tags)
|
6
|
+
new(Nokolexbor::Document.new, tags, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(document, tags = nil, ctx = nil)
|
10
|
+
return self unless tags
|
11
|
+
|
12
|
+
ctx ||= document
|
13
|
+
node_set = ctx.parse(tags)
|
14
|
+
node_set.each { |child| child.parent = self } unless node_set.empty?
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
"#document-fragment"
|
20
|
+
end
|
21
|
+
|
22
|
+
alias_method :outer_html, :inner_html
|
23
|
+
alias_method :to_html, :outer_html
|
24
|
+
alias_method :to_s, :outer_html
|
25
|
+
alias_method :serialize, :outer_html
|
26
|
+
|
27
|
+
def fragment(data)
|
28
|
+
document.fragment(data)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/nokolexbor/node.rb
CHANGED
@@ -182,6 +182,10 @@ module Nokolexbor
|
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
185
|
+
def fragment(tags)
|
186
|
+
Nokolexbor::DocumentFragment.new(document, tags, self)
|
187
|
+
end
|
188
|
+
|
185
189
|
alias_method :inner_html=, :children=
|
186
190
|
|
187
191
|
def css(*args)
|
@@ -192,6 +196,16 @@ module Nokolexbor
|
|
192
196
|
at_css_impl(args.join(', '))
|
193
197
|
end
|
194
198
|
|
199
|
+
def nokogiri_css(*args)
|
200
|
+
rules, handler, ns, _ = extract_params(args)
|
201
|
+
|
202
|
+
nokogiri_css_internal(self, rules, handler, ns)
|
203
|
+
end
|
204
|
+
|
205
|
+
def nokogiri_at_css(*args)
|
206
|
+
nokogiri_css(*args).first
|
207
|
+
end
|
208
|
+
|
195
209
|
def xpath(*args)
|
196
210
|
paths, handler, ns, binds = extract_params(args)
|
197
211
|
|
@@ -299,6 +313,10 @@ module Nokolexbor
|
|
299
313
|
|
300
314
|
private
|
301
315
|
|
316
|
+
def nokogiri_css_internal(node, rules, handler, ns)
|
317
|
+
xpath_internal(node, css_rules_to_xpath(rules, ns), handler, ns, nil)
|
318
|
+
end
|
319
|
+
|
302
320
|
def xpath_internal(node, paths, handler, ns, binds)
|
303
321
|
# document = node.document
|
304
322
|
# return NodeSet.new(document) unless document
|
@@ -326,6 +344,34 @@ module Nokolexbor
|
|
326
344
|
ctx.evaluate(path, handler)
|
327
345
|
end
|
328
346
|
|
347
|
+
def css_rules_to_xpath(rules, ns)
|
348
|
+
rules.map { |rule| xpath_query_from_css_rule(rule, ns) }
|
349
|
+
end
|
350
|
+
|
351
|
+
def ensure_nokogiri
|
352
|
+
unless defined?(Nokogiri) && defined?(Nokogiri::CSS)
|
353
|
+
require 'nokogiri'
|
354
|
+
end
|
355
|
+
rescue LoadError
|
356
|
+
fail('nokogiri_css and nokogiri_at_css require Nokogiri to be installed')
|
357
|
+
end
|
358
|
+
|
359
|
+
def xpath_query_from_css_rule(rule, ns)
|
360
|
+
ensure_nokogiri
|
361
|
+
if defined? Nokogiri::CSS::XPathVisitor::BuiltinsConfig
|
362
|
+
visitor = Nokogiri::CSS::XPathVisitor.new(
|
363
|
+
builtins: Nokogiri::CSS::XPathVisitor::BuiltinsConfig::OPTIMAL,
|
364
|
+
doctype: :html4,
|
365
|
+
)
|
366
|
+
else
|
367
|
+
visitor = Nokogiri::CSS::XPathVisitorOptimallyUseBuiltins.new
|
368
|
+
end
|
369
|
+
self.class::IMPLIED_XPATH_CONTEXTS.map do |implied_xpath_context|
|
370
|
+
Nokogiri::CSS.xpath_for(rule.to_s, { prefix: implied_xpath_context, ns: ns,
|
371
|
+
visitor: visitor, })
|
372
|
+
end.join(" | ")
|
373
|
+
end
|
374
|
+
|
329
375
|
def extract_params(params)
|
330
376
|
handler = params.find do |param|
|
331
377
|
![Hash, String, Symbol].include?(param.class)
|
@@ -344,5 +390,7 @@ module Nokolexbor
|
|
344
390
|
|
345
391
|
[params, handler, ns, binds]
|
346
392
|
end
|
393
|
+
|
394
|
+
IMPLIED_XPATH_CONTEXTS = [".//"].freeze
|
347
395
|
end
|
348
|
-
end
|
396
|
+
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
data/lib/nokolexbor.rb
CHANGED
@@ -25,6 +25,7 @@ require 'nokolexbor/version'
|
|
25
25
|
require 'nokolexbor/node'
|
26
26
|
require 'nokolexbor/document'
|
27
27
|
require 'nokolexbor/node_set'
|
28
|
+
require 'nokolexbor/document_fragment'
|
28
29
|
require 'nokolexbor/attribute'
|
29
30
|
require 'nokolexbor/xpath'
|
30
31
|
require 'nokolexbor/xpath_context'
|
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.3
|
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
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/nokolexbor/3.1/nokolexbor.so
|
50
50
|
- lib/nokolexbor/attribute.rb
|
51
51
|
- lib/nokolexbor/document.rb
|
52
|
+
- lib/nokolexbor/document_fragment.rb
|
52
53
|
- lib/nokolexbor/node.rb
|
53
54
|
- lib/nokolexbor/node_set.rb
|
54
55
|
- lib/nokolexbor/version.rb
|