Coverage Report

Created: 2026-07-20 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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: */