Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*************************************************************************
3 : *
4 : * The Contents of this file are made available subject to the terms of
5 : * either of the following licenses
6 : *
7 : * - GNU Lesser General Public License Version 2.1
8 : * - Sun Industry Standards Source License Version 1.1
9 : *
10 : * Sun Microsystems Inc., October, 2000
11 : *
12 : * GNU Lesser General Public License Version 2.1
13 : * =============================================
14 : * Copyright 2000 by Sun Microsystems, Inc.
15 : * 901 San Antonio Road, Palo Alto, CA 94303, USA
16 : *
17 : * This library is free software; you can redistribute it and/or
18 : * modify it under the terms of the GNU Lesser General Public
19 : * License version 2.1, as published by the Free Software Foundation.
20 : *
21 : * This library is distributed in the hope that it will be useful,
22 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 : * Lesser General Public License for more details.
25 : *
26 : * You should have received a copy of the GNU Lesser General Public
27 : * License along with this library; if not, write to the Free Software
28 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 : * MA 02111-1307 USA
30 : *
31 : *
32 : * Sun Industry Standards Source License Version 1.1
33 : * =================================================
34 : * The contents of this file are subject to the Sun Industry Standards
35 : * Source License Version 1.1 (the "License"); You may not use this file
36 : * except in compliance with the License. You may obtain a copy of the
37 : * License at http://www.openoffice.org/license.html.
38 : *
39 : * Software provided under this License is provided on an "AS IS" basis,
40 : * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 : * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 : * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 : * See the License for the specific provisions governing your rights and
44 : * obligations concerning the Software.
45 : *
46 : * The Initial Developer of the Original Code is: IBM Corporation
47 : *
48 : * Copyright: 2008 by IBM Corporation
49 : *
50 : * All Rights Reserved.
51 : *
52 : * Contributor(s): _______________________________________
53 : *
54 : *
55 : ************************************************************************/
56 : /**
57 : * @file
58 : * For LWP filter architecture prototype - table cell numerics format
59 : */
60 : /*************************************************************************
61 : * Change History
62 : Mar 2005 Created
63 : ************************************************************************/
64 :
65 : #include "lwpoverride.hxx"
66 : #include "lwptblcell.hxx"
67 : #include "lwppara.hxx"
68 : #include "lwptblformula.hxx"
69 :
70 : #include "lwptablelayout.hxx"
71 : #include <rtl/ustrbuf.hxx>
72 : #include <boost/scoped_array.hpp>
73 :
74 0 : LwpFormulaArg::~LwpFormulaArg()
75 : {
76 0 : }
77 :
78 : //////////////////////////////////////////////////////////////////
79 0 : LwpFormulaInfo::LwpFormulaInfo(LwpObjectHeader &objHdr, LwpSvStream* pStrm)
80 : : LwpCellList(objHdr, pStrm)
81 : , m_bSupported(sal_True)
82 0 : , m_nFormulaRow(0)
83 0 : {}
84 :
85 0 : LwpFormulaInfo::~LwpFormulaInfo()
86 : {
87 : try{
88 0 : while(m_aStack.size()>0)
89 : {
90 0 : LwpFormulaArg* pArg=m_aStack.back();
91 0 : m_aStack.pop_back();
92 0 : delete pArg; pArg=NULL;
93 : }
94 0 : }catch (...)
95 : {
96 : assert(false);
97 : }
98 0 : }
99 :
100 : /**
101 : *
102 : * @date 03/26/2005
103 : * @param
104 : * @param
105 : * @return sal_Bool.
106 : */
107 0 : sal_Bool LwpFormulaInfo::ReadConst()
108 : {
109 0 : double Constant = m_pObjStrm->QuickReadDouble();
110 :
111 0 : m_aStack.push_back( new LwpFormulaConst(Constant) );
112 :
113 0 : return sal_True;
114 : }
115 : /**
116 : * Need more effort for unicode.
117 : * @date 03/26/2005
118 : * @param
119 : * @param
120 : * @return sal_Bool.
121 : */
122 0 : sal_Bool LwpFormulaInfo::ReadText()
123 : {
124 0 : m_pObjStrm->QuickReadInt16(); //Disk Size
125 0 : sal_uInt16 nStrLen = m_pObjStrm->QuickReadInt16();
126 :
127 0 : boost::scoped_array<char> pBuf(new char[nStrLen+1]);
128 0 : m_pObjStrm->QuickRead( pBuf.get(), nStrLen );
129 0 : *(pBuf.get()+nStrLen)='\0';
130 0 : String aText;
131 0 : aText += rtl::OUString("\"");
132 0 : aText.Append(String(pBuf.get(),nStrLen,osl_getThreadTextEncoding()));
133 0 : aText += rtl::OUString("\"");
134 :
135 0 : m_aStack.push_back(new LwpFormulaText(aText));
136 0 : return sal_True;
137 : }
138 : /**
139 : *
140 : * @date 03/26/2005
141 : * @param
142 : * @param
143 : * @return sal_Bool.
144 : */
145 0 : sal_Bool LwpFormulaInfo::ReadCellID()
146 : {
147 0 : LwpRowSpecifier RowSpecifier;
148 0 : LwpColumnSpecifier ColumnSpecifier;
149 0 : sal_Bool readSucceeded = true;
150 :
151 0 : RowSpecifier.QuickRead(m_pObjStrm);
152 0 : ColumnSpecifier.QuickRead(m_pObjStrm);
153 :
154 0 : m_aStack.push_back( new LwpFormulaCellAddr(ColumnSpecifier.ColumnID(cColumn),
155 0 : RowSpecifier.RowID(m_nFormulaRow)) );
156 0 : return readSucceeded;
157 : }
158 : /**
159 : *
160 : * @date 03/26/2005
161 : * @param
162 : * @param
163 : * @return sal_Bool.
164 : */
165 0 : sal_Bool LwpFormulaInfo::ReadCellRange()
166 : {
167 0 : sal_Bool readSucceeded = sal_True;
168 0 : if (!ReadCellID( )) // start
169 0 : readSucceeded = false;
170 0 : LwpFormulaCellAddr* pStartCellAddr = (LwpFormulaCellAddr*)m_aStack.back();
171 0 : m_aStack.pop_back();
172 :
173 0 : if (!ReadCellID()) // end
174 0 : readSucceeded = false;
175 0 : LwpFormulaCellAddr* pEndCellAddr = (LwpFormulaCellAddr*)m_aStack.back();
176 0 : m_aStack.pop_back();
177 :
178 0 : m_aStack.push_back( new LwpFormulaCellRangeAddr(pStartCellAddr->GetCol(),
179 0 : pStartCellAddr->GetRow(),
180 0 : pEndCellAddr->GetCol(),
181 0 : pEndCellAddr->GetRow()) );
182 0 : delete pStartCellAddr;
183 0 : delete pEndCellAddr;
184 :
185 0 : return readSucceeded;
186 : }
187 :
188 : /**
189 : * Read expression from wordpro file
190 : * @date 03/26/2005
191 : * @param
192 : * @param
193 : * @return sal_Bool.
194 : */
195 0 : sal_Bool LwpFormulaInfo::ReadExpression()
196 : {
197 : sal_uInt16 TokenType, DiskLength;
198 0 : sal_Bool readSucceeded = sal_True;
199 :
200 : /* Read the compiled expression length */
201 : // Len = m_pObjStrm->QuickReaduInt16();
202 0 : m_pObjStrm->SeekRel(2);
203 :
204 0 : while ((TokenType = m_pObjStrm->QuickReaduInt16()) != TK_END)
205 : {
206 : // Get the disk length of this token
207 0 : DiskLength = m_pObjStrm->QuickReaduInt16();
208 :
209 0 : switch (TokenType)
210 : {
211 : case TK_CONSTANT:
212 : {
213 0 : ReadConst();
214 0 : break;
215 : }
216 :
217 : case TK_CELLID:
218 0 : if (!ReadCellID())
219 0 : readSucceeded = sal_False;
220 0 : break;
221 :
222 : case TK_CELLRANGE:
223 0 : readSucceeded = ReadCellRange();
224 0 : break;
225 :
226 : case TK_SUM:
227 : case TK_IF:
228 : case TK_COUNT:
229 : case TK_MINIMUM:
230 : case TK_MAXIMUM:
231 : case TK_AVERAGE:
232 : {
233 0 : LwpFormulaFunc* pFunc = new LwpFormulaFunc(TokenType);
234 0 : if (!ReadArguments(*pFunc))
235 0 : readSucceeded = sal_False;
236 0 : m_aStack.push_back(pFunc);
237 : }
238 0 : break;
239 :
240 : case TK_ADD://7
241 : case TK_SUBTRACT:
242 : case TK_MULTIPLY:
243 : case TK_DIVIDE:
244 : case TK_LESS:
245 : case TK_LESS_OR_EQUAL:
246 : case TK_GREATER:
247 : case TK_GREATER_OR_EQUAL:
248 : case TK_EQUAL:
249 : case TK_NOT_EQUAL:
250 : case TK_AND:
251 : case TK_OR:
252 : case TK_NOT:
253 0 : m_pObjStrm->SeekRel(DiskLength); // extensible for future
254 :
255 : {//binary operator
256 0 : LwpFormulaOp* pOp = new LwpFormulaOp(TokenType);
257 0 : pOp->AddArg(m_aStack.back()); m_aStack.pop_back();
258 0 : pOp->AddArg(m_aStack.back()); m_aStack.pop_back();
259 0 : m_aStack.push_back(pOp);
260 : }
261 0 : break;
262 : case TK_UNARY_MINUS:
263 : {
264 0 : LwpFormulaUnaryOp* pOp = new LwpFormulaUnaryOp(TokenType);
265 0 : pOp->AddArg(m_aStack.back()); m_aStack.pop_back();
266 0 : m_aStack.push_back(pOp);
267 : }
268 0 : break;
269 : default:
270 : // We don't know what to do with this token, so eat it.
271 0 : m_pObjStrm->SeekRel(DiskLength);
272 0 : readSucceeded = sal_False;
273 0 : break;
274 : }
275 0 : MarkUnsupported(TokenType);
276 : }
277 0 : return readSucceeded;
278 : }
279 :
280 : /**
281 : *
282 : * @date 03/26/2005
283 : * @param
284 : * @param
285 : * @return
286 : */
287 0 : void LwpFormulaInfo::MarkUnsupported(sal_uInt16 TokenType)
288 : {
289 0 : switch(TokenType)
290 : {
291 : case TK_IF:
292 : case TK_COUNT:
293 : case TK_NOT:
294 : {
295 0 : m_bSupported = sal_False;//Not supported formulas
296 : }
297 0 : break;
298 : default:
299 0 : break;
300 : }
301 0 : }
302 : /**
303 : * Read arguments of functions from wordpro file
304 : * @date 03/26/2005
305 : * @param LwpFormulaFunc& aFunc, functions object
306 : * @return sal_Bool.
307 : */
308 0 : sal_Bool LwpFormulaInfo::ReadArguments(LwpFormulaFunc& aFunc)
309 : {
310 0 : sal_uInt16 NumberOfArguments = m_pObjStrm->QuickReaduInt16();
311 : sal_uInt16 ArgumentDiskLength, Count;
312 : sal_uInt8 ArgumentType;
313 0 : sal_Bool bArgument = sal_False;
314 0 : sal_Bool readSucceeded = sal_True;
315 :
316 0 : for (Count = 0; Count < NumberOfArguments; Count++)
317 : {
318 0 : ArgumentType = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as lushort
319 0 : ArgumentDiskLength = m_pObjStrm->QuickReaduInt16();
320 0 : bArgument = sal_True;
321 :
322 0 : switch(ArgumentType)
323 : {
324 : case TK_CELLID:
325 0 : ReadCellID();
326 0 : break;
327 :
328 : case TK_CELLRANGE:
329 0 : ReadCellRange();
330 0 : break;
331 :
332 : case TK_CONSTANT:
333 0 : ReadConst();
334 0 : break;
335 :
336 : case TK_TEXT:
337 0 : ReadText();
338 0 : break;
339 :
340 : case TK_EXPRESSION:
341 0 : ReadExpression();
342 0 : break;
343 :
344 : default:
345 0 : bArgument = sal_False;
346 0 : m_pObjStrm->SeekRel(ArgumentDiskLength);
347 0 : readSucceeded = sal_False;
348 0 : break;
349 : }
350 :
351 0 : if (bArgument)
352 : {
353 0 : aFunc.AddArg( m_aStack.back() );
354 0 : m_aStack.pop_back();
355 : }
356 : }
357 0 : return readSucceeded;
358 : }
359 :
360 : /**
361 : *
362 : * @date 03/26/2005
363 : * @param
364 : * @param
365 : * @return
366 : */
367 0 : void LwpFormulaInfo::Read()
368 : {
369 0 : LwpCellList::Read();
370 : {
371 0 : LwpRowList* pRowList =(LwpRowList*)cParent.obj();
372 0 : if (pRowList)
373 : {
374 0 : m_nFormulaRow = pRowList->GetRowID();
375 : }
376 : else
377 : {
378 : assert(false);
379 : }
380 : }
381 : // sal_uInt8 cFlags = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as a sal_uInt16
382 0 : m_pObjStrm->SeekRel(2);//flags, size in file: sal_uInt16
383 :
384 0 : LwpNotifyListPersistent cNotifyList;
385 0 : cNotifyList.Read(m_pObjStrm);
386 :
387 0 : ReadExpression();
388 :
389 0 : m_pObjStrm->SkipExtra();
390 0 : }
391 :
392 : /**
393 : * Make the formula string.
394 : * @date 03/26/2005
395 : * @param
396 : * @param
397 : * @return sal_Bool.
398 : */
399 0 : String LwpFormulaInfo::Convert(LwpTableLayout* pCellsMap)
400 : {
401 0 : String aFormula;
402 0 : if (m_bSupported)
403 : {
404 0 : if(1==m_aStack.size())
405 : {
406 0 : LwpFormulaArg* pFormula = m_aStack.back();
407 0 : aFormula = pFormula->ToString(pCellsMap);
408 : }
409 : else
410 : {
411 : assert(false);
412 : }
413 : }
414 0 : return aFormula;
415 : }
416 :
417 : /**
418 : * Fill the XFCell content
419 : * @date 03/26/2005
420 : * @param
421 : * @param
422 : * @return sal_Bool.
423 : */
424 0 : void LwpFormulaInfo::Convert(XFCell * pCell,LwpTableLayout* pCellsMap)
425 : {
426 0 : String aFormula;
427 0 : aFormula = Convert(pCellsMap);
428 0 : if (aFormula.Len())
429 : {
430 0 : pCell->SetFormula(aFormula);
431 : }
432 0 : LwpCellList::Convert(pCell);
433 0 : }
434 :
435 : //////////////////////////////////////////////////////////////////
436 :
437 : /**
438 : *
439 : * @date 03/26/2005
440 : * @param
441 : * @param
442 : * @return sal_Bool.
443 : */
444 0 : LwpFormulaConst::LwpFormulaConst(double dVal)
445 : {
446 0 : m_dVal = dVal;
447 0 : }
448 :
449 0 : rtl::OUString LwpFormulaConst::ToString(LwpTableLayout* /*pCellsMap*/)
450 : {
451 0 : return rtl::OUString::valueOf(m_dVal);
452 : }
453 :
454 : /**
455 : *
456 : * @date 03/26/2005
457 : * @param
458 : * @param
459 : * @return
460 : */
461 0 : LwpFormulaText::LwpFormulaText( String aText)
462 : {
463 0 : m_aText = aText;
464 0 : }
465 :
466 : /**
467 : *
468 : * @date 03/26/2005
469 : * @param
470 : * @param
471 : * @return
472 : */
473 0 : LwpFormulaCellAddr::LwpFormulaCellAddr(sal_Int16 aCol, sal_Int16 aRow)
474 : {
475 0 : m_aCol = aCol;
476 0 : m_aRow = aRow;
477 0 : }
478 :
479 : /**
480 : *
481 : * @date 03/26/2005
482 : * @param
483 : * @param
484 : * @return String
485 : */
486 0 : rtl::OUString LwpFormulaCellAddr::ToString(LwpTableLayout* pCellsMap)
487 : {
488 0 : String aCellAddr;
489 0 : aCellAddr.AppendAscii("<");//<
490 :
491 0 : aCellAddr += LwpFormulaTools::GetCellAddr(m_aRow,m_aCol,pCellsMap);
492 :
493 0 : aCellAddr.AppendAscii(">");//>
494 0 : return aCellAddr;
495 : }
496 :
497 : /**
498 : *
499 : * @date 03/26/2005
500 : * @param
501 : * @param
502 : * @return
503 : */
504 0 : LwpFormulaCellRangeAddr::LwpFormulaCellRangeAddr(sal_Int16 aStartCol,
505 : sal_Int16 aStartRow,
506 : sal_Int16 aEndCol,
507 0 : sal_Int16 aEndRow)
508 : {
509 0 : m_aStartCol = aStartCol;
510 0 : m_aStartRow = aStartRow;
511 0 : m_aEndCol = aEndCol;
512 0 : m_aEndRow = aEndRow;
513 0 : }
514 :
515 : /**
516 : * Convert the cell range into a string
517 : * @date 03/26/2005
518 : * @param
519 : * @param
520 : * @return String.
521 : */
522 0 : rtl::OUString LwpFormulaCellRangeAddr::ToString(LwpTableLayout* pCellsMap)
523 : {
524 0 : String aCellAddr;
525 0 : aCellAddr.AppendAscii("<");//<
526 :
527 0 : aCellAddr += LwpFormulaTools::GetCellAddr(m_aStartRow,m_aStartCol,pCellsMap);
528 0 : aCellAddr.AppendAscii(":");
529 0 : aCellAddr += LwpFormulaTools::GetCellAddr(m_aEndRow,m_aEndCol,pCellsMap);
530 :
531 0 : aCellAddr.AppendAscii(">");//>
532 :
533 0 : return aCellAddr;
534 : }
535 :
536 : /**
537 : *
538 : * @date 03/26/2005
539 : * @param
540 : * @param
541 : * @return
542 : */
543 0 : LwpFormulaFunc::LwpFormulaFunc(sal_uInt16 nTokenType)
544 : {
545 0 : m_nTokenType = nTokenType;
546 0 : }
547 :
548 : /**
549 : *
550 : * @date 03/26/2005
551 : * @param
552 : * @param
553 : * @return
554 : */
555 0 : LwpFormulaFunc::~LwpFormulaFunc()
556 : {
557 : try
558 : {
559 0 : while(m_aArgs.size()>0)
560 : {
561 0 : LwpFormulaArg* pArg = m_aArgs.back();
562 0 : m_aArgs.pop_back();
563 0 : delete pArg;pArg=NULL;
564 : }
565 0 : }catch (...) {
566 : assert(false);
567 : }
568 :
569 0 : }
570 : /**
571 : *
572 : * @date 03/26/2005
573 : * @param
574 : * @param
575 : * @return
576 : */
577 0 : void LwpFormulaFunc::AddArg(LwpFormulaArg* pArg)
578 : {
579 0 : m_aArgs.push_back(pArg);
580 0 : }
581 : /**
582 : * Convert the functions to a string, which is a argument of other formula
583 : * @date 03/26/2005
584 : * @param
585 : * @param
586 : * @return String.
587 : */
588 0 : String LwpFormulaFunc::ToArgString(LwpTableLayout* pCellsMap)
589 : {
590 0 : rtl::OUStringBuffer aFormula;
591 0 : aFormula.append(static_cast<sal_Unicode>('('));
592 0 : aFormula.append(ToString(pCellsMap));
593 0 : aFormula.append(static_cast<sal_Unicode>(')'));
594 0 : return aFormula.makeStringAndClear();
595 : }
596 : /**
597 : * Convert the function to a formula string.
598 : * @date 03/26/2005
599 : * @param
600 : * @param
601 : * @return sal_Bool.
602 : */
603 0 : rtl::OUString LwpFormulaFunc::ToString(LwpTableLayout* pCellsMap)
604 : {
605 0 : String aFormula;
606 :
607 0 : String aFuncName = LwpFormulaTools::GetName(m_nTokenType);
608 0 : aFormula += aFuncName;
609 0 : aFormula.AppendAscii(" ");//Append a blank space
610 :
611 : //Append args
612 0 : vector<LwpFormulaArg*>::iterator aItr;
613 0 : for (aItr=m_aArgs.begin();aItr!=m_aArgs.end();++aItr)
614 : {
615 0 : aFormula.Append( (*aItr)->ToArgString(pCellsMap) );
616 0 : aFormula.AppendAscii("|");//separator
617 : }
618 :
619 : //erase the last "|"
620 0 : if (!m_aArgs.empty())
621 : {
622 0 : aFormula.Erase(aFormula.Len()-1,1);
623 : }
624 : else
625 : {
626 : assert(false);
627 : }
628 :
629 0 : return aFormula;
630 : }
631 :
632 : /**
633 : * Convert the formula in operators to a string : e.g. 1+2+3
634 : * @date 03/26/2005
635 : * @param
636 : * @param
637 : * @return sal_Bool.
638 : */
639 0 : rtl::OUString LwpFormulaOp::ToString(LwpTableLayout* pCellsMap)
640 : {
641 0 : String aFormula;
642 0 : if (2==m_aArgs.size())
643 : {
644 0 : vector<LwpFormulaArg*>::iterator aItr = m_aArgs.end();
645 0 : --aItr;
646 0 : aFormula.Append( (*aItr)->ToArgString(pCellsMap) );
647 :
648 0 : aFormula.AppendAscii(" ");
649 :
650 0 : String aFuncName = LwpFormulaTools::GetName(m_nTokenType);
651 0 : aFormula.Append(aFuncName);
652 :
653 0 : aFormula.AppendAscii(" ");
654 :
655 0 : --aItr;
656 0 : aFormula.Append( (*aItr)->ToArgString(pCellsMap) );
657 : }
658 : else
659 : {
660 : assert(false);
661 : }
662 0 : return aFormula;
663 : }
664 :
665 : /**
666 : * convert the formula in unary operators into string : e.g. -2
667 : * @date 03/26/2005
668 : * @param
669 : * @param
670 : * @return sal_Bool.
671 : */
672 0 : rtl::OUString LwpFormulaUnaryOp::ToString(LwpTableLayout* pCellsMap)
673 : {
674 0 : String aFormula;
675 0 : if (1==m_aArgs.size())
676 : {
677 0 : String aFuncName = LwpFormulaTools::GetName(m_nTokenType);
678 0 : aFormula.Append(aFuncName);
679 :
680 0 : vector<LwpFormulaArg*>::iterator aItr = m_aArgs.begin();
681 0 : aFormula.Append( (*aItr)->ToArgString(pCellsMap) );
682 : }
683 : else
684 : {
685 : assert(false);
686 : }
687 0 : return aFormula;
688 : }
689 : /**
690 : * Get token name
691 : * @date 03/26/2005
692 : * @param
693 : * @param
694 : * @return String.
695 : */
696 0 : String LwpFormulaTools::GetName(sal_uInt16 nTokenType)
697 : {
698 0 : String aName;
699 0 : switch(nTokenType)
700 : {
701 : case TK_SUM:
702 0 : aName = rtl::OUString("SUM");
703 0 : break;
704 : case TK_IF:
705 0 : aName = rtl::OUString("IF");//Not supported by SODC
706 0 : break;
707 : case TK_COUNT:
708 0 : aName = rtl::OUString("COUNT");//Not supported by SODC
709 0 : break;
710 : case TK_MINIMUM:
711 0 : aName = rtl::OUString("MIN");
712 0 : break;
713 : case TK_MAXIMUM:
714 0 : aName = rtl::OUString("MAX");
715 0 : break;
716 : case TK_AVERAGE:
717 0 : aName = rtl::OUString("MEAN");
718 0 : break;
719 : case TK_ADD:
720 0 : aName = rtl::OUString("+");
721 0 : break;
722 : case TK_SUBTRACT:
723 0 : aName = rtl::OUString("-");
724 0 : break;
725 : case TK_MULTIPLY:
726 0 : aName = rtl::OUString("*");
727 0 : break;
728 : case TK_DIVIDE:
729 0 : aName = rtl::OUString("/");
730 0 : break;
731 : case TK_UNARY_MINUS:
732 0 : aName = rtl::OUString("-");
733 0 : break;
734 : case TK_LESS:
735 0 : aName = rtl::OUString("L");
736 0 : break;
737 : case TK_LESS_OR_EQUAL:
738 0 : aName = rtl::OUString("LEQ");
739 0 : break;
740 : case TK_GREATER:
741 0 : aName = rtl::OUString("G");
742 0 : break;
743 : case TK_GREATER_OR_EQUAL:
744 0 : aName = rtl::OUString("GEQ");
745 0 : break;
746 : case TK_EQUAL:
747 0 : aName = rtl::OUString("EQ");
748 0 : break;
749 : case TK_NOT_EQUAL:
750 0 : aName = rtl::OUString("NEQ");
751 0 : break;
752 : case TK_NOT:
753 0 : aName = rtl::OUString("NOT");
754 0 : break;
755 : case TK_AND:
756 0 : aName = rtl::OUString("AND");
757 0 : break;
758 : case TK_OR:
759 0 : aName = rtl::OUString("OR");
760 0 : break;
761 : default:
762 : assert(false);
763 0 : break;
764 : }
765 0 : return aName;
766 : }
767 :
768 : /**
769 : * Get cell address in String
770 : * @date 03/26/2005
771 : * @param
772 : * @param
773 : * @return String.
774 : */
775 0 : String LwpFormulaTools::GetCellAddr(sal_Int16 nRow, sal_Int16 nCol, LwpTableLayout* pCellsMap)
776 : {
777 0 : String aCellAddr;
778 0 : XFCell* pCell = pCellsMap->GetCellsMap(nRow,(sal_uInt8)nCol);
779 0 : if (pCell)
780 : {
781 0 : aCellAddr = pCell->GetCellName();
782 : }
783 : else
784 : {
785 : assert( -1==nRow || -1==(sal_Int8)nCol);
786 : }
787 0 : return aCellAddr;
788 : }
789 :
790 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|