LibreOffice Module sc (master) 1
xmlcvali.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice 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 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include "xmlcvali.hxx"
21#include "xmlimprt.hxx"
22#include "xmlconti.hxx"
23#include <document.hxx>
24#include "XMLConverter.hxx"
25
26#include <xmloff/xmltoken.hxx>
29#include <com/sun/star/sheet/TableValidationVisibility.hpp>
30
31using namespace com::sun::star;
32using namespace xmloff::token;
33using namespace ::formula;
34
35namespace {
36
37class ScXMLContentValidationContext : public ScXMLImportContext
38{
39 OUString sName;
40 OUString sHelpTitle;
41 OUString sHelpMessage;
42 OUString sErrorTitle;
43 OUString sErrorMessage;
44 OUString sErrorMessageType;
45 OUString sBaseCellAddress;
46 OUString sCondition;
47 sal_Int16 nShowList;
48 bool bAllowEmptyCell;
49 bool bDisplayHelp;
50 bool bDisplayError;
51
52 SvXMLImportContextRef xEventContext;
53
54 css::sheet::ValidationAlertStyle GetAlertStyle() const;
55 void SetFormula( OUString& rFormula, OUString& rFormulaNmsp, FormulaGrammar::Grammar& reGrammar,
56 const OUString& rCondition, const OUString& rGlobNmsp, FormulaGrammar::Grammar eGlobGrammar, bool bHasNmsp ) const;
57 void GetCondition( ScMyImportValidation& rValidation ) const;
58
59public:
60
61 ScXMLContentValidationContext( ScXMLImport& rImport,
63
64 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
65 sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
66
67 virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
68
69 void SetHelpMessage(const OUString& sTitle, const OUString& sMessage, const bool bDisplay);
70 void SetErrorMessage(const OUString& sTitle, const OUString& sMessage, const OUString& sMessageType, const bool bDisplay);
71 void SetErrorMacro(const bool bExecute);
72};
73
74class ScXMLHelpMessageContext : public ScXMLImportContext
75{
76 OUString sTitle;
77 OUStringBuffer sMessage;
78 sal_Int32 nParagraphCount;
79 bool bDisplay;
80
81 ScXMLContentValidationContext* pValidationContext;
82
83public:
84
85 ScXMLHelpMessageContext( ScXMLImport& rImport,
87 ScXMLContentValidationContext* pValidationContext);
88
89 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
90 sal_Int32 nElement,
91 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
92
93 virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
94};
95
96class ScXMLErrorMessageContext : public ScXMLImportContext
97{
98 OUString sTitle;
99 OUStringBuffer sMessage;
100 OUString sMessageType;
101 sal_Int32 nParagraphCount;
102 bool bDisplay;
103
104 ScXMLContentValidationContext* pValidationContext;
105
106public:
107
108 ScXMLErrorMessageContext( ScXMLImport& rImport,
110 ScXMLContentValidationContext* pValidationContext);
111
112 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
113 sal_Int32 nElement,
114 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
115
116 virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
117};
118
119class ScXMLErrorMacroContext : public ScXMLImportContext
120{
121 bool bExecute;
122 ScXMLContentValidationContext* pValidationContext;
123
124public:
125
126 ScXMLErrorMacroContext( ScXMLImport& rImport,
128 ScXMLContentValidationContext* pValidationContext);
129
130 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
131 sal_Int32 nElement,
132 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override;
133 virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override;
134};
135
136}
137
139 ScXMLImportContext( rImport )
140{
141 // here are no attributes
142}
143
145{
146}
147
148uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLContentValidationsContext::createFastChildContext(
149 sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
150{
151 SvXMLImportContext *pContext = nullptr;
154
155 switch (nElement)
156 {
158 pContext = new ScXMLContentValidationContext( GetScImport(), pAttribList );
159 break;
160 }
161
162 return pContext;
163}
164
165ScXMLContentValidationContext::ScXMLContentValidationContext( ScXMLImport& rImport,
167 ScXMLImportContext( rImport ),
168 nShowList(sheet::TableValidationVisibility::UNSORTED),
169 bAllowEmptyCell(true),
170 bDisplayHelp(false),
171 bDisplayError(false)
172{
173 if ( !rAttrList.is() )
174 return;
175
176 for (auto &aIter : *rAttrList)
177 {
178 switch (aIter.getToken())
179 {
180 case XML_ELEMENT( TABLE, XML_NAME ):
181 sName = aIter.toString();
182 break;
183 case XML_ELEMENT( TABLE, XML_CONDITION ):
184 sCondition = aIter.toString();
185 break;
186 case XML_ELEMENT( TABLE, XML_BASE_CELL_ADDRESS ):
187 sBaseCellAddress = aIter.toString();
188 break;
189 case XML_ELEMENT( TABLE, XML_ALLOW_EMPTY_CELL ):
190 if (IsXMLToken(aIter, XML_FALSE))
191 bAllowEmptyCell = false;
192 break;
193 case XML_ELEMENT( TABLE, XML_DISPLAY_LIST ):
194 if (IsXMLToken(aIter, XML_NO))
195 {
196 nShowList = sheet::TableValidationVisibility::INVISIBLE;
197 }
198 else if (IsXMLToken(aIter, XML_UNSORTED))
199 {
200 nShowList = sheet::TableValidationVisibility::UNSORTED;
201 }
202 else if (IsXMLToken(aIter, XML_SORT_ASCENDING))
203 {
204 nShowList = sheet::TableValidationVisibility::SORTEDASCENDING;
205 }
206 else if (IsXMLToken(aIter, XML_SORTED_ASCENDING))
207 {
208 // Read old wrong value, fdo#72548
209 nShowList = sheet::TableValidationVisibility::SORTEDASCENDING;
210 }
211 break;
212 }
213 }
214}
215
216uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLContentValidationContext::createFastChildContext(
217 sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList )
218{
219 SvXMLImportContext *pContext = nullptr;
222
223 switch (nElement)
224 {
225 case XML_ELEMENT( TABLE, XML_HELP_MESSAGE ):
226 pContext = new ScXMLHelpMessageContext( GetScImport(), pAttribList, this);
227 break;
228 case XML_ELEMENT( TABLE, XML_ERROR_MESSAGE ):
229 pContext = new ScXMLErrorMessageContext( GetScImport(), pAttribList, this);
230 break;
231 case XML_ELEMENT( TABLE, XML_ERROR_MACRO ):
232 pContext = new ScXMLErrorMacroContext( GetScImport(), pAttribList, this);
233 break;
234 case XML_ELEMENT(OFFICE, XML_EVENT_LISTENERS):
235 pContext = new XMLEventsImportContext( GetImport() );
236 xEventContext = pContext;
237 }
238
239 return pContext;
240}
241
242sheet::ValidationAlertStyle ScXMLContentValidationContext::GetAlertStyle() const
243{
244 if (IsXMLToken(sErrorMessageType, XML_MACRO))
245 return sheet::ValidationAlertStyle_MACRO;
246 if (IsXMLToken(sErrorMessageType, XML_STOP))
247 return sheet::ValidationAlertStyle_STOP;
248 if (IsXMLToken(sErrorMessageType, XML_WARNING))
249 return sheet::ValidationAlertStyle_WARNING;
250 if (IsXMLToken(sErrorMessageType, XML_INFORMATION))
251 return sheet::ValidationAlertStyle_INFO;
252 // default for unknown
253 return sheet::ValidationAlertStyle_STOP;
254}
255
256void ScXMLContentValidationContext::SetFormula( OUString& rFormula, OUString& rFormulaNmsp, FormulaGrammar::Grammar& reGrammar,
257 const OUString& rCondition, const OUString& rGlobNmsp, FormulaGrammar::Grammar eGlobGrammar, bool bHasNmsp ) const
258{
259 reGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
260 if( bHasNmsp )
261 {
262 // the entire attribute contains a namespace: internal namespace not allowed
263 rFormula = rCondition;
264 rFormulaNmsp = rGlobNmsp;
265 reGrammar = eGlobGrammar;
266 }
267 else
268 {
269 // the attribute does not contain a namespace: try to find a namespace of an external grammar
270 GetScImport().ExtractFormulaNamespaceGrammar( rFormula, rFormulaNmsp, reGrammar, rCondition, true );
271 if( reGrammar != FormulaGrammar::GRAM_EXTERNAL )
272 reGrammar = eGlobGrammar;
273 }
274}
275
276void ScXMLContentValidationContext::GetCondition( ScMyImportValidation& rValidation ) const
277{
278 rValidation.aValidationType = sheet::ValidationType_ANY; // default if no condition is given
279 rValidation.aOperator = sheet::ConditionOperator_NONE;
280
281 if( sCondition.isEmpty() )
282 return;
283
284 // extract leading namespace from condition string
285 OUString aCondition, aConditionNmsp;
286 FormulaGrammar::Grammar eGrammar = FormulaGrammar::GRAM_UNSPECIFIED;
287 GetScImport().ExtractFormulaNamespaceGrammar( aCondition, aConditionNmsp, eGrammar, sCondition );
288 bool bHasNmsp = aCondition.getLength() < sCondition.getLength();
289
290 // parse a condition from the attribute string
291 ScXMLConditionParseResult aParseResult;
292 ScXMLConditionHelper::parseCondition( aParseResult, aCondition, 0 );
293
294 /* Check the result. A valid value in aParseResult.meToken implies
295 that the other members of aParseResult are filled with valid data
296 for that token. */
297 bool bSecondaryPart = false;
298 switch( aParseResult.meToken )
299 {
300 case XML_COND_TEXTLENGTH: // condition is 'cell-content-text-length()<operator><expression>'
301 case XML_COND_TEXTLENGTH_ISBETWEEN: // condition is 'cell-content-text-length-is-between(<expression1>,<expression2>)'
302 case XML_COND_TEXTLENGTH_ISNOTBETWEEN: // condition is 'cell-content-text-length-is-not-between(<expression1>,<expression2>)'
303 case XML_COND_ISINLIST: // condition is 'cell-content-is-in-list(<expression>)'
304 case XML_COND_ISTRUEFORMULA: // condition is 'is-true-formula(<expression>)'
305 rValidation.aValidationType = aParseResult.meValidation;
306 rValidation.aOperator = aParseResult.meOperator;
307 break;
308
309 case XML_COND_ISWHOLENUMBER: // condition is 'cell-content-is-whole-number() and <condition>'
310 case XML_COND_ISDECIMALNUMBER: // condition is 'cell-content-is-decimal-number() and <condition>'
311 case XML_COND_ISDATE: // condition is 'cell-content-is-date() and <condition>'
312 case XML_COND_ISTIME: // condition is 'cell-content-is-time() and <condition>'
313 rValidation.aValidationType = aParseResult.meValidation;
314 bSecondaryPart = true;
315 break;
316
317 default:; // unacceptable or unknown condition
318 }
319
320 /* Parse the following 'and <condition>' part of some conditions. This
321 updates the members of aParseResult that will contain the operands
322 and comparison operator then. */
323 if( bSecondaryPart )
324 {
325 ScXMLConditionHelper::parseCondition( aParseResult, aCondition, aParseResult.mnEndIndex );
326 if( aParseResult.meToken == XML_COND_AND )
327 {
328 ScXMLConditionHelper::parseCondition( aParseResult, aCondition, aParseResult.mnEndIndex );
329 switch( aParseResult.meToken )
330 {
331 case XML_COND_CELLCONTENT: // condition is 'and cell-content()<operator><expression>'
332 case XML_COND_ISBETWEEN: // condition is 'and cell-content-is-between(<expression1>,<expression2>)'
333 case XML_COND_ISNOTBETWEEN: // condition is 'and cell-content-is-not-between(<expression1>,<expression2>)'
334 rValidation.aOperator = aParseResult.meOperator;
335 break;
336 default:; // unacceptable or unknown condition
337 }
338 }
339 }
340
341 // a validation type (date, integer) without a condition isn't possible
342 if( rValidation.aOperator == sheet::ConditionOperator_NONE )
343 rValidation.aValidationType = sheet::ValidationType_ANY;
344
345 // parse the formulas
346 if( rValidation.aValidationType != sheet::ValidationType_ANY )
347 {
348 SetFormula( rValidation.sFormula1, rValidation.sFormulaNmsp1, rValidation.eGrammar1,
349 aParseResult.maOperand1, aConditionNmsp, eGrammar, bHasNmsp );
350 SetFormula( rValidation.sFormula2, rValidation.sFormulaNmsp2, rValidation.eGrammar2,
351 aParseResult.maOperand2, aConditionNmsp, eGrammar, bHasNmsp );
352 }
353}
354
355void SAL_CALL ScXMLContentValidationContext::endFastElement( sal_Int32 /*nElement*/ )
356{
357 // #i36650# event-listeners element moved up one level
358 if (xEventContext.is())
359 {
360 XMLEventsImportContext* pEvents =
361 static_cast<XMLEventsImportContext*>(xEventContext.get());
362 uno::Sequence<beans::PropertyValue> aValues;
363 pEvents->GetEventSequence( "OnError", aValues );
364
365 auto pValue = std::find_if(std::cbegin(aValues), std::cend(aValues),
366 [](const beans::PropertyValue& rValue) {
367 return rValue.Name == "MacroName" || rValue.Name == "Script"; });
368 if (pValue != std::cend(aValues))
369 pValue->Value >>= sErrorTitle;
370 }
371
372 ScMyImportValidation aValidation;
373 aValidation.eGrammar1 = aValidation.eGrammar2 = GetScImport().GetDocument()->GetStorageGrammar();
374 aValidation.sName = sName;
375 aValidation.sBaseCellAddress = sBaseCellAddress;
376 aValidation.sInputTitle = sHelpTitle;
377 aValidation.sInputMessage = sHelpMessage;
378 aValidation.sErrorTitle = sErrorTitle;
379 aValidation.sErrorMessage = sErrorMessage;
380 GetCondition( aValidation );
381 aValidation.aAlertStyle = GetAlertStyle();
382 aValidation.bShowErrorMessage = bDisplayError;
383 aValidation.bShowInputMessage = bDisplayHelp;
384 aValidation.bIgnoreBlanks = bAllowEmptyCell;
385 aValidation.nShowList = nShowList;
386 GetScImport().AddValidation(aValidation);
387}
388
389void ScXMLContentValidationContext::SetHelpMessage(const OUString& sTitle, const OUString& sMessage, const bool bDisplay)
390{
391 sHelpTitle = sTitle;
392 sHelpMessage = sMessage;
393 bDisplayHelp = bDisplay;
394}
395
396void ScXMLContentValidationContext::SetErrorMessage(const OUString& sTitle, const OUString& sMessage,
397 const OUString& sMessageType, const bool bDisplay)
398{
399 sErrorTitle = sTitle;
400 sErrorMessage = sMessage;
401 sErrorMessageType = sMessageType;
402 bDisplayError = bDisplay;
403}
404
405void ScXMLContentValidationContext::SetErrorMacro(const bool bExecute)
406{
407 sErrorMessageType = "macro";
408 bDisplayError = bExecute;
409}
410
411ScXMLHelpMessageContext::ScXMLHelpMessageContext( ScXMLImport& rImport,
413 ScXMLContentValidationContext* pTempValidationContext) :
414 ScXMLImportContext( rImport ),
415 nParagraphCount(0),
416 bDisplay(false)
417{
418 pValidationContext = pTempValidationContext;
419 if ( !rAttrList.is() )
420 return;
421
422 for (auto &aIter : *rAttrList)
423 {
424 switch (aIter.getToken())
425 {
426 case XML_ELEMENT( TABLE, XML_TITLE ):
427 sTitle = aIter.toString();
428 break;
429 case XML_ELEMENT( TABLE, XML_DISPLAY ):
430 bDisplay = IsXMLToken(aIter, XML_TRUE);
431 break;
432 }
433 }
434}
435
436css::uno::Reference< css::xml::sax::XFastContextHandler > ScXMLHelpMessageContext::createFastChildContext(
437 sal_Int32 nElement,
438 const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ )
439{
440 SvXMLImportContext *pContext = nullptr;
441
442 switch( nElement )
443 {
444 case XML_ELEMENT(TEXT, XML_P):
445 {
446 if(nParagraphCount)
447 sMessage.append('\n');
448 ++nParagraphCount;
449 pContext = new ScXMLContentContext( GetScImport(), sMessage );
450 }
451 break;
452 }
453
454 return pContext;
455}
456
457void SAL_CALL ScXMLHelpMessageContext::endFastElement( sal_Int32 /*nElement*/ )
458{
459 pValidationContext->SetHelpMessage(sTitle, sMessage.makeStringAndClear(), bDisplay);
460}
461
462ScXMLErrorMessageContext::ScXMLErrorMessageContext( ScXMLImport& rImport,
464 ScXMLContentValidationContext* pTempValidationContext) :
465 ScXMLImportContext( rImport ),
466 nParagraphCount(0),
467 bDisplay(false)
468{
469 pValidationContext = pTempValidationContext;
470 if ( !rAttrList.is() )
471 return;
472
473 for (auto &aIter : *rAttrList)
474 {
475 switch (aIter.getToken())
476 {
477 case XML_ELEMENT( TABLE, XML_TITLE ):
478 sTitle = aIter.toString();
479 break;
480 case XML_ELEMENT( TABLE, XML_MESSAGE_TYPE ):
481 sMessageType = aIter.toString();
482 break;
483 case XML_ELEMENT( TABLE, XML_DISPLAY ):
484 bDisplay = IsXMLToken(aIter, XML_TRUE);
485 break;
486 }
487 }
488}
489
490css::uno::Reference< css::xml::sax::XFastContextHandler > ScXMLErrorMessageContext::createFastChildContext(
491 sal_Int32 nElement,
492 const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ )
493{
494 SvXMLImportContext *pContext = nullptr;
495
496 switch( nElement )
497 {
498 case XML_ELEMENT(TEXT, XML_P):
499 {
500 if(nParagraphCount)
501 sMessage.append('\n');
502 ++nParagraphCount;
503 pContext = new ScXMLContentContext( GetScImport(), sMessage);
504 }
505 break;
506 }
507
508 return pContext;
509}
510
511void SAL_CALL ScXMLErrorMessageContext::endFastElement( sal_Int32 /*nElement*/ )
512{
513 pValidationContext->SetErrorMessage(sTitle, sMessage.makeStringAndClear(), sMessageType, bDisplay);
514}
515
516ScXMLErrorMacroContext::ScXMLErrorMacroContext( ScXMLImport& rImport,
518 ScXMLContentValidationContext* pTempValidationContext) :
519 ScXMLImportContext( rImport ),
520 bExecute(false)
521{
522 pValidationContext = pTempValidationContext;
523 if ( !rAttrList.is() )
524 return;
525
526 for (auto &aIter : *rAttrList)
527 {
528 switch (aIter.getToken())
529 {
530 case XML_ELEMENT( TABLE, XML_NAME ):
531 break;
532 case XML_ELEMENT( TABLE, XML_EXECUTE ):
533 bExecute = IsXMLToken(aIter, XML_TRUE);
534 break;
535 }
536 }
537}
538
539css::uno::Reference< css::xml::sax::XFastContextHandler > ScXMLErrorMacroContext::createFastChildContext(
540 sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ )
541{
542 SvXMLImportContext *pContext = nullptr;
543
544 if (nElement == XML_ELEMENT(SCRIPT, XML_EVENTS))
545 {
546 pContext = new XMLEventsImportContext(GetImport());
547 }
548
549 return pContext;
550}
551
552void SAL_CALL ScXMLErrorMacroContext::endFastElement( sal_Int32 /*nElement*/ )
553{
554 pValidationContext->SetErrorMacro( bExecute );
555}
556
557/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
@ XML_COND_ISNOTBETWEEN
The 'cell-content-is-between' token.
@ XML_COND_ISTIME
The 'cell-content-is-date' token.
@ XML_COND_AND
Token not recognized.
@ XML_COND_CELLCONTENT
The 'and' token.
@ XML_COND_TEXTLENGTH
The 'cell-content-is-in-list' token.
@ XML_COND_TEXTLENGTH_ISBETWEEN
The 'cell-content-text-length' token.
@ XML_COND_ISTRUEFORMULA
The 'cell-content-text-length-is-not-between' token.
@ XML_COND_ISWHOLENUMBER
The 'cell-content-is-not-between' token.
@ XML_COND_ISINLIST
The 'cell-content-is-time' token.
@ XML_COND_ISBETWEEN
The 'cell-content' token.
@ XML_COND_ISDATE
The 'cell-content-is-decimal-number' token.
@ XML_COND_ISDECIMALNUMBER
The 'cell-content-is-whole-number' token.
@ XML_COND_TEXTLENGTH_ISNOTBETWEEN
The 'cell-content-text-length-is-between' token.
virtual ~ScXMLContentValidationsContext() override
Definition: xmlcvali.cxx:144
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
Definition: xmlcvali.cxx:148
ScXMLContentValidationsContext(ScXMLImport &rImport)
Definition: xmlcvali.cxx:138
This class exists only to provide GetScImport() to its derived classes.
ScXMLImport & GetScImport()
virtual void SAL_CALL endFastElement(sal_Int32 Element) override
virtual css::uno::Reference< XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > &Attribs) override
void GetEventSequence(const OUString &rName, css::uno::Sequence< css::beans::PropertyValue > &rSequence)
OUString sName
if(aStr !=aBuf) UpdateName_Impl(m_xFollowLb.get()
void parseCondition(ScXMLConditionParseResult &rParseResult, const OUString &rAttribute, sal_Int32 nStartIndex)
Parses the next condition in a 'condition' attribute value of e.g.
TABLE
FastAttributeList & castToFastAttributeList(const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList)
OUString toString(OptionInfo const *info)
XML_TRUE
XML_NO
XML_FALSE
XML_CONTENT_VALIDATION
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
OUString sMessage
OUString sFormulaNmsp2
Definition: xmlimprt.hxx:97
formula::FormulaGrammar::Grammar eGrammar2
Definition: xmlimprt.hxx:103
css::sheet::ValidationType aValidationType
Definition: xmlimprt.hxx:100
OUString sErrorMessage
Definition: xmlimprt.hxx:93
css::sheet::ConditionOperator aOperator
Definition: xmlimprt.hxx:101
OUString sInputMessage
Definition: xmlimprt.hxx:91
css::sheet::ValidationAlertStyle aAlertStyle
Definition: xmlimprt.hxx:99
OUString sBaseCellAddress
Definition: xmlimprt.hxx:98
OUString sFormulaNmsp1
Definition: xmlimprt.hxx:96
OUString sInputTitle
Definition: xmlimprt.hxx:90
formula::FormulaGrammar::Grammar eGrammar1
Definition: xmlimprt.hxx:102
OUString sErrorTitle
Definition: xmlimprt.hxx:92
Result of an attempt to parse a single condition in a 'condition' attribute value of e....
OUString maOperand2
First operand of the token or comparison value.
css::sheet::ValidationType meValidation
The leading condition token.
OUString maOperand1
A comparison operator if existing.
css::sheet::ConditionOperator meOperator
A data validation type if existing.
sal_Int32 mnEndIndex
Second operand of 'between' conditions.
ScXMLConditionToken meToken
@ TABLE
Definition: xmldpimp.hxx:43
#define XML_ELEMENT(prefix, name)