nokolexbor 0.3.4 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
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
  }