1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */ 2 3 /* libstaroffice 4 * Version: MPL 2.0 / LGPLv2+ 5 * 6 * The contents of this file are subject to the Mozilla Public License Version 7 * 2.0 (the "License"); you may not use this file except in compliance with 8 * the License or as specified alternatively below. You may obtain a copy of 9 * the License at http://www.mozilla.org/MPL/ 10 * 11 * Software distributed under the License is distributed on an "AS IS" basis, 12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 13 * for the specific language governing rights and limitations under the 14 * License. 15 * 16 * Major Contributor(s): 17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com) 18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net) 19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch) 20 * Copyright (C) 2006, 2007 Andrew Ziem 21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr) 22 * 23 * 24 * All Rights Reserved. 25 * 26 * For minor contributions see the git repository. 27 * 28 * Alternatively, the contents of this file may be used under the terms of 29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"), 30 * in which case the provisions of the LGPLv2+ are applicable 31 * instead of those above. 32 */ 33 34 /* 35 * FieldManager to read/parse SW StarOffice field 36 * 37 */ 38 #ifndef SW_FIELDMANAGER 39 # define SW_FIELDMANAGER 40 41 #include <vector> 42 43 #include "STOFFDebug.hxx" 44 #include "STOFFEntry.hxx" 45 #include "STOFFInputStream.hxx" 46 47 class StarState; 48 49 namespace SWFieldManagerInternal 50 { 51 //////////////////////////////////////// 52 //! Internal: a field 53 struct Field { 54 //! constructor FieldSWFieldManagerInternal::Field55 Field() 56 : m_type(-1) 57 , m_subType(-1) 58 , m_format(-1) 59 , m_name("") 60 , m_content("") 61 , m_textValue("") 62 , m_doubleValue(0) 63 , m_level(0) 64 { 65 } 66 //! destructor 67 virtual ~Field(); 68 //! operator<< operator <<(std::ostream & o,Field const & field)69 friend std::ostream &operator<<(std::ostream &o, Field const &field) 70 { 71 field.print(o); 72 return o; 73 } 74 //! add to send the zone data 75 virtual bool send(STOFFListenerPtr &listener, StarState &state) const; 76 //! print a field 77 virtual void print(std::ostream &o) const; 78 //! the field type 79 int m_type; 80 //! the subtype 81 int m_subType; 82 //! the field format 83 int m_format; 84 //! the name 85 librevenge::RVNGString m_name; 86 //! the content 87 librevenge::RVNGString m_content; 88 //! the value text 89 librevenge::RVNGString m_textValue; 90 //! double 91 double m_doubleValue; 92 //! the chapter level 93 int m_level; 94 protected: 95 //! copy constructor 96 Field(const Field &) = default; 97 }; 98 99 struct State; 100 } 101 102 class StarZone; 103 104 /** \brief the main class to read/.. a StarOffice sdw field 105 * 106 * 107 * 108 */ 109 class SWFieldManager 110 { 111 public: 112 //! constructor 113 SWFieldManager(); 114 //! destructor 115 virtual ~SWFieldManager(); 116 117 118 //! try to read a field type 119 std::shared_ptr<SWFieldManagerInternal::Field> readField(StarZone &zone, unsigned char cKind='_'); 120 //! try to read a persist field type 121 std::shared_ptr<SWFieldManagerInternal::Field> readPersistField(StarZone &zone, long lastPos); 122 123 // 124 // data 125 // 126 private: 127 //! the state 128 std::shared_ptr<SWFieldManagerInternal::State> m_state; 129 }; 130 #endif 131 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: 132