rwv2 0.6.0

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/ext/rwv2/mkmf.log ADDED
@@ -0,0 +1,12 @@
1
+ have_library: checking for main() in -lwv2... -------------------- yes
2
+
3
+ "i686-pc-linux-gnu-gcc -o conftest -I. -I/usr/lib/ruby/1.8/i686-linux -I/home/zeno/.software/rwv2/ext/rwv2 -I./include -D_FILE_OFFSET_BITS=64 -Os -march=pentium4 -pipe -fno-strict-aliasing -fPIC conftest.c -L. -L/usr/lib -Wl,-R/usr/lib -L./lib -L. -Wl,-O1 -Wl,--sort-common -Wl,--as-needed -rdynamic -Wl,-export-dynamic -lstdc++ -lruby18-static -lwv2 -lstdc++ -lpthread -lrt -ldl -lcrypt -lm -lc"
4
+ checked program was:
5
+ /* begin */
6
+ 1: /*top*/
7
+ 2: int main() { return 0; }
8
+ 3: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
9
+ /* end */
10
+
11
+ --------------------
12
+
data/ext/rwv2/rwv2.cpp ADDED
@@ -0,0 +1,294 @@
1
+ /* Rwv2 -- Microsoft Word Parser extension
2
+ Copyright (C) 2003 Hannes Wyss, ywesee
3
+
4
+ This library is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU Lesser General Public
6
+ License as published by the Free Software Foundation; either
7
+ version 2.1 of the License, or (at your option) any later version.
8
+
9
+ This library is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public
15
+ License along with this library; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ ywesee - intellectual capital connected
19
+ Winterthurerstrasse 52, CH-8006 Z�rich, Switzerland
20
+ hwyss@ywesee.com
21
+ */
22
+
23
+ #include "ruby.h"
24
+ #include "rwv2.h"
25
+ #include "wv2/parserfactory.h"
26
+ #include "rwv2_parser.h"
27
+ #include "errno.h"
28
+
29
+ extern "C" {
30
+
31
+ VALUE mRwv2;
32
+ VALUE cRwv2Parser;
33
+ VALUE cRwv2Sep;
34
+ VALUE cRwv2Pap;
35
+ VALUE cRwv2Chp;
36
+ VALUE cRwv2Tap;
37
+ VALUE cRwv2Tc;
38
+ VALUE cRwv2Tab;
39
+ VALUE cRwv2Picf;
40
+
41
+ VALUE rwv2_create_parser(VALUE self, VALUE filename) {
42
+ VALUE parser;
43
+ Rwv2Parser * stub;
44
+ parser = Data_Make_Struct(cRwv2Parser, Rwv2Parser,
45
+ rwv2_parser_mark, rwv2_parser_free, stub);
46
+ stub->parser = wvWare::ParserFactory::createParser(STR2CSTR(filename));
47
+ if(!stub->parser)
48
+ {
49
+ if(errno == 0)
50
+ rb_raise(rb_eArgError,"'%s' is not a word-document.", STR2CSTR(filename));
51
+ else
52
+ rb_sys_fail(STR2CSTR(filename));
53
+ }
54
+ return parser;
55
+ }
56
+ VALUE rwv2_create_parser_from_content(VALUE self, VALUE content) {
57
+ VALUE parser;
58
+ Rwv2Parser * stub;
59
+ parser = Data_Make_Struct(cRwv2Parser, Rwv2Parser,
60
+ rwv2_parser_mark, rwv2_parser_free, stub);
61
+ long int len;
62
+ char * src = rb_str2cstr(content, &len);
63
+ stub->parser = wvWare::ParserFactory::createParser(
64
+ (const unsigned char *) src, len);
65
+ if(!stub->parser)
66
+ {
67
+ rb_raise(rb_eArgError,"Input is not a word-document.");
68
+ }
69
+ return parser;
70
+ }
71
+ void Init_rwv2() {
72
+
73
+ /* module Rwv2 */
74
+ mRwv2 = rb_define_module("Rwv2");
75
+ rb_define_module_function(mRwv2, "create_parser",
76
+ (VALUE (*)(...))rwv2_create_parser, 1);
77
+ rb_define_module_function(mRwv2, "create_parser_from_content",
78
+ (VALUE (*)(...))rwv2_create_parser_from_content, 1);
79
+ rb_define_const(mRwv2, "HEADER_EVEN", INT2FIX(0x01));
80
+ rb_define_const(mRwv2, "HEADER_ODD", INT2FIX(0x02));
81
+ rb_define_const(mRwv2, "FOOTER_EVEN", INT2FIX(0x04));
82
+ rb_define_const(mRwv2, "FOOTER_ODD", INT2FIX(0x08));
83
+ rb_define_const(mRwv2, "HEADER_FIRST", INT2FIX(0x10));
84
+ rb_define_const(mRwv2, "FOOTER_FIRST", INT2FIX(0x20));
85
+ rb_define_const(mRwv2, "ALIGN_LEFT", CHR2FIX(0));
86
+ rb_define_const(mRwv2, "ALIGN_CENTER", CHR2FIX(1));
87
+ rb_define_const(mRwv2, "ALIGN_RIGHT", CHR2FIX(2));
88
+ rb_define_const(mRwv2, "ALIGN_JUSTIFY", CHR2FIX(3));
89
+
90
+ /* class Rwv2::Parser */
91
+ cRwv2Parser = rb_define_class_under(mRwv2, "Parser", rb_cObject);
92
+ rb_define_method(cRwv2Parser, "is_ok?",
93
+ (VALUE (*)(...)) rwv2_parser_is_ok, 0);
94
+ rb_define_method(cRwv2Parser, "parse",
95
+ (VALUE (*)(...)) rwv2_parser_parse, 0);
96
+ rb_define_method(cRwv2Parser, "set_inline_replacement_handler",
97
+ (VALUE (*)(...)) rwv2_parser_set_inline_replacement_handler, 1);
98
+ rb_define_method(cRwv2Parser, "set_subdocument_handler",
99
+ (VALUE (*)(...)) rwv2_parser_set_subdocument_handler, 1);
100
+ rb_define_method(cRwv2Parser, "set_table_handler",
101
+ (VALUE (*)(...)) rwv2_parser_set_table_handler, 1);
102
+ rb_define_method(cRwv2Parser, "set_text_handler",
103
+ (VALUE (*)(...)) rwv2_parser_set_text_handler, 1);
104
+
105
+ /* class Rwv2::SectionProperties */
106
+ cRwv2Sep = rb_define_class_under(mRwv2, "SectionProperties", rb_cObject);
107
+ rb_define_method(cRwv2Sep, "break_code",
108
+ (VALUE (*)(...)) rwv2_sep_break_code, 0);
109
+ rb_define_const(cRwv2Sep, "BREAK_NONE", Qfalse);
110
+ rb_define_const(cRwv2Sep, "BREAK_COLUMN", CHR2FIX(1));
111
+ rb_define_const(cRwv2Sep, "BREAK_PAGE", CHR2FIX(2));
112
+ rb_define_const(cRwv2Sep, "BREAK_EVEN", CHR2FIX(3));
113
+ rb_define_const(cRwv2Sep, "BREAK_ODD", CHR2FIX(4));
114
+ rb_define_method(cRwv2Sep, "title_page?",
115
+ (VALUE (*)(...)) rwv2_sep_title_page, 0);
116
+ rb_define_method(cRwv2Sep, "page_number_format",
117
+ (VALUE (*)(...)) rwv2_sep_page_number_format, 0);
118
+ rb_define_const(cRwv2Sep, "NUMBER_ARABIC", CHR2FIX(0));
119
+ rb_define_const(cRwv2Sep, "NUMBER_ROMAN_UPPER", CHR2FIX(1));
120
+ rb_define_const(cRwv2Sep, "NUMBER_ROMAN_LOWER", CHR2FIX(2));
121
+ rb_define_const(cRwv2Sep, "NUMBER_LETTER_UPPER", CHR2FIX(3));
122
+ rb_define_const(cRwv2Sep, "NUMBER_LETTER_LOWER", CHR2FIX(4));
123
+ rb_define_method(cRwv2Sep, "unlocked?",
124
+ (VALUE (*)(...)) rwv2_sep_unlocked, 0);
125
+ rb_define_method(cRwv2Sep, "page_number_restart?",
126
+ (VALUE (*)(...)) rwv2_sep_page_number_restart, 0);
127
+ rb_define_method(cRwv2Sep, "endnote?",
128
+ (VALUE (*)(...)) rwv2_sep_endnote, 0);
129
+ rb_define_method(cRwv2Sep, "line_numbering_code",
130
+ (VALUE (*)(...)) rwv2_sep_line_numbering_code, 0);
131
+ rb_define_const(cRwv2Sep, "LINE_NUMBERING_PER_PAGE", CHR2FIX(0));
132
+ rb_define_const(cRwv2Sep, "LINE_NUMBERING_RESTART", CHR2FIX(1));
133
+ rb_define_const(cRwv2Sep, "LINE_NUMBERING_CONTINUE", CHR2FIX(2));
134
+ rb_define_method(cRwv2Sep, "line_numbering_modulus",
135
+ (VALUE (*)(...)) rwv2_sep_line_numbering_modulus, 0);
136
+ rb_define_method(cRwv2Sep, "columns",
137
+ (VALUE (*)(...)) rwv2_sep_columns, 0);
138
+
139
+ /* class Rwv2::ParagraphProperties */
140
+ cRwv2Pap = rb_define_class_under(mRwv2, "ParagraphProperties", rb_cObject);
141
+ rb_define_method(cRwv2Pap, "align",
142
+ (VALUE (*)(...)) rwv2_pap_justify, 0);
143
+ rb_define_method(cRwv2Pap, "keep?",
144
+ (VALUE (*)(...)) rwv2_pap_keep, 0);
145
+ rb_define_method(cRwv2Pap, "keep_with_next?",
146
+ (VALUE (*)(...)) rwv2_pap_keep_follow, 0);
147
+ rb_define_method(cRwv2Pap, "page_break_before?",
148
+ (VALUE (*)(...)) rwv2_pap_page_break_before, 0);
149
+ rb_define_method(cRwv2Pap, "widow_control?",
150
+ (VALUE (*)(...)) rwv2_pap_widow_control, 0);
151
+ rb_define_method(cRwv2Pap, "indent_right",
152
+ (VALUE (*)(...)) rwv2_pap_indent_right, 0);
153
+ rb_define_method(cRwv2Pap, "indent_left",
154
+ (VALUE (*)(...)) rwv2_pap_indent_left, 0);
155
+ rb_define_method(cRwv2Pap, "indent_first_line",
156
+ (VALUE (*)(...)) rwv2_pap_indent_first_line, 0);
157
+ rb_define_method(cRwv2Pap, "tab_descriptors",
158
+ (VALUE (*)(...)) rwv2_pap_tab_descriptors, 0);
159
+
160
+ /* class Rwv2::CharacterProperties */
161
+ cRwv2Chp = rb_define_class_under(mRwv2, "CharacterProperties", rb_cObject);
162
+ rb_define_method(cRwv2Chp, "bold?",
163
+ (VALUE (*)(...)) rwv2_chp_bold, 0);
164
+ rb_define_method(cRwv2Chp, "italic?",
165
+ (VALUE (*)(...)) rwv2_chp_italic, 0);
166
+ rb_define_method(cRwv2Chp, "rev_mark?",
167
+ (VALUE (*)(...)) rwv2_chp_rev_mark, 0);
168
+ rb_define_method(cRwv2Chp, "rev_mark_del?",
169
+ (VALUE (*)(...)) rwv2_chp_rev_mark_del, 0);
170
+ rb_define_method(cRwv2Chp, "outline?",
171
+ (VALUE (*)(...)) rwv2_chp_outline, 0);
172
+ rb_define_method(cRwv2Chp, "small_caps?",
173
+ (VALUE (*)(...)) rwv2_chp_small_caps, 0);
174
+ rb_define_method(cRwv2Chp, "caps?",
175
+ (VALUE (*)(...)) rwv2_chp_caps, 0);
176
+ rb_define_method(cRwv2Chp, "special_char?",
177
+ (VALUE (*)(...)) rwv2_chp_special_char, 0);
178
+ rb_define_method(cRwv2Chp, "strikethrough?",
179
+ (VALUE (*)(...)) rwv2_chp_strikethrough, 0);
180
+ rb_define_method(cRwv2Chp, "shadow?",
181
+ (VALUE (*)(...)) rwv2_chp_shadow, 0);
182
+ rb_define_method(cRwv2Chp, "lowercase?",
183
+ (VALUE (*)(...)) rwv2_chp_lowercase, 0);
184
+ rb_define_method(cRwv2Chp, "emboss?",
185
+ (VALUE (*)(...)) rwv2_chp_emboss, 0);
186
+ rb_define_method(cRwv2Chp, "imprint?",
187
+ (VALUE (*)(...)) rwv2_chp_imprint, 0);
188
+ rb_define_method(cRwv2Chp, "double_strikethrough?",
189
+ (VALUE (*)(...)) rwv2_chp_double_strikethrough, 0);
190
+ rb_define_method(cRwv2Chp, "position",
191
+ (VALUE (*)(...)) rwv2_chp_position, 0);
192
+ rb_define_const(cRwv2Chp, "POSITION_NORMAL", Qfalse);
193
+ rb_define_const(cRwv2Chp, "POSITION_SUPERSCRIPT", CHR2FIX(1));
194
+ rb_define_const(cRwv2Chp, "POSITION_SUBSCRIPT", CHR2FIX(2));
195
+ rb_define_method(cRwv2Chp, "underline",
196
+ (VALUE (*)(...)) rwv2_chp_underline, 0);
197
+ rb_define_const(cRwv2Chp, "UNDERLINE_NONE", Qfalse);
198
+ rb_define_const(cRwv2Chp, "UNDERLINE_SINGLE", CHR2FIX(1));
199
+ rb_define_const(cRwv2Chp, "UNDERLINE_BY_WORD", CHR2FIX(2));
200
+ rb_define_const(cRwv2Chp, "UNDERLINE_DOUBLE", CHR2FIX(3));
201
+ rb_define_const(cRwv2Chp, "UNDERLINE_DOTTED", CHR2FIX(4));
202
+ rb_define_const(cRwv2Chp, "UNDERLINE_THICK", CHR2FIX(6));
203
+ rb_define_const(cRwv2Chp, "UNDERLINE_DASH", CHR2FIX(7));
204
+ rb_define_const(cRwv2Chp, "UNDERLINE_DOT_DASH", CHR2FIX(9));
205
+ rb_define_const(cRwv2Chp, "UNDERLINE_DOT_DOT_DASH", CHR2FIX(10));
206
+ rb_define_const(cRwv2Chp, "UNDERLINE_WAVE", CHR2FIX(11));
207
+ rb_define_method(cRwv2Chp, "scale",
208
+ (VALUE (*)(...)) rwv2_chp_scale, 0);
209
+ rb_define_method(cRwv2Chp, "fontsize",
210
+ (VALUE (*)(...)) rwv2_chp_font_hps, 0);
211
+
212
+ /* class Rwv2::TableProperties */
213
+ cRwv2Tap = rb_define_class_under(mRwv2, "TableProperties", rb_cObject);
214
+ rb_define_method(cRwv2Tap, "align",
215
+ (VALUE (*)(...)) rwv2_tap_justify, 0);
216
+ rb_define_method(cRwv2Tap, "gap_half",
217
+ (VALUE (*)(...)) rwv2_tap_gap_half, 0);
218
+ rb_define_method(cRwv2Tap, "row_height",
219
+ (VALUE (*)(...)) rwv2_tap_row_height, 0);
220
+ rb_define_method(cRwv2Tap, "cant_split?",
221
+ (VALUE (*)(...)) rwv2_tap_cant_split, 0);
222
+ rb_define_method(cRwv2Tap, "table_header?",
223
+ (VALUE (*)(...)) rwv2_tap_table_header, 0);
224
+ rb_define_method(cRwv2Tap, "row_cells",
225
+ (VALUE (*)(...)) rwv2_tap_row_cells, 0);
226
+ rb_define_method(cRwv2Tap, "cell_boundaries",
227
+ (VALUE (*)(...)) rwv2_tap_cell_boundaries, 0);
228
+ rb_define_method(cRwv2Tap, "cell_descriptors",
229
+ (VALUE (*)(...)) rwv2_tap_cell_descriptors, 0);
230
+
231
+ /* class Rwv2::TableProperties::CellDescriptor */
232
+ cRwv2Tc = rb_define_class_under(cRwv2Tap, "CellDescriptor", rb_cObject);
233
+ rb_define_method(cRwv2Tc, "first_merged?",
234
+ (VALUE (*)(...)) rwv2_tc_first_merged, 0);
235
+ rb_define_method(cRwv2Tc, "merged?",
236
+ (VALUE (*)(...)) rwv2_tc_merged, 0);
237
+ rb_define_method(cRwv2Tc, "vertical?",
238
+ (VALUE (*)(...)) rwv2_tc_vertical, 0);
239
+ rb_define_method(cRwv2Tc, "backward?",
240
+ (VALUE (*)(...)) rwv2_tc_backward, 0);
241
+ rb_define_method(cRwv2Tc, "rotate_font?",
242
+ (VALUE (*)(...)) rwv2_tc_rotate_font, 0);
243
+ rb_define_method(cRwv2Tc, "vertical_merged?",
244
+ (VALUE (*)(...)) rwv2_tc_vertical_merged, 0);
245
+ rb_define_method(cRwv2Tc, "vertical_restart?",
246
+ (VALUE (*)(...)) rwv2_tc_vertical_restart, 0);
247
+ rb_define_method(cRwv2Tc, "vertical_align",
248
+ (VALUE (*)(...)) rwv2_tc_vertical_align, 0);
249
+ rb_define_const(cRwv2Tc, "ALIGN_TOP", CHR2FIX(0));
250
+ rb_define_const(cRwv2Tc, "ALIGN_CENTER", CHR2FIX(1));
251
+ rb_define_const(cRwv2Tc, "ALIGN_BOTTOM", CHR2FIX(2));
252
+
253
+ /* class Rwv2::TabDescriptor */
254
+ cRwv2Tab = rb_define_class_under(mRwv2, "TabDescriptor", rb_cObject);
255
+ rb_define_method(cRwv2Tab, "position",
256
+ (VALUE (*)(...)) rwv2_tab_position, 0);
257
+ rb_define_method(cRwv2Tab, "align",
258
+ (VALUE (*)(...)) rwv2_tab_justify, 0);
259
+ rb_define_const(cRwv2Tab, "ALIGN_LEFT", CHR2FIX(0));
260
+ rb_define_const(cRwv2Tab, "ALIGN_CENTER", CHR2FIX(1));
261
+ rb_define_const(cRwv2Tab, "ALIGN_RIGHT", CHR2FIX(2));
262
+ rb_define_const(cRwv2Tab, "ALIGN_DECIMAL", CHR2FIX(3));
263
+ rb_define_const(cRwv2Tab, "ALIGN_BAR", CHR2FIX(4));
264
+
265
+ /* class Rwv2::PictureDescriptor */
266
+ cRwv2Picf = rb_define_class_under(mRwv2, "PictureDescriptor", rb_cObject);
267
+ rb_define_method(cRwv2Picf, "blob",
268
+ (VALUE (*)(...)) rwv2_picf_blob, 0);
269
+ rb_define_method(cRwv2Picf, "mapping_mode",
270
+ (VALUE (*)(...)) rwv2_picf_mapping_mode, 0);
271
+ rb_define_const(cRwv2Picf, "TIFF", CHR2FIX(98));
272
+ rb_define_const(cRwv2Picf, "BMP", CHR2FIX(99));
273
+ rb_define_method(cRwv2Picf, "display_width",
274
+ (VALUE (*)(...)) rwv2_picf_display_width, 0);
275
+ rb_define_method(cRwv2Picf, "display_height",
276
+ (VALUE (*)(...)) rwv2_picf_display_height, 0);
277
+ rb_define_method(cRwv2Picf, "scaling_vertical",
278
+ (VALUE (*)(...)) rwv2_picf_scaling_vertical, 0);
279
+ rb_define_method(cRwv2Picf, "scaling_horizontal",
280
+ (VALUE (*)(...)) rwv2_picf_scaling_horizontal, 0);
281
+ rb_define_method(cRwv2Picf, "crop_left",
282
+ (VALUE (*)(...)) rwv2_picf_crop_left, 0);
283
+ rb_define_method(cRwv2Picf, "crop_top",
284
+ (VALUE (*)(...)) rwv2_picf_crop_top, 0);
285
+ rb_define_method(cRwv2Picf, "crop_right",
286
+ (VALUE (*)(...)) rwv2_picf_crop_right, 0);
287
+ rb_define_method(cRwv2Picf, "crop_bottom",
288
+ (VALUE (*)(...)) rwv2_picf_crop_bottom, 0);
289
+ rb_define_method(cRwv2Picf, "is_bitmap?",
290
+ (VALUE (*)(...)) rwv2_picf_is_bitmap, 0);
291
+ rb_define_method(cRwv2Picf, "is_active_ole_object?",
292
+ (VALUE (*)(...)) rwv2_picf_is_active_ole, 0);
293
+ }
294
+ } // extern "C"
data/ext/rwv2/rwv2.o ADDED
Binary file
data/ext/rwv2/rwv2.so ADDED
Binary file
@@ -0,0 +1,81 @@
1
+ /* Rwv2 -- Microsoft Word Parser extension
2
+ Copyright (C) 2003 Hannes Wyss, ywesee
3
+
4
+ This library is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU Lesser General Public
6
+ License as published by the Free Software Foundation; either
7
+ version 2.1 of the License, or (at your option) any later version.
8
+
9
+ This library is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public
15
+ License along with this library; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ ywesee - intellectual capital connected
19
+ Winterthurerstrasse 52, CH-8006 Z�rich, Switzerland
20
+ hwyss@ywesee.com
21
+ */
22
+
23
+ #include "ruby.h"
24
+
25
+ #include "rwv2.h"
26
+ #include "rwv2_handlers.h"
27
+
28
+ extern "C" {
29
+
30
+ void Rwv2TableHandler::tableRowStart(wvWare::SharedPtr<const wvWare::Word97::TAP> tap) {
31
+ Rwv2Tap * stub;
32
+ SVALUE rb_tap;
33
+ rb_tap = Data_Make_Struct(cRwv2Tap, Rwv2Tap, 0, rwv2_tap_free, stub);
34
+ stub->wv_tap = tap;
35
+ rb_funcall(m_rb_handler, rb_intern("row_start"), 1, rb_tap);
36
+ };
37
+
38
+ void Rwv2TextHandler::sectionStart(wvWare::SharedPtr<const wvWare::Word97::SEP> sep) {
39
+ Rwv2Sep * stub;
40
+ SVALUE rb_sep;
41
+ rb_sep = Data_Make_Struct(cRwv2Sep, Rwv2Sep, 0, rwv2_sep_free, stub);
42
+ stub->wv_sep = sep;
43
+ rb_funcall(m_rb_handler, rb_intern("section_start"), 1, rb_sep);
44
+ }
45
+
46
+ void Rwv2TextHandler::paragraphStart(wvWare::SharedPtr<const wvWare::ParagraphProperties> pap) {
47
+ Rwv2Pap * stub;
48
+ SVALUE rb_pap;
49
+ rb_pap = Data_Make_Struct(cRwv2Pap, Rwv2Pap, 0, free, stub);
50
+ stub->wv_pap = pap;
51
+ rb_funcall(m_rb_handler, rb_intern("paragraph_start"), 1, rb_pap);
52
+ }
53
+
54
+ void Rwv2TextHandler::runOfText(const wvWare::UString & text,
55
+ wvWare::SharedPtr<const wvWare::Word97::CHP> chp) {
56
+ SVALUE rb_str = rb_str_new((char *) text.data(), 2 * text.length());
57
+ SVALUE rb_chp = wrap_chp(chp);
58
+ rb_funcall(m_rb_handler, rb_intern("run_of_text"), 2, rb_str, rb_chp);
59
+ };
60
+
61
+ void Rwv2TextHandler::pictureData( wvWare::SharedPtr<const wvWare::Word97::PICF> picf,
62
+ wvWare::U8 * buffer ) {
63
+ long len = picf->lcb - picf->cbHeader;
64
+ SVALUE rb_picf;
65
+ Rwv2Picf * stub;
66
+ rb_picf = Data_Make_Struct(cRwv2Picf, Rwv2Picf,
67
+ rwv2_picf_mark, rwv2_picf_free, stub);
68
+ stub->wv_picf = picf;
69
+ stub->rb_blob = rb_str_new((const char *)buffer, len);
70
+ rb_funcall(m_rb_handler, rb_intern("picture"), 1, rb_picf);
71
+ }
72
+
73
+ VALUE Rwv2TextHandler::wrap_chp(wvWare::SharedPtr<const wvWare::Word97::CHP> chp) {
74
+ Rwv2Chp * stub;
75
+ SVALUE rb_chp;
76
+ rb_chp = Data_Make_Struct(cRwv2Chp, Rwv2Chp, 0, rwv2_chp_free, stub);
77
+ stub->wv_chp = chp;
78
+ return rb_chp;
79
+ }
80
+
81
+ }; // extern "C"
Binary file
@@ -0,0 +1,76 @@
1
+ /* Rwv2 -- Microsoft Word Parser extension
2
+ Copyright (C) 2003 Hannes Wyss, ywesee
3
+
4
+ This library is free software; you can redistribute it and/or
5
+ modify it under the terms of the GNU Lesser General Public
6
+ License as published by the Free Software Foundation; either
7
+ version 2.1 of the License, or (at your option) any later version.
8
+
9
+ This library is distributed in the hope that it will be useful,
10
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ Lesser General Public License for more details.
13
+
14
+ You should have received a copy of the GNU Lesser General Public
15
+ License along with this library; if not, write to the Free Software
16
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ ywesee - intellectual capital connected
19
+ Winterthurerstrasse 52, CH-8006 Z�rich, Switzerland
20
+ hwyss@ywesee.com
21
+ */
22
+
23
+ #include "ruby.h"
24
+ #include "rwv2_parser.h"
25
+
26
+ extern "C" {
27
+
28
+ VALUE rwv2_parser_is_ok(VALUE self) {
29
+ Rwv2Parser * stub;
30
+ Data_Get_Struct(self, Rwv2Parser, stub);
31
+ if(stub->parser->isOk())
32
+ return Qtrue;
33
+ else
34
+ return Qfalse;
35
+ }
36
+ VALUE rwv2_parser_parse(VALUE self) {
37
+ Rwv2Parser * stub;
38
+ Data_Get_Struct(self, Rwv2Parser, stub);
39
+ if(stub->parser->parse())
40
+ return Qtrue;
41
+ else
42
+ return Qfalse;
43
+ }
44
+
45
+ #define SET_HANDLER(t_rb, t_wv) \
46
+ VALUE rwv2_parser_set_ ## t_rb ## _handler(VALUE self, VALUE rb_handler) { \
47
+ Rwv2 ## t_wv ## Handler * handler = new Rwv2 ## t_wv ## Handler(rb_handler); \
48
+ Rwv2Parser * stub; \
49
+ Data_Get_Struct(self, Rwv2Parser, stub); \
50
+ stub->rb_ ## t_rb ## _handler = rb_handler; \
51
+ stub->wv_ ## t_rb ## _handler = handler; \
52
+ stub->parser->set ## t_wv ## Handler(handler); \
53
+ return Qnil; \
54
+ }
55
+
56
+ SET_HANDLER(inline_replacement, InlineReplacement)
57
+ SET_HANDLER(subdocument, SubDocument)
58
+ SET_HANDLER(table, Table)
59
+ SET_HANDLER(text, Text)
60
+
61
+ void rwv2_parser_mark(Rwv2Parser * stub) {
62
+ rb_gc_mark(stub->rb_inline_replacement_handler);
63
+ rb_gc_mark(stub->rb_subdocument_handler);
64
+ rb_gc_mark(stub->rb_table_handler);
65
+ rb_gc_mark(stub->rb_text_handler);
66
+ }
67
+ void rwv2_parser_free(Rwv2Parser * stub) {
68
+ delete stub->wv_inline_replacement_handler;
69
+ delete stub->wv_subdocument_handler;
70
+ delete stub->wv_table_handler;
71
+ delete stub->wv_text_handler;
72
+ //delete stub->parser;
73
+ free(stub);
74
+ }
75
+
76
+ } // extern "C"