libxslt-ruby 0.6.0-x86-mswin32-60
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.
- data/LICENSE +21 -0
- data/README +153 -0
- data/ext/libxslt/extconf.rb +104 -0
- data/ext/libxslt/libxslt.c +251 -0
- data/ext/libxslt/libxslt.h +51 -0
- data/ext/libxslt/ruby_xslt_stylesheet.c +298 -0
- data/ext/libxslt/ruby_xslt_stylesheet.h +21 -0
- data/ext/libxslt/ruby_xslt_transform_context.c +61 -0
- data/ext/libxslt/ruby_xslt_transform_context.h +22 -0
- data/ext/libxslt/version.h +5 -0
- data/lib/libxslt.rb +2 -0
- data/lib/libxslt_ruby.so +0 -0
- data/mingw/libxslt-1.dll +0 -0
- data/mingw/libxslt_ruby.so +0 -0
- data/mingw/mingw.rake +36 -0
- data/vc/libxslt_ruby.sln +26 -0
- data/vc/libxslt_ruby.vcproj +233 -0
- metadata +81 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
/* $Id: libxslt.h 43 2007-12-07 12:38:59Z transami $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#ifndef __RUBY_LIBXSLT_H__
|
6
|
+
#define __RUBY_LIBXSLT_H__
|
7
|
+
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <rubyio.h>
|
10
|
+
#include <libxml/parser.h>
|
11
|
+
#include <libxml/debugXML.h>
|
12
|
+
#include <libxslt/extra.h>
|
13
|
+
#include <libxslt/xslt.h>
|
14
|
+
#include <libxslt/xsltInternals.h>
|
15
|
+
#include <libxslt/transform.h>
|
16
|
+
#include <libxslt/xsltutils.h>
|
17
|
+
#include <libexslt/exslt.h>
|
18
|
+
|
19
|
+
// Includes from libxml-ruby
|
20
|
+
#include <libxml/ruby_libxml.h>
|
21
|
+
#include <libxml/ruby_xml_document.h>
|
22
|
+
|
23
|
+
|
24
|
+
#include "ruby_xslt_stylesheet.h"
|
25
|
+
#include "ruby_xslt_transform_context.h"
|
26
|
+
|
27
|
+
#include "version.h"
|
28
|
+
|
29
|
+
#define RUBY_LIBXSLT_SRC_TYPE_NULL 0
|
30
|
+
#define RUBY_LIBXSLT_SRC_TYPE_FILE 1
|
31
|
+
|
32
|
+
extern VALUE mXML;
|
33
|
+
//extern VALUE cXMLDocument;
|
34
|
+
|
35
|
+
extern VALUE cXSLT;
|
36
|
+
extern VALUE eXMLXSLTStylesheetRequireParsedDoc;
|
37
|
+
|
38
|
+
typedef struct ruby_xslt {
|
39
|
+
int data_type;
|
40
|
+
void *data;
|
41
|
+
VALUE str;
|
42
|
+
VALUE xml_doc_obj;
|
43
|
+
VALUE ctxt;
|
44
|
+
xsltStylesheetPtr xsp;
|
45
|
+
} ruby_xslt;
|
46
|
+
|
47
|
+
#if ((RUBY_LIBXML_VER_MAJ != RUBY_LIBXSLT_VER_MAJ) || (RUBY_LIBXML_VER_MIN != RUBY_LIBXSLT_VER_MIN))
|
48
|
+
#error "Incompatible LibXML-Ruby headers - please install same major/micro version"
|
49
|
+
#endif
|
50
|
+
|
51
|
+
#endif
|
@@ -0,0 +1,298 @@
|
|
1
|
+
/* $Id: ruby_xslt_stylesheet.c 42 2007-12-07 06:09:35Z transami $ */
|
2
|
+
|
3
|
+
/* See the LICENSE file for copyright and distribution information. */
|
4
|
+
|
5
|
+
#include "libxslt.h"
|
6
|
+
#include "ruby_xslt_stylesheet.h"
|
7
|
+
|
8
|
+
VALUE cXSLTStylesheet;
|
9
|
+
|
10
|
+
/* call-seq:
|
11
|
+
* sheet.apply => (true|false)
|
12
|
+
*
|
13
|
+
* Apply this stylesheet transformation to the source
|
14
|
+
* document.
|
15
|
+
*/
|
16
|
+
VALUE
|
17
|
+
ruby_xslt_stylesheet_apply(int argc, VALUE *argv, VALUE self) {
|
18
|
+
ruby_xslt_stylesheet *xss;
|
19
|
+
ruby_xml_document_t *rxd;
|
20
|
+
const char **params;
|
21
|
+
VALUE parameter, tmp;
|
22
|
+
int i, len;
|
23
|
+
|
24
|
+
Data_Get_Struct(self, ruby_xslt_stylesheet, xss);
|
25
|
+
|
26
|
+
if (NIL_P(xss->xml_doc_obj))
|
27
|
+
rb_raise(rb_eArgError, "Need a document object");
|
28
|
+
|
29
|
+
Data_Get_Struct(xss->xml_doc_obj, ruby_xml_document_t, rxd);
|
30
|
+
|
31
|
+
params = NULL;
|
32
|
+
|
33
|
+
switch(argc) {
|
34
|
+
case 0:
|
35
|
+
break;
|
36
|
+
case 1:
|
37
|
+
parameter = argv[0];
|
38
|
+
#if RUBY_VERSION_CODE >= 180
|
39
|
+
if (TYPE(parameter) == T_HASH) {
|
40
|
+
/* Convert parameter to an array */
|
41
|
+
parameter = rb_hash_to_a(parameter);
|
42
|
+
}
|
43
|
+
#endif
|
44
|
+
|
45
|
+
if (TYPE(parameter) == T_ARRAY) {
|
46
|
+
/* A hash is better than an array, but we can live with an array of arrays */
|
47
|
+
len = RARRAY(parameter)->len;
|
48
|
+
params = (void *)ALLOC_N(char *, (len * 2) + 2);
|
49
|
+
for (i=0; i < RARRAY(parameter)->len; i++) {
|
50
|
+
tmp = RARRAY(parameter)->ptr[i];
|
51
|
+
|
52
|
+
Check_Type(tmp, T_ARRAY);
|
53
|
+
Check_Type(RARRAY(tmp)->ptr[0], T_STRING);
|
54
|
+
Check_Type(RARRAY(tmp)->ptr[1], T_STRING);
|
55
|
+
|
56
|
+
params[2*i] = RSTRING(RARRAY(tmp)->ptr[0])->ptr;
|
57
|
+
params[2*i+1] = RSTRING(RARRAY(tmp)->ptr[1])->ptr;
|
58
|
+
}
|
59
|
+
params[2*i] = params[2*i+1] = 0;
|
60
|
+
} else {
|
61
|
+
/* I should test to see if the object responds to to_a and to_h before calling this, but oh well */
|
62
|
+
rb_raise(rb_eTypeError, "xslt_stylesheet_appy: expecting a hash or an array of arrays as a parameter");
|
63
|
+
}
|
64
|
+
|
65
|
+
break;
|
66
|
+
default:
|
67
|
+
rb_raise(rb_eArgError, "wrong number of arguments (0 or 1)");
|
68
|
+
}
|
69
|
+
|
70
|
+
xss->parsed = ruby_xml_document_wrap(xsltApplyStylesheet(xss->xsp,
|
71
|
+
rxd->doc, params));
|
72
|
+
|
73
|
+
if (params) {
|
74
|
+
ruby_xfree(params);
|
75
|
+
}
|
76
|
+
|
77
|
+
if (xss->parsed == Qnil)
|
78
|
+
return(Qfalse);
|
79
|
+
else
|
80
|
+
return(Qtrue);
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
/* call-seq:
|
85
|
+
* sheet.debug(to = $stdout) => (true|false)
|
86
|
+
*
|
87
|
+
* Output a debug dump of this stylesheet to the specified output
|
88
|
+
* stream (an instance of IO, defaults to $stdout). Requires
|
89
|
+
* libxml/libxslt be compiled with debugging enabled. If this
|
90
|
+
* is not the case, a warning is triggered and the method returns
|
91
|
+
* false.
|
92
|
+
*/
|
93
|
+
VALUE
|
94
|
+
ruby_xslt_stylesheet_debug(int argc, VALUE *argv, VALUE self) {
|
95
|
+
#ifdef LIBXML_DEBUG_ENABLED
|
96
|
+
OpenFile *fptr;
|
97
|
+
VALUE io;
|
98
|
+
FILE *out;
|
99
|
+
ruby_xml_document_t *parsed;
|
100
|
+
ruby_xslt_stylesheet *xss;
|
101
|
+
|
102
|
+
Data_Get_Struct(self, ruby_xslt_stylesheet, xss);
|
103
|
+
if (NIL_P(xss->parsed))
|
104
|
+
rb_raise(eXMLXSLTStylesheetRequireParsedDoc, "must have a parsed XML result");
|
105
|
+
|
106
|
+
switch (argc) {
|
107
|
+
case 0:
|
108
|
+
io = rb_stdout;
|
109
|
+
break;
|
110
|
+
case 1:
|
111
|
+
io = argv[0];
|
112
|
+
if (rb_obj_is_kind_of(io, rb_cIO) == Qfalse)
|
113
|
+
rb_raise(rb_eTypeError, "need an IO object");
|
114
|
+
break;
|
115
|
+
default:
|
116
|
+
rb_raise(rb_eArgError, "wrong number of arguments (0 or 1)");
|
117
|
+
}
|
118
|
+
|
119
|
+
Data_Get_Struct(xss->parsed, ruby_xml_document_t, parsed);
|
120
|
+
if (parsed->doc == NULL)
|
121
|
+
return(Qnil);
|
122
|
+
|
123
|
+
GetOpenFile(io, fptr);
|
124
|
+
rb_io_check_writable(fptr);
|
125
|
+
out = GetWriteFile(fptr);
|
126
|
+
xmlDebugDumpDocument(out, parsed->doc);
|
127
|
+
return(Qtrue);
|
128
|
+
#else
|
129
|
+
rb_warn("libxml/libxslt was compiled without debugging support. Please recompile libxml/libxslt and their Ruby modules");
|
130
|
+
return(Qfalse);
|
131
|
+
#endif
|
132
|
+
}
|
133
|
+
|
134
|
+
|
135
|
+
void
|
136
|
+
ruby_xslt_stylesheet_free(ruby_xslt_stylesheet *xss) {
|
137
|
+
if (xss->xsp != NULL) {
|
138
|
+
xsltFreeStylesheet(xss->xsp);
|
139
|
+
xss->xsp = NULL;
|
140
|
+
}
|
141
|
+
|
142
|
+
ruby_xfree(xss);
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
void
|
147
|
+
ruby_xslt_stylesheet_mark(ruby_xslt_stylesheet *xss) {
|
148
|
+
if (!NIL_P(xss->parsed)) rb_gc_mark(xss->parsed);
|
149
|
+
if (!NIL_P(xss->xml_doc_obj)) rb_gc_mark(xss->xml_doc_obj);
|
150
|
+
|
151
|
+
switch (xss->data_type) {
|
152
|
+
case RUBY_LIBXSLT_SRC_TYPE_FILE:
|
153
|
+
if (xss->data != NULL)
|
154
|
+
rb_gc_mark((VALUE)xss->data);
|
155
|
+
break;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
|
160
|
+
VALUE
|
161
|
+
ruby_xslt_stylesheet_new(VALUE class, xsltStylesheetPtr xsp) {
|
162
|
+
ruby_xslt_stylesheet *xss;
|
163
|
+
VALUE rval;
|
164
|
+
|
165
|
+
rval=Data_Make_Struct(cXSLTStylesheet,ruby_xslt_stylesheet,ruby_xslt_stylesheet_mark,
|
166
|
+
ruby_xslt_stylesheet_free,xss);
|
167
|
+
xss->xsp = xsp;
|
168
|
+
xss->xml_doc_obj = Qnil;
|
169
|
+
xss->parsed = Qnil;
|
170
|
+
xss->data_type = RUBY_LIBXSLT_SRC_TYPE_NULL;
|
171
|
+
xss->data = NULL;
|
172
|
+
|
173
|
+
return rval;
|
174
|
+
}
|
175
|
+
|
176
|
+
// TODO should this automatically apply the sheet if not already,
|
177
|
+
// given that we're unlikely to do much else with it?
|
178
|
+
|
179
|
+
/* call-seq:
|
180
|
+
* sheet.print(to = $stdout) => number_of_bytes
|
181
|
+
*
|
182
|
+
* Output the result of the transform to the specified output
|
183
|
+
* stream (an IO instance, defaults to $stdout). You *must* call
|
184
|
+
* +apply+ before this method or an exception will be raised.
|
185
|
+
*/
|
186
|
+
VALUE
|
187
|
+
ruby_xslt_stylesheet_print(int argc, VALUE *argv, VALUE self) {
|
188
|
+
OpenFile *fptr;
|
189
|
+
VALUE io;
|
190
|
+
FILE *out;
|
191
|
+
ruby_xml_document_t *parsed;
|
192
|
+
ruby_xslt_stylesheet *xss;
|
193
|
+
int bytes;
|
194
|
+
|
195
|
+
Data_Get_Struct(self, ruby_xslt_stylesheet, xss);
|
196
|
+
if (NIL_P(xss->parsed))
|
197
|
+
rb_raise(eXMLXSLTStylesheetRequireParsedDoc, "must have a parsed XML result");
|
198
|
+
|
199
|
+
switch (argc) {
|
200
|
+
case 0:
|
201
|
+
io = rb_stdout;
|
202
|
+
break;
|
203
|
+
case 1:
|
204
|
+
io = argv[0];
|
205
|
+
if (rb_obj_is_kind_of(io, rb_cIO) == Qfalse)
|
206
|
+
rb_raise(rb_eTypeError, "need an IO object");
|
207
|
+
break;
|
208
|
+
default:
|
209
|
+
rb_raise(rb_eArgError, "wrong number of arguments (0 or 1)");
|
210
|
+
}
|
211
|
+
|
212
|
+
Data_Get_Struct(xss->parsed, ruby_xml_document_t, parsed);
|
213
|
+
if (parsed->doc == NULL)
|
214
|
+
return(Qnil);
|
215
|
+
|
216
|
+
GetOpenFile(io, fptr);
|
217
|
+
rb_io_check_writable(fptr);
|
218
|
+
out = GetWriteFile(fptr);
|
219
|
+
bytes = xsltSaveResultToFile(out, parsed->doc, xss->xsp);
|
220
|
+
|
221
|
+
return(INT2NUM(bytes));
|
222
|
+
}
|
223
|
+
|
224
|
+
// TODO this, too. Either way, to_s probably should have prereqs
|
225
|
+
// like this, for one thing it makes IRB use tricky...
|
226
|
+
|
227
|
+
/* call-seq:
|
228
|
+
* sheet.to_s => "result"
|
229
|
+
*
|
230
|
+
* Obtain the result of the transform as a string. You *must* call
|
231
|
+
* +apply+ before this method or an exception will be raised.
|
232
|
+
*/
|
233
|
+
VALUE
|
234
|
+
ruby_xslt_stylesheet_to_s(VALUE self) {
|
235
|
+
ruby_xml_document_t *parsed;
|
236
|
+
ruby_xslt_stylesheet *xss;
|
237
|
+
xmlChar *str;
|
238
|
+
int len;
|
239
|
+
|
240
|
+
Data_Get_Struct(self, ruby_xslt_stylesheet, xss);
|
241
|
+
if (NIL_P(xss->parsed))
|
242
|
+
rb_raise(eXMLXSLTStylesheetRequireParsedDoc, "must have a parsed XML result");
|
243
|
+
Data_Get_Struct(xss->parsed, ruby_xml_document_t, parsed);
|
244
|
+
if (parsed->doc == NULL)
|
245
|
+
return(Qnil);
|
246
|
+
|
247
|
+
xsltSaveResultToString(&str, &len, parsed->doc, xss->xsp);
|
248
|
+
if (str == NULL)
|
249
|
+
return(Qnil);
|
250
|
+
else
|
251
|
+
return(rb_str_new((const char*)str,len));
|
252
|
+
}
|
253
|
+
|
254
|
+
|
255
|
+
|
256
|
+
/* call-seq:
|
257
|
+
* sheet.save(io) => true
|
258
|
+
*
|
259
|
+
* Save the result of the transform to the supplied open
|
260
|
+
* file (an IO instance). You *must* call +apply+ before
|
261
|
+
* this method or an exception will be raised.
|
262
|
+
*/
|
263
|
+
VALUE
|
264
|
+
ruby_xslt_stylesheet_save(VALUE self, VALUE io) {
|
265
|
+
ruby_xml_document_t *parsed;
|
266
|
+
ruby_xslt_stylesheet *xss;
|
267
|
+
OpenFile *fptr;
|
268
|
+
|
269
|
+
if (rb_obj_is_kind_of(io, rb_cIO) == Qfalse)
|
270
|
+
rb_raise(rb_eArgError, "Only accept IO objects for saving");
|
271
|
+
|
272
|
+
GetOpenFile(io, fptr);
|
273
|
+
|
274
|
+
Data_Get_Struct(self, ruby_xslt_stylesheet, xss);
|
275
|
+
Data_Get_Struct(xss->parsed, ruby_xml_document_t, parsed);
|
276
|
+
|
277
|
+
xsltSaveResultToFile(fptr->f, parsed->doc, xss->xsp);
|
278
|
+
|
279
|
+
return(Qtrue);
|
280
|
+
}
|
281
|
+
|
282
|
+
#ifdef RDOC_NEVER_DEFINED
|
283
|
+
mXML = rb_define_module("XML");
|
284
|
+
cXSLT = rb_define_class_under(mXML, "XSLT", rb_cObject);
|
285
|
+
#endif
|
286
|
+
|
287
|
+
void
|
288
|
+
ruby_init_xslt_stylesheet(void) {
|
289
|
+
cXSLTStylesheet = rb_define_class_under(cXSLT, "Stylesheet", rb_cObject);
|
290
|
+
eXMLXSLTStylesheetRequireParsedDoc =
|
291
|
+
rb_define_class_under(cXSLTStylesheet, "RequireParsedDoc", rb_eException);
|
292
|
+
|
293
|
+
rb_define_method(cXSLTStylesheet, "apply", ruby_xslt_stylesheet_apply, -1);
|
294
|
+
rb_define_method(cXSLTStylesheet, "debug", ruby_xslt_stylesheet_debug, -1);
|
295
|
+
rb_define_method(cXSLTStylesheet, "print", ruby_xslt_stylesheet_print, -1);
|
296
|
+
rb_define_method(cXSLTStylesheet, "to_s", ruby_xslt_stylesheet_to_s, 0);
|
297
|
+
rb_define_method(cXSLTStylesheet, "save", ruby_xslt_stylesheet_save, 1);
|
298
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/* $Id: ruby_xslt_stylesheet.h 42 2007-12-07 06:09:35Z transami $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information. */
|
4
|
+
|
5
|
+
#ifndef __RUBY_LIBXSLT_STYLESHEET__
|
6
|
+
#define __RUBY_LIBXSLT_STYLESHEET__
|
7
|
+
|
8
|
+
extern VALUE cXSLTStylesheet;
|
9
|
+
|
10
|
+
typedef struct ruby_xslt_stylesheet {
|
11
|
+
int data_type;
|
12
|
+
void *data;
|
13
|
+
VALUE parsed; /* XML::Document # parsed xml document after xsl apply */
|
14
|
+
VALUE xml_doc_obj; /* XML::Document */
|
15
|
+
xsltStylesheetPtr xsp;
|
16
|
+
} ruby_xslt_stylesheet;
|
17
|
+
|
18
|
+
void ruby_init_xslt_stylesheet(void);
|
19
|
+
VALUE ruby_xslt_stylesheet_new(VALUE class, xsltStylesheetPtr xsp);
|
20
|
+
|
21
|
+
#endif /* __RUBY_LIBXSLT_STYLESHEET__ */
|
@@ -0,0 +1,61 @@
|
|
1
|
+
/* $Id: ruby_xslt_transform_context.c 42 2007-12-07 06:09:35Z transami $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#include "libxslt.h"
|
6
|
+
#include "ruby_xslt_transform_context.h"
|
7
|
+
|
8
|
+
VALUE cXSLTTransformContext;
|
9
|
+
|
10
|
+
void
|
11
|
+
ruby_xslt_transform_context_free(ruby_xslt_transform_context *rxtc) {
|
12
|
+
if (rxtc->ctxt != NULL) {
|
13
|
+
xsltFreeTransformContext(rxtc->ctxt);
|
14
|
+
rxtc->ctxt = NULL;
|
15
|
+
}
|
16
|
+
ruby_xfree(rxtc);
|
17
|
+
}
|
18
|
+
|
19
|
+
void
|
20
|
+
ruby_xslt_transform_context_mark(ruby_xslt_transform_context *rxtc) {
|
21
|
+
if (rxtc == NULL) return;
|
22
|
+
if (!NIL_P(rxtc->xslt)) rb_gc_mark(rxtc->xslt);
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
VALUE
|
27
|
+
ruby_xslt_transform_context_new(VALUE class, VALUE xslt,
|
28
|
+
xsltTransformContextPtr ctxt) {
|
29
|
+
ruby_xslt_transform_context *rxtc;
|
30
|
+
rxtc = ALLOC(ruby_xslt_transform_context);
|
31
|
+
rxtc->ctxt = ctxt;
|
32
|
+
rxtc->xslt = xslt;
|
33
|
+
//fprintf(stderr,"ruby_xslt_transform_context_new 2\n");
|
34
|
+
//if (class == Qfalse)
|
35
|
+
//fprintf(stderr,"ruby_xslt_transform_context_new: EEEEK!\n");
|
36
|
+
return(Data_Wrap_Struct(class, ruby_xslt_transform_context_mark,
|
37
|
+
ruby_xslt_transform_context_free, rxtc));
|
38
|
+
}
|
39
|
+
|
40
|
+
|
41
|
+
VALUE
|
42
|
+
ruby_xslt_transform_context_new2(VALUE class, VALUE xslt) {
|
43
|
+
return(ruby_xslt_transform_context_new(class, xslt, NULL));
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
VALUE
|
48
|
+
ruby_xslt_transform_context_new3(VALUE xslt) {
|
49
|
+
return(ruby_xslt_transform_context_new2(cXSLTTransformContext, xslt));
|
50
|
+
}
|
51
|
+
|
52
|
+
#ifdef RDOC_NEVER_DEFINED
|
53
|
+
mXML = rb_define_module("XML");
|
54
|
+
cXSLT = rb_define_class_under(mXML, "XSLT", rb_cObject);
|
55
|
+
#endif
|
56
|
+
|
57
|
+
void
|
58
|
+
ruby_init_xslt_transform_context(void) {
|
59
|
+
cXSLTTransformContext =
|
60
|
+
rb_define_class_under(cXSLT, "TransformContext", rb_cObject);
|
61
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/* $Id: ruby_xslt_transform_context.h 42 2007-12-07 06:09:35Z transami $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#ifndef __RUBY_XSLT_TRANSFORM_CONTEXT__
|
6
|
+
#define __RUBY_XSLT_TRANSFORM_CONTEXT__
|
7
|
+
|
8
|
+
extern VALUE cXSLTTransformContext;
|
9
|
+
|
10
|
+
typedef struct ruby_xslt_transform_context {
|
11
|
+
xsltTransformContextPtr ctxt;
|
12
|
+
VALUE xslt;
|
13
|
+
} ruby_xslt_transform_context;
|
14
|
+
|
15
|
+
void ruby_init_xslt_transform_context(void);
|
16
|
+
void ruby_xslt_transform_context_free(ruby_xslt_transform_context *ctxt);
|
17
|
+
void ruby_xslt_transform_context_mark(ruby_xslt_transform_context *ctxt);
|
18
|
+
VALUE ruby_xslt_transform_context_new(VALUE class, VALUE xslt, xsltTransformContextPtr ctxt);
|
19
|
+
VALUE ruby_xslt_transform_context_new2(VALUE class, VALUE xslt);
|
20
|
+
VALUE ruby_xslt_transform_context_new3(VALUE xslt);
|
21
|
+
|
22
|
+
#endif
|