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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23409daec8c9cbe801afef6c39e6507fc938eb35cad2458ef80fc99e6bf5bece
4
- data.tar.gz: 06e83318711ac6e6c2582d78fcd87f5a0efeaceff7421a1880cd8e698637d803
3
+ metadata.gz: 25a206e02eaf74545bf1e7abe7e43a53e38fd8626b337e8de7d6c207e352a686
4
+ data.tar.gz: 2b9f7c8a339b2618dbb2de5824b249f0a8fa690713028a9e22b8627a8bb0163a
5
5
  SHA512:
6
- metadata.gz: d77bb45c508edba84043156149ff1dfce0249b7f4d52d871c0552b4f590c01e0879c77b0bf039a46ee019be4e445b072a658fbb9fc3872c8b1d6f48e4801b0dd
7
- data.tar.gz: 8ec494323f66188fbd39455c05a63e6be0fa5f8979fcb43310dc80a429a3d77355b8875988fa800041a04f1746254b0d88d9522780c085469efe18308a3d4576
6
+ metadata.gz: 70e579aa1e64ae9cfcf71dd2d0bf3b77b634b69764d43c04aaa02b6db0c5b26cb992d0094ad4b2b9177ca2be46c6b32df38381224bd579bfb722c538075b436e
7
+ data.tar.gz: c89997e12178393f171bb5e3735346d99ee67047fb985ec02b08e9433aadc6f18d68278a5256c99ab7174ddd436f9bb49fb97a97808923205803097b083f7ed3
@@ -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 Gem.win_platform?
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 Gem.win_platform? && !ENV['NOKOLEXBOR_CROSS_COMPILE']
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 = (Gem.win_platform? && !ENV['NOKOLEXBOR_CROSS_COMPILE']) ? :new_pgroup : :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 Gem.win_platform?
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(' ')} #{Gem.win_platform? ? "-DLIBXML2_WITH_THREADS=OFF" : ""}")
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=");
@@ -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 = cNokolexborCharacterData;
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", "[]");
@@ -196,6 +196,10 @@ module Nokolexbor
196
196
  end
197
197
  end
198
198
 
199
+ def inspect
200
+ "[#{map(&:inspect).join(', ')}]"
201
+ end
202
+
199
203
  private
200
204
 
201
205
  IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Nokolexbor
4
- VERSION = '0.3.5'
4
+ VERSION = '0.3.7'
5
5
  end
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.5
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-01-25 00:00:00.000000000 Z
11
+ date: 2023-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler