nokolexbor 0.3.3 → 0.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/ext/nokolexbor/nl_attribute.c +201 -0
  3. data/ext/nokolexbor/nl_cdata.c +8 -0
  4. data/ext/nokolexbor/nl_comment.c +6 -0
  5. data/ext/nokolexbor/nl_document.c +53 -7
  6. data/ext/nokolexbor/nl_document_fragment.c +9 -0
  7. data/ext/nokolexbor/nl_error.c +21 -19
  8. data/ext/nokolexbor/nl_node.c +317 -48
  9. data/ext/nokolexbor/nl_node_set.c +56 -1
  10. data/ext/nokolexbor/nl_processing_instruction.c +6 -0
  11. data/ext/nokolexbor/nl_text.c +6 -0
  12. data/ext/nokolexbor/nokolexbor.c +1 -0
  13. data/ext/nokolexbor/nokolexbor.h +2 -0
  14. data/lib/nokolexbor/document.rb +52 -5
  15. data/lib/nokolexbor/document_fragment.rb +11 -0
  16. data/lib/nokolexbor/node.rb +370 -24
  17. data/lib/nokolexbor/node_set.rb +56 -0
  18. data/lib/nokolexbor/version.rb +1 -1
  19. data/lib/nokolexbor.rb +0 -1
  20. metadata +3 -25
  21. data/lib/nokolexbor/attribute.rb +0 -18
  22. data/vendor/lexbor/source/lexbor/encoding/base.h +0 -218
  23. data/vendor/lexbor/source/lexbor/encoding/big5.c +0 -42839
  24. data/vendor/lexbor/source/lexbor/encoding/config.cmake +0 -12
  25. data/vendor/lexbor/source/lexbor/encoding/const.h +0 -65
  26. data/vendor/lexbor/source/lexbor/encoding/decode.c +0 -3193
  27. data/vendor/lexbor/source/lexbor/encoding/decode.h +0 -370
  28. data/vendor/lexbor/source/lexbor/encoding/encode.c +0 -1931
  29. data/vendor/lexbor/source/lexbor/encoding/encode.h +0 -377
  30. data/vendor/lexbor/source/lexbor/encoding/encoding.c +0 -252
  31. data/vendor/lexbor/source/lexbor/encoding/encoding.h +0 -475
  32. data/vendor/lexbor/source/lexbor/encoding/euc_kr.c +0 -53883
  33. data/vendor/lexbor/source/lexbor/encoding/gb18030.c +0 -47905
  34. data/vendor/lexbor/source/lexbor/encoding/iso_2022_jp_katakana.c +0 -159
  35. data/vendor/lexbor/source/lexbor/encoding/jis0208.c +0 -22477
  36. data/vendor/lexbor/source/lexbor/encoding/jis0212.c +0 -15787
  37. data/vendor/lexbor/source/lexbor/encoding/multi.h +0 -53
  38. data/vendor/lexbor/source/lexbor/encoding/range.c +0 -71
  39. data/vendor/lexbor/source/lexbor/encoding/range.h +0 -34
  40. data/vendor/lexbor/source/lexbor/encoding/res.c +0 -222
  41. data/vendor/lexbor/source/lexbor/encoding/res.h +0 -34
  42. data/vendor/lexbor/source/lexbor/encoding/single.c +0 -13748
  43. data/vendor/lexbor/source/lexbor/encoding/single.h +0 -116
@@ -63,12 +63,27 @@ nl_rb_node_set_create_with_data(lexbor_array_t *array, VALUE rb_document)
63
63
  return ret;
64
64
  }
65
65
 
66
+ /**
67
+ * Get the length of this NodeSet.
68
+ *
69
+ * @return [Integer]
70
+ */
66
71
  static VALUE
67
72
  nl_node_set_length(VALUE self)
68
73
  {
69
74
  return INT2NUM(nl_rb_node_set_unwrap(self)->length);
70
75
  }
71
76
 
77
+ /**
78
+ * call-seq:
79
+ * push(node)
80
+ *
81
+ * Append +node+ to the NodeSet.
82
+ *
83
+ * @param node [Node]
84
+ *
85
+ * @return [NodeSet] +self+, to support chaining of calls.
86
+ */
72
87
  static VALUE
73
88
  nl_node_set_push(VALUE self, VALUE rb_node)
74
89
  {
@@ -83,6 +98,16 @@ nl_node_set_push(VALUE self, VALUE rb_node)
83
98
  return self;
84
99
  }
85
100
 
101
+ /**
102
+ * call-seq:
103
+ * delete(node)
104
+ *
105
+ * Delete +node+ from the NodeSet.
106
+ *
107
+ * @param node [Node]
108
+ *
109
+ * @return [Node,nil] The deleted node if found, otherwise returns nil.
110
+ */
86
111
  static VALUE
87
112
  nl_node_set_delete(VALUE self, VALUE rb_node)
88
113
  {
@@ -103,6 +128,12 @@ nl_node_set_delete(VALUE self, VALUE rb_node)
103
128
  return rb_node;
104
129
  }
105
130
 
131
+ /**
132
+ * call-seq:
133
+ * include?(node)
134
+ *
135
+ * @return true if any member of this NodeSet equals +node+.
136
+ */
106
137
  static VALUE
107
138
  nl_node_set_is_include(VALUE self, VALUE rb_node)
108
139
  {
@@ -166,6 +197,18 @@ nl_node_set_subseq(VALUE self, long beg, long len)
166
197
  return nl_rb_node_set_create_with_data(new_array, nl_rb_document_get(self));
167
198
  }
168
199
 
200
+ /**
201
+ * call-seq:
202
+ * [](index) -> Node,nil
203
+ * [](start, length) -> NodeSet,nil
204
+ * [](range) -> NodeSet,nil
205
+ *
206
+ * @return [Node,NodeSet,nil] the {Node} at +index+, or returns a {NodeSet}
207
+ * containing nodes starting at +start+ and continuing for +length+ elements, or
208
+ * returns a {NodeSet} containing nodes specified by +range+. Negative +indices+
209
+ * count backward from the end of the +node_set+ (-1 is the last node). Returns
210
+ * nil if the +index+ (or +start+) are out of range.
211
+ */
169
212
  static VALUE
170
213
  nl_node_set_slice(int argc, VALUE *argv, VALUE self)
171
214
  {
@@ -205,6 +248,9 @@ nl_node_set_slice(int argc, VALUE *argv, VALUE self)
205
248
  return nl_node_set_index_at(self, NUM2LONG(arg));
206
249
  }
207
250
 
251
+ /**
252
+ * @return [Array<Node>] This list as an Array
253
+ */
208
254
  static VALUE
209
255
  nl_node_set_to_array(VALUE self)
210
256
  {
@@ -221,6 +267,9 @@ nl_node_set_to_array(VALUE self)
221
267
  return list;
222
268
  }
223
269
 
270
+ /**
271
+ * @return [NodeSet] A new set built by merging the +other+ set, excluding duplicates.
272
+ */
224
273
  static VALUE
225
274
  nl_node_set_union(VALUE self, VALUE other)
226
275
  {
@@ -301,6 +350,9 @@ nl_node_set_find(VALUE self, VALUE selector, lxb_selectors_cb_f cb, void *ctx)
301
350
  return status;
302
351
  }
303
352
 
353
+ /**
354
+ * (see Node#at_css)
355
+ */
304
356
  static VALUE
305
357
  nl_node_set_at_css(VALUE self, VALUE selector)
306
358
  {
@@ -328,6 +380,9 @@ nl_node_set_at_css(VALUE self, VALUE selector)
328
380
  return ret;
329
381
  }
330
382
 
383
+ /**
384
+ * (see Node#css)
385
+ */
331
386
  static VALUE
332
387
  nl_node_set_css(VALUE self, VALUE selector)
333
388
  {
@@ -353,7 +408,6 @@ void Init_nl_node_set(void)
353
408
 
354
409
  rb_define_method(cNokolexborNodeSet, "length", nl_node_set_length, 0);
355
410
  rb_define_method(cNokolexborNodeSet, "[]", nl_node_set_slice, -1);
356
- rb_define_method(cNokolexborNodeSet, "slice", nl_node_set_slice, -1);
357
411
  rb_define_method(cNokolexborNodeSet, "push", nl_node_set_push, 1);
358
412
  rb_define_method(cNokolexborNodeSet, "|", nl_node_set_union, 1);
359
413
  rb_define_method(cNokolexborNodeSet, "to_a", nl_node_set_to_array, 0);
@@ -362,6 +416,7 @@ void Init_nl_node_set(void)
362
416
  rb_define_method(cNokolexborNodeSet, "at_css", nl_node_set_at_css, 1);
363
417
  rb_define_method(cNokolexborNodeSet, "css", nl_node_set_css, 1);
364
418
 
419
+ rb_define_alias(cNokolexborNodeSet, "slice", "[]");
365
420
  rb_define_alias(cNokolexborNodeSet, "<<", "push");
366
421
  rb_define_alias(cNokolexborNodeSet, "size", "length");
367
422
  rb_define_alias(cNokolexborNodeSet, "+", "|");
@@ -4,6 +4,12 @@ VALUE cNokolexborProcessingInstruction;
4
4
  extern VALUE cNokolexborNode;
5
5
  extern VALUE mNokolexbor;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(name, content, document) { |ProcessingInstruction| ... } -> ProcessingInstruction
10
+ *
11
+ * Create a new ProcessingInstruction from +name+ and +content+.
12
+ */
7
13
  static VALUE
8
14
  nl_processing_instruction_new(int argc, VALUE *argv, VALUE klass)
9
15
  {
@@ -4,6 +4,12 @@ VALUE cNokolexborText;
4
4
  extern VALUE cNokolexborCharacterData;
5
5
  extern VALUE mNokolexbor;
6
6
 
7
+ /**
8
+ * call-seq:
9
+ * new(text, document) { |Text| ... } -> Text
10
+ *
11
+ * Create a new Text from +text+.
12
+ */
7
13
  static VALUE
8
14
  nl_text_new(int argc, VALUE *argv, VALUE klass)
9
15
  {
@@ -17,5 +17,6 @@ void Init_nokolexbor(void)
17
17
  Init_nl_processing_instruction();
18
18
  Init_nl_node_set();
19
19
  Init_nl_document_fragment();
20
+ Init_nl_attribute();
20
21
  Init_nl_xpath_context();
21
22
  }
@@ -18,6 +18,7 @@ void Init_nl_cdata(void);
18
18
  void Init_nl_processing_instruction(void);
19
19
  void Init_nl_node_set(void);
20
20
  void Init_nl_document_fragment(void);
21
+ void Init_nl_attribute(void);
21
22
  void Init_nl_xpath_context(void);
22
23
 
23
24
  void nl_raise_lexbor_error(lxb_status_t error);
@@ -34,6 +35,7 @@ lxb_inline VALUE nl_rb_document_get(VALUE rb_node_or_doc)
34
35
  }
35
36
 
36
37
  lxb_dom_document_t *nl_rb_document_unwrap(VALUE rb_doc);
38
+ lexbor_array_t *nl_rb_node_set_unwrap(VALUE rb_node_set);
37
39
 
38
40
  const lxb_char_t *
39
41
  lxb_dom_node_name_qualified(lxb_dom_node_t *node, size_t *len);
@@ -2,6 +2,33 @@
2
2
 
3
3
  module Nokolexbor
4
4
  class Document < Nokolexbor::Node
5
+ # Create an {Element} with +name+ belonging to this document, optionally setting contents or
6
+ # attributes.
7
+ #
8
+ # @param name [String]
9
+ # @param contents_or_attrs [#to_s, Hash]
10
+ #
11
+ # @return [Element]
12
+ #
13
+ # @example An empty element without attributes
14
+ # doc.create_element("div")
15
+ # # => <div></div>
16
+ #
17
+ # @example An element with contents
18
+ # doc.create_element("div", "contents")
19
+ # # => <div>contents</div>
20
+ #
21
+ # @example An element with attributes
22
+ # doc.create_element("div", {"class" => "container"})
23
+ # # => <div class='container'></div>
24
+ #
25
+ # @example An element with contents and attributes
26
+ # doc.create_element("div", "contents", {"class" => "container"})
27
+ # # => <div class='container'>contents</div>
28
+ #
29
+ # @example Passing a block to mutate the element
30
+ # doc.create_element("div") { |node| node["class"] = "blue" }
31
+ # # => <div class='blue'></div>
5
32
  def create_element(name, *contents_or_attrs, &block)
6
33
  elm = Nokolexbor::Element.new(name, self, &block)
7
34
  contents_or_attrs.each do |arg|
@@ -11,32 +38,43 @@ module Nokolexbor
11
38
  elm[k.to_s] = v.to_s
12
39
  end
13
40
  else
14
- elm.content = arg
41
+ elm.content = arg.to_s
15
42
  end
16
43
  end
17
44
  elm
18
45
  end
19
46
 
20
- # Create a Text Node with +string+
47
+ # Create a {Text} with +string+.
48
+ #
49
+ # @return [Text]
21
50
  def create_text_node(string, &block)
22
51
  Nokolexbor::Text.new(string.to_s, self, &block)
23
52
  end
24
53
 
25
- # Create a CDATA Node containing +string+
54
+ # Create a {CDATA} containing +string+.
55
+ #
56
+ # @return [CDATA]
26
57
  def create_cdata(string, &block)
27
58
  Nokolexbor::CDATA.new(string.to_s, self, &block)
28
59
  end
29
60
 
30
- # Create a Comment Node containing +string+
61
+ # Create a {Comment} containing +string+.
62
+ #
63
+ # @return [Comment]
31
64
  def create_comment(string, &block)
32
65
  Nokolexbor::Comment.new(string.to_s, self, &block)
33
66
  end
34
67
 
35
- # A reference to +self+
68
+ # A reference to +self+.
69
+ #
70
+ # @return [Document]
36
71
  def document
37
72
  self
38
73
  end
39
74
 
75
+ # Get the meta tag encoding for this document. If there is no meta tag, nil is returned.
76
+ #
77
+ # @return [String]
40
78
  def meta_encoding
41
79
  if (meta = at_css("meta[charset]"))
42
80
  meta[:charset]
@@ -45,6 +83,15 @@ module Nokolexbor
45
83
  end
46
84
  end
47
85
 
86
+ # Set the meta tag encoding for this document.
87
+ #
88
+ # If an meta encoding tag is already present, its content is
89
+ # replaced with the given text.
90
+ #
91
+ # Otherwise, this method tries to create one at an appropriate
92
+ # place supplying head and/or html elements as necessary, which
93
+ # is inside a head element if any, and before any text node or
94
+ # content element (typically <body>) if any.
48
95
  def meta_encoding=(encoding)
49
96
  if (meta = meta_content_type)
50
97
  meta["content"] = format("text/html; charset=%s", encoding)
@@ -2,10 +2,17 @@
2
2
 
3
3
  module Nokolexbor
4
4
  class DocumentFragment < Nokolexbor::Node
5
+ # Create a {DocumentFragment} from +tags+.
6
+ #
7
+ # @return [DocumentFragment]
5
8
  def self.parse(tags)
6
9
  new(Nokolexbor::Document.new, tags, nil)
7
10
  end
8
11
 
12
+ # Create a new {DocumentFragment} from +tags+.
13
+ #
14
+ # If +ctx+ is present, it is used as a context node for the
15
+ # subtree created.
9
16
  def initialize(document, tags = nil, ctx = nil)
10
17
  return self unless tags
11
18
 
@@ -15,6 +22,7 @@ module Nokolexbor
15
22
  nil
16
23
  end
17
24
 
25
+ # @return [String] The name of {DocumentFragment}
18
26
  def name
19
27
  "#document-fragment"
20
28
  end
@@ -24,6 +32,9 @@ module Nokolexbor
24
32
  alias_method :to_s, :outer_html
25
33
  alias_method :serialize, :outer_html
26
34
 
35
+ # Create a {DocumentFragment} from +data+.
36
+ #
37
+ # @return [DocumentFragment]
27
38
  def fragment(data)
28
39
  document.fragment(data)
29
40
  end