PMDParser.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3  * This file is part of the libpagemaker 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 __PMDPARSER_H__
11 #define __PMDPARSER_H__
12 
13 #include <librevenge/librevenge.h>
14 
15 #include <stdint.h>
16 #include <map>
17 #include <set>
18 
19 #include "PMDRecord.h"
20 #include "geometry.h"
21 
22 namespace libpagemaker
23 {
24 
25 class PMDCollector;
26 class PMDParser
27 {
28  librevenge::RVNGInputStream *m_input;
29  unsigned long m_length;
31  std::map<uint16_t, std::vector<unsigned> > m_records;
33  std::vector<PMDRecordContainer> m_recordsInOrder;
34  std::map<uint32_t, PMDXForm> m_xFormMap;
35 
36  /* Private functions. */
37  void parseGlobalInfo(const PMDRecordContainer &container);
38  void parseFonts();
39  void parseColors();
40  void parsePages(const PMDRecordContainer &container);
41  void parseShapes(uint16_t seqNum, unsigned pageID);
42  void parseLine(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
43  void parseTextBox(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
44  void parseRectangle(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
45  void parsePolygon(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
46  void parseEllipse(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
47  void parseBitmap(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
48  void parseHeader(uint32_t *tocOffset, uint16_t *tocLength);
49  unsigned readNextRecordFromTableOfContents(std::set<unsigned long> &tocOffsets, unsigned &seqNum);
50  void parseTableOfContents(uint32_t offset, uint16_t length);
51  std::vector<PMDRecordContainer> getRecordsBySeqNum(const uint16_t seqNum);
52  std::vector<PMDRecordContainer> getRecordsByRecType(const uint16_t recType);
53  const PMDRecordContainer &getSingleRecordBySeqNum(const uint16_t seqNum) const;
54  void parseXforms();
55  const PMDXForm &getXForm(const uint32_t xFormId) const;
56 
57  /* Prevent copy and assignment */
58  PMDParser &operator=(const PMDParser &);
59  PMDParser(const PMDParser &);
60 public:
61  PMDParser(librevenge::RVNGInputStream *, PMDCollector *);
62  void parse();
63 };
64 
65 }
66 
67 #endif /* __PMDPARSER_H__ */
68 
69 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
void parsePages(const PMDRecordContainer &container)
Definition: PMDParser.cpp:652
bool m_bigEndian
Definition: PMDParser.h:32
void parseTableOfContents(uint32_t offset, uint16_t length)
Definition: PMDParser.cpp:779
void parseShapes(uint16_t seqNum, unsigned pageID)
Definition: PMDParser.cpp:497
const PMDXForm & getXForm(const uint32_t xFormId) const
Definition: PMDParser.cpp:87
void parseBitmap(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:444
PMDParser(const PMDParser &)
void parseHeader(uint32_t *tocOffset, uint16_t *tocLength)
Definition: PMDParser.cpp:673
librevenge::RVNGInputStream * m_input
Definition: PMDParser.h:28
std::vector< PMDRecordContainer > getRecordsByRecType(const uint16_t recType)
Definition: PMDParser.cpp:54
Definition: PMDRecord.h:23
void parsePolygon(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:336
void parseLine(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:139
void parseGlobalInfo(const PMDRecordContainer &container)
Definition: PMDParser.cpp:122
PMDCollector * m_collector
Definition: PMDParser.h:30
unsigned readNextRecordFromTableOfContents(std::set< unsigned long > &tocOffsets, unsigned &seqNum)
Definition: PMDParser.cpp:714
void parseFonts()
Definition: PMDParser.cpp:540
std::vector< PMDRecordContainer > getRecordsBySeqNum(const uint16_t seqNum)
Definition: PMDParser.cpp:36
void parse()
Definition: PMDParser.cpp:802
PMDParser & operator=(const PMDParser &)
std::map< uint16_t, std::vector< unsigned > > m_records
Definition: PMDParser.h:31
Definition: geometry.h:20
void parseTextBox(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:170
unsigned long m_length
Definition: PMDParser.h:29
void parseRectangle(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:298
Builder class for PMD Documents.
Definition: PMDCollector.h:40
void parseXforms()
Definition: PMDParser.cpp:623
std::vector< PMDRecordContainer > m_recordsInOrder
Definition: PMDParser.h:33
std::map< uint32_t, PMDXForm > m_xFormMap
Definition: PMDParser.h:34
const PMDRecordContainer & getSingleRecordBySeqNum(const uint16_t seqNum) const
Definition: PMDParser.cpp:71
void parseColors()
Definition: PMDParser.cpp:573
void parseEllipse(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:405
Definition: geometry.h:34
Definition: PMDParser.h:26

Generated for libpagemaker by doxygen 1.8.10