nokolexbor 0.3.4 → 0.3.6

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/ext/nokolexbor/extconf.rb +9 -5
  3. data/ext/nokolexbor/nl_attribute.c +46 -0
  4. data/ext/nokolexbor/nl_cdata.c +8 -0
  5. data/ext/nokolexbor/nl_comment.c +6 -0
  6. data/ext/nokolexbor/nl_document.c +53 -7
  7. data/ext/nokolexbor/nl_document_fragment.c +9 -0
  8. data/ext/nokolexbor/nl_error.c +21 -19
  9. data/ext/nokolexbor/nl_node.c +255 -50
  10. data/ext/nokolexbor/nl_node_set.c +56 -1
  11. data/ext/nokolexbor/nl_processing_instruction.c +6 -0
  12. data/ext/nokolexbor/nl_text.c +6 -0
  13. data/ext/nokolexbor/nokolexbor.h +1 -0
  14. data/lib/nokolexbor/document.rb +52 -5
  15. data/lib/nokolexbor/document_fragment.rb +11 -0
  16. data/lib/nokolexbor/node.rb +367 -18
  17. data/lib/nokolexbor/node_set.rb +56 -0
  18. data/lib/nokolexbor/version.rb +1 -1
  19. metadata +2 -24
  20. data/vendor/lexbor/source/lexbor/encoding/base.h +0 -218
  21. data/vendor/lexbor/source/lexbor/encoding/big5.c +0 -42839
  22. data/vendor/lexbor/source/lexbor/encoding/config.cmake +0 -12
  23. data/vendor/lexbor/source/lexbor/encoding/const.h +0 -65
  24. data/vendor/lexbor/source/lexbor/encoding/decode.c +0 -3193
  25. data/vendor/lexbor/source/lexbor/encoding/decode.h +0 -370
  26. data/vendor/lexbor/source/lexbor/encoding/encode.c +0 -1931
  27. data/vendor/lexbor/source/lexbor/encoding/encode.h +0 -377
  28. data/vendor/lexbor/source/lexbor/encoding/encoding.c +0 -252
  29. data/vendor/lexbor/source/lexbor/encoding/encoding.h +0 -475
  30. data/vendor/lexbor/source/lexbor/encoding/euc_kr.c +0 -53883
  31. data/vendor/lexbor/source/lexbor/encoding/gb18030.c +0 -47905
  32. data/vendor/lexbor/source/lexbor/encoding/iso_2022_jp_katakana.c +0 -159
  33. data/vendor/lexbor/source/lexbor/encoding/jis0208.c +0 -22477
  34. data/vendor/lexbor/source/lexbor/encoding/jis0212.c +0 -15787
  35. data/vendor/lexbor/source/lexbor/encoding/multi.h +0 -53
  36. data/vendor/lexbor/source/lexbor/encoding/range.c +0 -71
  37. data/vendor/lexbor/source/lexbor/encoding/range.h +0 -34
  38. data/vendor/lexbor/source/lexbor/encoding/res.c +0 -222
  39. data/vendor/lexbor/source/lexbor/encoding/res.h +0 -34
  40. data/vendor/lexbor/source/lexbor/encoding/single.c +0 -13748
  41. data/vendor/lexbor/source/lexbor/encoding/single.h +0 -116
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 53cb1f54e475a0b10fc7773259866fe675e761d0ca204c5f685f4ed8dd60294a
4
- data.tar.gz: 0e697320eae75b41e16ac431c6c679159507013b5e3a9858959377eb969355b2
3
+ metadata.gz: 29411076a95eae20060101aa8a270bfe53a48eda3b6e58cfad6ebe22b184049c
4
+ data.tar.gz: 920536ad4f69a635cfec9a6dea4d8bbe746c7c97d74c1b1daa6b22c41856d201
5
5
  SHA512:
6
- metadata.gz: 609b453f596331b53ab13b403c274cde9472e119307c0af63da19be28f0475603705ef285332c94f8b39a47b6850dfc138694ccee0ede531acffd67e31e915a9
7
- data.tar.gz: 9f6d2c3ceba6d98bc8f87d59c846bd6c41fc2758681b66481c72de1027078d30e62344267cfe63ce58209e23f6749502750fa05f4365112275d79cee11641e9d
6
+ metadata.gz: d6ca49aa873ee254caf034600fbbb9384a2a4efaa86422e992a7fbb7970107af20541c4309e582c6f8863353209d36cd6e5d56fdb19b52fd54a233a4419202ea
7
+ data.tar.gz: f4c9413c2cd8683e6cf111d1c966a8511d4d605ec30008f595d2c05b402b028dc8f889c9480d3ff43b0f380e84861b2384c915f9f9cca68b6ad8f510a58a0b0a
@@ -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
 
@@ -4,6 +4,15 @@ VALUE cNokolexborAttribute;
4
4
  extern VALUE mNokolexbor;
5
5
  extern VALUE cNokolexborNode;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(document, name) -> Attribute
10
+ *
11
+ * Create a new Attribute on the +document+ with +name+.
12
+ *
13
+ * @param document [Document]
14
+ * @param name [String]
15
+ */
7
16
  static VALUE
8
17
  nl_attribute_new(int argc, VALUE *argv, VALUE klass)
9
18
  {
@@ -38,6 +47,11 @@ nl_attribute_new(int argc, VALUE *argv, VALUE klass)
38
47
  return rb_node;
39
48
  }
40
49
 
50
+ /**
51
+ * Get the name of the Attribute.
52
+ *
53
+ * @return [String]
54
+ */
41
55
  static VALUE
42
56
  nl_attribute_name(VALUE self)
43
57
  {
@@ -50,6 +64,12 @@ nl_attribute_name(VALUE self)
50
64
  return rb_utf8_str_new(name, len);
51
65
  }
52
66
 
67
+ /**
68
+ * call-seq:
69
+ * name=(name) -> String
70
+ *
71
+ * Set the name of the Attribute.
72
+ */
53
73
  static VALUE
54
74
  nl_attribute_set_name(VALUE self, VALUE rb_name)
55
75
  {
@@ -67,6 +87,11 @@ nl_attribute_set_name(VALUE self, VALUE rb_name)
67
87
  return rb_name;
68
88
  }
69
89
 
90
+ /**
91
+ * Get the value of the Attribute.
92
+ *
93
+ * @return [String]
94
+ */
70
95
  static VALUE
71
96
  nl_attribute_value(VALUE self)
72
97
  {
@@ -79,6 +104,12 @@ nl_attribute_value(VALUE self)
79
104
  return rb_utf8_str_new(value, len);
80
105
  }
81
106
 
107
+ /**
108
+ * call-seq:
109
+ * value=(value) -> String
110
+ *
111
+ * Set the value of the Attribute.
112
+ */
82
113
  static VALUE
83
114
  nl_attribute_set_value(VALUE self, VALUE rb_content)
84
115
  {
@@ -96,6 +127,11 @@ nl_attribute_set_value(VALUE self, VALUE rb_content)
96
127
  return rb_content;
97
128
  }
98
129
 
130
+ /**
131
+ * Get the owner Node of the Attribute.
132
+ *
133
+ * @return [Node]
134
+ */
99
135
  static VALUE
100
136
  nl_attribute_parent(VALUE self)
101
137
  {
@@ -108,6 +144,11 @@ nl_attribute_parent(VALUE self)
108
144
  return nl_rb_node_create(attr->owner, nl_rb_document_get(self));
109
145
  }
110
146
 
147
+ /**
148
+ * Get the previous Attribute.
149
+ *
150
+ * @return [Attribute]
151
+ */
111
152
  static VALUE
112
153
  nl_attribute_previous(VALUE self)
113
154
  {
@@ -120,6 +161,11 @@ nl_attribute_previous(VALUE self)
120
161
  return nl_rb_node_create(attr->prev, nl_rb_document_get(self));
121
162
  }
122
163
 
164
+ /**
165
+ * Get the next Attribute.
166
+ *
167
+ * @return [Attribute]
168
+ */
123
169
  static VALUE
124
170
  nl_attribute_next(VALUE self)
125
171
  {
@@ -4,6 +4,14 @@ VALUE cNokolexborCData;
4
4
  extern VALUE cNokolexborText;
5
5
  extern VALUE mNokolexbor;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(content, document) { |CDATA| ... } -> CDATA
10
+ *
11
+ * Create a new CDATA from +content+.
12
+ *
13
+ * @return [CDATA]
14
+ */
7
15
  static VALUE
8
16
  nl_cdata_new(int argc, VALUE *argv, VALUE klass)
9
17
  {
@@ -4,6 +4,12 @@ VALUE cNokolexborComment;
4
4
  extern VALUE cNokolexborCharacterData;
5
5
  extern VALUE mNokolexbor;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(content, document) { |Comment| ... } -> Comment
10
+ *
11
+ * Create a new Comment from +content+.
12
+ */
7
13
  static VALUE
8
14
  nl_comment_new(int argc, VALUE *argv, VALUE klass)
9
15
  {
@@ -21,6 +21,16 @@ const rb_data_type_t nl_document_type = {
21
21
  RUBY_TYPED_FREE_IMMEDIATELY,
22
22
  };
23
23
 
24
+ /**
25
+ * call-seq:
26
+ * parse(string_or_io) -> Document
27
+ *
28
+ * Parse HTML into a {Document}.
29
+ *
30
+ * @param string_or_io [String, #read]
31
+ * The HTML to be parsed. It may be a String, or any object that
32
+ * responds to #read such as an IO, or StringIO.
33
+ */
24
34
  static VALUE
25
35
  nl_document_parse(VALUE self, VALUE rb_string_or_io)
26
36
  {
@@ -51,6 +61,11 @@ nl_document_parse(VALUE self, VALUE rb_string_or_io)
51
61
  return TypedData_Wrap_Struct(cNokolexborDocument, &nl_document_type, document);
52
62
  }
53
63
 
64
+ /**
65
+ * Create a new document.
66
+ *
67
+ * @return [Document]
68
+ */
54
69
  static VALUE
55
70
  nl_document_new(VALUE self)
56
71
  {
@@ -65,21 +80,51 @@ nl_rb_document_unwrap(VALUE rb_doc)
65
80
  return doc;
66
81
  }
67
82
 
68
- VALUE
69
- nl_document_get_title(VALUE rb_doc)
83
+ /**
84
+ * Get the title of this document.
85
+ *
86
+ * @return [String]
87
+ */
88
+ static VALUE
89
+ nl_document_get_title(VALUE self)
70
90
  {
71
91
  size_t len;
72
- lxb_char_t *str = lxb_html_document_title(nl_rb_document_unwrap(rb_doc), &len);
92
+ lxb_char_t *str = lxb_html_document_title(nl_rb_document_unwrap(self), &len);
73
93
  return str == NULL ? rb_str_new("", 0) : rb_utf8_str_new(str, len);
74
94
  }
75
95
 
76
- VALUE
77
- nl_document_set_title(VALUE rb_doc, VALUE rb_title)
96
+ /**
97
+ * call-seq:
98
+ * title=(text) -> String
99
+ *
100
+ * Set the title of this document.
101
+ *
102
+ * If a title element is already present, its content is replaced
103
+ * with the given text.
104
+ *
105
+ * Otherwise, this method tries to create one inside <head>.
106
+ *
107
+ * @return [String]
108
+ */
109
+ static VALUE
110
+ nl_document_set_title(VALUE self, VALUE rb_title)
78
111
  {
79
112
  const char *c_title = StringValuePtr(rb_title);
80
113
  size_t len = RSTRING_LEN(rb_title);
81
- lxb_char_t *str = lxb_html_document_title_set(nl_rb_document_unwrap(rb_doc), (const lxb_char_t *)c_title, len);
82
- return Qnil;
114
+ lxb_char_t *str = lxb_html_document_title_set(nl_rb_document_unwrap(self), (const lxb_char_t *)c_title, len);
115
+ return rb_title;
116
+ }
117
+
118
+ /**
119
+ * Get the root node for this document.
120
+ *
121
+ * @return [Node]
122
+ */
123
+ static VALUE
124
+ nl_document_root(VALUE self)
125
+ {
126
+ lxb_dom_document_t *doc = nl_rb_document_unwrap(self);
127
+ return nl_rb_node_create(lxb_dom_document_root(doc), self);
83
128
  }
84
129
 
85
130
  void Init_nl_document(void)
@@ -89,4 +134,5 @@ void Init_nl_document(void)
89
134
  rb_define_singleton_method(cNokolexborDocument, "parse", nl_document_parse, 1);
90
135
  rb_define_method(cNokolexborDocument, "title", nl_document_get_title, 0);
91
136
  rb_define_method(cNokolexborDocument, "title=", nl_document_set_title, 1);
137
+ rb_define_method(cNokolexborDocument, "root", nl_document_root, 0);
92
138
  }
@@ -4,6 +4,15 @@ VALUE cNokolexborDocumentFragment;
4
4
  extern VALUE cNokolexborNode;
5
5
  extern VALUE mNokolexbor;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(document, tags = nil, ctx = nil) -> DocumentFragment
10
+ *
11
+ * Create a {DocumentFragment} from +tags+.
12
+ *
13
+ * If +ctx+ is present, it is used as a context node for the
14
+ * subtree created.
15
+ */
7
16
  static VALUE
8
17
  nl_document_fragment_new(int argc, VALUE *argv, VALUE klass)
9
18
  {
@@ -1,5 +1,6 @@
1
1
  #include "nokolexbor.h"
2
2
 
3
+ VALUE mLexbor;
3
4
  VALUE eLexborError;
4
5
  VALUE eLexborMemoryAllocationError;
5
6
  VALUE eLexborSmallBufferError;
@@ -71,23 +72,24 @@ void nl_raise_lexbor_error(lxb_status_t error)
71
72
 
72
73
  void Init_nl_error(void)
73
74
  {
74
- eLexborError = rb_define_class_under(mNokolexbor, "LexborError", rb_eStandardError);
75
- eLexborMemoryAllocationError = rb_define_class_under(mNokolexbor, "LexborMemoryAllocationError", eLexborError);
76
- eLexborSmallBufferError = rb_define_class_under(mNokolexbor, "LexborSmallBufferError", eLexborError);
77
- eLexborObjectIsNullError = rb_define_class_under(mNokolexbor, "LexborObjectIsNullError", eLexborError);
78
- eLexborIncompleteObjectError = rb_define_class_under(mNokolexbor, "LexborIncompleteObjectError", eLexborError);
79
- eLexborNoFreeSlotError = rb_define_class_under(mNokolexbor, "LexborNoFreeSlotError", eLexborError);
80
- eLexborTooSmallSizeError = rb_define_class_under(mNokolexbor, "LexborTooSmallSizeError", eLexborError);
81
- eLexborNotExistsError = rb_define_class_under(mNokolexbor, "LexborNotExistsError", eLexborError);
82
- eLexborWrongArgsError = rb_define_class_under(mNokolexbor, "LexborWrongArgsError", eLexborError);
83
- eLexborWrongStageError = rb_define_class_under(mNokolexbor, "LexborWrongStageError", eLexborError);
84
- eLexborUnexpectedResultError = rb_define_class_under(mNokolexbor, "LexborUnexpectedResultError", eLexborError);
85
- eLexborUnexpectedDataError = rb_define_class_under(mNokolexbor, "LexborUnexpectedDataError", eLexborError);
86
- eLexborOverflowError = rb_define_class_under(mNokolexbor, "LexborOverflowError", eLexborError);
87
- eLexborContinueStatus = rb_define_class_under(mNokolexbor, "LexborContinueStatus", eLexborError);
88
- eLexborSmallBufferStatus = rb_define_class_under(mNokolexbor, "LexborSmallBufferStatus", eLexborError);
89
- eLexborAbortedStatus = rb_define_class_under(mNokolexbor, "LexborAbortedStatus", eLexborError);
90
- eLexborStoppedStatus = rb_define_class_under(mNokolexbor, "LexborStoppedStatus", eLexborError);
91
- eLexborNextStatus = rb_define_class_under(mNokolexbor, "LexborNextStatus", eLexborError);
92
- eLexborStopStatus = rb_define_class_under(mNokolexbor, "LexborStopStatus", eLexborError);
75
+ mLexbor = rb_define_module_under(mNokolexbor, "Lexbor");
76
+ eLexborError = rb_define_class_under(mLexbor, "Error", rb_eStandardError);
77
+ eLexborMemoryAllocationError = rb_define_class_under(mLexbor, "MemoryAllocationError", eLexborError);
78
+ eLexborSmallBufferError = rb_define_class_under(mLexbor, "SmallBufferError", eLexborError);
79
+ eLexborObjectIsNullError = rb_define_class_under(mLexbor, "ObjectIsNullError", eLexborError);
80
+ eLexborIncompleteObjectError = rb_define_class_under(mLexbor, "IncompleteObjectError", eLexborError);
81
+ eLexborNoFreeSlotError = rb_define_class_under(mLexbor, "NoFreeSlotError", eLexborError);
82
+ eLexborTooSmallSizeError = rb_define_class_under(mLexbor, "TooSmallSizeError", eLexborError);
83
+ eLexborNotExistsError = rb_define_class_under(mLexbor, "NotExistsError", eLexborError);
84
+ eLexborWrongArgsError = rb_define_class_under(mLexbor, "WrongArgsError", eLexborError);
85
+ eLexborWrongStageError = rb_define_class_under(mLexbor, "WrongStageError", eLexborError);
86
+ eLexborUnexpectedResultError = rb_define_class_under(mLexbor, "UnexpectedResultError", eLexborError);
87
+ eLexborUnexpectedDataError = rb_define_class_under(mLexbor, "UnexpectedDataError", eLexborError);
88
+ eLexborOverflowError = rb_define_class_under(mLexbor, "OverflowError", eLexborError);
89
+ eLexborContinueStatus = rb_define_class_under(mLexbor, "ContinueStatus", eLexborError);
90
+ eLexborSmallBufferStatus = rb_define_class_under(mLexbor, "SmallBufferStatus", eLexborError);
91
+ eLexborAbortedStatus = rb_define_class_under(mLexbor, "AbortedStatus", eLexborError);
92
+ eLexborStoppedStatus = rb_define_class_under(mLexbor, "StoppedStatus", eLexborError);
93
+ eLexborNextStatus = rb_define_class_under(mLexbor, "NextStatus", eLexborError);
94
+ eLexborStopStatus = rb_define_class_under(mLexbor, "StopStatus", eLexborError);
93
95
  }