nokolexbor 0.3.5 → 0.3.7
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/ext/nokolexbor/extconf.rb +9 -5
- data/ext/nokolexbor/nl_attribute.c +15 -0
- data/ext/nokolexbor/nl_node.c +29 -2
- data/lib/nokolexbor/node_set.rb +4 -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: 25a206e02eaf74545bf1e7abe7e43a53e38fd8626b337e8de7d6c207e352a686
|
4
|
+
data.tar.gz: 2b9f7c8a339b2618dbb2de5824b249f0a8fa690713028a9e22b8627a8bb0163a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70e579aa1e64ae9cfcf71dd2d0bf3b77b634b69764d43c04aaa02b6db0c5b26cb992d0094ad4b2b9177ca2be46c6b32df38381224bd579bfb722c538075b436e
|
7
|
+
data.tar.gz: c89997e12178393f171bb5e3735346d99ee67047fb985ec02b08e9433aadc6f18d68278a5256c99ab7174ddd436f9bb49fb97a97808923205803097b083f7ed3
|
data/ext/nokolexbor/extconf.rb
CHANGED
@@ -5,6 +5,10 @@ if ENV["CC"]
|
|
5
5
|
RbConfig::CONFIG["CC"] = RbConfig::MAKEFILE_CONFIG["CC"] = ENV["CC"]
|
6
6
|
end
|
7
7
|
|
8
|
+
def windows?
|
9
|
+
RbConfig::CONFIG["target_os"].match?(/mingw|mswin/)
|
10
|
+
end
|
11
|
+
|
8
12
|
# From: https://stackoverflow.com/questions/2108727
|
9
13
|
# Cross-platform way of finding an executable in the $PATH.
|
10
14
|
#
|
@@ -23,9 +27,9 @@ end
|
|
23
27
|
cmake_flags = [ ENV["CMAKE_FLAGS"] ]
|
24
28
|
cmake_flags << "-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
25
29
|
# Set system name explicitly when cross-compiling
|
26
|
-
cmake_flags << "-DCMAKE_SYSTEM_NAME=Windows -DWIN32=1" if
|
30
|
+
cmake_flags << "-DCMAKE_SYSTEM_NAME=Windows -DWIN32=1" if windows?
|
27
31
|
# On Windows, Ruby-DevKit is MSYS-based, so ensure to use MSYS Makefiles.
|
28
|
-
cmake_flags << "-G \"MSYS Makefiles\"" if
|
32
|
+
cmake_flags << "-G \"MSYS Makefiles\"" if windows? && !ENV['NOKOLEXBOR_CROSS_COMPILE']
|
29
33
|
|
30
34
|
if ENV['NOKOLEXBOR_CROSS_COMPILE']
|
31
35
|
# use the same toolchain for cross-compiling lexbor
|
@@ -74,7 +78,7 @@ end
|
|
74
78
|
|
75
79
|
def self.run_cmake(timeout, args)
|
76
80
|
# Set to process group so we can kill it and its children
|
77
|
-
pgroup = (
|
81
|
+
pgroup = (windows? && !ENV['NOKOLEXBOR_CROSS_COMPILE']) ? :new_pgroup : :pgroup
|
78
82
|
pid = Process.spawn("cmake #{args}", pgroup => true)
|
79
83
|
|
80
84
|
Timeout.timeout(timeout) do
|
@@ -104,7 +108,7 @@ def apply_patch(patch_file, chdir)
|
|
104
108
|
end
|
105
109
|
|
106
110
|
|
107
|
-
MAKE = if
|
111
|
+
MAKE = if windows?
|
108
112
|
# On Windows, Ruby-DevKit only has 'make'.
|
109
113
|
find_executable('make')
|
110
114
|
else
|
@@ -143,7 +147,7 @@ Dir.chdir(EXT_DIR) do
|
|
143
147
|
Dir.mkdir("build") if !Dir.exist?("build")
|
144
148
|
|
145
149
|
Dir.chdir("build") do
|
146
|
-
run_cmake(10 * 60, ".. #{cmake_flags.join(' ')} #{
|
150
|
+
run_cmake(10 * 60, ".. #{cmake_flags.join(' ')} #{windows? ? "-DLIBXML2_WITH_THREADS=OFF" : ""}")
|
147
151
|
end
|
148
152
|
end
|
149
153
|
|
@@ -178,6 +178,20 @@ nl_attribute_next(VALUE self)
|
|
178
178
|
return nl_rb_node_create(attr->next, nl_rb_document_get(self));
|
179
179
|
}
|
180
180
|
|
181
|
+
static VALUE
|
182
|
+
nl_attribute_inspect(VALUE self)
|
183
|
+
{
|
184
|
+
VALUE c = rb_class_name(CLASS_OF(self));
|
185
|
+
lxb_dom_node_t *node = nl_rb_node_unwrap(self);
|
186
|
+
lxb_dom_attr_t *attr = lxb_dom_interface_attr(node);
|
187
|
+
size_t len;
|
188
|
+
lxb_char_t *attr_value = lxb_dom_attr_value(attr, &len);
|
189
|
+
|
190
|
+
return rb_sprintf("#<%" PRIsVALUE " %s=\"%s\">", c,
|
191
|
+
lxb_dom_attr_qualified_name(attr, &len),
|
192
|
+
attr_value == NULL ? "" : attr_value);
|
193
|
+
}
|
194
|
+
|
181
195
|
void Init_nl_attribute(void)
|
182
196
|
{
|
183
197
|
cNokolexborAttribute = rb_define_class_under(mNokolexbor, "Attribute", cNokolexborNode);
|
@@ -191,6 +205,7 @@ void Init_nl_attribute(void)
|
|
191
205
|
rb_define_method(cNokolexborAttribute, "parent", nl_attribute_parent, 0);
|
192
206
|
rb_define_method(cNokolexborAttribute, "previous", nl_attribute_previous, 0);
|
193
207
|
rb_define_method(cNokolexborAttribute, "next", nl_attribute_next, 0);
|
208
|
+
rb_define_method(cNokolexborAttribute, "inspect", nl_attribute_inspect, 0);
|
194
209
|
|
195
210
|
rb_define_alias(cNokolexborAttribute, "node_name", "name");
|
196
211
|
rb_define_alias(cNokolexborAttribute, "node_name=", "name=");
|
data/ext/nokolexbor/nl_node.c
CHANGED
@@ -9,6 +9,7 @@ extern VALUE mNokolexbor;
|
|
9
9
|
extern VALUE cNokolexborDocument;
|
10
10
|
extern VALUE cNokolexborText;
|
11
11
|
extern VALUE cNokolexborComment;
|
12
|
+
extern VALUE cNokolexborCData;
|
12
13
|
extern VALUE cNokolexborProcessingInstruction;
|
13
14
|
extern VALUE cNokolexborNodeSet;
|
14
15
|
extern VALUE cNokolexborDocumentFragment;
|
@@ -39,7 +40,7 @@ nl_rb_node_create(lxb_dom_node_t *node, VALUE rb_document)
|
|
39
40
|
rb_class = cNokolexborText;
|
40
41
|
break;
|
41
42
|
case LXB_DOM_NODE_TYPE_CDATA_SECTION:
|
42
|
-
rb_class =
|
43
|
+
rb_class = cNokolexborCData;
|
43
44
|
break;
|
44
45
|
// case LXB_DOM_NODE_TYPE_ENTITY_REFERENCE:
|
45
46
|
// break;
|
@@ -383,7 +384,6 @@ nl_node_find(VALUE self, VALUE selector, lxb_selectors_cb_f cb, void *ctx)
|
|
383
384
|
}
|
384
385
|
|
385
386
|
/* Parse and get the log. */
|
386
|
-
// TODO: Cache the list for reuse, improves performance
|
387
387
|
list = lxb_css_selectors_parse_relative_list(parser, (const lxb_char_t *)selector_c, selector_len);
|
388
388
|
if (parser->status != LXB_STATUS_OK) {
|
389
389
|
status = parser->status;
|
@@ -1107,6 +1107,32 @@ nl_node_clone(VALUE self)
|
|
1107
1107
|
return nl_rb_node_create(clone, nl_rb_document_get(self));
|
1108
1108
|
}
|
1109
1109
|
|
1110
|
+
static VALUE
|
1111
|
+
nl_node_inspect(int argc, VALUE *argv, VALUE self)
|
1112
|
+
{
|
1113
|
+
lxb_dom_node_t *node = nl_rb_node_unwrap(self);
|
1114
|
+
if (node->type == LXB_DOM_NODE_TYPE_DOCUMENT) {
|
1115
|
+
return rb_call_super(argc, argv);
|
1116
|
+
}
|
1117
|
+
|
1118
|
+
VALUE c = rb_class_name(CLASS_OF(self));
|
1119
|
+
lexbor_str_t str = {0};
|
1120
|
+
lxb_status_t status = lxb_html_serialize_str(node, &str);
|
1121
|
+
if (status != LXB_STATUS_OK) {
|
1122
|
+
if (str.data != NULL) {
|
1123
|
+
lexbor_str_destroy(&str, node->owner_document->text, false);
|
1124
|
+
}
|
1125
|
+
return rb_call_super(argc, argv);
|
1126
|
+
}
|
1127
|
+
|
1128
|
+
if (str.data != NULL) {
|
1129
|
+
VALUE ret = rb_sprintf("#<%" PRIsVALUE " %s>", c, str.data);
|
1130
|
+
lexbor_str_destroy(&str, node->owner_document->text, false);
|
1131
|
+
return ret;
|
1132
|
+
}
|
1133
|
+
return rb_call_super(argc, argv);
|
1134
|
+
}
|
1135
|
+
|
1110
1136
|
void Init_nl_node(void)
|
1111
1137
|
{
|
1112
1138
|
cNokolexborNode = rb_define_class_under(mNokolexbor, "Node", rb_cObject);
|
@@ -1149,6 +1175,7 @@ void Init_nl_node(void)
|
|
1149
1175
|
rb_define_method(cNokolexborNode, "first_element_child", nl_node_first_element_child, 0);
|
1150
1176
|
rb_define_method(cNokolexborNode, "last_element_child", nl_node_last_element_child, 0);
|
1151
1177
|
rb_define_method(cNokolexborNode, "clone", nl_node_clone, 0);
|
1178
|
+
rb_define_method(cNokolexborNode, "inspect", nl_node_inspect, -1);
|
1152
1179
|
|
1153
1180
|
rb_define_alias(cNokolexborNode, "attr", "[]");
|
1154
1181
|
rb_define_alias(cNokolexborNode, "get_attribute", "[]");
|
data/lib/nokolexbor/node_set.rb
CHANGED
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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yicheng Zhou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|