libxml-ruby 0.3.8.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/CHANGELOG +6 -0
  2. data/LICENSE +1 -1
  3. data/README +1 -1
  4. data/Rakefile +8 -5
  5. data/TODO +1 -1
  6. data/ext/xml/extconf.rb +4 -5
  7. data/ext/xml/libxml.c +5 -2
  8. data/ext/xml/libxml.h +16 -7
  9. data/ext/xml/libxml.rb +3 -3
  10. data/ext/xml/ruby_xml_attr.c +118 -99
  11. data/ext/xml/ruby_xml_attr.h +4 -7
  12. data/ext/xml/ruby_xml_document.c +131 -170
  13. data/ext/xml/ruby_xml_document.h +5 -9
  14. data/ext/xml/ruby_xml_html_parser.c +453 -0
  15. data/ext/xml/ruby_xml_html_parser.h +29 -0
  16. data/ext/xml/ruby_xml_node.c +219 -253
  17. data/ext/xml/ruby_xml_node.h +4 -7
  18. data/ext/xml/ruby_xml_node_set.c +6 -6
  19. data/ext/xml/ruby_xml_node_set.h +1 -1
  20. data/ext/xml/ruby_xml_ns.c +1 -1
  21. data/ext/xml/ruby_xml_ns.h +1 -1
  22. data/ext/xml/ruby_xml_parser.c +5 -8
  23. data/ext/xml/ruby_xml_parser.h +1 -1
  24. data/ext/xml/ruby_xml_parser_context.c +3 -4
  25. data/ext/xml/ruby_xml_parser_context.h +1 -1
  26. data/ext/xml/ruby_xml_reader.c +893 -0
  27. data/ext/xml/ruby_xml_reader.h +14 -0
  28. data/ext/xml/ruby_xml_sax_parser.c +255 -204
  29. data/ext/xml/ruby_xml_sax_parser.h +6 -2
  30. data/ext/xml/ruby_xml_tree.c +1 -1
  31. data/ext/xml/ruby_xml_tree.h +1 -1
  32. data/ext/xml/ruby_xml_xinclude.c +1 -1
  33. data/ext/xml/ruby_xml_xinclude.h +1 -1
  34. data/ext/xml/ruby_xml_xpath.c +3 -2
  35. data/ext/xml/ruby_xml_xpath.h +1 -1
  36. data/ext/xml/ruby_xml_xpath_context.c +4 -4
  37. data/ext/xml/ruby_xml_xpath_context.h +1 -1
  38. data/ext/xml/ruby_xml_xpointer.c +10 -4
  39. data/ext/xml/ruby_xml_xpointer.h +1 -1
  40. data/ext/xml/ruby_xml_xpointer_context.c +1 -1
  41. data/ext/xml/ruby_xml_xpointer_context.h +1 -1
  42. data/ext/xml/sax_parser_callbacks.inc +55 -54
  43. data/tests/model/rubynet_project +1 -1
  44. data/tests/model/simple.xml +7 -0
  45. data/tests/tc_xml_document.rb +1 -1
  46. data/tests/tc_xml_document_write.rb +1 -1
  47. data/tests/tc_xml_document_write2.rb +1 -1
  48. data/tests/tc_xml_document_write3.rb +1 -1
  49. data/tests/tc_xml_html_parser.rb +60 -0
  50. data/tests/tc_xml_node.rb +1 -1
  51. data/tests/tc_xml_node2.rb +1 -1
  52. data/tests/tc_xml_node3.rb +1 -1
  53. data/tests/tc_xml_node4.rb +8 -5
  54. data/tests/tc_xml_node5.rb +1 -1
  55. data/tests/tc_xml_node6.rb +1 -1
  56. data/tests/tc_xml_node7.rb +1 -1
  57. data/tests/tc_xml_node_set.rb +1 -1
  58. data/tests/tc_xml_node_set2.rb +1 -1
  59. data/tests/tc_xml_node_xlink.rb +1 -1
  60. data/tests/tc_xml_parser.rb +5 -1
  61. data/tests/tc_xml_parser2.rb +1 -1
  62. data/tests/tc_xml_parser3.rb +1 -1
  63. data/tests/tc_xml_parser4.rb +1 -1
  64. data/tests/tc_xml_parser5.rb +1 -1
  65. data/tests/tc_xml_parser6.rb +1 -1
  66. data/tests/tc_xml_parser7.rb +1 -1
  67. data/tests/tc_xml_parser8.rb +1 -1
  68. data/tests/tc_xml_parser_context.rb +1 -1
  69. data/tests/tc_xml_reader.rb +101 -0
  70. data/tests/tc_xml_sax_parser.rb +95 -0
  71. data/tests/tc_xml_xinclude.rb +1 -1
  72. data/tests/tc_xml_xpath.rb +1 -1
  73. data/tests/tc_xml_xpointer.rb +1 -1
  74. metadata +79 -73
  75. data/ext/xml/ruby_xml_attribute.c +0 -224
  76. data/ext/xml/ruby_xml_attribute.h +0 -21
  77. data/tests/test_xml_sax_parser.rb +0 -64
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ ===== 14.1.2007 Laurent Sansonetti <lrz at chopine.be>
2
+ * Added some preliminary RDoc comments for XML::Reader.
3
+
4
+ ===== 5.12.2006 Laurent Sansonetti <lrz at chopine.be>
5
+ * Added XML::Reader, a set of bindings to the xmlTextReader API.
6
+
1
7
  ===== 15.4.2006 Ross Bamford <rosco at roscopeco.co.uk>
2
8
  * Implemented SAX parser callback handling
3
9
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- # $Id: LICENSE,v 1.3 2006/02/28 09:57:52 roscopeco Exp $
1
+ # $Id: LICENSE 42 2006-02-28 09:57:52Z roscopeco $
2
2
 
3
3
  Copyright (c) 2002-2006 Sean Chittenden <sean@chittenden.org> and contributors
4
4
  Copyright (c) 2001 Wai-Sun "Squidster" Chia <waisun.chia@compaq.com>
data/README CHANGED
@@ -141,4 +141,4 @@ And your terminal should look like:
141
141
 
142
142
  If you have any questions, please send email to libxml-devel@rubyforge.org.
143
143
 
144
- # $Id: README,v 1.6 2006/08/15 13:49:53 roscopeco Exp $
144
+ # $Id: README 83 2006-08-15 13:49:53Z roscopeco $
data/Rakefile CHANGED
@@ -119,15 +119,18 @@ end
119
119
  # Used during release packaging if a REL is supplied
120
120
  task :update_version do
121
121
  unless PKG_VERSION == CURRENT_VERSION
122
+ pkg_vernum = PKG_VERSION.tr('.','').sub(/^0*/,'')
123
+ pkg_vernum << '0' until pkg_vernum.length > 2
124
+
122
125
  File.open('ext/xml/libxml.h.new','w+') do |f|
123
126
  maj, min, mic, patch = /(\d+)\.(\d+)(?:\.(\d+))?(?:\.(\d+))?/.match(PKG_VERSION).captures
124
127
  f << File.read('ext/xml/libxml.h').
125
128
  gsub(/RUBY_LIBXML_VERSION\s+"(\d.+)"/) { "RUBY_LIBXML_VERSION \"#{PKG_VERSION}\"" }.
126
- gsub(/RUBY_LIBXML_VERNUM\s+\d+/) { "RUBY_LIBXML_VERNUM #{PKG_VERSION.tr('.','').sub(/^0*/,'')}" }.
127
- gsub(/RUBY_LIBXML_VER_MAJ\s+\d+/) { "RUBY_LIBXML_VER_MAJ #{maj}" }.
128
- gsub(/RUBY_LIBXML_VER_MIN\s+\d+/) { "RUBY_LIBXML_VER_MIN #{min}" }.
129
- gsub(/RUBY_LIBXML_VER_MIC\s+\d+/) { "RUBY_LIBXML_VER_MIC #{mic || 0}" }.
130
- gsub(/RUBY_LIBXML_VER_PATCH\s+\d+/) { "RUBY_LIBXML_VER_PATCH #{patch || 0}" }
129
+ gsub(/RUBY_LIBXML_VERNUM\s+\d+/) { "RUBY_LIBXML_VERNUM #{pkg_vernum}" }.
130
+ gsub(/RUBY_LIBXML_VER_MAJ\s+\d+/) { "RUBY_LIBXML_VER_MAJ #{maj}" }.
131
+ gsub(/RUBY_LIBXML_VER_MIN\s+\d+/) { "RUBY_LIBXML_VER_MIN #{min}" }.
132
+ gsub(/RUBY_LIBXML_VER_MIC\s+\d+/) { "RUBY_LIBXML_VER_MIC #{mic || 0}" }.
133
+ gsub(/RUBY_LIBXML_VER_PATCH\s+\d+/) { "RUBY_LIBXML_VER_PATCH #{patch || 0}" }
131
134
  end
132
135
  mv('ext/xml/libxml.h.new', 'ext/xml/libxml.h')
133
136
  end
data/TODO CHANGED
@@ -1,4 +1,4 @@
1
- $Id: TODO,v 1.4 2006/04/12 12:08:39 roscopeco Exp $
1
+ $Id: TODO 59 2006-04-12 12:08:39Z roscopeco $
2
2
 
3
3
  ==== BUGS
4
4
 
data/ext/xml/extconf.rb CHANGED
@@ -37,6 +37,7 @@ unless have_library('m', 'atan')
37
37
  end
38
38
 
39
39
  unless have_library('z', 'inflate') or
40
+ have_library('zlib', 'inflate') or
40
41
  have_library('zlib1', 'inflate')
41
42
  crash('need zlib')
42
43
  else
@@ -45,6 +46,8 @@ end
45
46
 
46
47
  unless have_library('iconv','iconv_open') or
47
48
  have_library('iconv','libiconv_open') or
49
+ have_library('libiconv', 'libiconv_open') or
50
+ have_library('libiconv', 'iconv_open') or
48
51
  have_library('c','iconv_open') or
49
52
  have_library('recode','iconv_open') or
50
53
  have_library('iconv')
@@ -80,7 +83,7 @@ need libxml2.
80
83
  EOL
81
84
  end
82
85
 
83
- unless have_library('xml2', 'xmlDocFormatDump')
86
+ unless have_func('xmlDocFormatDump')
84
87
  crash('Your version of libxml2 is too old. Please upgrade.')
85
88
  end
86
89
 
@@ -88,10 +91,6 @@ unless have_func('docbCreateFileParserCtxt')
88
91
  crash('Need docbCreateFileParserCtxt')
89
92
  end
90
93
 
91
- if try_compile('int main() { return 0; }','-Wall')
92
- $CFLAGS << ' -Wall'
93
- end
94
-
95
94
  $CFLAGS << ' ' << $INCFLAGS
96
95
  $INSTALLFILES = [["libxml.rb", "$(RUBYLIBDIR)", "../xml"]]
97
96
 
data/ext/xml/libxml.c CHANGED
@@ -1,4 +1,4 @@
1
- /* $Id: libxml.c,v 1.3.2.1 2006/11/26 12:37:41 roscopeco Exp $ */
1
+ /* $Id: libxml.c 138 2007-08-29 18:00:35Z danj $ */
2
2
 
3
3
  /* Please see the LICENSE file for copyright and distribution information */
4
4
 
@@ -49,6 +49,7 @@ static xmlStrdupFunc strdupFunc = NULL;
49
49
  void
50
50
  Init_libxml_so(void) {
51
51
  /* Some libxml memory goo that should be done before anything else */
52
+ #ifdef NONE
52
53
  xmlMemGet((xmlFreeFunc *) & freeFunc,
53
54
  (xmlMallocFunc *) & mallocFunc,
54
55
  (xmlReallocFunc *) & reallocFunc,
@@ -57,6 +58,7 @@ Init_libxml_so(void) {
57
58
  if (xmlMemSetup((xmlFreeFunc)RubyMemFree, (xmlMallocFunc)RubyMemMalloc,
58
59
  (xmlReallocFunc)RubyMemRealloc, (xmlStrdupFunc)RubyMemStrdup) != 0)
59
60
  rb_fatal("could not install the memory handlers for libxml");
61
+ #endif
60
62
  xmlInitParser();
61
63
 
62
64
  mXML = rb_define_module("XML");
@@ -67,7 +69,6 @@ Init_libxml_so(void) {
67
69
  ruby_init_parser();
68
70
  ruby_init_xml_parser_context();
69
71
  ruby_init_xml_attr();
70
- ruby_init_xml_attribute();
71
72
  ruby_init_xml_document();
72
73
  ruby_init_xml_node();
73
74
  ruby_init_xml_node_set();
@@ -79,9 +80,11 @@ Init_libxml_so(void) {
79
80
  ruby_init_xml_xpath_context();
80
81
  ruby_init_xml_xpointer();
81
82
  ruby_init_xml_xpointer_context();
83
+ ruby_init_html_parser();
82
84
  ruby_init_input_callbacks();
83
85
  ruby_init_xml_dtd();
84
86
  ruby_init_xml_schema();
87
+ ruby_init_xml_reader();
85
88
 
86
89
  ruby_xml_parser_default_substitute_entities_set(cXMLParser, Qtrue);
87
90
  ruby_xml_parser_default_load_external_dtd_set(cXMLParser, Qtrue);
data/ext/xml/libxml.h CHANGED
@@ -6,12 +6,12 @@
6
6
  /* Don't nuke this block! It is used for automatically updating the
7
7
  * versions below. VERSION = string formatting, VERNUM = numbered
8
8
  * version for inline testing: increment both or none at all. */
9
- #define RUBY_LIBXML_VERSION "0.3.8.4"
10
- #define RUBY_LIBXML_VERNUM 384
11
- #define RUBY_LIBXML_VER_MAJ 0
12
- #define RUBY_LIBXML_VER_MIN 3
13
- #define RUBY_LIBXML_VER_MIC 8
14
- #define RUBY_LIBXML_VER_PATCH 4
9
+ #define RUBY_LIBXML_VERSION "0.5.0"
10
+ #define RUBY_LIBXML_VERNUM 500
11
+ #define RUBY_LIBXML_VER_MAJ 0
12
+ #define RUBY_LIBXML_VER_MIN 5
13
+ #define RUBY_LIBXML_VER_MIC 0
14
+ #define RUBY_LIBXML_VER_PATCH 0
15
15
 
16
16
  #include <ruby.h>
17
17
  #include <rubyio.h>
@@ -24,6 +24,14 @@
24
24
  #include <libxml/xpath.h>
25
25
  #include <libxml/valid.h>
26
26
  #include <libxml/catalog.h>
27
+ #include <libxml/HTMLparser.h>
28
+ #include <libxml/xmlreader.h>
29
+
30
+ // Maybe not yet defined in ruby
31
+ #ifndef RSTRING_LEN
32
+ #define RSTRING_LEN(x) RSTRING(x)->len
33
+ #endif
34
+
27
35
  #ifdef LIBXML_DEBUG_ENABLED
28
36
  #include <libxml/xpathInternals.h>
29
37
  #endif
@@ -57,7 +65,6 @@ typedef struct rx_xpath_data {
57
65
  } rx_xpath_data;
58
66
 
59
67
  #include "ruby_xml_attr.h"
60
- #include "ruby_xml_attribute.h"
61
68
  #include "ruby_xml_document.h"
62
69
  #include "ruby_xml_node.h"
63
70
  #include "ruby_xml_node_set.h"
@@ -74,6 +81,8 @@ typedef struct rx_xpath_data {
74
81
  #include "ruby_xml_input_cbg.h"
75
82
  #include "ruby_xml_dtd.h"
76
83
  #include "ruby_xml_schema.h"
84
+ #include "ruby_xml_html_parser.h"
85
+ #include "ruby_xml_reader.h"
77
86
 
78
87
  extern VALUE mXML;
79
88
  extern VALUE eXMLError;
data/ext/xml/libxml.rb CHANGED
@@ -1,4 +1,4 @@
1
- # $Id: libxml.rb,v 1.5.2.1 2006/11/26 12:37:42 roscopeco Exp $
1
+ # $Id: libxml.rb 120 2006-11-26 12:57:56Z roscopeco $
2
2
  # Please see the LICENSE file for copyright and distribution information
3
3
  require 'xml/libxml_so'
4
4
 
@@ -12,8 +12,8 @@ class XML::Document
12
12
  end
13
13
 
14
14
  class XML::Node::Set
15
- include Enumerable
16
-
15
+ include Enumerable
16
+
17
17
  # inefficient, but maybe can find a way to cache the
18
18
  # ary and dump on change?
19
19
  def [](i, count = nil)
@@ -1,4 +1,4 @@
1
- /* $Id: ruby_xml_attr.c,v 1.2.2.1 2006/11/26 12:29:57 roscopeco Exp $ */
1
+ /* $Id: ruby_xml_attr.c 138 2007-08-29 18:00:35Z danj $ */
2
2
 
3
3
  /* Please see the LICENSE file for copyright and distribution information */
4
4
 
@@ -7,25 +7,90 @@
7
7
 
8
8
  VALUE cXMLAttr;
9
9
 
10
+ void ruby_xml_attr_free(ruby_xml_attr_t *rx) {
11
+ if (rx->attr == NULL ) return;
12
+
13
+ if (rx->attr->parent == NULL && rx->attr->doc == NULL ) {
14
+ #ifdef NODE_DEBUG
15
+ fprintf(stderr,"free rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)rxn->node,(long)rxn->node->_private);
16
+ #endif
17
+ rx->attr->_private=NULL;
18
+ xmlFreeProp(rx->attr);
19
+ }
20
+
21
+ rx->attr=NULL;
22
+ // fprintf(stderr,"%0x ",(long)rxn);
23
+ free(rx);
24
+ }
25
+
10
26
  void
11
- ruby_xml_attr_free(ruby_xml_attr *rxa) {
12
- if (rxa->attr != NULL && // got an attr?
13
- rxa->attr->parent == NULL && // unparented (otherwise, it gets freed with parent)
14
- rxa->attr->doc == NULL) { // No document? (otherwise, freed with doc)
15
- if (rxa->attr->_private <= (void*)1) {
16
- // is null or last reference,
17
- xmlFreeNode((xmlNodePtr)rxa->attr);
18
- } else {
19
- // other pointers remain
20
- rxa->attr->_private--;
21
- }
27
+ ruby_xml_attr_mark(ruby_xml_attr_t *rx) {
28
+ xmlNodePtr node;
29
+ if (rx->attr == NULL ) return;
30
+
31
+ if (rx->attr->_private == NULL ) {
32
+ rb_warning("XmlAttr is not bound! (%s:%d)",
33
+ __FILE__,__LINE__);
34
+ return;
22
35
  }
23
36
 
24
- rxa->attr = NULL;
25
- free(rxa);
37
+ if (rx->attr->doc != NULL ) {
38
+ if (rx->attr->doc->_private == NULL )
39
+ rb_warning("XmlAttr Doc is not bound! (%s:%d)",
40
+ __FILE__,__LINE__);
41
+ else {
42
+ rb_gc_mark((VALUE)rx->attr->doc->_private);
43
+ #ifdef NODE_DEBUG
44
+ fprintf(stderr,"mark rx=0x%x xn=0x%x o=0x%x\n",(long)rx,(long)rx->attr,(long)rx->attr->_private);
45
+ #endif
46
+ }
47
+ } else if (rx->attr->parent != NULL ) {
48
+ if (rx->attr->parent->_private == NULL )
49
+ rb_warning("XmlAttr Parent is not bound! (%s:%d)",
50
+ __FILE__,__LINE__);
51
+ node=rx->attr->parent;
52
+ while (node->parent != NULL )
53
+ node=node->parent;
54
+ if (node->_private != NULL) {
55
+ rb_gc_mark((VALUE)node->_private);
56
+ #ifdef NODE_DEBUG
57
+ fprintf(stderr,"mark rx=0x%x xn=0x%x o=0x%x\n",(long)0,(long)node,(long)node->_private);
58
+ #endif
59
+ }
60
+ }
26
61
  }
27
62
 
63
+ VALUE
64
+ ruby_xml_attr_wrap(VALUE class, xmlAttrPtr xnode)
65
+ {
66
+ VALUE obj;
67
+ ruby_xml_attr_t *rx;
68
+
69
+ // This node is already wrapped
70
+ if (xnode->_private != NULL)
71
+ return (VALUE)xnode->_private;
72
+
73
+ obj=Data_Make_Struct(class,ruby_xml_attr_t,ruby_xml_attr_mark,
74
+ ruby_xml_attr_free,rx);
75
+
76
+ rx->attr=xnode;
77
+ xnode->_private=(void*)obj;
78
+ #ifdef NODE_DEBUG
79
+ fprintf(stderr,"wrap rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)xnode,(long)obj);
80
+ #endif
81
+ return obj;
82
+ }
28
83
 
84
+ /*
85
+ * Only use this when a xmlAttr has just been created since
86
+ * oblitterates the _private. Not exposed to ruby interp.
87
+ */
88
+ VALUE
89
+ ruby_xml_attr_new(VALUE class, xmlAttrPtr xnode)
90
+ {
91
+ xnode->_private=NULL;
92
+ return ruby_xml_attr_wrap(class,xnode);
93
+ }
29
94
  /*
30
95
  * call-seq:
31
96
  * attr.child => node
@@ -34,12 +99,12 @@ ruby_xml_attr_free(ruby_xml_attr *rxa) {
34
99
  */
35
100
  VALUE
36
101
  ruby_xml_attr_child_get(VALUE self) {
37
- ruby_xml_attr *rxa;
38
- Data_Get_Struct(self, ruby_xml_attr, rxa);
102
+ ruby_xml_attr_t *rxa;
103
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
39
104
  if (rxa->attr->children == NULL)
40
105
  return(Qnil);
41
106
  else
42
- return(ruby_xml_node_new_ptr(cXMLNode, rxa->xd, rxa->attr->children));
107
+ return(ruby_xml_node2_wrap(cXMLNode, rxa->attr->children));
43
108
  }
44
109
 
45
110
 
@@ -51,8 +116,8 @@ ruby_xml_attr_child_get(VALUE self) {
51
116
  */
52
117
  VALUE
53
118
  ruby_xml_attr_child_q(VALUE self) {
54
- ruby_xml_attr *rxa;
55
- Data_Get_Struct(self, ruby_xml_attr, rxa);
119
+ ruby_xml_attr_t *rxa;
120
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
56
121
  if (rxa->attr->children == NULL)
57
122
  return(Qfalse);
58
123
  else
@@ -69,15 +134,14 @@ ruby_xml_attr_child_q(VALUE self) {
69
134
  */
70
135
  VALUE
71
136
  ruby_xml_attr_doc_get(VALUE self) {
72
- ruby_xml_attr *rxa;
73
- Data_Get_Struct(self, ruby_xml_attr, rxa);
137
+ ruby_xml_attr_t *rxa;
138
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
74
139
  if (rxa->attr->doc == NULL)
75
140
  return(Qnil);
76
141
  else
77
- return(ruby_xml_document_new(cXMLDocument, rxa->attr->doc));
142
+ return(ruby_xml_document_wrap(cXMLDocument, rxa->attr->doc));
78
143
  }
79
144
 
80
-
81
145
  /*
82
146
  * call-seq:
83
147
  * attr.doc? => (true|false)
@@ -87,8 +151,8 @@ ruby_xml_attr_doc_get(VALUE self) {
87
151
  */
88
152
  VALUE
89
153
  ruby_xml_attr_doc_q(VALUE self) {
90
- ruby_xml_attr *rxa;
91
- Data_Get_Struct(self, ruby_xml_attr, rxa);
154
+ ruby_xml_attr_t *rxa;
155
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
92
156
  if (rxa->attr->doc == NULL)
93
157
  return(Qfalse);
94
158
  else
@@ -104,12 +168,12 @@ ruby_xml_attr_doc_q(VALUE self) {
104
168
  */
105
169
  VALUE
106
170
  ruby_xml_attr_last_get(VALUE self) {
107
- ruby_xml_attr *rxa;
108
- Data_Get_Struct(self, ruby_xml_attr, rxa);
171
+ ruby_xml_attr_t *rxa;
172
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
109
173
  if (rxa->attr->last == NULL)
110
174
  return(Qnil);
111
175
  else
112
- return(ruby_xml_node_new_ptr(cXMLNode, rxa->xd, rxa->attr->last));
176
+ return(ruby_xml_node2_wrap(cXMLNode, rxa->attr->last));
113
177
  }
114
178
 
115
179
 
@@ -121,22 +185,14 @@ ruby_xml_attr_last_get(VALUE self) {
121
185
  */
122
186
  VALUE
123
187
  ruby_xml_attr_last_q(VALUE self) {
124
- ruby_xml_attr *rxa;
125
- Data_Get_Struct(self, ruby_xml_attr, rxa);
188
+ ruby_xml_attr_t *rxa;
189
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
126
190
  if (rxa->attr->last == NULL)
127
191
  return(Qfalse);
128
192
  else
129
193
  return(Qtrue);
130
194
  }
131
195
 
132
-
133
- static void
134
- ruby_xml_attr_mark(ruby_xml_attr *rxa) {
135
- if (rxa == NULL) return;
136
- if (!NIL_P(rxa->xd)) rb_gc_mark(rxa->xd);
137
- }
138
-
139
-
140
196
  /*
141
197
  * call-seq:
142
198
  * attr.name => "name"
@@ -145,8 +201,8 @@ ruby_xml_attr_mark(ruby_xml_attr *rxa) {
145
201
  */
146
202
  VALUE
147
203
  ruby_xml_attr_name_get(VALUE self) {
148
- ruby_xml_attr *rxa;
149
- Data_Get_Struct(self, ruby_xml_attr, rxa);
204
+ ruby_xml_attr_t *rxa;
205
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
150
206
 
151
207
  if (rxa->attr->name == NULL)
152
208
  return(Qnil);
@@ -154,43 +210,6 @@ ruby_xml_attr_name_get(VALUE self) {
154
210
  return(rb_str_new2((const char*)rxa->attr->name));
155
211
  }
156
212
 
157
-
158
- VALUE
159
- ruby_xml_attr_new(VALUE class, VALUE xd, xmlAttrPtr attr) {
160
- return(ruby_xml_attr_new2(class, xd, attr));
161
- }
162
-
163
-
164
- VALUE
165
- ruby_xml_attr_new2(VALUE class, VALUE xd, xmlAttrPtr attr) {
166
- ruby_xml_attr *rxa;
167
-
168
- rxa = ALLOC(ruby_xml_attr);
169
-
170
- rxa->attr = attr;
171
- if (attr->_private) {
172
- attr->_private++;
173
- } else {
174
- attr->_private = (void*)1;
175
- }
176
-
177
- if (NIL_P(xd)) {
178
- rxa->xd = Qnil;
179
- rxa->attr->doc = NULL;
180
- } else {
181
- /* Have to set node->doc too so we don't doublefree this node */
182
- ruby_xml_document *xdoc;
183
- Data_Get_Struct(xd, ruby_xml_document, xdoc);
184
-
185
- rxa->xd = xd;
186
- rxa->attr->doc = xdoc->doc;
187
- }
188
-
189
- return(Data_Wrap_Struct(class, ruby_xml_attr_mark,
190
- ruby_xml_attr_free, rxa));
191
- }
192
-
193
-
194
213
  /*
195
214
  * call-seq:
196
215
  * attr.next => node
@@ -199,12 +218,12 @@ ruby_xml_attr_new2(VALUE class, VALUE xd, xmlAttrPtr attr) {
199
218
  */
200
219
  VALUE
201
220
  ruby_xml_attr_next_get(VALUE self) {
202
- ruby_xml_attr *rxa;
203
- Data_Get_Struct(self, ruby_xml_attr, rxa);
221
+ ruby_xml_attr_t *rxa;
222
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
204
223
  if (rxa->attr->next == NULL)
205
224
  return(Qnil);
206
225
  else
207
- return(ruby_xml_attr_new(cXMLAttr, rxa->xd, rxa->attr->next));
226
+ return(ruby_xml_attr_wrap(cXMLAttr, rxa->attr->next));
208
227
  }
209
228
 
210
229
 
@@ -216,8 +235,8 @@ ruby_xml_attr_next_get(VALUE self) {
216
235
  */
217
236
  VALUE
218
237
  ruby_xml_attr_next_q(VALUE self) {
219
- ruby_xml_attr *rxa;
220
- Data_Get_Struct(self, ruby_xml_attr, rxa);
238
+ ruby_xml_attr_t *rxa;
239
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
221
240
  if (rxa->attr->next == NULL)
222
241
  return(Qfalse);
223
242
  else
@@ -245,12 +264,12 @@ ruby_xml_attr_node_type_name(VALUE self) {
245
264
  */
246
265
  VALUE
247
266
  ruby_xml_attr_ns_get(VALUE self) {
248
- ruby_xml_attr *rxa;
249
- Data_Get_Struct(self, ruby_xml_attr, rxa);
267
+ ruby_xml_attr_t *rxa;
268
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
250
269
  if (rxa->attr->ns == NULL)
251
270
  return(Qnil);
252
271
  else
253
- return(ruby_xml_ns_new2(cXMLNS, rxa->xd, rxa->attr->ns));
272
+ return(ruby_xml_ns_new2(cXMLNS, NULL, rxa->attr->ns));
254
273
  }
255
274
 
256
275
 
@@ -263,8 +282,8 @@ ruby_xml_attr_ns_get(VALUE self) {
263
282
  */
264
283
  VALUE
265
284
  ruby_xml_attr_ns_q(VALUE self) {
266
- ruby_xml_attr *rxa;
267
- Data_Get_Struct(self, ruby_xml_attr, rxa);
285
+ ruby_xml_attr_t *rxa;
286
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
268
287
  if (rxa->attr->ns == NULL)
269
288
  return(Qfalse);
270
289
  else
@@ -280,12 +299,12 @@ ruby_xml_attr_ns_q(VALUE self) {
280
299
  */
281
300
  VALUE
282
301
  ruby_xml_attr_parent_get(VALUE self) {
283
- ruby_xml_attr *rxa;
284
- Data_Get_Struct(self, ruby_xml_attr, rxa);
302
+ ruby_xml_attr_t *rxa;
303
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
285
304
  if (rxa->attr->parent == NULL)
286
305
  return(Qnil);
287
306
  else
288
- return(ruby_xml_node_new_ptr(cXMLNode, rxa->xd, rxa->attr->parent));
307
+ return(ruby_xml_node2_wrap(cXMLNode, rxa->attr->parent));
289
308
  }
290
309
 
291
310
 
@@ -297,8 +316,8 @@ ruby_xml_attr_parent_get(VALUE self) {
297
316
  */
298
317
  VALUE
299
318
  ruby_xml_attr_parent_q(VALUE self) {
300
- ruby_xml_attr *rxa;
301
- Data_Get_Struct(self, ruby_xml_attr, rxa);
319
+ ruby_xml_attr_t *rxa;
320
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
302
321
  if (rxa->attr->parent == NULL)
303
322
  return(Qfalse);
304
323
  else
@@ -314,12 +333,12 @@ ruby_xml_attr_parent_q(VALUE self) {
314
333
  */
315
334
  VALUE
316
335
  ruby_xml_attr_prev_get(VALUE self) {
317
- ruby_xml_attr *rxa;
318
- Data_Get_Struct(self, ruby_xml_attr, rxa);
336
+ ruby_xml_attr_t *rxa;
337
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
319
338
  if (rxa->attr->prev == NULL)
320
339
  return(Qnil);
321
340
  else
322
- return(ruby_xml_attr_new(cXMLAttr, rxa->xd, rxa->attr->prev));
341
+ return(ruby_xml_attr_wrap(cXMLAttr, rxa->attr->prev));
323
342
  }
324
343
 
325
344
 
@@ -331,8 +350,8 @@ ruby_xml_attr_prev_get(VALUE self) {
331
350
  */
332
351
  VALUE
333
352
  ruby_xml_attr_prev_q(VALUE self) {
334
- ruby_xml_attr *rxa;
335
- Data_Get_Struct(self, ruby_xml_attr, rxa);
353
+ ruby_xml_attr_t *rxa;
354
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
336
355
  if (rxa->attr->prev == NULL)
337
356
  return(Qfalse);
338
357
  else
@@ -348,10 +367,10 @@ ruby_xml_attr_prev_q(VALUE self) {
348
367
  */
349
368
  VALUE
350
369
  ruby_xml_attr_value(VALUE self) {
351
- ruby_xml_attr *rxa;
370
+ ruby_xml_attr_t *rxa;
352
371
  xmlChar *value;
353
372
 
354
- Data_Get_Struct(self, ruby_xml_attr, rxa);
373
+ Data_Get_Struct(self, ruby_xml_attr_t, rxa);
355
374
  if (ruby_xml_attr_parent_q(self) == Qtrue) {
356
375
  value = xmlGetProp(rxa->attr->parent, rxa->attr->name);
357
376
  if (value != NULL)
@@ -1,4 +1,4 @@
1
- /* $Id: ruby_xml_attr.h,v 1.2 2006/11/20 01:22:07 roscopeco Exp $ */
1
+ /* $Id: ruby_xml_attr.h 138 2007-08-29 18:00:35Z danj $ */
2
2
 
3
3
  /* Please see the LICENSE file for copyright and distribution information */
4
4
 
@@ -9,13 +9,10 @@ extern VALUE cXMLAttr;
9
9
 
10
10
  typedef struct ruby_xml_attr {
11
11
  xmlAttrPtr attr;
12
- VALUE xd;
13
- //int is_ptr;
14
- } ruby_xml_attr;
12
+ } ruby_xml_attr_t;
15
13
 
16
- void ruby_xml_attr_free(ruby_xml_attr *rxn);
14
+ void ruby_xml_attr_free(ruby_xml_attr_t *rxn);
15
+ VALUE ruby_xml_attr_wrap(VALUE class, xmlAttrPtr xnode);
17
16
  void ruby_init_xml_attr(void);
18
- VALUE ruby_xml_attr_new(VALUE class, VALUE xd, xmlAttrPtr attr);
19
- VALUE ruby_xml_attr_new2(VALUE class, VALUE xd, xmlAttrPtr attr);
20
17
  VALUE ruby_xml_attr_name_get(VALUE self);
21
18
  #endif