1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* libodfgen
3 * Version: MPL 2.0 / LGPLv2.1+
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * Major Contributor(s):
10 * Copyright (C) 2006 Ariya Hidayat (ariya@kde.org)
11 * Copyright (C) 2006 Fridrich Strba (fridrich.strba@bluewin.ch)
12 *
13 * For minor contributions see the git repository.
14 *
15 * Alternatively, the contents of this file may be used under the terms
16 * of the GNU Lesser General Public License Version 2.1 or later
17 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
18 * applicable instead of those above.
19 *
20 * For further information visit http://libwpd.sourceforge.net
21 */
22
23 /* "This product is not manufactured, approved, or supported by
24 * Corel Corporation or Corel Corporation Limited."
25 */
26
27 #include <stdio.h>
28
29 #include <iostream>
30 #include <fstream>
31
32 #include <librevenge/librevenge.h>
33 #include <libodfgen/libodfgen.hxx>
34
35 #include "StringDocumentHandler.hxx"
36
37 template <class Generator>
sendText(Generator & generator,int numExtraLines=0)38 static void sendText(Generator &generator, int numExtraLines=0)
39 {
40 librevenge::RVNGPropertyList span;
41 span.insert("style:font-name","Geneva");
42 span.insert("fo:font-size", 12, librevenge::RVNG_POINT);
43 span.insert("librevenge:span-id",1);
44 generator.defineCharacterStyle(span);
45 span.clear();
46 span.insert("librevenge:span-id",1);
47
48 librevenge::RVNGPropertyList para;
49 para.insert("librevenge:paragraph-id",1);
50 para.insert("style:display-name","Default");
51 generator.defineParagraphStyle(para);
52
53 para.clear();
54 para.insert("librevenge:paragraph-id",1);
55 generator.openParagraph(para);
56 generator.openSpan(span);
57 generator.insertText("basic ");
58 generator.closeSpan();
59 generator.closeParagraph();
60
61 para.clear();
62 para.insert("fo:margin-left",1,librevenge::RVNG_INCH);
63 para.insert("fo:text-align","center");
64 para.insert("style:display-name","Center");
65 generator.openParagraph(para);
66 generator.openSpan(span);
67 generator.insertText("center(style)");
68 generator.closeSpan();
69 generator.closeParagraph();
70
71 para.clear();
72 para.insert("fo:margin-left",1,librevenge::RVNG_INCH);
73 para.insert("fo:text-align","center");
74 generator.openParagraph(para);
75 generator.openSpan(span);
76 generator.insertText("center(no style)");
77 generator.closeSpan();
78 generator.closeParagraph();
79
80 para.clear();
81 para.insert("librevenge:paragraph-id",1);
82 generator.openParagraph(para);
83 generator.openSpan(span);
84 generator.insertText("basic");
85 generator.insertLineBreak();
86 generator.insertText("again");
87 for (int i=0; i<numExtraLines; ++i)
88 generator.insertLineBreak();
89 generator.closeSpan();
90 generator.closeParagraph();
91 }
92
createOdt()93 static void createOdt()
94 {
95 StringDocumentHandler content;
96 OdtGenerator generator;
97 generator.addDocumentHandler(&content, ODF_FLAT_XML);
98
99 generator.startDocument(librevenge::RVNGPropertyList());
100 librevenge::RVNGPropertyList page;
101 page.insert("librevenge:num-pages", 2);
102 page.insert("fo:page-height", 11.5, librevenge::RVNG_INCH);
103 page.insert("fo:page-width", 9, librevenge::RVNG_INCH);
104 page.insert("style:print-orientation", "portrait");
105 page.insert("fo:margin-left", 0.1, librevenge::RVNG_INCH);
106 page.insert("fo:margin-right", 0.1, librevenge::RVNG_INCH);
107 page.insert("fo:margin-top", 0.1, librevenge::RVNG_INCH);
108 page.insert("fo:margin-bottom", 0.1, librevenge::RVNG_INCH);
109 generator.openPageSpan(page);
110
111 librevenge::RVNGPropertyList header;
112 header.insert("librevenge:occurence", "all");
113 generator.openHeader(header);
114 sendText(generator, 0);
115 generator.closeHeader();
116
117 sendText(generator, 50);
118
119 librevenge::RVNGPropertyList paraPage;
120 paraPage.insert("fo:break-before", "page");
121 generator.openParagraph(paraPage);
122 generator.closeParagraph();
123 sendText(generator, 50);
124
125 generator.closePageSpan();
126
127 // 2nd page span
128 page.insert("librevenge:num-pages", 1);
129 page.insert("fo:page-height", 5.5, librevenge::RVNG_INCH);
130 page.insert("fo:page-width", 4, librevenge::RVNG_INCH);
131 page.insert("style:print-orientation", "portrait");
132 page.insert("fo:margin-left", 1, librevenge::RVNG_INCH);
133 page.insert("fo:margin-right", 1, librevenge::RVNG_INCH);
134 page.insert("fo:margin-top", 1, librevenge::RVNG_INCH);
135 page.insert("fo:margin-bottom", 1, librevenge::RVNG_INCH);
136 generator.openPageSpan(page);
137
138 generator.openParagraph(paraPage);
139 generator.closeParagraph();
140
141 sendText(generator, 50);
142
143 generator.closePageSpan();
144
145 // 3rd page span
146 page.insert("librevenge:num-pages", 1);
147 page.insert("fo:page-height", 11.5, librevenge::RVNG_INCH);
148 page.insert("fo:page-width", 9, librevenge::RVNG_INCH);
149 page.insert("style:print-orientation", "portrait");
150 page.insert("fo:margin-left", 0.1, librevenge::RVNG_INCH);
151 page.insert("fo:margin-right", 0.1, librevenge::RVNG_INCH);
152 page.insert("fo:margin-top", 0.1, librevenge::RVNG_INCH);
153 page.insert("fo:margin-bottom", 0.1, librevenge::RVNG_INCH);
154 generator.openPageSpan(page);
155
156 generator.openParagraph(paraPage);
157 generator.closeParagraph();
158
159 librevenge::RVNGPropertyList section, column;
160
161 librevenge::RVNGPropertyListVector columns;
162 column.insert("style:rel-width", "4in");
163 columns.append(column);
164 columns.append(column);
165 section.insert("style:columns", columns);
166
167 generator.openSection(section);
168 sendText(generator, 50);
169 generator.closeSection();
170
171 generator.closePageSpan();
172
173 generator.endDocument();
174
175 std::ofstream file("testPageSpan1.odt");
176 file << content.cstr();
177 }
178
createOds()179 static void createOds()
180 {
181 StringDocumentHandler content;
182 OdsGenerator generator;
183 generator.addDocumentHandler(&content, ODF_FLAT_XML);
184
185 generator.startDocument(librevenge::RVNGPropertyList());
186 librevenge::RVNGPropertyList page;
187 page.insert("librevenge:num-pages", 2);
188 page.insert("fo:page-height", 11.5, librevenge::RVNG_INCH);
189 page.insert("fo:page-width", 9, librevenge::RVNG_INCH);
190 page.insert("style:print-orientation", "portrait");
191 page.insert("fo:margin-left", 0.1, librevenge::RVNG_INCH);
192 page.insert("fo:margin-right", 0.1, librevenge::RVNG_INCH);
193 page.insert("fo:margin-top", 0.1, librevenge::RVNG_INCH);
194 page.insert("fo:margin-bottom", 0.1, librevenge::RVNG_INCH);
195 generator.openPageSpan(page);
196
197 librevenge::RVNGPropertyList list;
198 librevenge::RVNGPropertyListVector columns;
199 for (size_t c = 0; c < 2; c++)
200 {
201 librevenge::RVNGPropertyList column;
202 column.insert("style:column-width", 3, librevenge::RVNG_INCH);
203 columns.append(column);
204 }
205 list.insert("librevenge:columns", columns);
206 generator.openSheet(list);
207 list.clear();
208 list.insert("style:row-height", 40, librevenge::RVNG_POINT);
209 generator.openSheetRow(list);
210 list.clear();
211 list.insert("librevenge:column", 1);
212 list.insert("librevenge:row", 1);
213 list.insert("table:number-columns-spanned", 1);
214 list.insert("table:number-rows-spanned", 1);
215 generator.openSheetCell(list);
216 sendText(generator);
217 generator.closeSheetCell();
218 generator.closeSheetRow();
219 generator.closeSheet();
220
221 list.clear();
222 list.insert("librevenge:columns", columns);
223 generator.openSheet(list);
224 generator.closeSheet();
225
226 generator.closePageSpan();
227
228 page.insert("fo:page-height", 5.5, librevenge::RVNG_INCH);
229 page.insert("fo:page-width", 4, librevenge::RVNG_INCH);
230 page.insert("style:print-orientation", "portrait");
231 page.insert("fo:margin-left", 1, librevenge::RVNG_INCH);
232 page.insert("fo:margin-right", 1, librevenge::RVNG_INCH);
233 page.insert("fo:margin-top", 1, librevenge::RVNG_INCH);
234 page.insert("fo:margin-bottom", 1, librevenge::RVNG_INCH);
235 generator.openPageSpan(page);
236
237 list.clear();
238 list.insert("librevenge:columns", columns);
239 generator.openSheet(list);
240 list.clear();
241 list.insert("style:row-height", 100, librevenge::RVNG_POINT);
242 generator.openSheetRow(list);
243 list.clear();
244 list.insert("librevenge:column", 2);
245 list.insert("librevenge:row", 1);
246 list.insert("table:number-columns-spanned", 1);
247 list.insert("table:number-rows-spanned", 1);
248 generator.openSheetCell(list);
249 sendText(generator);
250 generator.closeSheetCell();
251 generator.closeSheetRow();
252 generator.closeSheet();
253 generator.closePageSpan();
254
255 generator.endDocument();
256
257 std::ofstream file("testPageSpan1.ods");
258 file << content.cstr();
259 }
260
createOdg()261 static void createOdg()
262 {
263 StringDocumentHandler content;
264 OdgGenerator generator;
265 generator.addDocumentHandler(&content, ODF_FLAT_XML);
266
267 generator.startDocument(librevenge::RVNGPropertyList());
268 librevenge::RVNGPropertyList page;
269 page.insert("draw:name", "Page with text");
270 page.insert("svg:width", 9, librevenge::RVNG_INCH);
271 page.insert("svg:height", 11, librevenge::RVNG_INCH);
272 page.insert("librevenge:enforce-frame",true);
273 generator.startPage(page);
274
275 librevenge::RVNGPropertyList textbox;
276 textbox.insert("svg:x",0.2, librevenge::RVNG_INCH);
277 textbox.insert("svg:y",0.02, librevenge::RVNG_INCH);
278 textbox.insert("svg:width",200, librevenge::RVNG_POINT);
279 textbox.insert("svg:height",100, librevenge::RVNG_POINT);
280 textbox.insert("draw:stroke", "none");
281 textbox.insert("draw:fill", "none");
282 generator.startTextObject(textbox);
283 sendText(generator);
284 generator.endTextObject();
285 generator.endPage();
286
287 page.insert("draw:name", "Empty");
288 page.insert("svg:width", 3, librevenge::RVNG_INCH);
289 page.insert("svg:height", 5, librevenge::RVNG_INCH);
290 generator.startPage(page);
291 generator.endPage();
292 generator.endDocument();
293
294 std::ofstream file("testPageSpan1.odg");
295 file << content.cstr();
296 }
297
createOdp()298 static void createOdp()
299 {
300 StringDocumentHandler content;
301 OdpGenerator generator;
302 generator.addDocumentHandler(&content, ODF_FLAT_XML);
303
304 generator.startDocument(librevenge::RVNGPropertyList());
305 librevenge::RVNGPropertyList page;
306 page.insert("draw:name", "Page with text");
307 page.insert("svg:width", 9, librevenge::RVNG_INCH);
308 page.insert("svg:height", 11, librevenge::RVNG_INCH);
309 generator.startSlide(page);
310
311 librevenge::RVNGPropertyList textbox;
312 textbox.insert("svg:x",0.2, librevenge::RVNG_INCH);
313 textbox.insert("svg:y",0.02, librevenge::RVNG_INCH);
314 textbox.insert("svg:width",200, librevenge::RVNG_POINT);
315 textbox.insert("svg:height",100, librevenge::RVNG_POINT);
316 textbox.insert("draw:stroke", "none");
317 textbox.insert("draw:fill", "none");
318 generator.startTextObject(textbox);
319 sendText(generator);
320 generator.endTextObject();
321
322 generator.endSlide();
323
324 page.insert("draw:name", "Empty");
325 page.insert("svg:width", 3, librevenge::RVNG_INCH);
326 page.insert("svg:height", 5, librevenge::RVNG_INCH);
327 generator.startSlide(page);
328 generator.endSlide();
329
330 generator.endDocument();
331
332 std::ofstream file("testPageSpan1.odp");
333 file << content.cstr();
334 }
335
336
main()337 int main()
338 {
339 try
340 {
341 createOdg();
342 createOdp();
343 createOds();
344 createOdt();
345 }
346 catch (...)
347 {
348 fprintf(stderr, "ERROR: parse exception\n");
349 return 1;
350 }
351
352 return 0;
353 }
354
355 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
356
357