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) 2002-2003 William Lachance (wrlach@gmail.com) 11 * 12 * For minor contributions see the git repository. 13 * 14 * Alternatively, the contents of this file may be used under the terms 15 * of the GNU Lesser General Public License Version 2.1 or later 16 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are 17 * applicable instead of those above. 18 * 19 * For further information visit http://libwpd.sourceforge.net 20 */ 21 22 /* "This product is not manufactured, approved, or supported by 23 * Corel Corporation or Corel Corporation Limited." 24 */ 25 26 #ifndef _DOCUMENTELEMENT_HXX_ 27 #define _DOCUMENTELEMENT_HXX_ 28 29 #include <vector> 30 #include <librevenge/librevenge.h> 31 #include <libodfgen/libodfgen.hxx> 32 33 class DocumentElement 34 { 35 public: ~DocumentElement()36 virtual ~DocumentElement() {} 37 virtual void write(OdfDocumentHandler *pHandler) const = 0; print() const38 virtual void print() const {} 39 }; 40 41 class TagElement : public DocumentElement 42 { 43 public: ~TagElement()44 ~TagElement() override {} TagElement(const librevenge::RVNGString & szTagName)45 explicit TagElement(const librevenge::RVNGString &szTagName) 46 : msTagName(szTagName) 47 { 48 } getTagName() const49 const librevenge::RVNGString &getTagName() const 50 { 51 return msTagName; 52 } 53 void print() const override; 54 private: 55 librevenge::RVNGString msTagName; 56 }; 57 58 class TagOpenElement final : public TagElement 59 { 60 public: TagOpenElement(const librevenge::RVNGString & szTagName)61 explicit TagOpenElement(const librevenge::RVNGString &szTagName) 62 : TagElement(szTagName) 63 , maAttrList() 64 { 65 } ~TagOpenElement()66 ~TagOpenElement() final {} 67 void addAttribute(const librevenge::RVNGString &szAttributeName, 68 const librevenge::RVNGString &sAttributeValue, bool forceString=true); 69 void write(OdfDocumentHandler *pHandler) const final; 70 void print() const final; 71 private: 72 librevenge::RVNGPropertyList maAttrList; 73 }; 74 75 class TagCloseElement final : public TagElement 76 { 77 public: TagCloseElement(const librevenge::RVNGString & szTagName)78 explicit TagCloseElement(const librevenge::RVNGString &szTagName) 79 : TagElement(szTagName) 80 { 81 } ~TagCloseElement()82 ~TagCloseElement() final {} 83 void write(OdfDocumentHandler *pHandler) const final; 84 }; 85 86 class CharDataElement final : public DocumentElement 87 { 88 public: CharDataElement(const librevenge::RVNGString & sData)89 explicit CharDataElement(const librevenge::RVNGString &sData) 90 : DocumentElement() 91 , msData(sData) 92 { 93 } ~CharDataElement()94 ~CharDataElement() final {} 95 void write(OdfDocumentHandler *pHandler) const final; 96 private: 97 librevenge::RVNGString msData; 98 }; 99 100 class TextElement final : public DocumentElement 101 { 102 public: TextElement(const librevenge::RVNGString & sTextBuf)103 explicit TextElement(const librevenge::RVNGString &sTextBuf) 104 : DocumentElement() 105 , msTextBuf(sTextBuf) 106 { 107 } ~TextElement()108 ~TextElement() final {} 109 void write(OdfDocumentHandler *pHandler) const final; 110 111 private: 112 librevenge::RVNGString msTextBuf; 113 }; 114 115 #endif 116 117 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */ 118