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  typedef std::vector<PMDRecordContainer> RecordContainerList_t;
29  typedef std::map<uint16_t, std::vector<unsigned> > RecordTypeMap_t;
30 
31  librevenge::RVNGInputStream *m_input;
32  unsigned long m_length;
34  RecordTypeMap_t m_records;
36  RecordContainerList_t m_recordsInOrder;
37  std::map<uint32_t, PMDXForm> m_xFormMap;
38 
39  struct ToCState;
40  class RecordIterator;
41 
42  /* Private functions. */
43  void parseGlobalInfo(const PMDRecordContainer &container);
44  void parseFonts();
45  void parseColors();
46  void parsePages(const PMDRecordContainer &container);
47  void parseShapes(uint16_t seqNum, unsigned pageID);
48  void parseLine(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
49  void parseTextBox(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
50  void parseRectangle(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
51  void parsePolygon(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
52  void parseEllipse(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
53  void parseBitmap(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID);
54  void parseHeader(uint32_t *tocOffset, uint16_t *tocLength);
55  void readNextRecordFromTableOfContents(ToCState &state, bool subRecord, uint16_t subRecordType = 0);
56  void readTableOfContents(ToCState &state, uint32_t offset, unsigned records, bool subRecords, uint16_t subRecordType = 0);
57  void parseTableOfContents(uint32_t offset, uint16_t length);
58  void parseXforms();
59  const PMDXForm &getXForm(const uint32_t xFormId) const;
60 
61  RecordIterator beginRecordsWithSeqNumber(uint16_t seqNum) const;
62  RecordIterator beginRecordsOfType(uint16_t recType) const;
63  RecordIterator endRecords() const;
64 
65  /* Prevent copy and assignment */
66  PMDParser &operator=(const PMDParser &);
67  PMDParser(const PMDParser &);
68 public:
69  PMDParser(librevenge::RVNGInputStream *, PMDCollector *);
70  void parse();
71 };
72 
73 }
74 
75 #endif /* __PMDPARSER_H__ */
76 
77 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
void parsePages(const PMDRecordContainer &container)
Definition: PMDParser.cpp:757
bool m_bigEndian
Definition: PMDParser.h:35
void parseTableOfContents(uint32_t offset, uint16_t length)
Definition: PMDParser.cpp:901
std::vector< PMDRecordContainer > RecordContainerList_t
Definition: PMDParser.h:28
void parseShapes(uint16_t seqNum, unsigned pageID)
Definition: PMDParser.cpp:607
const PMDXForm & getXForm(const uint32_t xFormId) const
Definition: PMDParser.cpp:192
void parseBitmap(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:558
PMDParser(const PMDParser &)
void parseHeader(uint32_t *tocOffset, uint16_t *tocLength)
Definition: PMDParser.cpp:778
librevenge::RVNGInputStream * m_input
Definition: PMDParser.h:31
Definition: PMDRecord.h:23
RecordContainerList_t m_recordsInOrder
Definition: PMDParser.h:36
RecordIterator beginRecordsOfType(uint16_t recType) const
Definition: PMDParser.cpp:951
void parsePolygon(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:447
RecordTypeMap_t m_records
Definition: PMDParser.h:34
void parseLine(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:244
void parseGlobalInfo(const PMDRecordContainer &container)
Definition: PMDParser.cpp:227
RecordIterator endRecords() const
Definition: PMDParser.cpp:956
PMDCollector * m_collector
Definition: PMDParser.h:33
void readTableOfContents(ToCState &state, uint32_t offset, unsigned records, bool subRecords, uint16_t subRecordType=0)
Definition: PMDParser.cpp:872
std::map< uint16_t, std::vector< unsigned > > RecordTypeMap_t
Definition: PMDParser.h:29
void parseFonts()
Definition: PMDParser.cpp:647
RecordIterator beginRecordsWithSeqNumber(uint16_t seqNum) const
Definition: PMDParser.cpp:946
Definition: PMDParser.cpp:47
void parse()
Definition: PMDParser.cpp:911
PMDParser & operator=(const PMDParser &)
void readNextRecordFromTableOfContents(ToCState &state, bool subRecord, uint16_t subRecordType=0)
Definition: PMDParser.cpp:819
Definition: PMDParser.cpp:33
Definition: geometry.h:20
void parseTextBox(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:275
unsigned long m_length
Definition: PMDParser.h:32
void parseRectangle(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:409
Builder class for PMD Documents.
Definition: PMDCollector.h:40
void parseXforms()
Definition: PMDParser.cpp:729
std::map< uint32_t, PMDXForm > m_xFormMap
Definition: PMDParser.h:37
void parseColors()
Definition: PMDParser.cpp:680
void parseEllipse(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:519
Definition: geometry.h:34
Definition: PMDParser.h:26

Generated for libpagemaker by doxygen 1.8.11