IWORKFormula.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 libetonyek 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 IWORKFORMULA_H_INCLUDED
11 #define IWORKFORMULA_H_INCLUDED
12 
13 #include <memory>
14 #include <ostream>
15 #include <string>
16 #include <vector>
17 
18 #include <boost/optional.hpp>
19 
20 #include "IWORKTypes_fwd.h"
21 #include "libetonyek_utils.h"
22 
23 namespace libetonyek
24 {
25 
27 {
28  struct Impl;
29 
30 public:
31  struct Token;
32 
33  explicit IWORKFormula(const boost::optional<unsigned> &hc);
34 
35  bool parse(const std::string &formula);
36  bool parse(const std::vector<Token> &formula);
37 
38  void write(const boost::optional<unsigned> &hc, librevenge::RVNGPropertyListVector &formula, const IWORKTableNameMapPtr_t &tableNameMap) const;
39  const std::string str(const boost::optional<unsigned> &hc) const;
40 
41 public:
42  struct Coord
43  {
45  : m_coord(0)
46  , m_absolute(false)
47  {
48  }
49  int m_coord;
50  bool m_absolute;
51  };
52 
53  struct Address
54  {
56  : m_column()
57  , m_row()
58  , m_table()
59  {
60  }
61  boost::optional<Coord> m_column;
62  boost::optional<Coord> m_row;
63  boost::optional<std::string> m_table;
64  friend std::ostream &operator<<(std::ostream &s, Address const &ad);
65  };
66 
68  struct Token
69  {
70  enum Type
71  {
73  };
74  explicit Token(Type type)
75  : m_type(type)
76  , m_string()
77  , m_value(0)
78  , m_address()
79  {
80  }
81  explicit Token(double const &val)
82  : m_type(Double)
83  , m_string()
84  , m_value(val)
85  , m_address()
86  {
87  }
89  : m_type(type)
90  , m_string(name)
91  , m_value(0)
92  , m_address()
93  {
94  }
95  explicit Token(IWORKFormula::Address const &address)
96  : m_type(Cell)
97  , m_string()
98  , m_value()
99  , m_address(address)
100  {
101  }
102  friend std::ostream &operator<<(std::ostream &s, Token const &dt);
105  double m_value;
107  };
108 
109 private:
110  bool computeOffset(const boost::optional<unsigned> &hc, int &offsetColumn, int &offsetRow) const;
111  std::shared_ptr<Impl> m_impl;
112  boost::optional<unsigned> m_hc;
113 };
114 
115 } // namespace libetonyek
116 
117 #endif // IWORKFORMULA_H_INCLUDED
118 
119 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
m_table
KEY1TableElement::TableData & m_table
Definition: KEY1TableElement.cpp:157
libetonyek::IWORKFormula::parse
bool parse(const std::string &formula)
libetonyek::IWORKFormula::Coord::m_absolute
bool m_absolute
Definition: IWORKFormula.h:50
libetonyek::IWORKToken::double_
@ double_
Definition: IWORKToken.h:663
libetonyek::PrefixOp::m_op
char m_op
Definition: IWORKFormula.cpp:103
libetonyek
Definition: IWORKBezierElement.cpp:21
libetonyek::IWORKFormula::Token::Token
Token(double const &val)
Definition: IWORKFormula.h:81
libetonyek::IWORKToken::none
@ none
Definition: IWORKToken.h:674
libetonyek::IWORKToken::formula
@ formula
Definition: IWORKToken.h:228
libetonyek::PostfixOp::m_op
char m_op
Definition: IWORKFormula.cpp:128
libetonyek::IWORKFormula::Token::Double
@ Double
Definition: IWORKFormula.h:72
libetonyek::KEY1Token::table
@ table
Definition: KEY1Token.h:198
libetonyek::Function::Function
Function()
Definition: IWORKFormula.cpp:134
libetonyek::IWORKTableNameMapPtr_t
std::shared_ptr< IWORKTableNameMap_t > IWORKTableNameMapPtr_t
Definition: IWORKTypes_fwd.h:34
libetonyek::IWORKFormula::Address::m_row
boost::optional< Coord > m_row
Definition: IWORKFormula.h:62
m_formula
IWORKFormulaPtr_t m_formula
Definition: IWORKTabularModelElement.cpp:930
libetonyek::IWORKFormula::Address::m_column
boost::optional< Coord > m_column
Definition: IWORKFormula.h:61
libetonyek::IWORKFormula::Token::Operator
@ Operator
Definition: IWORKFormula.h:72
libetonyek::IWORKToken::type
@ type
Definition: IWORKToken.h:493
libetonyek::IWORKFormula::Token
small structure used by IWAParser to create formula
Definition: IWORKFormula.h:69
libetonyek::IWORKFormula::Token::m_type
Type m_type
Definition: IWORKFormula.h:103
libetonyek::TrueOrFalseFunc::m_name
string m_name
Definition: IWORKFormula.cpp:85
libetonyek::IWORKFormula::Token::Token
Token(IWORKFormula::Address const &address)
Definition: IWORKFormula.h:95
libetonyek::PrefixOp::m_expr
Expression m_expr
Definition: IWORKFormula.cpp:104
libetonyek::IWORKFormula::Address::Address
Address()
Definition: IWORKFormula.h:55
libetonyek::PExpr::PExpr
PExpr()
Definition: IWORKFormula.cpp:145
m_row
boost::optional< unsigned > m_row
Definition: IWORKFormulaElement.cpp:64
ETONYEK_DEBUG_MSG
#define ETONYEK_DEBUG_MSG(M)
Definition: libetonyek_utils.h:54
libetonyek::IWORKFormula::parse
bool parse(const std::vector< Token > &formula)
m_tableNameMap
const IWORKTableNameMapPtr_t m_tableNameMap
Definition: IWORKOutputElements.cpp:345
libetonyek::IWORKToken::row
@ row
Definition: IWORKToken.h:390
libetonyek::IWORKFormula::Token::m_value
double m_value
Definition: IWORKFormula.h:105
IWORKTypes_fwd.h
libetonyek::InfixOp::m_op
string m_op
Definition: IWORKFormula.cpp:116
libetonyek::IWORKFormula::Token::m_address
IWORKFormula::Address m_address
Definition: IWORKFormula.h:106
libetonyek::Expression
variant< double, string, TrueOrFalseFunc, IWORKFormula::Address, AddressRange, recursive_wrapper< PrefixOp >, recursive_wrapper< InfixOp >, recursive_wrapper< PostfixOp >, recursive_wrapper< Function >, recursive_wrapper< PExpr > > Expression
Definition: IWORKFormula.cpp:92
libetonyek::IWORKFormula::write
void write(const boost::optional< unsigned > &hc, librevenge::RVNGPropertyListVector &formula, const IWORKTableNameMapPtr_t &tableNameMap) const
libetonyek::TrueOrFalseFunc::TrueOrFalseFunc
TrueOrFalseFunc()
Definition: IWORKFormula.cpp:81
libetonyek::PrefixOp
Definition: IWORKFormula.cpp:97
libetonyek::InfixOp
Definition: IWORKFormula.cpp:108
libetonyek::Function::m_name
string m_name
Definition: IWORKFormula.cpp:139
libetonyek::IWORKFormula::str
const std::string str(const boost::optional< unsigned > &hc) const
libetonyek::IWORKFormula::Coord::Coord
Coord()
Definition: IWORKFormula.h:44
libetonyek::IWORKFormula::Token::Cell
@ Cell
Definition: IWORKFormula.h:72
libetonyek::IWORKFormula::IWORKFormula
IWORKFormula(const boost::optional< unsigned > &hc)
libetonyek::IWORKToken::number
@ number
Definition: IWORKToken.h:336
libetonyek::IWORKFormula::Token::Token
Token(std::string const &name, Type type)
Definition: IWORKFormula.h:88
libetonyek::IWORKFormula::computeOffset
bool computeOffset(const boost::optional< unsigned > &hc, int &offsetColumn, int &offsetRow) const
libetonyek::IWORKToken::val
@ val
Definition: IWORKToken.h:630
libetonyek::InfixOp::m_left
Expression m_left
Definition: IWORKFormula.cpp:117
libetonyek::IWORKToken::r
@ r
Definition: IWORKToken.h:380
libetonyek::PExpr
Definition: IWORKFormula.cpp:144
libetonyek::IWORKFormula::Address
Definition: IWORKFormula.h:54
libetonyek::InfixOp::m_right
Expression m_right
Definition: IWORKFormula.cpp:118
libetonyek::IWORKToken::string
@ string
Definition: IWORKToken.h:418
libetonyek::operator<<
std::ostream & operator<<(std::ostream &s, IWORKFormula::Address const &ad)
Definition: IWORKFormula.cpp:35
libetonyek_utils.h
libetonyek::IWORKToken::column
@ column
Definition: IWORKToken.h:156
libetonyek::IWORKFormula::Token::String
@ String
Definition: IWORKFormula.h:72
libetonyek::PrefixOp::PrefixOp
PrefixOp()
Definition: IWORKFormula.cpp:98
libetonyek::PExpr::m_expr
Expression m_expr
Definition: IWORKFormula.cpp:149
libetonyek::IWORKToken::_1
@ _1
Definition: IWORKToken.h:649
m_column
boost::optional< unsigned > m_column
Definition: IWORKTabularModelElement.cpp:59
libetonyek::PostfixOp::PostfixOp
PostfixOp()
Definition: IWORKFormula.cpp:123
libetonyek::PostfixOp::m_expr
Expression m_expr
Definition: IWORKFormula.cpp:129
libetonyek::IWORKFormula::Address::m_table
boost::optional< std::string > m_table
Definition: IWORKFormula.h:63
libetonyek::IWORKFormula::Coord
Definition: IWORKFormula.h:43
libetonyek::IWORKToken::s
@ s
Definition: IWORKToken.h:394
libetonyek::IWORKToken::end
@ end
Definition: IWORKToken.h:193
libetonyek::IWORKFormula::Coord::m_coord
int m_coord
Definition: IWORKFormula.h:49
libetonyek::IWORKFormula::Token::m_string
std::string m_string
Definition: IWORKFormula.h:104
libetonyek::TrueOrFalseFunc
Definition: IWORKFormula.cpp:80
libetonyek::InfixOp::InfixOp
InfixOp()
Definition: IWORKFormula.cpp:109
libetonyek::PostfixOp
Definition: IWORKFormula.cpp:122
libetonyek::IWORKFormula::m_impl
std::shared_ptr< Impl > m_impl
Definition: IWORKFormula.h:111
libetonyek::IWORKFormula::Token::operator<<
friend std::ostream & operator<<(std::ostream &s, Token const &dt)
Definition: IWORKFormula.cpp:51
libetonyek::IWORKFormula::Token::Token
Token(Type type)
Definition: IWORKFormula.h:74
libetonyek::get
const ValueT & get(const detail::IWAFieldImpl< TagV, ValueT, Reader > &field)
Definition: IWAField.h:190
libetonyek::IWORKFormula::Token::Function
@ Function
Definition: IWORKFormula.h:72
libetonyek::AddressRange
std::pair< IWORKFormula::Address, IWORKFormula::Address > AddressRange
Definition: IWORKFormula.cpp:77
libetonyek::IWORKFormula::Address::operator<<
friend std::ostream & operator<<(std::ostream &s, Address const &ad)
Definition: IWORKFormula.cpp:35
libetonyek::IWORKFormula::m_hc
boost::optional< unsigned > m_hc
Definition: IWORKFormula.h:112
IWORKFormula.h
libetonyek::IWORKFormula::Token::Type
Type
Definition: IWORKFormula.h:71
libetonyek::IWORKToken::name
@ name
Definition: IWORKToken.h:585
libetonyek::Function
Definition: IWORKFormula.cpp:133
libetonyek::IWORKToken::f
@ f
Definition: IWORKToken.h:201
libetonyek::Function::m_args
vector< Expression > m_args
Definition: IWORKFormula.cpp:140
libetonyek::IWORKFormula
Definition: IWORKFormula.h:27
m_name
boost::optional< std::string > m_name
Definition: KEY1Parser.cpp:1508
libetonyek::IWORKToken::hc
@ hc
Definition: IWORKToken.h:559

Generated for libetonyek by doxygen 1.8.20