00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 00002 /* libvisio 00003 * Version: MPL 1.1 / GPLv2+ / LGPLv2+ 00004 * 00005 * The contents of this file are subject to the Mozilla Public License Version 00006 * 1.1 (the "License"); you may not use this file except in compliance with 00007 * the License or as specified alternatively below. You may obtain a copy of 00008 * the License at http://www.mozilla.org/MPL/ 00009 * 00010 * Software distributed under the License is distributed on an "AS IS" basis, 00011 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 00012 * for the specific language governing rights and limitations under the 00013 * License. 00014 * 00015 * Major Contributor(s): 00016 * Copyright (C) 2012 Fridrich Strba <fridrich.strba@bluewin.ch> 00017 * 00018 * 00019 * All Rights Reserved. 00020 * 00021 * For minor contributions see the git repository. 00022 * 00023 * Alternatively, the contents of this file may be used under the terms of 00024 * either the GNU General Public License Version 2 or later (the "GPLv2+"), or 00025 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"), 00026 * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable 00027 * instead of those above. 00028 */ 00029 00030 #ifndef __VSDXPARSER_H__ 00031 #define __VSDXPARSER_H__ 00032 00033 #include <libwpd-stream/libwpd-stream.h> 00034 #include <libwpg/libwpg.h> 00035 #include "VSDXMLParserBase.h" 00036 00037 namespace libvisio 00038 { 00039 00040 class VSDCollector; 00041 00042 class VSDXParser : public VSDXMLParserBase 00043 { 00044 using VSDXMLParserBase::readExtendedColourData; 00045 using VSDXMLParserBase::readDoubleData; 00046 using VSDXMLParserBase::readBoolData; 00047 using VSDXMLParserBase::readLongData; 00048 00049 public: 00050 explicit VSDXParser(WPXInputStream *input, libwpg::WPGPaintInterface *painter); 00051 virtual ~VSDXParser(); 00052 bool parseMain(); 00053 bool extractStencils(); 00054 00055 private: 00056 VSDXParser(); 00057 VSDXParser(const VSDXParser &); 00058 VSDXParser &operator=(const VSDXParser &); 00059 00060 // Helper functions 00061 00062 xmlChar *readStringData(xmlTextReaderPtr reader); 00063 00064 int getElementToken(xmlTextReaderPtr reader); 00065 int getElementDepth(xmlTextReaderPtr reader); 00066 00067 int skipSection(xmlTextReaderPtr reader); 00068 00069 // Functions parsing the Visio 2013 OPC document structure 00070 00071 bool parseDocument(WPXInputStream *input, const char *name); 00072 bool parseMasters(WPXInputStream *input, const char *name); 00073 bool parseMaster(WPXInputStream *input, const char *name); 00074 bool parsePages(WPXInputStream *input, const char *name); 00075 bool parsePage(WPXInputStream *input, const char *name); 00076 bool parseTheme(WPXInputStream *input, const char *name); 00077 void processXmlDocument(WPXInputStream *input, VSDXRelationships &rels); 00078 void processXmlNode(xmlTextReaderPtr reader); 00079 00080 // Functions reading the Visio 2013 OPC document content 00081 00082 void extractBinaryData(WPXInputStream *input, const char *name); 00083 00084 void readPageSheetProperties(xmlTextReaderPtr reader); 00085 00086 void readStyleProperties(xmlTextReaderPtr reader); 00087 00088 void readShapeProperties(xmlTextReaderPtr reader); 00089 00090 void getBinaryData(xmlTextReaderPtr reader); 00091 00092 void readParagraph(xmlTextReaderPtr reader); 00093 void readCharacter(xmlTextReaderPtr reader); 00094 void readFonts(xmlTextReaderPtr reader); 00095 00096 // Private data 00097 00098 WPXInputStream *m_input; 00099 libwpg::WPGPaintInterface *m_painter; 00100 int m_currentDepth; 00101 VSDXRelationships *m_rels; 00102 }; 00103 00104 } // namespace libvisio 00105 00106 #endif // __VSDXPARSER_H__ 00107 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */