1*38d50f7bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*38d50f7bSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*38d50f7bSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*38d50f7bSAndrew Rist * distributed with this work for additional information
6*38d50f7bSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*38d50f7bSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*38d50f7bSAndrew Rist * "License"); you may not use this file except in compliance
9*38d50f7bSAndrew Rist * with the License. You may obtain a copy of the License at
10*38d50f7bSAndrew Rist *
11*38d50f7bSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*38d50f7bSAndrew Rist *
13*38d50f7bSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*38d50f7bSAndrew Rist * software distributed under the License is distributed on an
15*38d50f7bSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*38d50f7bSAndrew Rist * KIND, either express or implied. See the License for the
17*38d50f7bSAndrew Rist * specific language governing permissions and limitations
18*38d50f7bSAndrew Rist * under the License.
19*38d50f7bSAndrew Rist *
20*38d50f7bSAndrew Rist *************************************************************/
21*38d50f7bSAndrew Rist
22*38d50f7bSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #ifndef SC_LOTFORM_HXX
25cdf0e10cSrcweir #define SC_LOTFORM_HXX
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "formel.hxx"
28cdf0e10cSrcweir #include <tools/string.hxx>
29cdf0e10cSrcweir
30cdf0e10cSrcweir
31cdf0e10cSrcweir
32cdf0e10cSrcweir
33cdf0e10cSrcweir enum FUNC_TYPE
34cdf0e10cSrcweir {
35cdf0e10cSrcweir FT_Return = 0, // End Formula
36cdf0e10cSrcweir FT_FuncFix0, // Funktion, 0 Parameter
37cdf0e10cSrcweir FT_FuncFix1, // Funktion, 0 Parameter
38cdf0e10cSrcweir FT_FuncFix2, // Funktion, 0 Parameter
39cdf0e10cSrcweir FT_FuncFix3, // Funktion, 0 Parameter
40cdf0e10cSrcweir FT_FuncFix4, // Funktion, 0 Parameter
41cdf0e10cSrcweir FT_FuncVar, // ~, var. P.
42cdf0e10cSrcweir FT_Neg, // Negierung
43cdf0e10cSrcweir FT_Op, // Operator
44cdf0e10cSrcweir FT_NotImpl, // nicht implementiert
45cdf0e10cSrcweir FT_ConstFloat, // Double (8-Byte)
46cdf0e10cSrcweir FT_Variable, // Single Ref
47cdf0e10cSrcweir FT_Range, // Double Ref
48cdf0e10cSrcweir FT_Braces, // Klammmern
49cdf0e10cSrcweir FT_ConstInt, // Integer
50cdf0e10cSrcweir FT_ConstString, // String
51cdf0e10cSrcweir FT_NOP, // nichts
52cdf0e10cSrcweir // zusaetzlich ab WK3
53cdf0e10cSrcweir FT_Cref, // Cell Reference
54cdf0e10cSrcweir FT_Rref, // Range Reference
55cdf0e10cSrcweir FT_Nrref, // Named range reference
56cdf0e10cSrcweir FT_Absnref, // Absolut named range
57cdf0e10cSrcweir FT_Erref, // Err range reference
58cdf0e10cSrcweir FT_Ecref, // Err cell reference
59cdf0e10cSrcweir FT_Econstant, // Err constant
60cdf0e10cSrcweir FT_Splfunc, // SPLfunction
61cdf0e10cSrcweir FT_Const10Float,// Float (10-Byte)
62cdf0e10cSrcweir FT_Snum // Const Short Num
63cdf0e10cSrcweir // fuer 'Problemfaelle' beim Import
64cdf0e10cSrcweir };
65cdf0e10cSrcweir
66cdf0e10cSrcweir
67cdf0e10cSrcweir
68cdf0e10cSrcweir
69cdf0e10cSrcweir class LotusToSc : public LotusConverterBase
70cdf0e10cSrcweir {
71cdf0e10cSrcweir private:
72cdf0e10cSrcweir CharSet eSrcChar;
73cdf0e10cSrcweir TokenId nAddToken; // ')+1.0'
74cdf0e10cSrcweir TokenId nSubToken; // ~
75cdf0e10cSrcweir TokenId n0Token; // '0.0';
76cdf0e10cSrcweir // ---------------------------------------------------------------
77cdf0e10cSrcweir static FUNC_TYPE IndexToType( sal_uInt8 );
78cdf0e10cSrcweir static DefTokenId IndexToToken( sal_uInt8 );
79cdf0e10cSrcweir static FUNC_TYPE IndexToTypeWK123( sal_uInt8 );
80cdf0e10cSrcweir static DefTokenId IndexToTokenWK123( sal_uInt8 );
81cdf0e10cSrcweir void DoFunc( DefTokenId eOc, sal_uInt8 nAnz, const sal_Char* pExtName );
82cdf0e10cSrcweir void LotusRelToScRel( sal_uInt16 nCol, sal_uInt16 nRow,
83cdf0e10cSrcweir ScSingleRefData& rSRD );
84cdf0e10cSrcweir sal_Bool bWK3; // alternative Codeumsetzung statt fuer < WK1
85cdf0e10cSrcweir sal_Bool bWK123; // alternative for 123
86cdf0e10cSrcweir // -------------------------------------------------------------------
87cdf0e10cSrcweir void ReadSRD( ScSingleRefData& rSRD, sal_uInt8 nFlags );
88cdf0e10cSrcweir inline void ReadCRD( ScComplexRefData& rCRD, sal_uInt8 nFlags );
89cdf0e10cSrcweir void IncToken( TokenId &rParam );
90cdf0e10cSrcweir // ACHTUNG: hier wird die aktuelle Token-Kette im Pool
91cdf0e10cSrcweir // mit '(<rParam>)+1' fortgeschrieben und mit
92cdf0e10cSrcweir // Store() abgeschlossen!
93cdf0e10cSrcweir void DecToken( TokenId& rParam );
94cdf0e10cSrcweir // ACHTUNG: ~
95cdf0e10cSrcweir void NegToken( TokenId& rParam );
96cdf0e10cSrcweir // ACHTUNG: wie ~, nur wird '-(<rParam>)' gebildet
97cdf0e10cSrcweir public:
98cdf0e10cSrcweir LotusToSc( SvStream& aStr, CharSet eSrc, sal_Bool b );
99cdf0e10cSrcweir virtual ConvErr Convert( const ScTokenArray*& rpErg, sal_Int32& nRest,
100cdf0e10cSrcweir const FORMULA_TYPE eFT = FT_CellFormula );
101cdf0e10cSrcweir
102cdf0e10cSrcweir void Reset( const ScAddress& rEingPos );
103cdf0e10cSrcweir inline void SetWK3( void );
104cdf0e10cSrcweir
105cdf0e10cSrcweir private:
106cdf0e10cSrcweir using LotusConverterBase::Reset;
107cdf0e10cSrcweir };
108cdf0e10cSrcweir
109cdf0e10cSrcweir
ReadCRD(ScComplexRefData & rCRD,sal_uInt8 nRelBit)110cdf0e10cSrcweir inline void LotusToSc::ReadCRD( ScComplexRefData& rCRD, sal_uInt8 nRelBit )
111cdf0e10cSrcweir {
112cdf0e10cSrcweir // erster Teil
113cdf0e10cSrcweir ReadSRD( rCRD.Ref1, nRelBit );
114cdf0e10cSrcweir
115cdf0e10cSrcweir // zweiter Teil
116cdf0e10cSrcweir ReadSRD( rCRD.Ref2, nRelBit >> 3 );
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
119cdf0e10cSrcweir
SetWK3(void)120cdf0e10cSrcweir inline void LotusToSc::SetWK3( void )
121cdf0e10cSrcweir {
122cdf0e10cSrcweir bWK3 = sal_True;
123cdf0e10cSrcweir }
124cdf0e10cSrcweir
125cdf0e10cSrcweir
126cdf0e10cSrcweir
127cdf0e10cSrcweir #endif
128cdf0e10cSrcweir
129