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 <map>
14 #include <set>
15 #include <stdint.h>
16 
17 #include <librevenge/librevenge.h>
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:808
bool m_bigEndian
Definition: PMDParser.h:35
const PMDXForm & getXForm(const uint32_t xFormId) const
Definition: PMDParser.cpp:216
void parseTableOfContents(uint32_t offset, uint16_t length)
Definition: PMDParser.cpp:953
std::vector< PMDRecordContainer > RecordContainerList_t
Definition: PMDParser.h:28
void parseShapes(uint16_t seqNum, unsigned pageID)
Definition: PMDParser.cpp:658
void parseBitmap(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:609
PMDParser(const PMDParser &)
void parseHeader(uint32_t *tocOffset, uint16_t *tocLength)
Definition: PMDParser.cpp:830
librevenge::RVNGInputStream * m_input
Definition: PMDParser.h:31
Definition: PMDRecord.h:25
RecordContainerList_t m_recordsInOrder
Definition: PMDParser.h:36
void parsePolygon(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:498
RecordTypeMap_t m_records
Definition: PMDParser.h:34
void parseLine(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:272
void parseGlobalInfo(const PMDRecordContainer &container)
Definition: PMDParser.cpp:251
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:924
std::map< uint16_t, std::vector< unsigned > > RecordTypeMap_t
Definition: PMDParser.h:29
void parseFonts()
Definition: PMDParser.cpp:698
Definition: PMDParser.cpp:86
void parse()
Definition: PMDParser.cpp:963
PMDParser & operator=(const PMDParser &)
void readNextRecordFromTableOfContents(ToCState &state, bool subRecord, uint16_t subRecordType=0)
Definition: PMDParser.cpp:871
Definition: PMDParser.cpp:72
Definition: geometry.h:22
void parseTextBox(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:304
RecordIterator beginRecordsWithSeqNumber(uint16_t seqNum) const
Definition: PMDParser.cpp:996
unsigned long m_length
Definition: PMDParser.h:32
void parseRectangle(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:460
Builder class for PMD Documents.
Definition: PMDCollector.h:38
void parseXforms()
Definition: PMDParser.cpp:780
RecordIterator beginRecordsOfType(uint16_t recType) const
Definition: PMDParser.cpp:1001
std::map< uint32_t, PMDXForm > m_xFormMap
Definition: PMDParser.h:37
RecordIterator endRecords() const
Definition: PMDParser.cpp:1006
void parseColors()
Definition: PMDParser.cpp:731
void parseEllipse(const PMDRecordContainer &container, unsigned recordIndex, unsigned pageID)
Definition: PMDParser.cpp:570
Definition: geometry.h:36
Definition: PMDParser.h:26

Generated for libpagemaker by doxygen 1.8.13