1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libetonyek 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 
10 #include "IWORKOutputElements.h"
11 
12 #include <memory>
13 
14 #include "IWORKDocumentInterface.h"
15 #include "IWORKFormula.h"
16 
17 namespace libetonyek
18 {
19 
20 using std::make_shared;
21 
22 class IWORKOutputElement
23 {
24   // disable copying
25   IWORKOutputElement(const IWORKOutputElement &);
26   IWORKOutputElement &operator=(const IWORKOutputElement &);
27 
28 public:
IWORKOutputElement()29   IWORKOutputElement() {}
~IWORKOutputElement()30   virtual ~IWORKOutputElement() {}
31   virtual void write(IWORKDocumentInterface *iface) const = 0;
32 };
33 
34 namespace
35 {
36 
37 class CloseCommentElement : public IWORKOutputElement
38 {
39 public:
CloseCommentElement()40   CloseCommentElement() {}
~CloseCommentElement()41   ~CloseCommentElement() override {}
42   void write(IWORKDocumentInterface *iface) const override;
43 };
44 
45 class CloseEndnoteElement : public IWORKOutputElement
46 {
47 public:
CloseEndnoteElement()48   CloseEndnoteElement() {}
~CloseEndnoteElement()49   ~CloseEndnoteElement() override {}
50   void write(IWORKDocumentInterface *iface) const override;
51 };
52 
53 class CloseFooterElement : public IWORKOutputElement
54 {
55 public:
CloseFooterElement()56   CloseFooterElement() {}
~CloseFooterElement()57   ~CloseFooterElement() override {}
58   void write(IWORKDocumentInterface *iface) const override;
59 };
60 
61 class CloseFootnoteElement : public IWORKOutputElement
62 {
63 public:
CloseFootnoteElement()64   CloseFootnoteElement() {}
~CloseFootnoteElement()65   ~CloseFootnoteElement() override {}
66   void write(IWORKDocumentInterface *iface) const override;
67 };
68 
69 class CloseFrameElement : public IWORKOutputElement
70 {
71 public:
CloseFrameElement()72   CloseFrameElement() {}
~CloseFrameElement()73   ~CloseFrameElement() override {}
74   void write(IWORKDocumentInterface *iface) const override;
75 };
76 
77 class CloseGroupElement : public IWORKOutputElement
78 {
79 public:
CloseGroupElement()80   CloseGroupElement() {}
~CloseGroupElement()81   ~CloseGroupElement() override {}
82   void write(IWORKDocumentInterface *iface) const override;
83 };
84 
85 class CloseHeaderElement : public IWORKOutputElement
86 {
87 public:
CloseHeaderElement()88   CloseHeaderElement() {}
~CloseHeaderElement()89   ~CloseHeaderElement() override {}
90   void write(IWORKDocumentInterface *iface) const override;
91 };
92 
93 class CloseLinkElement : public IWORKOutputElement
94 {
95 public:
CloseLinkElement()96   CloseLinkElement() {}
~CloseLinkElement()97   ~CloseLinkElement() override {}
98   void write(IWORKDocumentInterface *iface) const override;
99 };
100 
101 class CloseListElementElement : public IWORKOutputElement
102 {
103 public:
CloseListElementElement()104   CloseListElementElement() {}
~CloseListElementElement()105   ~CloseListElementElement() override {}
106   void write(IWORKDocumentInterface *iface) const override;
107 };
108 
109 class CloseOrderedListLevelElement : public IWORKOutputElement
110 {
111 public:
CloseOrderedListLevelElement()112   CloseOrderedListLevelElement() {}
~CloseOrderedListLevelElement()113   ~CloseOrderedListLevelElement() override {}
114   void write(IWORKDocumentInterface *iface) const override;
115 };
116 
117 class CloseParagraphElement : public IWORKOutputElement
118 {
119 public:
CloseParagraphElement()120   CloseParagraphElement() {}
~CloseParagraphElement()121   ~CloseParagraphElement() override {}
122   void write(IWORKDocumentInterface *iface) const override;
123 };
124 
125 class CloseSectionElement : public IWORKOutputElement
126 {
127 public:
CloseSectionElement()128   CloseSectionElement() {}
~CloseSectionElement()129   ~CloseSectionElement() override {}
130   void write(IWORKDocumentInterface *iface) const override;
131 };
132 
133 class CloseSpanElement : public IWORKOutputElement
134 {
135 public:
CloseSpanElement()136   CloseSpanElement() {}
~CloseSpanElement()137   ~CloseSpanElement() override {}
138   void write(IWORKDocumentInterface *iface) const override;
139 };
140 
141 class CloseTableElement : public IWORKOutputElement
142 {
143 public:
CloseTableElement()144   CloseTableElement() {}
~CloseTableElement()145   ~CloseTableElement() override {}
146   void write(IWORKDocumentInterface *iface) const override;
147 };
148 
149 class CloseTableCellElement : public IWORKOutputElement
150 {
151 public:
CloseTableCellElement()152   CloseTableCellElement() {}
~CloseTableCellElement()153   ~CloseTableCellElement() override {}
154   void write(IWORKDocumentInterface *iface) const override;
155 };
156 
157 class CloseTableRowElement : public IWORKOutputElement
158 {
159 public:
CloseTableRowElement()160   CloseTableRowElement() {}
~CloseTableRowElement()161   ~CloseTableRowElement() override {}
162   void write(IWORKDocumentInterface *iface) const override;
163 };
164 
165 class CloseUnorderedListLevelElement : public IWORKOutputElement
166 {
167 public:
CloseUnorderedListLevelElement()168   CloseUnorderedListLevelElement() {}
~CloseUnorderedListLevelElement()169   ~CloseUnorderedListLevelElement() override {}
170   void write(IWORKDocumentInterface *iface) const override;
171 };
172 
173 class DefineSheetNumberingStyleElement : public IWORKOutputElement
174 {
175 public:
DefineSheetNumberingStyleElement(const librevenge::RVNGPropertyList & propList)176   explicit DefineSheetNumberingStyleElement(const librevenge::RVNGPropertyList &propList) :
177     m_propList(propList) {}
~DefineSheetNumberingStyleElement()178   ~DefineSheetNumberingStyleElement() override {}
179   void write(IWORKDocumentInterface *iface) const override;
180 private:
181   librevenge::RVNGPropertyList m_propList;
182 };
183 
184 class DrawGraphicObjectElement : public IWORKOutputElement
185 {
186 public:
DrawGraphicObjectElement(const librevenge::RVNGPropertyList & propList)187   explicit DrawGraphicObjectElement(const librevenge::RVNGPropertyList &propList) :
188     m_propList(propList) {}
~DrawGraphicObjectElement()189   ~DrawGraphicObjectElement() override {}
190   void write(IWORKDocumentInterface *iface) const override;
191 private:
192   librevenge::RVNGPropertyList m_propList;
193 };
194 
195 class DrawPathElement : public IWORKOutputElement
196 {
197 public:
DrawPathElement(const librevenge::RVNGPropertyList & propList)198   explicit DrawPathElement(const librevenge::RVNGPropertyList &propList) :
199     m_propList(propList) {}
~DrawPathElement()200   ~DrawPathElement() override {}
201   void write(IWORKDocumentInterface *iface) const override;
202 private:
203   librevenge::RVNGPropertyList m_propList;
204 };
205 
206 class DrawPolylineElement : public IWORKOutputElement
207 {
208 public:
DrawPolylineElement(const librevenge::RVNGPropertyList & propList)209   explicit DrawPolylineElement(const librevenge::RVNGPropertyList &propList) :
210     m_propList(propList) {}
~DrawPolylineElement()211   ~DrawPolylineElement() override {}
212   void write(IWORKDocumentInterface *iface) const override;
213 private:
214   librevenge::RVNGPropertyList m_propList;
215 };
216 
217 class EndLayerElement : public IWORKOutputElement
218 {
219 public:
EndLayerElement()220   EndLayerElement() {}
~EndLayerElement()221   ~EndLayerElement() override {}
222   void write(IWORKDocumentInterface *iface) const override;
223 };
224 
225 class EndNotesElement : public IWORKOutputElement
226 {
227 public:
EndNotesElement()228   EndNotesElement() {}
~EndNotesElement()229   ~EndNotesElement() override {}
230   void write(IWORKDocumentInterface *iface) const override;
231 };
232 
233 class EndTextObjectElement : public IWORKOutputElement
234 {
235 public:
EndTextObjectElement()236   EndTextObjectElement() {}
~EndTextObjectElement()237   ~EndTextObjectElement() override {}
238   void write(IWORKDocumentInterface *iface) const override;
239 };
240 
241 class InsertBinaryObjectElement : public IWORKOutputElement
242 {
243 public:
InsertBinaryObjectElement(const librevenge::RVNGPropertyList & propList)244   explicit InsertBinaryObjectElement(const librevenge::RVNGPropertyList &propList) :
245     m_propList(propList) {}
~InsertBinaryObjectElement()246   ~InsertBinaryObjectElement() override {}
247   void write(IWORKDocumentInterface *iface) const override;
248 private:
249   librevenge::RVNGPropertyList m_propList;
250 };
251 
252 class InsertCoveredTableCellElement : public IWORKOutputElement
253 {
254 public:
InsertCoveredTableCellElement(const librevenge::RVNGPropertyList & propList)255   explicit InsertCoveredTableCellElement(const librevenge::RVNGPropertyList &propList) :
256     m_propList(propList) {}
~InsertCoveredTableCellElement()257   ~InsertCoveredTableCellElement() override {}
258   void write(IWORKDocumentInterface *iface) const override;
259 private:
260   librevenge::RVNGPropertyList m_propList;
261 };
262 
263 class InsertFieldElement : public IWORKOutputElement
264 {
265 public:
InsertFieldElement(const librevenge::RVNGPropertyList & propList)266   explicit InsertFieldElement(const librevenge::RVNGPropertyList &propList) :
267     m_propList(propList) {}
~InsertFieldElement()268   ~InsertFieldElement() override {}
269   void write(IWORKDocumentInterface *iface) const override;
270 private:
271   librevenge::RVNGPropertyList m_propList;
272 };
273 
274 class InsertLineBreakElement : public IWORKOutputElement
275 {
276 public:
InsertLineBreakElement()277   InsertLineBreakElement() {}
~InsertLineBreakElement()278   ~InsertLineBreakElement() override {}
279   void write(IWORKDocumentInterface *iface) const override;
280 };
281 
282 class InsertSpaceElement : public IWORKOutputElement
283 {
284 public:
InsertSpaceElement()285   InsertSpaceElement() {}
~InsertSpaceElement()286   ~InsertSpaceElement() override {}
287   void write(IWORKDocumentInterface *iface) const override;
288 };
289 
290 class InsertTabElement : public IWORKOutputElement
291 {
292 public:
InsertTabElement()293   InsertTabElement() {}
~InsertTabElement()294   ~InsertTabElement() override {}
295   void write(IWORKDocumentInterface *iface) const override;
296 };
297 
298 class InsertTextElement : public IWORKOutputElement
299 {
300 public:
InsertTextElement(const librevenge::RVNGString & text)301   explicit InsertTextElement(const librevenge::RVNGString &text) :
302     m_text(text) {}
~InsertTextElement()303   ~InsertTextElement() override {}
304   void write(IWORKDocumentInterface *iface) const override;
305 private:
306   librevenge::RVNGString m_text;
307 };
308 
309 class OpenCommentElement : public IWORKOutputElement
310 {
311 public:
OpenCommentElement(const librevenge::RVNGPropertyList & propList)312   explicit OpenCommentElement(const librevenge::RVNGPropertyList &propList) :
313     m_propList(propList) {}
~OpenCommentElement()314   ~OpenCommentElement() override {}
315   void write(IWORKDocumentInterface *iface) const override;
316 private:
317   librevenge::RVNGPropertyList m_propList;
318 };
319 
320 class OpenEndnoteElement : public IWORKOutputElement
321 {
322 public:
OpenEndnoteElement(const librevenge::RVNGPropertyList & propList)323   explicit OpenEndnoteElement(const librevenge::RVNGPropertyList &propList) :
324     m_propList(propList) {}
~OpenEndnoteElement()325   ~OpenEndnoteElement() override {}
326   void write(IWORKDocumentInterface *iface) const override;
327 private:
328   librevenge::RVNGPropertyList m_propList;
329 };
330 
331 class OpenFormulaCellElement : public IWORKOutputElement
332 {
333 public:
OpenFormulaCellElement(const librevenge::RVNGPropertyList & propList,const IWORKFormula & formula,const boost::optional<unsigned> & formulaHC,const IWORKTableNameMapPtr_t & tableNameMap)334   OpenFormulaCellElement(const librevenge::RVNGPropertyList &propList, const IWORKFormula &formula, const boost::optional<unsigned> &formulaHC, const IWORKTableNameMapPtr_t &tableNameMap)
335     : m_propList(propList)
336     , m_formula(formula)
337     , m_formulaHC(formulaHC)
338     , m_tableNameMap(tableNameMap) {}
~OpenFormulaCellElement()339   ~OpenFormulaCellElement() override {}
340   void write(IWORKDocumentInterface *iface) const override;
341 private:
342   librevenge::RVNGPropertyList m_propList;
343   const IWORKFormula m_formula;
344   const boost::optional<unsigned> m_formulaHC;
345   const IWORKTableNameMapPtr_t m_tableNameMap;
346 };
347 
348 class OpenFooterElement : public IWORKOutputElement
349 {
350 public:
OpenFooterElement(const librevenge::RVNGPropertyList & propList)351   explicit OpenFooterElement(const librevenge::RVNGPropertyList &propList) :
352     m_propList(propList) {}
~OpenFooterElement()353   ~OpenFooterElement() override {}
354   void write(IWORKDocumentInterface *iface) const override;
355 private:
356   librevenge::RVNGPropertyList m_propList;
357 };
358 
359 class OpenFootnoteElement : public IWORKOutputElement
360 {
361 public:
OpenFootnoteElement(const librevenge::RVNGPropertyList & propList)362   explicit OpenFootnoteElement(const librevenge::RVNGPropertyList &propList) :
363     m_propList(propList) {}
~OpenFootnoteElement()364   ~OpenFootnoteElement() override {}
365   void write(IWORKDocumentInterface *iface) const override;
366 private:
367   librevenge::RVNGPropertyList m_propList;
368 };
369 
370 class OpenFrameElement : public IWORKOutputElement
371 {
372 public:
OpenFrameElement(const librevenge::RVNGPropertyList & propList)373   explicit OpenFrameElement(const librevenge::RVNGPropertyList &propList) :
374     m_propList(propList) {}
~OpenFrameElement()375   ~OpenFrameElement() override {}
376   void write(IWORKDocumentInterface *iface) const override;
377 private:
378   librevenge::RVNGPropertyList m_propList;
379 };
380 
381 class OpenGroupElement : public IWORKOutputElement
382 {
383 public:
OpenGroupElement(const librevenge::RVNGPropertyList & propList)384   explicit OpenGroupElement(const librevenge::RVNGPropertyList &propList) :
385     m_propList(propList) {}
~OpenGroupElement()386   ~OpenGroupElement() override {}
387   void write(IWORKDocumentInterface *iface) const override;
388 private:
389   librevenge::RVNGPropertyList m_propList;
390 };
391 
392 class OpenHeaderElement : public IWORKOutputElement
393 {
394 public:
OpenHeaderElement(const librevenge::RVNGPropertyList & propList)395   explicit OpenHeaderElement(const librevenge::RVNGPropertyList &propList) :
396     m_propList(propList) {}
~OpenHeaderElement()397   ~OpenHeaderElement() override {}
398   void write(IWORKDocumentInterface *iface) const override;
399 private:
400   librevenge::RVNGPropertyList m_propList;
401 };
402 
403 class OpenLinkElement : public IWORKOutputElement
404 {
405 public:
OpenLinkElement(const librevenge::RVNGPropertyList & propList)406   explicit OpenLinkElement(const librevenge::RVNGPropertyList &propList) :
407     m_propList(propList) {}
~OpenLinkElement()408   ~OpenLinkElement() override {}
409   void write(IWORKDocumentInterface *iface) const override;
410 private:
411   librevenge::RVNGPropertyList m_propList;
412 };
413 
414 class OpenListElementElement : public IWORKOutputElement
415 {
416 public:
OpenListElementElement(const librevenge::RVNGPropertyList & propList)417   explicit OpenListElementElement(const librevenge::RVNGPropertyList &propList) :
418     m_propList(propList) {}
~OpenListElementElement()419   ~OpenListElementElement() override {}
420   void write(IWORKDocumentInterface *iface) const override;
421 private:
422   librevenge::RVNGPropertyList m_propList;
423 };
424 
425 class OpenOrderedListLevelElement : public IWORKOutputElement
426 {
427 public:
OpenOrderedListLevelElement(const librevenge::RVNGPropertyList & propList)428   explicit OpenOrderedListLevelElement(const librevenge::RVNGPropertyList &propList) :
429     m_propList(propList) {}
~OpenOrderedListLevelElement()430   ~OpenOrderedListLevelElement() override {}
431   void write(IWORKDocumentInterface *iface) const override;
432 private:
433   librevenge::RVNGPropertyList m_propList;
434 };
435 
436 class OpenParagraphElement : public IWORKOutputElement
437 {
438 public:
OpenParagraphElement(const librevenge::RVNGPropertyList & propList)439   explicit OpenParagraphElement(const librevenge::RVNGPropertyList &propList) :
440     m_propList(propList) {}
~OpenParagraphElement()441   ~OpenParagraphElement() override {}
442   void write(IWORKDocumentInterface *iface) const override;
443 private:
444   librevenge::RVNGPropertyList m_propList;
445 };
446 
447 class OpenSectionElement : public IWORKOutputElement
448 {
449 public:
OpenSectionElement(const librevenge::RVNGPropertyList & propList)450   explicit OpenSectionElement(const librevenge::RVNGPropertyList &propList) :
451     m_propList(propList) {}
~OpenSectionElement()452   ~OpenSectionElement() override {}
453   void write(IWORKDocumentInterface *iface) const override;
454 private:
455   librevenge::RVNGPropertyList m_propList;
456 };
457 
458 class OpenSpanElement : public IWORKOutputElement
459 {
460 public:
OpenSpanElement(const librevenge::RVNGPropertyList & propList)461   explicit OpenSpanElement(const librevenge::RVNGPropertyList &propList) :
462     m_propList(propList) {}
~OpenSpanElement()463   ~OpenSpanElement() override {}
464   void write(IWORKDocumentInterface *iface) const override;
465 private:
466   librevenge::RVNGPropertyList m_propList;
467 };
468 
469 class OpenTableElement : public IWORKOutputElement
470 {
471 public:
OpenTableElement(const librevenge::RVNGPropertyList & propList)472   explicit OpenTableElement(const librevenge::RVNGPropertyList &propList) :
473     m_propList(propList) {}
~OpenTableElement()474   ~OpenTableElement() override {}
475   void write(IWORKDocumentInterface *iface) const override;
476 private:
477   librevenge::RVNGPropertyList m_propList;
478 };
479 
480 class OpenTableCellElement : public IWORKOutputElement
481 {
482 public:
OpenTableCellElement(const librevenge::RVNGPropertyList & propList)483   explicit OpenTableCellElement(const librevenge::RVNGPropertyList &propList) :
484     m_propList(propList) {}
~OpenTableCellElement()485   ~OpenTableCellElement() override {}
486   void write(IWORKDocumentInterface *iface) const override;
487 private:
488   librevenge::RVNGPropertyList m_propList;
489 };
490 
491 class OpenTableRowElement : public IWORKOutputElement
492 {
493 public:
OpenTableRowElement(const librevenge::RVNGPropertyList & propList)494   explicit OpenTableRowElement(const librevenge::RVNGPropertyList &propList) :
495     m_propList(propList) {}
~OpenTableRowElement()496   ~OpenTableRowElement() override {}
497   void write(IWORKDocumentInterface *iface) const override;
498 private:
499   librevenge::RVNGPropertyList m_propList;
500 };
501 
502 class OpenUnorderedListLevelElement : public IWORKOutputElement
503 {
504 public:
OpenUnorderedListLevelElement(const librevenge::RVNGPropertyList & propList)505   explicit OpenUnorderedListLevelElement(const librevenge::RVNGPropertyList &propList) :
506     m_propList(propList) {}
~OpenUnorderedListLevelElement()507   ~OpenUnorderedListLevelElement() override {}
508   void write(IWORKDocumentInterface *iface) const override;
509 private:
510   librevenge::RVNGPropertyList m_propList;
511 };
512 
513 class SetStyleElement : public IWORKOutputElement
514 {
515 public:
SetStyleElement(const librevenge::RVNGPropertyList & propList)516   explicit SetStyleElement(const librevenge::RVNGPropertyList &propList) :
517     m_propList(propList) {}
~SetStyleElement()518   ~SetStyleElement() override {}
519   void write(IWORKDocumentInterface *iface) const override;
520 private:
521   librevenge::RVNGPropertyList m_propList;
522 };
523 
524 class StartLayerElement : public IWORKOutputElement
525 {
526 public:
StartLayerElement(const librevenge::RVNGPropertyList & propList)527   explicit StartLayerElement(const librevenge::RVNGPropertyList &propList) :
528     m_propList(propList) {}
~StartLayerElement()529   ~StartLayerElement() override {}
530   void write(IWORKDocumentInterface *iface) const override;
531 private:
532   const librevenge::RVNGPropertyList m_propList;
533 };
534 
535 class StartNotesElement : public IWORKOutputElement
536 {
537 public:
StartNotesElement(const librevenge::RVNGPropertyList & propList)538   explicit StartNotesElement(const librevenge::RVNGPropertyList &propList) :
539     m_propList(propList) {}
~StartNotesElement()540   ~StartNotesElement() override {}
541   void write(IWORKDocumentInterface *iface) const override;
542 private:
543   const librevenge::RVNGPropertyList m_propList;
544 };
545 
546 class StartTextObjectElement : public IWORKOutputElement
547 {
548 public:
StartTextObjectElement(const librevenge::RVNGPropertyList & propList)549   explicit StartTextObjectElement(const librevenge::RVNGPropertyList &propList) :
550     m_propList(propList) {}
~StartTextObjectElement()551   ~StartTextObjectElement() override {}
552   void write(IWORKDocumentInterface *iface) const override;
553 private:
554   librevenge::RVNGPropertyList m_propList;
555 };
556 
write(IWORKDocumentInterface * iface) const557 void CloseCommentElement::write(IWORKDocumentInterface *iface) const
558 {
559   if (iface)
560     iface->closeComment();
561 }
562 
write(IWORKDocumentInterface * iface) const563 void CloseEndnoteElement::write(IWORKDocumentInterface *iface) const
564 {
565   if (iface)
566     iface->closeEndnote();
567 }
568 
write(IWORKDocumentInterface * iface) const569 void CloseFooterElement::write(IWORKDocumentInterface *iface) const
570 {
571   if (iface)
572     iface->closeFooter();
573 }
574 
write(IWORKDocumentInterface * iface) const575 void CloseFootnoteElement::write(IWORKDocumentInterface *iface) const
576 {
577   if (iface)
578     iface->closeFootnote();
579 }
580 
write(IWORKDocumentInterface * iface) const581 void CloseFrameElement::write(IWORKDocumentInterface *iface) const
582 {
583   if (iface)
584     iface->closeFrame();
585 }
586 
write(IWORKDocumentInterface * iface) const587 void CloseGroupElement::write(IWORKDocumentInterface *iface) const
588 {
589   if (iface)
590     iface->closeGroup();
591 }
592 
write(IWORKDocumentInterface * iface) const593 void CloseHeaderElement::write(IWORKDocumentInterface *iface) const
594 {
595   if (iface)
596     iface->closeHeader();
597 }
598 
write(IWORKDocumentInterface * iface) const599 void CloseLinkElement::write(IWORKDocumentInterface *iface) const
600 {
601   if (iface)
602     iface->closeLink();
603 }
604 
write(IWORKDocumentInterface * iface) const605 void CloseListElementElement::write(IWORKDocumentInterface *iface) const
606 {
607   if (iface)
608     iface->closeListElement();
609 }
610 
write(IWORKDocumentInterface * iface) const611 void CloseOrderedListLevelElement::write(IWORKDocumentInterface *iface) const
612 {
613   if (iface)
614     iface->closeOrderedListLevel();
615 }
616 
write(IWORKDocumentInterface * iface) const617 void CloseParagraphElement::write(IWORKDocumentInterface *iface) const
618 {
619   if (iface)
620     iface->closeParagraph();
621 }
622 
write(IWORKDocumentInterface * iface) const623 void CloseSectionElement::write(IWORKDocumentInterface *iface) const
624 {
625   if (iface)
626     iface->closeSection();
627 }
628 
write(IWORKDocumentInterface * iface) const629 void CloseSpanElement::write(IWORKDocumentInterface *iface) const
630 {
631   if (iface)
632     iface->closeSpan();
633 }
634 
write(IWORKDocumentInterface * iface) const635 void CloseTableElement::write(IWORKDocumentInterface *iface) const
636 {
637   if (iface)
638     iface->closeTable();
639 }
640 
write(IWORKDocumentInterface * iface) const641 void CloseTableCellElement::write(IWORKDocumentInterface *iface) const
642 {
643   if (iface)
644     iface->closeTableCell();
645 }
646 
write(IWORKDocumentInterface * iface) const647 void CloseTableRowElement::write(IWORKDocumentInterface *iface) const
648 {
649   if (iface)
650     iface->closeTableRow();
651 }
652 
write(IWORKDocumentInterface * iface) const653 void CloseUnorderedListLevelElement::write(IWORKDocumentInterface *iface) const
654 {
655   if (iface)
656     iface->closeUnorderedListLevel();
657 }
658 
write(IWORKDocumentInterface * iface) const659 void DefineSheetNumberingStyleElement::write(IWORKDocumentInterface *iface) const
660 {
661   if (iface)
662     iface->defineSheetNumberingStyle(m_propList);
663 }
664 
write(IWORKDocumentInterface * iface) const665 void DrawGraphicObjectElement::write(IWORKDocumentInterface *iface) const
666 {
667   if (iface)
668     iface->drawGraphicObject(m_propList);
669 }
670 
write(IWORKDocumentInterface * iface) const671 void DrawPathElement::write(IWORKDocumentInterface *iface) const
672 {
673   if (iface)
674     iface->drawPath(m_propList);
675 }
676 
write(IWORKDocumentInterface * iface) const677 void DrawPolylineElement::write(IWORKDocumentInterface *iface) const
678 {
679   if (iface)
680     iface->drawPolyline(m_propList);
681 }
682 
write(IWORKDocumentInterface * const iface) const683 void EndLayerElement::write(IWORKDocumentInterface *const iface) const
684 {
685   if (iface)
686     iface->endLayer();
687 }
688 
write(IWORKDocumentInterface * const iface) const689 void EndNotesElement::write(IWORKDocumentInterface *const iface) const
690 {
691   if (iface)
692     iface->endNotes();
693 }
694 
write(IWORKDocumentInterface * iface) const695 void EndTextObjectElement::write(IWORKDocumentInterface *iface) const
696 {
697   if (iface)
698     iface->endTextObject();
699 }
700 
write(IWORKDocumentInterface * iface) const701 void InsertBinaryObjectElement::write(IWORKDocumentInterface *iface) const
702 {
703   if (iface)
704     iface->insertBinaryObject(m_propList);
705 }
706 
write(IWORKDocumentInterface * iface) const707 void InsertCoveredTableCellElement::write(IWORKDocumentInterface *iface) const
708 {
709   if (iface)
710     iface->insertCoveredTableCell(m_propList);
711 }
712 
write(IWORKDocumentInterface * iface) const713 void InsertFieldElement::write(IWORKDocumentInterface *iface) const
714 {
715   if (iface)
716     iface->insertField(m_propList);
717 }
718 
write(IWORKDocumentInterface * iface) const719 void InsertLineBreakElement::write(IWORKDocumentInterface *iface) const
720 {
721   if (iface)
722     iface->insertLineBreak();
723 }
724 
write(IWORKDocumentInterface * iface) const725 void InsertSpaceElement::write(IWORKDocumentInterface *iface) const
726 {
727   if (iface)
728     iface->insertSpace();
729 }
730 
write(IWORKDocumentInterface * iface) const731 void InsertTabElement::write(IWORKDocumentInterface *iface) const
732 {
733   if (iface)
734     iface->insertTab();
735 }
736 
write(IWORKDocumentInterface * iface) const737 void InsertTextElement::write(IWORKDocumentInterface *iface) const
738 {
739   if (iface)
740     iface->insertText(m_text);
741 }
742 
write(IWORKDocumentInterface * iface) const743 void OpenCommentElement::write(IWORKDocumentInterface *iface) const
744 {
745   if (iface)
746     iface->openComment(m_propList);
747 }
748 
write(IWORKDocumentInterface * iface) const749 void OpenEndnoteElement::write(IWORKDocumentInterface *iface) const
750 {
751   if (iface)
752     iface->openEndnote(m_propList);
753 }
754 
write(IWORKDocumentInterface * iface) const755 void OpenFormulaCellElement::write(IWORKDocumentInterface *iface) const
756 {
757   librevenge::RVNGPropertyList cellProps(m_propList);
758 
759   librevenge::RVNGPropertyListVector propsVector;
760   m_formula.write(m_formulaHC, propsVector, m_tableNameMap);
761   cellProps.insert("librevenge:formula", propsVector);
762 
763   if (iface)
764     iface->openTableCell(cellProps);
765 }
766 
write(IWORKDocumentInterface * iface) const767 void OpenFooterElement::write(IWORKDocumentInterface *iface) const
768 {
769   if (iface)
770     iface->openFooter(m_propList);
771 }
772 
write(IWORKDocumentInterface * iface) const773 void OpenFootnoteElement::write(IWORKDocumentInterface *iface) const
774 {
775   if (iface)
776     iface->openFootnote(m_propList);
777 }
778 
write(IWORKDocumentInterface * iface) const779 void OpenFrameElement::write(IWORKDocumentInterface *iface) const
780 {
781   if (iface)
782     iface->openFrame(m_propList);
783 }
784 
write(IWORKDocumentInterface * iface) const785 void OpenGroupElement::write(IWORKDocumentInterface *iface) const
786 {
787   if (iface)
788     iface->openGroup(m_propList);
789 }
790 
write(IWORKDocumentInterface * iface) const791 void OpenHeaderElement::write(IWORKDocumentInterface *iface) const
792 {
793   if (iface)
794     iface->openHeader(m_propList);
795 }
796 
write(IWORKDocumentInterface * iface) const797 void OpenLinkElement::write(IWORKDocumentInterface *iface) const
798 {
799   if (iface)
800     iface->openLink(m_propList);
801 }
802 
write(IWORKDocumentInterface * iface) const803 void OpenListElementElement::write(IWORKDocumentInterface *iface) const
804 {
805   if (iface)
806     iface->openListElement(m_propList);
807 }
808 
write(IWORKDocumentInterface * iface) const809 void OpenOrderedListLevelElement::write(IWORKDocumentInterface *iface) const
810 {
811   if (iface)
812     iface->openOrderedListLevel(m_propList);
813 }
814 
write(IWORKDocumentInterface * iface) const815 void OpenParagraphElement::write(IWORKDocumentInterface *iface) const
816 {
817   if (iface)
818     iface->openParagraph(m_propList);
819 }
820 
write(IWORKDocumentInterface * iface) const821 void OpenSectionElement::write(IWORKDocumentInterface *iface) const
822 {
823   if (iface)
824     iface->openSection(m_propList);
825 }
826 
write(IWORKDocumentInterface * iface) const827 void OpenSpanElement::write(IWORKDocumentInterface *iface) const
828 {
829   if (iface)
830     iface->openSpan(m_propList);
831 }
832 
write(IWORKDocumentInterface * iface) const833 void OpenTableElement::write(IWORKDocumentInterface *iface) const
834 {
835   if (iface)
836     iface->openTable(m_propList);
837 }
838 
write(IWORKDocumentInterface * iface) const839 void OpenTableCellElement::write(IWORKDocumentInterface *iface) const
840 {
841   if (iface)
842     iface->openTableCell(m_propList);
843 }
844 
write(IWORKDocumentInterface * iface) const845 void OpenTableRowElement::write(IWORKDocumentInterface *iface) const
846 {
847   if (iface)
848     iface->openTableRow(m_propList);
849 }
850 
write(IWORKDocumentInterface * iface) const851 void OpenUnorderedListLevelElement::write(IWORKDocumentInterface *iface) const
852 {
853   if (iface)
854     iface->openUnorderedListLevel(m_propList);
855 }
856 
write(IWORKDocumentInterface * iface) const857 void SetStyleElement::write(IWORKDocumentInterface *iface) const
858 {
859   if (iface)
860     iface->setStyle(m_propList);
861 }
862 
write(IWORKDocumentInterface * const iface) const863 void StartLayerElement::write(IWORKDocumentInterface *const iface) const
864 {
865   if (iface)
866     iface->startLayer(m_propList);
867 }
868 
write(IWORKDocumentInterface * const iface) const869 void StartNotesElement::write(IWORKDocumentInterface *const iface) const
870 {
871   if (iface)
872     iface->startNotes(m_propList);
873 }
874 
write(IWORKDocumentInterface * iface) const875 void StartTextObjectElement::write(IWORKDocumentInterface *iface) const
876 {
877   if (iface)
878     iface->startTextObject(m_propList);
879 }
880 
881 }
882 
IWORKOutputElements()883 IWORKOutputElements::IWORKOutputElements()
884   : m_elements()
885 {
886 }
887 
append(const IWORKOutputElements & elements)888 void IWORKOutputElements::append(const IWORKOutputElements &elements)
889 {
890   m_elements.insert(m_elements.end(), elements.m_elements.begin(), elements.m_elements.end());
891 }
892 
addShapesInSpreadsheet(const IWORKOutputElements & elements)893 void IWORKOutputElements::addShapesInSpreadsheet(const IWORKOutputElements &elements)
894 {
895   if (m_elements.empty())
896   {
897     ETONYEK_DEBUG_MSG(("IWORKOutputElements::addShapesInSpreadsheet: the elements is empty\n"));
898     return;
899   }
900   // TODO: check that the first element is really OpenSheet
901   m_elements.insert(m_elements.begin()+1, elements.m_elements.begin(), elements.m_elements.end());
902 }
903 
write(IWORKDocumentInterface * iface) const904 void IWORKOutputElements::write(IWORKDocumentInterface *iface) const
905 {
906   ElementList_t::const_iterator iter;
907   for (iter = m_elements.begin(); iter != m_elements.end(); ++iter)
908     (*iter)->write(iface);
909 }
910 
clear()911 void IWORKOutputElements::clear()
912 {
913   m_elements.clear();
914 }
915 
empty() const916 bool IWORKOutputElements::empty() const
917 {
918   return m_elements.empty();
919 }
920 
addCloseComment()921 void IWORKOutputElements::addCloseComment()
922 {
923   m_elements.push_back(make_shared<CloseCommentElement>());
924 }
925 
addCloseEndnote()926 void IWORKOutputElements::addCloseEndnote()
927 {
928   m_elements.push_back(make_shared<CloseEndnoteElement>());
929 }
930 
addCloseFooter()931 void IWORKOutputElements::addCloseFooter()
932 {
933   m_elements.push_back(make_shared<CloseFooterElement>());
934 }
935 
addCloseFootnote()936 void IWORKOutputElements::addCloseFootnote()
937 {
938   m_elements.push_back(make_shared<CloseFootnoteElement>());
939 }
940 
addCloseFrame()941 void IWORKOutputElements::addCloseFrame()
942 {
943   m_elements.push_back(make_shared<CloseFrameElement>());
944 }
945 
addCloseGroup()946 void IWORKOutputElements::addCloseGroup()
947 {
948   m_elements.push_back(make_shared<CloseGroupElement>());
949 }
950 
addCloseHeader()951 void IWORKOutputElements::addCloseHeader()
952 {
953   m_elements.push_back(make_shared<CloseHeaderElement>());
954 }
955 
addCloseLink()956 void IWORKOutputElements::addCloseLink()
957 {
958   m_elements.push_back(make_shared<CloseLinkElement>());
959 }
960 
addCloseListElement()961 void IWORKOutputElements::addCloseListElement()
962 {
963   m_elements.push_back(make_shared<CloseListElementElement>());
964 }
965 
addCloseOrderedListLevel()966 void IWORKOutputElements::addCloseOrderedListLevel()
967 {
968   m_elements.push_back(make_shared<CloseOrderedListLevelElement>());
969 }
970 
addCloseParagraph()971 void IWORKOutputElements::addCloseParagraph()
972 {
973   m_elements.push_back(make_shared<CloseParagraphElement>());
974 }
975 
addCloseSection()976 void IWORKOutputElements::addCloseSection()
977 {
978   m_elements.push_back(make_shared<CloseSectionElement>());
979 }
980 
addCloseSpan()981 void IWORKOutputElements::addCloseSpan()
982 {
983   m_elements.push_back(make_shared<CloseSpanElement>());
984 }
985 
addCloseTable()986 void IWORKOutputElements::addCloseTable()
987 {
988   m_elements.push_back(make_shared<CloseTableElement>());
989 }
990 
addCloseTableCell()991 void IWORKOutputElements::addCloseTableCell()
992 {
993   m_elements.push_back(make_shared<CloseTableCellElement>());
994 }
995 
addCloseTableRow()996 void IWORKOutputElements::addCloseTableRow()
997 {
998   m_elements.push_back(make_shared<CloseTableRowElement>());
999 }
1000 
addCloseUnorderedListLevel()1001 void IWORKOutputElements::addCloseUnorderedListLevel()
1002 {
1003   m_elements.push_back(make_shared<CloseUnorderedListLevelElement>());
1004 }
1005 
addDefineSheetNumberingStyle(const librevenge::RVNGPropertyList & propList)1006 void IWORKOutputElements::addDefineSheetNumberingStyle(const librevenge::RVNGPropertyList &propList)
1007 {
1008   m_elements.push_back(make_shared<DefineSheetNumberingStyleElement>(propList));
1009 }
1010 
addDrawGraphicObject(const librevenge::RVNGPropertyList & propList)1011 void IWORKOutputElements::addDrawGraphicObject(const librevenge::RVNGPropertyList &propList)
1012 {
1013   m_elements.push_back(make_shared<DrawGraphicObjectElement>(propList));
1014 }
1015 
addDrawPath(const librevenge::RVNGPropertyList & propList)1016 void IWORKOutputElements::addDrawPath(const librevenge::RVNGPropertyList &propList)
1017 {
1018   m_elements.push_back(make_shared<DrawPathElement>(propList));
1019 }
1020 
addDrawPolyline(const librevenge::RVNGPropertyList & propList)1021 void IWORKOutputElements::addDrawPolyline(const librevenge::RVNGPropertyList &propList)
1022 {
1023   m_elements.push_back(make_shared<DrawPolylineElement>(propList));
1024 }
1025 
addEndLayer()1026 void IWORKOutputElements::addEndLayer()
1027 {
1028   m_elements.push_back(make_shared<EndLayerElement>());
1029 }
1030 
addEndNotes()1031 void IWORKOutputElements::addEndNotes()
1032 {
1033   m_elements.push_back(make_shared<EndNotesElement>());
1034 }
1035 
addEndTextObject()1036 void IWORKOutputElements::addEndTextObject()
1037 {
1038   m_elements.push_back(make_shared<EndTextObjectElement>());
1039 }
1040 
addInsertBinaryObject(const librevenge::RVNGPropertyList & propList)1041 void IWORKOutputElements::addInsertBinaryObject(const librevenge::RVNGPropertyList &propList)
1042 {
1043   m_elements.push_back(make_shared<InsertBinaryObjectElement>(propList));
1044 }
1045 
addInsertCoveredTableCell(const librevenge::RVNGPropertyList & propList)1046 void IWORKOutputElements::addInsertCoveredTableCell(const librevenge::RVNGPropertyList &propList)
1047 {
1048   m_elements.push_back(make_shared<InsertCoveredTableCellElement>(propList));
1049 }
1050 
addInsertField(const librevenge::RVNGPropertyList & propList)1051 void IWORKOutputElements::addInsertField(const librevenge::RVNGPropertyList &propList)
1052 {
1053   m_elements.push_back(make_shared<InsertFieldElement>(propList));
1054 }
1055 
addInsertLineBreak()1056 void IWORKOutputElements::addInsertLineBreak()
1057 {
1058   m_elements.push_back(make_shared<InsertLineBreakElement>());
1059 }
1060 
addInsertSpace()1061 void IWORKOutputElements::addInsertSpace()
1062 {
1063   m_elements.push_back(make_shared<InsertSpaceElement>());
1064 }
1065 
addInsertTab()1066 void IWORKOutputElements::addInsertTab()
1067 {
1068   m_elements.push_back(make_shared<InsertTabElement>());
1069 }
1070 
addInsertText(const librevenge::RVNGString & text)1071 void IWORKOutputElements::addInsertText(const librevenge::RVNGString &text)
1072 {
1073   m_elements.push_back(make_shared<InsertTextElement>(text));
1074 }
1075 
addOpenComment(const librevenge::RVNGPropertyList & propList)1076 void IWORKOutputElements::addOpenComment(const librevenge::RVNGPropertyList &propList)
1077 {
1078   m_elements.push_back(make_shared<OpenCommentElement>(propList));
1079 }
1080 
addOpenEndnote(const librevenge::RVNGPropertyList & propList)1081 void IWORKOutputElements::addOpenEndnote(const librevenge::RVNGPropertyList &propList)
1082 {
1083   m_elements.push_back(make_shared<OpenEndnoteElement>(propList));
1084 }
1085 
addOpenFormulaCell(const librevenge::RVNGPropertyList & propList,const IWORKFormula & formula,const boost::optional<unsigned> & formulaHC,const IWORKTableNameMapPtr_t & tableNameMap)1086 void IWORKOutputElements::addOpenFormulaCell(const librevenge::RVNGPropertyList &propList, const IWORKFormula &formula, const boost::optional<unsigned> &formulaHC, const IWORKTableNameMapPtr_t &tableNameMap)
1087 {
1088   m_elements.push_back(std::shared_ptr<OpenFormulaCellElement>(new OpenFormulaCellElement(propList, formula, formulaHC, tableNameMap)));
1089 }
1090 
addOpenFooter(const librevenge::RVNGPropertyList & propList)1091 void IWORKOutputElements::addOpenFooter(const librevenge::RVNGPropertyList &propList)
1092 {
1093   m_elements.push_back(make_shared<OpenFooterElement>(propList));
1094 }
1095 
addOpenFootnote(const librevenge::RVNGPropertyList & propList)1096 void IWORKOutputElements::addOpenFootnote(const librevenge::RVNGPropertyList &propList)
1097 {
1098   m_elements.push_back(make_shared<OpenFootnoteElement>(propList));
1099 }
1100 
addOpenFrame(const librevenge::RVNGPropertyList & propList)1101 void IWORKOutputElements::addOpenFrame(const librevenge::RVNGPropertyList &propList)
1102 {
1103   m_elements.push_back(make_shared<OpenFrameElement>(propList));
1104 }
1105 
addOpenGroup(const librevenge::RVNGPropertyList & propList)1106 void IWORKOutputElements::addOpenGroup(const librevenge::RVNGPropertyList &propList)
1107 {
1108   m_elements.push_back(make_shared<OpenGroupElement>(propList));
1109 }
1110 
addOpenHeader(const librevenge::RVNGPropertyList & propList)1111 void IWORKOutputElements::addOpenHeader(const librevenge::RVNGPropertyList &propList)
1112 {
1113   m_elements.push_back(make_shared<OpenHeaderElement>(propList));
1114 }
1115 
addOpenLink(const librevenge::RVNGPropertyList & propList)1116 void IWORKOutputElements::addOpenLink(const librevenge::RVNGPropertyList &propList)
1117 {
1118   m_elements.push_back(make_shared<OpenLinkElement>(propList));
1119 }
1120 
addOpenListElement(const librevenge::RVNGPropertyList & propList)1121 void IWORKOutputElements::addOpenListElement(const librevenge::RVNGPropertyList &propList)
1122 {
1123   m_elements.push_back(make_shared<OpenListElementElement>(propList));
1124 }
1125 
addOpenOrderedListLevel(const librevenge::RVNGPropertyList & propList)1126 void IWORKOutputElements::addOpenOrderedListLevel(const librevenge::RVNGPropertyList &propList)
1127 {
1128   m_elements.push_back(make_shared<OpenOrderedListLevelElement>(propList));
1129 }
1130 
addOpenParagraph(const librevenge::RVNGPropertyList & propList)1131 void IWORKOutputElements::addOpenParagraph(const librevenge::RVNGPropertyList &propList)
1132 {
1133   m_elements.push_back(make_shared<OpenParagraphElement>(propList));
1134 }
1135 
addOpenSection(const librevenge::RVNGPropertyList & propList)1136 void IWORKOutputElements::addOpenSection(const librevenge::RVNGPropertyList &propList)
1137 {
1138   m_elements.push_back(make_shared<OpenSectionElement>(propList));
1139 }
1140 
addOpenSpan(const librevenge::RVNGPropertyList & propList)1141 void IWORKOutputElements::addOpenSpan(const librevenge::RVNGPropertyList &propList)
1142 {
1143   m_elements.push_back(make_shared<OpenSpanElement>(propList));
1144 }
1145 
addOpenTable(const librevenge::RVNGPropertyList & propList)1146 void IWORKOutputElements::addOpenTable(const librevenge::RVNGPropertyList &propList)
1147 {
1148   m_elements.push_back(make_shared<OpenTableElement>(propList));
1149 }
1150 
addOpenTableCell(const librevenge::RVNGPropertyList & propList)1151 void IWORKOutputElements::addOpenTableCell(const librevenge::RVNGPropertyList &propList)
1152 {
1153   m_elements.push_back(make_shared<OpenTableCellElement>(propList));
1154 }
1155 
addOpenTableRow(const librevenge::RVNGPropertyList & propList)1156 void IWORKOutputElements::addOpenTableRow(const librevenge::RVNGPropertyList &propList)
1157 {
1158   m_elements.push_back(make_shared<OpenTableRowElement>(propList));
1159 }
1160 
addOpenUnorderedListLevel(const librevenge::RVNGPropertyList & propList)1161 void IWORKOutputElements::addOpenUnorderedListLevel(const librevenge::RVNGPropertyList &propList)
1162 {
1163   m_elements.push_back(make_shared<OpenUnorderedListLevelElement>(propList));
1164 }
1165 
addSetStyle(const librevenge::RVNGPropertyList & propList)1166 void IWORKOutputElements::addSetStyle(const librevenge::RVNGPropertyList &propList)
1167 {
1168   m_elements.push_back(make_shared<SetStyleElement>(propList));
1169 }
1170 
addStartLayer(const librevenge::RVNGPropertyList & propList)1171 void IWORKOutputElements::addStartLayer(const librevenge::RVNGPropertyList &propList)
1172 {
1173   m_elements.push_back(make_shared<StartLayerElement>(propList));
1174 }
1175 
addStartNotes(const librevenge::RVNGPropertyList & propList)1176 void IWORKOutputElements::addStartNotes(const librevenge::RVNGPropertyList &propList)
1177 {
1178   m_elements.push_back(make_shared<StartNotesElement>(propList));
1179 }
1180 
addStartTextObject(const librevenge::RVNGPropertyList & propList)1181 void IWORKOutputElements::addStartTextObject(const librevenge::RVNGPropertyList &propList)
1182 {
1183   m_elements.push_back(make_shared<StartTextObjectElement>(propList));
1184 }
1185 
1186 }
1187 
1188 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
1189