nokolexbor 0.3.5 → 0.3.7

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: 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