RagTime5Formula.hxx
Go to the documentation of this file.
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
73 class RagTime5Formula
74{
75 friend class RagTime5Document;
76
77 public:
78
80 explicit RagTime5Formula(RagTime5Document &doc);
82 virtual ~RagTime5Formula();
83
85 int version() const;
86
87 // interface with main parser
88
90 bool readFormulaClusters(RagTime5ClusterManager::Link const &link, int sheetId);
92 std::set<unsigned long> const &getFunctionsId() const;
93 protected:
94
95
96 //
97 // Intermediate level
98 //
99
101 bool readFunctionNames(RagTime5ClusterManager::Link const &link);
102
104 bool readFormulaZones(RagTime5ClusterManager::Cluster &cluster, RagTime5ClusterManager::Link const &link, int sheetId, bool isDefinition);
106 bool readFormulaDefinition(RagTime5Zone &zone, long endPos, int sheetId, int n, std::vector<MWAWCellContent::FormulaInstruction> &formula);
108 bool readFormulaPosition(RagTime5Zone &zone, long endPos, int n);
109
110 //
111 // low level
112 //
113
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;
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:
127 static std::string printType(unsigned long fileType)
128 {
129 return RagTime5StructManager::printType(fileType);
130 }
131
132 private:
133 RagTime5Formula(RagTime5Formula const &orig) = delete;
134 RagTime5Formula &operator=(RagTime5Formula const &orig) = delete;
135
136 protected:
137 //
138 // data
139 //
141 RagTime5Document &m_document;
142
144 std::shared_ptr<RagTime5StructManager> m_structManager;
146 MWAWParserStatePtr m_parserState;
147
149 std::shared_ptr<RagTime5FormulaInternal::State> m_state;
150};
151#endif
152// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
MWAWCell.hxx
Defines MWAWCell (cell content and format).
MWAWDebug.hxx
MWAWInputStream.hxx
MWAWPosition.hxx
RagTime5ClusterManager.hxx
RagTime5StructManager.hxx
RagTime5Document
the main class to read a RagTime v5 file
Definition RagTime5Document.hxx:77
RagTime5Formula::m_state
std::shared_ptr< RagTime5FormulaInternal::State > m_state
the state
Definition RagTime5Formula.hxx:149
RagTime5Formula::RagTime5Formula
RagTime5Formula(RagTime5Document &doc)
constructor
Definition RagTime5Formula.cxx:356
RagTime5Formula::RagTime5Formula
RagTime5Formula(RagTime5Formula const &orig)=delete
RagTime5Formula::m_document
RagTime5Document & m_document
the parser
Definition RagTime5Formula.hxx:141
RagTime5Formula::~RagTime5Formula
virtual ~RagTime5Formula()
destructor
Definition RagTime5Formula.cxx:364
RagTime5Formula::m_parserState
MWAWParserStatePtr m_parserState
the parser state
Definition RagTime5Formula.hxx:146
RagTime5Formula::m_structManager
std::shared_ptr< RagTime5StructManager > m_structManager
the structure manager
Definition RagTime5Formula.hxx:144
RagTime5Formula::readFormulaPosition
bool readFormulaPosition(RagTime5Zone &zone, long endPos, int n)
try to read a formula position
Definition RagTime5Formula.cxx:1246
RagTime5Formula::operator=
RagTime5Formula & operator=(RagTime5Formula const &orig)=delete
RagTime5Formula::readFormula
bool readFormula(MWAWInputStreamPtr &input, std::vector< MWAWCellContent::FormulaInstruction > &formula, long const(&limitPos)[5], std::vector< std::string > const &functions, std::vector< MWAWCellContent::FormulaInstruction > const &cells, libmwaw::DebugStream &f) const
try to read a formula
Definition RagTime5Formula.cxx:537
RagTime5Formula::readFormulaZones
bool readFormulaZones(RagTime5ClusterManager::Cluster &cluster, RagTime5ClusterManager::Link const &link, int sheetId, bool isDefinition)
try to read a list of formula definition
Definition RagTime5Formula.cxx:423
RagTime5Formula::RagTime5Document
friend class RagTime5Document
Definition RagTime5Formula.hxx:75
RagTime5Formula::printType
static std::string printType(unsigned long fileType)
debug: print a file type
Definition RagTime5Formula.hxx:127
RagTime5Formula::readFormulaClusters
bool readFormulaClusters(RagTime5ClusterManager::Link const &link, int sheetId)
try to read some formula cluster
Definition RagTime5Formula.cxx:386
RagTime5Formula::getFunctionsId
std::set< unsigned long > const & getFunctionsId() const
returns the set of function id in fields
Definition RagTime5Formula.cxx:373
RagTime5Formula::readFormula2
bool readFormula2(MWAWInputStreamPtr &input, long const(&limitPos)[5], std::vector< std::string > const &functions, std::vector< MWAWCellContent::FormulaInstruction > const &cells, libmwaw::DebugStream &f) const
try to read a formula (second zone)
Definition RagTime5Formula.cxx:874
RagTime5Formula::readFunctionNames
bool readFunctionNames(RagTime5ClusterManager::Link const &link)
try to read the functions name
Definition RagTime5Formula.cxx:378
RagTime5Formula::readFormulaDefinition
bool readFormulaDefinition(RagTime5Zone &zone, long endPos, int sheetId, int n, std::vector< MWAWCellContent::FormulaInstruction > &formula)
try to read a formula definition
Definition RagTime5Formula.cxx:1009
RagTime5Formula::version
int version() const
returns the file version
Definition RagTime5Formula.cxx:368
RagTime5StructManager
basic class used to store RagTime 5/6 structures
Definition RagTime5StructManager.hxx:175
RagTime5StructManager::printType
static std::string printType(unsigned long fileType)
debug: print a file type
Definition RagTime5StructManager.cxx:94
RagTime5Zone
main zone in a RagTime v5-v6 document
Definition RagTime5StructManager.hxx:51
libmwaw_internal.hxx
MWAWParserStatePtr
std::shared_ptr< MWAWParserState > MWAWParserStatePtr
a smart pointer of MWAWParserState
Definition libmwaw_internal.hxx:557
MWAWInputStreamPtr
std::shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition libmwaw_internal.hxx:551
RagTime5FormulaInternal
Internal: the structures of a RagTime5Formula.
Definition RagTime5Formula.cxx:64
libmwaw::DebugStream
std::stringstream DebugStream
a basic stream (if debug_with_files is not defined, does nothing)
Definition MWAWDebug.hxx:61
RagTime5ClusterManager::Cluster
the cluster data
Definition RagTime5ClusterManager.hxx:261
RagTime5ClusterManager::Link
a link to a small zone (or set of zones) in RagTime 5/6 documents
Definition RagTime5ClusterManager.hxx:113
RagTime5FormulaInternal::State
Internal: the state of a RagTime5Formula.
Definition RagTime5Formula.cxx:67