/src/libwps/src/lib/WKS4Spreadsheet.h
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ |
2 | | /* libwps |
3 | | * Version: MPL 2.0 / LGPLv2.1+ |
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 | | * Major Contributor(s): |
10 | | * Copyright (C) 2006, 2007 Andrew Ziem |
11 | | * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca) |
12 | | * Copyright (C) 2003 Marc Maurer (uwog@uwog.net) |
13 | | * |
14 | | * For minor contributions see the git repository. |
15 | | * |
16 | | * Alternatively, the contents of this file may be used under the terms |
17 | | * of the GNU Lesser General Public License Version 2.1 or later |
18 | | * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are |
19 | | * applicable instead of those above. |
20 | | */ |
21 | | |
22 | | #ifndef WKS4_SPREADSHEET_H |
23 | | #define WKS4_SPREADSHEET_H |
24 | | |
25 | | #include <ostream> |
26 | | #include <vector> |
27 | | |
28 | | #include <librevenge-stream/librevenge-stream.h> |
29 | | |
30 | | #include "libwps_internal.h" |
31 | | |
32 | | #include "WPSDebug.h" |
33 | | #include "WKSContentListener.h" |
34 | | |
35 | | namespace WKS4SpreadsheetInternal |
36 | | { |
37 | | class Cell; |
38 | | class SpreadSheet; |
39 | | struct State; |
40 | | } |
41 | | |
42 | | class WKS4Parser; |
43 | | |
44 | | /** |
45 | | * This class parses Microsoft Works spreadsheet file |
46 | | * |
47 | | */ |
48 | | class WKS4Spreadsheet |
49 | | { |
50 | | public: |
51 | | friend class WKS4Parser; |
52 | | |
53 | | //! constructor |
54 | | explicit WKS4Spreadsheet(WKS4Parser &parser); |
55 | | //! destructor |
56 | | ~WKS4Spreadsheet(); |
57 | | //! sets the listener |
58 | | void setListener(WKSContentListenerPtr &listen) |
59 | 11.9k | { |
60 | 11.9k | m_listener = listen; |
61 | 11.9k | } |
62 | | |
63 | | protected: |
64 | | //! return true if the pos is in the file, update the file size if need |
65 | | bool checkFilePosition(long pos); |
66 | | //! return the file version |
67 | | int version() const; |
68 | | /// reset the main input |
69 | | void resetInput(RVNGInputStreamPtr const &input); |
70 | | |
71 | | //! returns the number of spreadsheet |
72 | | int getNumSpreadsheets() const; |
73 | | //! send the sId'th spreadsheet |
74 | | void sendSpreadsheet(int sId); |
75 | | //! returns the name of the id's spreadsheet |
76 | | librevenge::RVNGString getSheetName(int id) const; |
77 | | |
78 | | //! send the cell data |
79 | | void sendCellContent(WKS4SpreadsheetInternal::Cell const &cell); |
80 | | |
81 | | //////////////////////// open/close ////////////////////////////// |
82 | | |
83 | | //! reads the report's header zone 17:54 |
84 | | bool readReportOpen(); |
85 | | //! reads the report's end zone 18:54 |
86 | | bool readReportClose(); |
87 | | |
88 | | //! reads the filter's header zone 10:54 |
89 | | bool readFilterOpen(); |
90 | | //! reads the filter's end zone 11:54 |
91 | | bool readFilterClose(); |
92 | | |
93 | | // |
94 | | // low level |
95 | | // |
96 | | //////////////////////// spread sheet ////////////////////////////// |
97 | | |
98 | | //! reads a cell content data |
99 | | bool readCell(); |
100 | | //! reads the result of a text formula |
101 | | bool readCellFormulaResult(); |
102 | | //! reads sheet size |
103 | | bool readSheetSize(); |
104 | | //! reads the column size ( in ??? ) |
105 | | bool readColumnSize(); |
106 | | //! reads the list of hidden columns zone ( unused ) |
107 | | bool readHiddenColumns(); |
108 | | |
109 | | //! reads a field property |
110 | | bool readMsWorksDOSFieldProperty(); |
111 | | //! reads actualCell properties |
112 | | bool readMsWorksDOSCellProperty(); |
113 | | //! reads the actual cell addendum properties ( contains at least the color) |
114 | | bool readMsWorksDOSCellExtraProperty(); |
115 | | //! reads a page break (in a dos file) |
116 | | bool readMsWorksDOSPageBreak(); |
117 | | |
118 | | //! reads the column size ( in ???) |
119 | | bool readMsWorksColumnSize(); |
120 | | //! reads the row size ( in ???) |
121 | | bool readMsWorksRowSize(); |
122 | | //! reads a page break |
123 | | bool readMsWorksPageBreak(); |
124 | | //! reads a style |
125 | | bool readMsWorksStyle(); |
126 | | |
127 | | /* reads a cell */ |
128 | | bool readCell(Vec2i actPos, WKSContentListener::FormulaInstruction &instr); |
129 | | /* reads a formula */ |
130 | | bool readFormula(long endPos, Vec2i const &pos, |
131 | | std::vector<WKSContentListener::FormulaInstruction> &formula, std::string &error); |
132 | | |
133 | | private: |
134 | | WKS4Spreadsheet(WKS4Spreadsheet const &orig) = delete; |
135 | | WKS4Spreadsheet &operator=(WKS4Spreadsheet const &orig) = delete; |
136 | | //! returns the debug file |
137 | | libwps::DebugFile &ascii() |
138 | 1.51M | { |
139 | 1.51M | return m_asciiFile; |
140 | 1.51M | } |
141 | | /** the input */ |
142 | | RVNGInputStreamPtr m_input; |
143 | | std::shared_ptr<WKSContentListener> m_listener; /** the listener (if set)*/ |
144 | | //! the main parser |
145 | | WKS4Parser &m_mainParser; |
146 | | //! the internal state |
147 | | std::shared_ptr<WKS4SpreadsheetInternal::State> m_state; |
148 | | //! the ascii file |
149 | | libwps::DebugFile &m_asciiFile; |
150 | | }; |
151 | | |
152 | | #endif /* WPS4_SPREADSHEET_H */ |
153 | | /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */ |