1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */ 2 3 /* libmwaw 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 #ifndef BEAGLE_WKS_PARSER 35 # define BEAGLE_WKS_PARSER 36 37 #include <string> 38 #include <vector> 39 40 #include <librevenge/librevenge.h> 41 42 #include "MWAWDebug.hxx" 43 #include "MWAWGraphicStyle.hxx" 44 #include "MWAWInputStream.hxx" 45 46 #include "MWAWParser.hxx" 47 48 #include "BeagleWksStructManager.hxx" 49 50 namespace BeagleWksParserInternal 51 { 52 struct State; 53 } 54 55 class BeagleWksText; 56 57 /** \brief the main class to read a BeagleWorks file 58 */ 59 class BeagleWksParser final : public MWAWTextParser 60 { 61 friend class BeagleWksText; 62 public: 63 //! constructor 64 BeagleWksParser(MWAWInputStreamPtr const &input, MWAWRSRCParserPtr const &rsrcParser, MWAWHeader *header); 65 //! destructor 66 ~BeagleWksParser() final; 67 68 //! checks if the document header is correct (or not) 69 bool checkHeader(MWAWHeader *header, bool strict=false) final; 70 71 // the main parse function 72 void parse(librevenge::RVNGTextInterface *documentInterface) final; 73 74 protected: 75 //! inits all internal variables 76 void init(); 77 78 //! creates the listener which will be associated to the document 79 void createDocument(librevenge::RVNGTextInterface *documentInterface); 80 81 //! returns the page left top point ( in inches) 82 MWAWVec2f getPageLeftTop() const; 83 //! adds a new page 84 void newPage(int number); 85 86 // interface with the text parser 87 88 //! try to insert the pId picture (as char) 89 bool sendFrame(int pId); 90 91 protected: 92 //! finds the different objects zones 93 bool createZones(); 94 95 //! read the resource fork zone 96 bool readRSRCZones(); 97 98 //! try to send the page graphic 99 bool sendPageFrames(); 100 101 //! try to send a frame 102 bool sendFrame(BeagleWksStructManager::Frame const &frame); 103 104 //! try to send a picture 105 bool sendPicture(int pId, MWAWPosition const &pos, 106 MWAWGraphicStyle const &style=MWAWGraphicStyle::emptyStyle()); 107 // 108 // low level 109 // 110 111 // data fork 112 113 //! read the print info zone 114 bool readPrintInfo(); 115 //! read the last zone 116 bool readLastZone(); 117 118 //! return the input input 119 MWAWInputStreamPtr rsrcInput(); 120 121 //! a DebugFile used to write what we recognize when we parse the document in rsrc 122 libmwaw::DebugFile &rsrcAscii(); 123 124 // 125 // data 126 // 127 128 //! the state 129 std::shared_ptr<BeagleWksParserInternal::State> m_state; 130 131 //! the structure manager 132 std::shared_ptr<BeagleWksStructManager> m_structureManager; 133 //! the text parser 134 std::shared_ptr<BeagleWksText> m_textParser; 135 }; 136 #endif 137 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: 138