1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20 #include <ooxml/resourceids.hxx>
21 #include "Handler.hxx"
22
23 #include <sal/log.hxx>
24
25 namespace writerfilter::ooxml
26 {
27
28 /*
29 class OOXMLFootnoteHandler
30 */
OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext)31 OOXMLFootnoteHandler::OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext)
32 : mpFastContext(pContext)
33 {
34 }
35
~OOXMLFootnoteHandler()36 OOXMLFootnoteHandler::~OOXMLFootnoteHandler()
37 {
38 }
39
attribute(Id name,Value & val)40 void OOXMLFootnoteHandler::attribute(Id name, Value & val)
41 {
42 switch (name)
43 {
44 case NS_ooxml::LN_CT_FtnEdnRef_id:
45 mpFastContext->resolveFootnote(sal_Int32(val.getInt()));
46 break;
47 default:
48 break;
49 }
50 }
51
sprm(Sprm &)52 void OOXMLFootnoteHandler::sprm(Sprm & /*sprm*/)
53 {
54 }
55
56 /*
57 class OOXMLEndnoteHandler
58 */
OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext)59 OOXMLEndnoteHandler::OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext)
60 : mpFastContext(pContext)
61 {
62 }
63
~OOXMLEndnoteHandler()64 OOXMLEndnoteHandler::~OOXMLEndnoteHandler()
65 {
66 }
67
attribute(Id name,Value & val)68 void OOXMLEndnoteHandler::attribute(Id name, Value & val)
69 {
70 switch (name)
71 {
72 case NS_ooxml::LN_CT_FtnEdnRef_id:
73 mpFastContext->resolveEndnote(sal_Int32(val.getInt()));
74 break;
75 default:
76 break;
77 }
78 }
79
sprm(Sprm &)80 void OOXMLEndnoteHandler::sprm(Sprm & /*sprm*/)
81 {
82 }
83
84 /*
85 class OOXMLCommentHandler
86 */
OOXMLCommentHandler(OOXMLFastContextHandler * pContext)87 OOXMLCommentHandler::OOXMLCommentHandler(OOXMLFastContextHandler * pContext)
88 : mpFastContext(pContext)
89 {
90 }
91
~OOXMLCommentHandler()92 OOXMLCommentHandler::~OOXMLCommentHandler()
93 {
94 }
95
attribute(Id name,Value & val)96 void OOXMLCommentHandler::attribute(Id name, Value & val)
97 {
98 switch (name)
99 {
100 case NS_ooxml::LN_CT_Markup_id:
101 mpFastContext->resolveComment(val.getInt());
102 break;
103 default:
104 ;
105 }
106 }
107
sprm(Sprm &)108 void OOXMLCommentHandler::sprm(Sprm & /*sprm*/)
109 {
110 }
111
112 /*
113 class OOXMLOLEHandler
114 */
OOXMLOLEHandler(OOXMLFastContextHandler * pContext)115 OOXMLOLEHandler::OOXMLOLEHandler(OOXMLFastContextHandler * pContext)
116 : mpFastContext(pContext)
117 {
118 }
119
~OOXMLOLEHandler()120 OOXMLOLEHandler::~OOXMLOLEHandler()
121 {
122 }
123
attribute(Id name,Value & val)124 void OOXMLOLEHandler::attribute(Id name, Value & val)
125 {
126 switch (name)
127 {
128 case NS_ooxml::LN_CT_OLEObject_r_id:
129 try {
130 mpFastContext->resolveData(val.getString());
131 }
132 catch (const ::css::uno::Exception&)
133 {
134 // Can't resolve OLE stream
135 SAL_WARN("writerfilter.ooxml", "Failed to open OLE stream!");
136 }
137 break;
138 default:
139 ;
140 }
141 }
142
sprm(Sprm &)143 void OOXMLOLEHandler::sprm(Sprm & /*sprm*/)
144 {
145 }
146
OOXMLEmbeddedFontHandler(OOXMLFastContextHandler * pContext)147 OOXMLEmbeddedFontHandler::OOXMLEmbeddedFontHandler(OOXMLFastContextHandler * pContext)
148 : mpFastContext(pContext)
149 {
150 }
151
~OOXMLEmbeddedFontHandler()152 OOXMLEmbeddedFontHandler::~OOXMLEmbeddedFontHandler()
153 {
154 }
155
attribute(Id name,Value & val)156 void OOXMLEmbeddedFontHandler::attribute(Id name, Value & val)
157 {
158 switch (name)
159 {
160 case NS_ooxml::LN_CT_Rel_id:
161 mpFastContext->resolveData(val.getString());
162 break;
163 default:
164 break;
165 }
166 }
167
sprm(Sprm &)168 void OOXMLEmbeddedFontHandler::sprm(Sprm & /*sprm*/)
169 {
170 }
171
172 /*
173 class OOXMLFooterHandler
174 */
OOXMLFooterHandler(OOXMLFastContextHandler * pContext)175 OOXMLFooterHandler::OOXMLFooterHandler(OOXMLFastContextHandler * pContext)
176 : mpFastContext(pContext), msStreamId(), mnType(0)
177 {
178 }
179
finalize()180 void OOXMLFooterHandler::finalize()
181 {
182 mpFastContext->resolveFooter(mnType, msStreamId);
183 }
184
attribute(Id name,Value & val)185 void OOXMLFooterHandler::attribute(Id name, Value & val)
186 {
187 switch (name)
188 {
189 case NS_ooxml::LN_CT_HdrFtrRef_id:
190 msStreamId = val.getString();
191 break;
192 case NS_ooxml::LN_CT_HdrFtrRef_type:
193 mnType = val.getInt();
194 break;
195 default:
196 break;
197 }
198 }
199
sprm(Sprm &)200 void OOXMLFooterHandler::sprm(Sprm & /*sprm*/)
201 {
202 }
203
204 /*
205 class OOXMLHeaderHandler
206 */
OOXMLHeaderHandler(OOXMLFastContextHandler * pContext)207 OOXMLHeaderHandler::OOXMLHeaderHandler(OOXMLFastContextHandler * pContext)
208 : mpFastContext(pContext), msStreamId(), mnType(0)
209 {
210 }
211
finalize()212 void OOXMLHeaderHandler::finalize()
213 {
214 mpFastContext->resolveHeader(mnType, msStreamId);
215 }
216
attribute(Id name,Value & val)217 void OOXMLHeaderHandler::attribute(Id name, Value & val)
218 {
219 switch (name)
220 {
221 case NS_ooxml::LN_CT_HdrFtrRef_id:
222 msStreamId = val.getString();
223 break;
224 case NS_ooxml::LN_CT_HdrFtrRef_type:
225 mnType = val.getInt();
226 break;
227 default:
228 break;
229 }
230 }
231
sprm(Sprm &)232 void OOXMLHeaderHandler::sprm(Sprm & /*sprm*/)
233 {
234 }
235
236 /*
237 class OOXMLBreakHandler
238 */
OOXMLBreakHandler(Stream & rStream)239 OOXMLBreakHandler::OOXMLBreakHandler(Stream &rStream)
240 : mnType(0),
241 mrStream(rStream)
242 {
243 }
244
~OOXMLBreakHandler()245 OOXMLBreakHandler::~OOXMLBreakHandler()
246 {
247 sal_uInt8 tmpBreak[1];
248 switch (mnType)
249 {
250 case NS_ooxml::LN_Value_ST_BrType_column:
251 tmpBreak[0] = 0x0E;
252 break;
253 case NS_ooxml::LN_Value_ST_BrType_page:
254 tmpBreak[0] = 0x0C;
255 break;
256 case NS_ooxml::LN_Value_ST_BrType_textWrapping:
257 default: // when no attribute type is present, the spec assume textWrapping
258 tmpBreak[0] = 0x0A;
259 break;
260 }
261 mrStream.text(&tmpBreak[0], 1);
262 }
263
attribute(Id name,Value & val)264 void OOXMLBreakHandler::attribute(Id name, Value & val)
265 {
266 switch (name)
267 {
268 case NS_ooxml::LN_CT_Br_type:
269 mnType = val.getInt();
270 break;
271 case NS_ooxml::LN_CT_Br_clear:
272 break;
273 default:
274 break;
275 }
276 }
277
sprm(Sprm &)278 void OOXMLBreakHandler::sprm(Sprm & /*sprm*/)
279 {
280 }
281
282 /*
283 class OOXMLPictureHandler
284 */
OOXMLPictureHandler(OOXMLFastContextHandler * pContext)285 OOXMLPictureHandler::OOXMLPictureHandler(OOXMLFastContextHandler * pContext)
286 : mpFastContext(pContext)
287 {
288 }
289
~OOXMLPictureHandler()290 OOXMLPictureHandler::~OOXMLPictureHandler()
291 {
292 }
293
attribute(Id name,Value & val)294 void OOXMLPictureHandler::attribute(Id name, Value & val)
295 {
296 if (name == NS_ooxml::LN_AG_Blob_r_embed)
297 mpFastContext->resolvePicture(val.getString());
298 else
299 {
300 writerfilter::Reference<Properties>::Pointer_t pProps
301 (val.getProperties());
302 if (pProps)
303 pProps->resolve(*this);
304 }
305 }
306
sprm(Sprm & rSprm)307 void OOXMLPictureHandler::sprm(Sprm & rSprm)
308 {
309 writerfilter::Reference<Properties>::Pointer_t pProps
310 (rSprm.getProps());
311
312 if (pProps)
313 pProps->resolve(*this);
314 }
315
316 /**
317 class OOXMLHyperlinkHandler
318 */
319
OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext)320 OOXMLHyperlinkHandler::OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext)
321 : mpFastContext(pContext)
322 {
323 }
324
~OOXMLHyperlinkHandler()325 OOXMLHyperlinkHandler::~OOXMLHyperlinkHandler()
326 {
327 }
328
writetext()329 void OOXMLHyperlinkHandler::writetext()
330 {
331 OUString sReturn = " HYPERLINK \"" + mURL + "\"" + mFieldCode;
332 mpFastContext->text(sReturn);
333 }
334
attribute(Id name,Value & val)335 void OOXMLHyperlinkHandler::attribute(Id name, Value & val)
336 {
337 switch (name)
338 {
339 case NS_ooxml::LN_CT_Hyperlink_tgtFrame:
340 mFieldCode += " \\t \"";
341 mFieldCode += val.getString();
342 mFieldCode += "\"";
343 break;
344 case NS_ooxml::LN_CT_Hyperlink_tooltip:
345 mFieldCode += " \\o \"";
346 mFieldCode += val.getString();
347 mFieldCode += "\"";
348 break;
349 case NS_ooxml::LN_CT_Hyperlink_docLocation:
350 break;
351 case NS_ooxml::LN_CT_Hyperlink_history:
352 break;
353 case NS_ooxml::LN_CT_Hyperlink_anchor:
354 mFieldCode += " \\l \"";
355 mFieldCode += val.getString();
356 mFieldCode += "\"";
357 break;
358 case NS_ooxml::LN_CT_Hyperlink_r_id:
359 mURL = mpFastContext->getTargetForId(val.getString());
360 break;
361 default:
362 break;
363 }
364 }
365
sprm(Sprm &)366 void OOXMLHyperlinkHandler::sprm(Sprm & /*rSprm*/)
367 {
368 }
369
370 /**
371 class OOXMLHyperlinkURLHandler
372 */
373
OOXMLHyperlinkURLHandler(OOXMLFastContextHandler * pContext)374 OOXMLHyperlinkURLHandler::OOXMLHyperlinkURLHandler(OOXMLFastContextHandler * pContext)
375 : mpFastContext(pContext)
376 {
377 }
378
~OOXMLHyperlinkURLHandler()379 OOXMLHyperlinkURLHandler::~OOXMLHyperlinkURLHandler()
380 {
381 mpFastContext->clearProps();
382 mpFastContext->newProperty(NS_ooxml::LN_CT_Hyperlink_URL, OOXMLValue::Pointer_t(new OOXMLStringValue(mURL)));
383 }
384
attribute(Id name,Value & val)385 void OOXMLHyperlinkURLHandler::attribute(Id name, Value & val)
386 {
387 switch (name)
388 {
389 case NS_ooxml::LN_CT_Hyperlink_URL:
390 mURL = mpFastContext->getTargetForId(val.getString());
391 break;
392 default:
393 break;
394 }
395 }
396
sprm(Sprm &)397 void OOXMLHyperlinkURLHandler::sprm(Sprm & /*rSprm*/)
398 {
399 }
400
OOXMLAltChunkHandler(OOXMLFastContextHandler * pContext)401 OOXMLAltChunkHandler::OOXMLAltChunkHandler(OOXMLFastContextHandler* pContext)
402 : mpFastContext(pContext)
403 {
404 }
405
~OOXMLAltChunkHandler()406 OOXMLAltChunkHandler::~OOXMLAltChunkHandler()
407 {
408 mpFastContext->clearProps();
409 mpFastContext->newProperty(NS_ooxml::LN_CT_AltChunk,
410 OOXMLValue::Pointer_t(new OOXMLStringValue(m_aStreamName)));
411 }
412
attribute(Id nName,Value & rValue)413 void OOXMLAltChunkHandler::attribute(Id nName, Value& rValue)
414 {
415 switch (nName)
416 {
417 case NS_ooxml::LN_CT_AltChunk:
418 m_aStreamName = mpFastContext->getTargetForId(rValue.getString());
419 break;
420 default:
421 break;
422 }
423 }
424
sprm(Sprm &)425 void OOXMLAltChunkHandler::sprm(Sprm& /*rSprm*/) {}
426 }
427
428 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
429