Coverage Report

Created: 2026-06-13 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libmwaw/src/lib/RagTime5Formula.hxx
Line
Count
Source
1
/* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3
/* libmwaw
4
* Version: MPL 2.0 / LGPLv2+
5
*
6
* The contents of this file are subject to the Mozilla Public License Version
7
* 2.0 (the "License"); you may not use this file except in compliance with
8
* the License or as specified alternatively below. You may obtain a copy of
9
* the License at http://www.mozilla.org/MPL/
10
*
11
* Software distributed under the License is distributed on an "AS IS" basis,
12
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13
* for the specific language governing rights and limitations under the
14
* License.
15
*
16
* Major Contributor(s):
17
* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18
* Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19
* Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20
* Copyright (C) 2006, 2007 Andrew Ziem
21
* Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22
*
23
*
24
* All Rights Reserved.
25
*
26
* For minor contributions see the git repository.
27
*
28
* Alternatively, the contents of this file may be used under the terms of
29
* the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30
* in which case the provisions of the LGPLv2+ are applicable
31
* instead of those above.
32
*/
33
34
/*
35
 * Parser to RagTime 5-6 document ( formula part )
36
 *
37
 */
38
#ifndef RAGTIME5_FORMULA
39
#  define RAGTIME5_FORMULA
40
41
#include <set>
42
#include <string>
43
#include <map>
44
#include <vector>
45
46
#include <librevenge/librevenge.h>
47
48
#include "libmwaw_internal.hxx"
49
50
#include "MWAWCell.hxx"
51
#include "MWAWDebug.hxx"
52
#include "MWAWInputStream.hxx"
53
#include "MWAWPosition.hxx"
54
55
#include "RagTime5StructManager.hxx"
56
#include "RagTime5ClusterManager.hxx"
57
58
namespace RagTime5FormulaInternal
59
{
60
struct ClusterFormula;
61
struct State;
62
}
63
64
class RagTime5Document;
65
class RagTime5StructManager;
66
class RagTime5Zone;
67
68
/** \brief the main class to read the formula part of RagTime 56 file
69
 *
70
 *
71
 *
72
 */
73
class RagTime5Formula
74
{
75
  friend class RagTime5Document;
76
77
public:
78
79
  //! constructor
80
  explicit RagTime5Formula(RagTime5Document &doc);
81
  //! destructor
82
  virtual ~RagTime5Formula();
83
84
  /** returns the file version */
85
  int version() const;
86
87
  // interface with main parser
88
89
  //! try to read some formula cluster
90
  bool readFormulaClusters(RagTime5ClusterManager::Link const &link, int sheetId);
91
  //! returns the set of function id in fields
92
  std::set<unsigned long> const &getFunctionsId() const;
93
protected:
94
95
96
  //
97
  // Intermediate level
98
  //
99
100
  //! try to read the functions name
101
  bool readFunctionNames(RagTime5ClusterManager::Link const &link);
102
103
  //! try to read a list of formula definition
104
  bool readFormulaZones(RagTime5ClusterManager::Cluster &cluster, RagTime5ClusterManager::Link const &link, int sheetId, bool isDefinition);
105
  //! try to read a formula definition
106
  bool readFormulaDefinition(RagTime5Zone &zone, long endPos, int sheetId, int n, std::vector<MWAWCellContent::FormulaInstruction> &formula);
107
  //! try to read a formula position
108
  bool readFormulaPosition(RagTime5Zone &zone, long endPos, int n);
109
110
  //
111
  // low level
112
  //
113
114
  //! try to read a formula
115
  bool readFormula(MWAWInputStreamPtr &input, std::vector<MWAWCellContent::FormulaInstruction> &formula,
116
                   long const(&limitPos)[5], std::vector<std::string> const &functions, std::vector<MWAWCellContent::FormulaInstruction> const &cells, libmwaw::DebugStream &f) const;
117
  //! try to read a formula (second zone)
118
  bool readFormula2(MWAWInputStreamPtr &input, long const(&limitPos)[5], std::vector<std::string> const &functions, std::vector<MWAWCellContent::FormulaInstruction> const &cells, libmwaw::DebugStream &f) const;
119
120
121
  //
122
  // send data
123
  //
124
125
public:
126
  //! debug: print a file type
127
  static std::string printType(unsigned long fileType)
128
0
  {
129
0
    return RagTime5StructManager::printType(fileType);
130
0
  }
131
132
private:
133
  RagTime5Formula(RagTime5Formula const &orig) = delete;
134
  RagTime5Formula &operator=(RagTime5Formula const &orig) = delete;
135
136
protected:
137
  //
138
  // data
139
  //
140
  //! the parser
141
  RagTime5Document &m_document;
142
143
  //! the structure manager
144
  std::shared_ptr<RagTime5StructManager> m_structManager;
145
  //! the parser state
146
  MWAWParserStatePtr m_parserState;
147
148
  //! the state
149
  std::shared_ptr<RagTime5FormulaInternal::State> m_state;
150
};
151
#endif
152
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: