1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libvisio 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 #ifndef __VDXPARSER_H__
11 #define __VDXPARSER_H__
12 
13 #include <librevenge/librevenge.h>
14 #include "VSDXMLParserBase.h"
15 
16 namespace libvisio
17 {
18 
19 class VSDCollector;
20 
21 class VDXParser : public VSDXMLParserBase
22 {
23   using VSDXMLParserBase::readExtendedColourData;
24   using VSDXMLParserBase::readDoubleData;
25   using VSDXMLParserBase::readBoolData;
26   using VSDXMLParserBase::readLongData;
27   using VSDXMLParserBase::readStringData;
28 
29 public:
30   explicit VDXParser(librevenge::RVNGInputStream *input, librevenge::RVNGDrawingInterface *painter);
31   ~VDXParser() override;
32   bool parseMain() override;
33   bool extractStencils() override;
34 
35 private:
36   VDXParser();
37   VDXParser(const VDXParser &);
38   VDXParser &operator=(const VDXParser &);
39 
40   // Helper functions
41 
42   xmlChar *readStringData(xmlTextReaderPtr reader) override;
43 
44   int getElementToken(xmlTextReaderPtr reader) override;
45   int getElementDepth(xmlTextReaderPtr reader) override;
46 
47   // Functions to read the DatadiagramML document structure
48 
49   bool processXmlDocument(librevenge::RVNGInputStream *input);
50   void processXmlNode(xmlTextReaderPtr reader);
51 
52   // Functions reading the DiagramML document content
53 
54   void readLine(xmlTextReaderPtr reader);
55   void readFillAndShadow(xmlTextReaderPtr reader);
56   void readXFormData(xmlTextReaderPtr reader);
57   void readMisc(xmlTextReaderPtr reader);
58   void readTxtXForm(xmlTextReaderPtr reader);
59   void readXForm1D(xmlTextReaderPtr reader);
60   void readPageProps(xmlTextReaderPtr reader);
61   void readFonts(xmlTextReaderPtr reader);
62   void readTextBlock(xmlTextReaderPtr reader);
63   void readForeignInfo(xmlTextReaderPtr reader);
64   void readLayerMem(xmlTextReaderPtr reader);
65   void readTabs(xmlTextReaderPtr reader);
66   void readTab(xmlTextReaderPtr reader);
67 
68   void getBinaryData(xmlTextReaderPtr reader) override;
69 
70   // Private data
71 
72   librevenge::RVNGInputStream *m_input;
73   librevenge::RVNGDrawingInterface *m_painter;
74 };
75 
76 } // namespace libvisio
77 
78 #endif // __VDXPARSER_H__
79 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
80