Files
libreoffice/sw/inc/calc.hxx

237 lines
7.8 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
re-base on ALv2 code. Includes: Patches contributed by Oliver-Rainer Wittmann sw34bf06: #i117783# - Writer's implementation of XPagePrintable - apply print settings to new printing routines http://svn.apache.org/viewvc?view=revision&revision=1172115 sw34bf06: #o12311627# use <rtl_random> methods to create unique ids for list styles and list ids http://svn.apache.org/viewvc?view=revision&revision=1172112 sw34bf06 #i114725#,#i115828# - method <SwDoc::ClearDoc()> - clear list structures completely http://svn.apache.org/viewvc?view=revision&revision=1172122 i#118572 - remove ui string and help content regarding usage of Java Mail in Writer's Mail Merge as Java Mail is not used. http://svn.apache.org/viewvc?view=revision&revision=1197035 Patches contributed by Mathias Bauer cws mba34issues01: #i117718#: provide filter name in case storage of medium does not allow to detect one http://svn.apache.org/viewvc?view=revision&revision=1172350 cws mba34issues01: #i117721#: directly provide parameters retrieved from SfxMedium http://svn.apache.org/viewvc?view=revision&revision=1172353 gnumake4 work variously http://svn.apache.org/viewvc?view=revision&revision=1394707 http://svn.apache.org/viewvc?view=revision&revision=1394326 http://svn.apache.org/viewvc?view=revision&revision=1396797 http://svn.apache.org/viewvc?view=revision&revision=1397315 cws mba34issues01: #i117723#: convert assertion into trace http://svn.apache.org/viewvc?view=revision&revision=1172355 cws mba34issues01: #i117699#: keep layout alive until swdoc dies http://svn.apache.org/viewvc?view=revision&revision=1172362 cws mba34issues01: #i117943#: missing color attributes in RTF clipboard http://svn.apache.org/viewvc?view=revision&revision=1172363 Patch contributed by Henning Brinkmann imported patch i#103878 http://svn.apache.org/viewvc?view=revision&revision=1172109 Patches contributed by Michael Stahl sw34bf06: #i117955#: WW8 export: disable storing of section breaks in endnotes http://svn.apache.org/viewvc?view=revision&revision=1172119 Patch contributed by imacat Fixed the Asian language work count. http://svn.apache.org/viewvc?view=revision&revision=1241345 Patch contributed by Pedro Giffuni i#20878 - Add comment with BZ issue for reference. http://svn.apache.org/viewvc?view=revision&revision=1244517 Patch contributed by Andre Fischer Do not add targets for junit tests when junit is disabled. http://svn.apache.org/viewvc?view=revision&revision=1241508 add writerperfect dependency.
2011-03-31 10:05:04 +02:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef SW_CALC_HXX
#define SW_CALC_HXX
#include <vector>
2000-09-18 16:15:01 +00:00
#include <tools/string.hxx>
#include <unotools/syslocale.hxx>
2000-09-18 16:15:01 +00:00
#include <basic/sbxvar.hxx>
#include "swdllapi.h"
2000-09-18 16:15:01 +00:00
class CharClass;
2000-11-20 08:16:31 +00:00
class LocaleDataWrapper;
2000-09-18 16:15:01 +00:00
class SwFieldType;
class SwDoc;
class SwUserFieldType;
2000-09-18 16:15:01 +00:00
#define TBLSZ 47 // should be a prime, because of hash table
2000-09-18 16:15:01 +00:00
const sal_Unicode cListDelim = '|';
/******************************************************************************
* Calculate Operations
******************************************************************************/
enum SwCalcOper
{
CALC_NAME, CALC_NUMBER, CALC_ENDCALC,
CALC_PLUS='+', CALC_MINUS='-', CALC_MUL='*',
CALC_DIV='/', CALC_PRINT=';', CALC_ASSIGN='=',
CALC_LP='(', CALC_RP=')', CALC_PHD='%',
CALC_POW='^',
CALC_LISTOP = cListDelim,
CALC_NOT=256, CALC_AND=257, CALC_OR=258,
CALC_XOR=259, CALC_EQ=260, CALC_NEQ=261,
CALC_LEQ=262, CALC_GEQ=263, CALC_LES=264,
CALC_GRE=265, CALC_SUM=266, CALC_MEAN=267,
CALC_SQRT=268, CALC_MIN=269, CALC_MIN_IN=270,
CALC_MAX=271, CALC_MAX_IN=272, CALC_SIN=273,
CALC_COS=274, CALC_TAN=275, CALC_ASIN=276,
CALC_ACOS=278, CALC_ATAN=279, CALC_TDIF=280,
CALC_ROUND=281, CALC_DATE=282, CALC_MONTH=283,
CALC_DAY=284
2000-09-18 16:15:01 +00:00
};
//-- Calculate Operations Strings -----------------------------------------
2010-12-06 10:36:22 +00:00
extern const sal_Char sCalc_Add[];
extern const sal_Char sCalc_Sub[];
extern const sal_Char sCalc_Mul[];
extern const sal_Char sCalc_Div[];
extern const sal_Char sCalc_Phd[];
extern const sal_Char sCalc_Sqrt[];
extern const sal_Char sCalc_Pow[];
extern const sal_Char sCalc_Or[];
extern const sal_Char sCalc_Xor[];
extern const sal_Char sCalc_And[];
extern const sal_Char sCalc_Not[];
extern const sal_Char sCalc_Eq[];
extern const sal_Char sCalc_Neq[];
extern const sal_Char sCalc_Leq[];
extern const sal_Char sCalc_Geq[];
extern const sal_Char sCalc_L[];
extern const sal_Char sCalc_G[];
extern const sal_Char sCalc_Sum[];
extern const sal_Char sCalc_Mean[];
extern const sal_Char sCalc_Min[];
extern const sal_Char sCalc_Max[];
extern const sal_Char sCalc_Sin[];
extern const sal_Char sCalc_Cos[];
extern const sal_Char sCalc_Tan[];
extern const sal_Char sCalc_Asin[];
extern const sal_Char sCalc_Acos[];
extern const sal_Char sCalc_Atan[];
extern const sal_Char sCalc_Tdif[];
extern const sal_Char sCalc_Round[];
extern const sal_Char sCalc_Date[];
2000-09-18 16:15:01 +00:00
/******************************************************************************
* Calculate ErrorCodes
******************************************************************************/
enum SwCalcError
{
CALC_NOERR=0,
CALC_SYNTAX, // syntax error
CALC_ZERODIV, // division by zero
CALC_BRACK, // faulty brackets
CALC_POWERR, // overflow in power function
CALC_VARNFND, // variable was not found
CALC_OVERFLOW, // overflow
CALC_WRONGTIME // wrong time format
2000-09-18 16:15:01 +00:00
};
class SwSbxValue : public SbxValue
{
bool bVoid;
2000-09-18 16:15:01 +00:00
public:
// always default to a number. otherwise it will become a SbxEMPTY
SwSbxValue( long n = 0 ) : bVoid(false) { PutLong( n ); }
SwSbxValue( const double& rD ) : bVoid(false) { PutDouble( rD ); }
SwSbxValue( const SwSbxValue& rVal ) :
SvRefBase( rVal ),
SbxValue( rVal ),
bVoid(rVal.bVoid)
{}
2000-09-18 16:15:01 +00:00
virtual ~SwSbxValue();
sal_Bool GetBool() const;
2000-09-18 16:15:01 +00:00
double GetDouble() const;
SwSbxValue& MakeDouble();
bool IsVoidValue() {return bVoid;}
void SetVoidValue(bool bSet) {bVoid = bSet;}
2000-09-18 16:15:01 +00:00
};
/******************************************************************************
* Calculate HashTables for VarTable und Operations
2000-09-18 16:15:01 +00:00
******************************************************************************/
struct SwHash
{
SwHash( const OUString& rStr );
2000-09-18 16:15:01 +00:00
virtual ~SwHash();
OUString aStr;
2000-09-18 16:15:01 +00:00
SwHash *pNext;
};
struct SwCalcExp : public SwHash
{
SwSbxValue nValue;
const SwFieldType* pFldType;
SwCalcExp( const OUString& rStr, const SwSbxValue& rVal,
2000-09-18 16:15:01 +00:00
const SwFieldType* pFldType = 0 );
};
SwHash* Find( const OUString& rSrch, SwHash** ppTable,
sal_uInt16 nTblSize, sal_uInt16* pPos = 0 );
2000-09-18 16:15:01 +00:00
void DeleteHashTable( SwHash** ppTable, sal_uInt16 nTblSize );
2000-09-18 16:15:01 +00:00
// if _CalcOp != 0, this is a valid operator
2000-09-18 16:15:01 +00:00
struct _CalcOp;
_CalcOp* FindOperator( const OUString& rSearch );
2000-09-18 16:15:01 +00:00
/******************************************************************************
* class SwCalc
******************************************************************************/
class SwCalc
{
SwHash* VarTable[ TBLSZ ];
String aVarName, sCurrSym;
OUString sCommand;
std::vector<const SwUserFieldType*> aRekurStk;
2000-09-18 16:15:01 +00:00
SwSbxValue nLastLeft;
SwSbxValue nNumberValue;
SwCalcExp aErrExpr;
sal_Int32 nCommandPos;
2000-09-18 16:15:01 +00:00
SwDoc& rDoc;
SvtSysLocale m_aSysLocale;
CWS-TOOLING: integrate CWS oj18 2009-08-21 15:08:49 +0200 oj r275263 : wrong check 2009-08-21 08:56:01 +0200 oj r275215 : missing not 2009-08-20 07:27:13 +0200 oj r275164 : use new method from global 2009-08-19 10:22:35 +0200 oj r275138 : call GetLocale instead of pLocale 2009-08-18 10:39:32 +0200 oj r275082 : missing header include 2009-08-18 10:09:44 +0200 oj r275081 : new methods at global 2009-08-18 10:09:00 +0200 oj r275080 : unused var 2009-08-18 08:59:04 +0200 oj r275078 : move files from classes to xml 2009-08-17 14:58:16 +0200 oj r275056 : CWS-TOOLING: rebase CWS oj18 to trunk@275001 (milestone: DEV300:m55) 2009-08-17 13:29:44 +0200 oj r275047 : compile error 2009-08-17 13:27:47 +0200 oj r275045 : compile error 2009-08-17 11:44:54 +0200 oj r275040 : add dep 2009-07-22 14:26:05 +0200 oj r274240 : move unused services into fwl 2009-07-22 14:25:35 +0200 oj r274239 : move unused services into fwl 2009-07-22 13:47:45 +0200 oj r274233 : remove some unused code 2009-07-22 09:06:20 +0200 oj r274219 : export dbtoolsclient dbcharsethelper for sc 2009-07-22 08:48:58 +0200 oj r274218 : create NumberFormatter on demand 2009-07-22 08:39:23 +0200 oj r274217 : change char to sal_Char 2009-07-22 07:33:34 +0200 oj r274214 : export dbtoolsclient dbcharsethelper for sc 2009-07-22 07:30:04 +0200 oj r274213 : late init of numberformatter and breakiterator 2009-07-22 07:28:55 +0200 oj r274212 : export dbtoolsclient dbcharsethelper for sc 2009-07-21 13:43:28 +0200 oj r274196 : check if quick start is enbaled 2009-07-21 13:40:09 +0200 oj r274195 : check config entry for UiEventsLogger 2009-07-21 13:37:40 +0200 oj r274194 : code refactoring, remove of duplicate code and some late inits and removale of not needed files 2009-07-21 13:35:38 +0200 oj r274193 : code refactoring, remove of duplicate code and some late inits and removale of not needed files 2009-07-21 13:33:41 +0200 oj r274192 : doc meta data will now be created on demand 2009-07-21 13:13:40 +0200 oj r274187 : load ldap functions on demand 2009-07-21 13:03:17 +0200 oj r274183 : late init of TransliterationImpl 2009-07-21 12:36:10 +0200 oj r274180 : late init of charClass
2009-09-08 04:57:32 +00:00
const LocaleDataWrapper* pLclData;
2000-09-18 16:15:01 +00:00
CharClass* pCharClass;
sal_uInt16 nListPor;
2000-09-18 16:15:01 +00:00
SwCalcOper eCurrOper;
SwCalcOper eCurrListOper;
SwCalcError eError;
SwCalcOper GetToken();
SwSbxValue Expr();
SwSbxValue Term();
SwSbxValue Prim();
sal_Bool ParseTime( sal_uInt16*, sal_uInt16*, sal_uInt16* );
2000-09-18 16:15:01 +00:00
String GetColumnName( const String& rName );
String GetDBName( const String& rName );
// dont call this methods
SwCalc( const SwCalc& );
SwCalc& operator=( const SwCalc& );
public:
SwCalc( SwDoc& rD );
~SwCalc();
SwSbxValue Calculate( const String &rStr );
String GetStrResult( const SwSbxValue& rValue, sal_Bool bRound = sal_True );
String GetStrResult( double, sal_Bool bRound = sal_True );
2000-09-18 16:15:01 +00:00
SwCalcExp* VarInsert( const String& r );
SwCalcExp* VarLook( const String &rStr, sal_uInt16 ins = 0 );
2000-09-18 16:15:01 +00:00
void VarChange( const String& rStr, const SwSbxValue& rValue );
void VarChange( const String& rStr, double );
SwHash** GetVarTable() { return VarTable; }
bool Push(const SwUserFieldType* pUserFieldType);
void Pop();
2000-09-18 16:15:01 +00:00
void SetCalcError( SwCalcError eErr ) { eError = eErr; }
sal_Bool IsCalcError() const { return 0 != eError; }
2000-09-18 16:15:01 +00:00
static bool Str2Double( const OUString& rStr, sal_Int32& rPos,
2001-02-13 19:32:47 +00:00
double& rVal,
LocaleDataWrapper const*const pData = 0 );
static bool Str2Double( const OUString& rStr, sal_Int32& rPos,
double& rVal, SwDoc *const pDoc );
2001-02-13 19:32:47 +00:00
SW_DLLPUBLIC static sal_Bool IsValidVarName( const OUString& rStr,
OUString* pValidName = 0 );
2000-09-18 16:15:01 +00:00
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */