1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: XMLTrackedChangesContext.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sc.hxx"
34 #include "XMLTrackedChangesContext.hxx"
35 #include "xmlimprt.hxx"
36 #include "xmlconti.hxx"
37 #include "XMLConverter.hxx"
39 #include "textuno.hxx"
40 #include "editutil.hxx"
41 #include <xmloff/xmltoken.hxx>
42 #include <xmloff/xmlnmspe.hxx>
43 #include <xmloff/nmspmap.hxx>
44 #include <xmloff/xmluconv.hxx>
45 #include <svtools/zforlist.hxx>
46 #include <com/sun/star/text/XTextCursor.hpp>
47 #include <com/sun/star/text/ControlCharacter.hpp>
50 using namespace com::sun::star
;
51 using namespace xmloff::token
;
53 //-----------------------------------------------------------------------------
55 class ScXMLChangeInfoContext
: public SvXMLImportContext
58 ::rtl::OUStringBuffer sAuthorBuffer
;
59 ::rtl::OUStringBuffer sDateTimeBuffer
;
60 ::rtl::OUStringBuffer sCommentBuffer
;
61 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
62 sal_uInt32 nParagraphCount
;
64 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
65 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
68 ScXMLChangeInfoContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
69 const ::com::sun::star::uno::Reference
<
70 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
71 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
72 virtual ~ScXMLChangeInfoContext();
74 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
75 const ::rtl::OUString
& rLocalName
,
76 const ::com::sun::star::uno::Reference
<
77 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
79 virtual void EndElement();
82 //-----------------------------------------------------------------------------
84 class ScXMLBigRangeContext
: public SvXMLImportContext
86 ScBigRange
& rBigRange
;
88 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
89 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
92 ScXMLBigRangeContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
93 const ::com::sun::star::uno::Reference
<
94 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
95 ScBigRange
& rBigRange
);
96 virtual ~ScXMLBigRangeContext();
98 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
99 const ::rtl::OUString
& rLocalName
,
100 const ::com::sun::star::uno::Reference
<
101 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
103 virtual void EndElement();
106 //-----------------------------------------------------------------------------
108 class ScXMLCellContentDeletionContext
: public SvXMLImportContext
110 rtl::OUString sFormulaAddress
;
111 rtl::OUString sFormula
;
112 rtl::OUString sInputString
;
113 ScBigRange aBigRange
;
115 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
118 sal_Int32 nMatrixCols
;
119 sal_Int32 nMatrixRows
;
120 formula::FormulaGrammar::Grammar eGrammar
;
122 sal_uInt8 nMatrixFlag
;
124 sal_Bool bContainsCell
;
126 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
127 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
130 ScXMLCellContentDeletionContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
131 const ::com::sun::star::uno::Reference
<
132 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
133 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
134 virtual ~ScXMLCellContentDeletionContext();
136 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
137 const ::rtl::OUString
& rLocalName
,
138 const ::com::sun::star::uno::Reference
<
139 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
141 virtual void EndElement();
144 //-----------------------------------------------------------------------------
146 class ScXMLDependenceContext
: public SvXMLImportContext
148 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
150 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
151 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
154 ScXMLDependenceContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
155 const ::com::sun::star::uno::Reference
<
156 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
157 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
158 virtual ~ScXMLDependenceContext();
160 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
161 const ::rtl::OUString
& rLocalName
,
162 const ::com::sun::star::uno::Reference
<
163 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
165 virtual void EndElement();
168 //-----------------------------------------------------------------------------
170 class ScXMLDependingsContext
: public SvXMLImportContext
172 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
174 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
175 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
178 ScXMLDependingsContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
179 const ::com::sun::star::uno::Reference
<
180 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
181 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
182 virtual ~ScXMLDependingsContext();
184 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
185 const ::rtl::OUString
& rLocalName
,
186 const ::com::sun::star::uno::Reference
<
187 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
189 virtual void EndElement();
192 //-----------------------------------------------------------------------------
194 class ScXMLChangeDeletionContext
: public SvXMLImportContext
196 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
198 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
199 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
202 ScXMLChangeDeletionContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
203 const ::com::sun::star::uno::Reference
<
204 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
205 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
206 virtual ~ScXMLChangeDeletionContext();
208 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
209 const ::rtl::OUString
& rLocalName
,
210 const ::com::sun::star::uno::Reference
<
211 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
213 virtual void EndElement();
216 //-----------------------------------------------------------------------------
218 class ScXMLDeletionsContext
: public SvXMLImportContext
220 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
222 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
223 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
226 ScXMLDeletionsContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
227 const ::com::sun::star::uno::Reference
<
228 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
229 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
230 virtual ~ScXMLDeletionsContext();
232 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
233 const ::rtl::OUString
& rLocalName
,
234 const ::com::sun::star::uno::Reference
<
235 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
237 virtual void EndElement();
240 //-----------------------------------------------------------------------------
242 class ScXMLChangeCellContext
;
244 class ScXMLChangeTextPContext
: public SvXMLImportContext
246 ::com::sun::star::uno::Reference
< ::com::sun::star::xml::sax::XAttributeList
> xAttrList
;
247 rtl::OUString sLName
;
248 rtl::OUStringBuffer sText
;
249 ScXMLChangeCellContext
* pChangeCellContext
;
250 SvXMLImportContext
* pTextPContext
;
253 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
254 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
258 ScXMLChangeTextPContext( ScXMLImport
& rImport
, USHORT nPrfx
,
259 const ::rtl::OUString
& rLName
,
260 const ::com::sun::star::uno::Reference
<
261 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
262 ScXMLChangeCellContext
* pChangeCellContext
);
264 virtual ~ScXMLChangeTextPContext();
266 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
267 const ::rtl::OUString
& rLocalName
,
268 const ::com::sun::star::uno::Reference
<
269 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
271 virtual void Characters( const ::rtl::OUString
& rChars
);
273 virtual void EndElement();
276 //-----------------------------------------------------------------------------
278 class ScXMLChangeCellContext
: public SvXMLImportContext
281 rtl::OUString
& rInputString
;
282 ScBaseCell
*& rOldCell
;
283 ScEditEngineTextObj
* pEditTextObj
;
284 double& rDateTimeValue
;
287 // sal_Bool bIsMatrix;
288 // sal_Bool bIsCoveredMatrix;
290 sal_Bool bFirstParagraph
;
294 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
295 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
298 ScXMLChangeCellContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
299 const ::com::sun::star::uno::Reference
<
300 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
301 ScBaseCell
*& rOldCell
, rtl::OUString
& sAddress
, rtl::OUString
& sFormula
,
302 formula::FormulaGrammar::Grammar
& rGrammar
,
303 rtl::OUString
& rInputString
, double& fValue
, sal_uInt16
& nType
,
304 sal_uInt8
& nMatrixFlag
, sal_Int32
& nMatrixCols
, sal_Int32
& nMatrixRows
);
305 virtual ~ScXMLChangeCellContext();
307 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
308 const ::rtl::OUString
& rLocalName
,
309 const ::com::sun::star::uno::Reference
<
310 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
312 void CreateTextPContext(sal_Bool bIsNewParagraph
);
313 sal_Bool
IsEditCell() { return pEditTextObj
!= 0; }
314 void SetText(const rtl::OUString
& sTempText
) { sText
= sTempText
; }
316 virtual void EndElement();
319 //-----------------------------------------------------------------------------
321 class ScXMLPreviousContext
: public SvXMLImportContext
323 rtl::OUString sFormulaAddress
;
324 rtl::OUString sFormula
;
325 rtl::OUString sInputString
;
327 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
328 ScBaseCell
* pOldCell
;
330 sal_Int32 nMatrixCols
;
331 sal_Int32 nMatrixRows
;
332 formula::FormulaGrammar::Grammar eGrammar
;
334 sal_uInt8 nMatrixFlag
;
336 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
337 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
340 ScXMLPreviousContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
341 const ::com::sun::star::uno::Reference
<
342 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
343 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
344 virtual ~ScXMLPreviousContext();
346 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
347 const ::rtl::OUString
& rLocalName
,
348 const ::com::sun::star::uno::Reference
<
349 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
351 virtual void EndElement();
354 //-----------------------------------------------------------------------------
356 class ScXMLContentChangeContext
: public SvXMLImportContext
358 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
359 ScBigRange aBigRange
;
361 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
362 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
365 ScXMLContentChangeContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
366 const ::com::sun::star::uno::Reference
<
367 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
368 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
369 virtual ~ScXMLContentChangeContext();
371 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
372 const ::rtl::OUString
& rLocalName
,
373 const ::com::sun::star::uno::Reference
<
374 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
375 virtual void EndElement();
378 //-----------------------------------------------------------------------------
380 class ScXMLInsertionContext
: public SvXMLImportContext
382 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
384 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
385 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
388 ScXMLInsertionContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
389 const ::com::sun::star::uno::Reference
<
390 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
391 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
392 virtual ~ScXMLInsertionContext();
394 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
395 const ::rtl::OUString
& rLocalName
,
396 const ::com::sun::star::uno::Reference
<
397 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
398 virtual void EndElement();
401 //-----------------------------------------------------------------------------
403 class ScXMLInsertionCutOffContext
: public SvXMLImportContext
405 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
407 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
408 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
411 ScXMLInsertionCutOffContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
412 const ::com::sun::star::uno::Reference
<
413 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
414 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
415 virtual ~ScXMLInsertionCutOffContext();
417 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
418 const ::rtl::OUString
& rLocalName
,
419 const ::com::sun::star::uno::Reference
<
420 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
421 virtual void EndElement();
424 //-----------------------------------------------------------------------------
426 class ScXMLMovementCutOffContext
: public SvXMLImportContext
428 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
430 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
431 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
434 ScXMLMovementCutOffContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
435 const ::com::sun::star::uno::Reference
<
436 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
437 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
438 virtual ~ScXMLMovementCutOffContext();
440 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
441 const ::rtl::OUString
& rLocalName
,
442 const ::com::sun::star::uno::Reference
<
443 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
444 virtual void EndElement();
447 //-----------------------------------------------------------------------------
449 class ScXMLCutOffsContext
: public SvXMLImportContext
451 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
453 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
454 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
457 ScXMLCutOffsContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
458 const ::com::sun::star::uno::Reference
<
459 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
460 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
461 virtual ~ScXMLCutOffsContext();
463 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
464 const ::rtl::OUString
& rLocalName
,
465 const ::com::sun::star::uno::Reference
<
466 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
467 virtual void EndElement();
470 //-----------------------------------------------------------------------------
472 class ScXMLDeletionContext
: public SvXMLImportContext
474 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
476 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
477 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
480 ScXMLDeletionContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
481 const ::com::sun::star::uno::Reference
<
482 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
483 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
484 virtual ~ScXMLDeletionContext();
486 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
487 const ::rtl::OUString
& rLocalName
,
488 const ::com::sun::star::uno::Reference
<
489 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
490 virtual void EndElement();
493 //-----------------------------------------------------------------------------
495 class ScXMLMovementContext
: public SvXMLImportContext
497 ScBigRange aSourceRange
;
498 ScBigRange aTargetRange
;
499 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
501 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
502 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
505 ScXMLMovementContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
506 const ::com::sun::star::uno::Reference
<
507 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
508 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
509 virtual ~ScXMLMovementContext();
511 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
512 const ::rtl::OUString
& rLocalName
,
513 const ::com::sun::star::uno::Reference
<
514 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
515 virtual void EndElement();
518 //-----------------------------------------------------------------------------
520 class ScXMLRejectionContext
: public SvXMLImportContext
522 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
;
524 const ScXMLImport
& GetScImport() const { return (const ScXMLImport
&)GetImport(); }
525 ScXMLImport
& GetScImport() { return (ScXMLImport
&)GetImport(); }
528 ScXMLRejectionContext( ScXMLImport
& rImport
, USHORT nPrfx
, const ::rtl::OUString
& rLName
,
529 const ::com::sun::star::uno::Reference
<
530 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
,
531 ScXMLChangeTrackingImportHelper
* pChangeTrackingImportHelper
);
532 virtual ~ScXMLRejectionContext();
534 virtual SvXMLImportContext
*CreateChildContext( USHORT nPrefix
,
535 const ::rtl::OUString
& rLocalName
,
536 const ::com::sun::star::uno::Reference
<
537 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
);
538 virtual void EndElement();
541 //------------------------------------------------------------------
543 ScXMLTrackedChangesContext::ScXMLTrackedChangesContext( ScXMLImport
& rImport
,
545 const ::rtl::OUString
& rLName
,
546 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
547 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
548 SvXMLImportContext( rImport
, nPrfx
, rLName
),
549 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
551 rImport
.LockSolarMutex();
552 pChangeTrackingImportHelper
->SetChangeTrack(sal_True
);
554 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
555 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
557 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
558 rtl::OUString aLocalName
;
559 sal_uInt16
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
560 sAttrName
, &aLocalName
));
561 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
562 if (nPrefix
== XML_NAMESPACE_TABLE
)
564 if (IsXMLToken(aLocalName
, XML_PROTECTION_KEY
))
566 if (sValue
.getLength())
568 uno::Sequence
<sal_Int8
> aPass
;
569 SvXMLUnitConverter::decodeBase64(aPass
, sValue
);
570 pChangeTrackingImportHelper
->SetProtection(aPass
);
577 ScXMLTrackedChangesContext::~ScXMLTrackedChangesContext()
579 GetScImport().UnlockSolarMutex();
582 SvXMLImportContext
*ScXMLTrackedChangesContext::CreateChildContext( USHORT nPrefix
,
583 const ::rtl::OUString
& rLocalName
,
584 const ::com::sun::star::uno::Reference
<
585 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
587 SvXMLImportContext
*pContext(0);
589 if (nPrefix
== XML_NAMESPACE_TABLE
)
591 if (IsXMLToken(rLocalName
, XML_CELL_CONTENT_CHANGE
))
593 pContext
= new ScXMLContentChangeContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
595 else if (IsXMLToken(rLocalName
, XML_INSERTION
))
597 pContext
= new ScXMLInsertionContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
599 else if (IsXMLToken(rLocalName
, XML_DELETION
))
601 pContext
= new ScXMLDeletionContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
603 else if (IsXMLToken(rLocalName
, XML_MOVEMENT
))
605 pContext
= new ScXMLMovementContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
607 else if (IsXMLToken(rLocalName
, XML_REJECTION
))
609 pContext
= new ScXMLRejectionContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
614 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
619 void ScXMLTrackedChangesContext::EndElement()
623 ScXMLChangeInfoContext::ScXMLChangeInfoContext( ScXMLImport
& rImport
,
625 const ::rtl::OUString
& rLName
,
626 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
627 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
628 SvXMLImportContext( rImport
, nPrfx
, rLName
),
630 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
),
633 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
634 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
636 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
637 rtl::OUString aLocalName
;
638 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
639 sAttrName
, &aLocalName
));
640 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
642 if (nPrefix
== XML_NAMESPACE_OFFICE
)
644 if (IsXMLToken(aLocalName
, XML_CHG_AUTHOR
))
646 sAuthorBuffer
= sValue
;
648 else if (IsXMLToken(aLocalName
, XML_CHG_DATE_TIME
))
650 sDateTimeBuffer
= sValue
;
656 ScXMLChangeInfoContext::~ScXMLChangeInfoContext()
660 SvXMLImportContext
*ScXMLChangeInfoContext::CreateChildContext( USHORT nPrefix
,
661 const ::rtl::OUString
& rLocalName
,
662 const ::com::sun::star::uno::Reference
<
663 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
665 SvXMLImportContext
*pContext(0);
667 if( XML_NAMESPACE_DC
== nPrefix
)
669 if( IsXMLToken( rLocalName
, XML_CREATOR
) )
670 pContext
= new ScXMLContentContext(GetScImport(), nPrefix
,
671 rLocalName
, xAttrList
, sAuthorBuffer
);
672 else if( IsXMLToken( rLocalName
, XML_DATE
) )
673 pContext
= new ScXMLContentContext(GetScImport(), nPrefix
,
674 rLocalName
, xAttrList
, sDateTimeBuffer
);
676 else if ((nPrefix
== XML_NAMESPACE_TEXT
) && (IsXMLToken(rLocalName
, XML_P
)) )
679 sCommentBuffer
.append(static_cast<sal_Unicode
>('\n'));
681 pContext
= new ScXMLContentContext( GetScImport(), nPrefix
, rLocalName
, xAttrList
, sCommentBuffer
);
685 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
690 void ScXMLChangeInfoContext::EndElement()
692 aInfo
.sUser
= sAuthorBuffer
.makeStringAndClear();
693 GetScImport().GetMM100UnitConverter().convertDateTime(aInfo
.aDateTime
, sDateTimeBuffer
.makeStringAndClear());
694 aInfo
.sComment
= sCommentBuffer
.makeStringAndClear();
695 pChangeTrackingImportHelper
->SetActionInfo(aInfo
);
698 ScXMLBigRangeContext::ScXMLBigRangeContext( ScXMLImport
& rImport
,
700 const ::rtl::OUString
& rLName
,
701 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
702 ScBigRange
& rTempBigRange
) :
703 SvXMLImportContext( rImport
, nPrfx
, rLName
),
704 rBigRange(rTempBigRange
)
706 sal_Bool
bColumn(sal_False
);
707 sal_Bool
bRow(sal_False
);
708 sal_Bool
bTable(sal_False
);
709 sal_Int32
nColumn(0);
712 sal_Int32
nStartColumn(0);
713 sal_Int32
nEndColumn(0);
714 sal_Int32
nStartRow(0);
715 sal_Int32
nEndRow(0);
716 sal_Int32
nStartTable(0);
717 sal_Int32
nEndTable(0);
718 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
719 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
721 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
722 rtl::OUString aLocalName
;
723 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
724 sAttrName
, &aLocalName
));
725 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
727 if (nPrefix
== XML_NAMESPACE_TABLE
)
729 if (IsXMLToken(aLocalName
, XML_COLUMN
))
731 SvXMLUnitConverter::convertNumber(nColumn
, sValue
);
734 else if (IsXMLToken(aLocalName
, XML_ROW
))
736 SvXMLUnitConverter::convertNumber(nRow
, sValue
);
739 else if (IsXMLToken(aLocalName
, XML_TABLE
))
741 SvXMLUnitConverter::convertNumber(nTable
, sValue
);
744 else if (IsXMLToken(aLocalName
, XML_START_COLUMN
))
745 SvXMLUnitConverter::convertNumber(nStartColumn
, sValue
);
746 else if (IsXMLToken(aLocalName
, XML_END_COLUMN
))
747 SvXMLUnitConverter::convertNumber(nEndColumn
, sValue
);
748 else if (IsXMLToken(aLocalName
, XML_START_ROW
))
749 SvXMLUnitConverter::convertNumber(nStartRow
, sValue
);
750 else if (IsXMLToken(aLocalName
, XML_END_ROW
))
751 SvXMLUnitConverter::convertNumber(nEndRow
, sValue
);
752 else if (IsXMLToken(aLocalName
, XML_START_TABLE
))
753 SvXMLUnitConverter::convertNumber(nStartTable
, sValue
);
754 else if (IsXMLToken(aLocalName
, XML_END_TABLE
))
755 SvXMLUnitConverter::convertNumber(nEndTable
, sValue
);
759 nStartColumn
= nEndColumn
= nColumn
;
761 nStartRow
= nEndRow
= nRow
;
763 nStartTable
= nEndTable
= nTable
;
764 rBigRange
.Set(nStartColumn
, nStartRow
, nStartTable
,
765 nEndColumn
, nEndRow
, nEndTable
);
768 ScXMLBigRangeContext::~ScXMLBigRangeContext()
772 SvXMLImportContext
*ScXMLBigRangeContext::CreateChildContext( USHORT nPrefix
,
773 const ::rtl::OUString
& rLocalName
,
774 const ::com::sun::star::uno::Reference
<
775 ::com::sun::star::xml::sax::XAttributeList
>& /* xAttrList */ )
777 return new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
780 void ScXMLBigRangeContext::EndElement()
784 ScXMLCellContentDeletionContext::ScXMLCellContentDeletionContext( ScXMLImport
& rImport
,
786 const ::rtl::OUString
& rLName
,
787 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
788 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
789 SvXMLImportContext( rImport
, nPrfx
, rLName
),
790 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
),
795 nType(NUMBERFORMAT_ALL
),
796 nMatrixFlag(MM_NONE
),
797 bBigRange(sal_False
),
798 bContainsCell(sal_False
)
800 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
801 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
803 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
804 rtl::OUString aLocalName
;
805 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
806 sAttrName
, &aLocalName
));
807 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
809 if (nPrefix
== XML_NAMESPACE_TABLE
)
811 if (IsXMLToken(aLocalName
, XML_ID
))
812 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
817 ScXMLCellContentDeletionContext::~ScXMLCellContentDeletionContext()
821 SvXMLImportContext
*ScXMLCellContentDeletionContext::CreateChildContext( USHORT nPrefix
,
822 const ::rtl::OUString
& rLocalName
,
823 const ::com::sun::star::uno::Reference
<
824 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
826 SvXMLImportContext
*pContext(0);
828 if (nPrefix
== XML_NAMESPACE_TABLE
)
830 if (IsXMLToken(rLocalName
, XML_CHANGE_TRACK_TABLE_CELL
))
832 bContainsCell
= sal_True
;
833 pContext
= new ScXMLChangeCellContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
,
834 pCell
, sFormulaAddress
, sFormula
, eGrammar
, sInputString
, fValue
, nType
, nMatrixFlag
, nMatrixCols
, nMatrixRows
);
836 else if (IsXMLToken(rLocalName
, XML_CELL_ADDRESS
))
838 DBG_ASSERT(!nID
, "a action with a ID should not contain a BigRange");
839 bBigRange
= sal_True
;
840 pContext
= new ScXMLBigRangeContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, aBigRange
);
845 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
850 void ScXMLCellContentDeletionContext::EndElement()
852 ScMyCellInfo
* pCellInfo(new ScMyCellInfo(pCell
, sFormulaAddress
, sFormula
, eGrammar
, sInputString
, fValue
, nType
,
853 nMatrixFlag
, nMatrixCols
, nMatrixRows
));
855 pChangeTrackingImportHelper
->AddDeleted(nID
, pCellInfo
);
857 pChangeTrackingImportHelper
->AddGenerated(pCellInfo
, aBigRange
);
860 ScXMLDependenceContext::ScXMLDependenceContext( ScXMLImport
& rImport
,
862 const ::rtl::OUString
& rLName
,
863 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
864 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
865 SvXMLImportContext( rImport
, nPrfx
, rLName
),
866 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
869 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
870 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
872 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
873 rtl::OUString aLocalName
;
874 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
875 sAttrName
, &aLocalName
));
876 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
878 if (nPrefix
== XML_NAMESPACE_TABLE
)
880 if (IsXMLToken(aLocalName
, XML_ID
))
881 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
884 pChangeTrackingImportHelper
->AddDependence(nID
);
887 ScXMLDependenceContext::~ScXMLDependenceContext()
891 SvXMLImportContext
*ScXMLDependenceContext::CreateChildContext( USHORT nPrefix
,
892 const ::rtl::OUString
& rLocalName
,
893 const ::com::sun::star::uno::Reference
<
894 ::com::sun::star::xml::sax::XAttributeList
>& /* xAttrList */ )
896 return new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
899 void ScXMLDependenceContext::EndElement()
903 ScXMLDependingsContext::ScXMLDependingsContext( ScXMLImport
& rImport
,
905 const ::rtl::OUString
& rLName
,
906 const uno::Reference
<xml::sax::XAttributeList
>& /* xAttrList */,
907 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
908 SvXMLImportContext( rImport
, nPrfx
, rLName
),
909 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
911 // here are no attributes
914 ScXMLDependingsContext::~ScXMLDependingsContext()
918 SvXMLImportContext
*ScXMLDependingsContext::CreateChildContext( USHORT nPrefix
,
919 const ::rtl::OUString
& rLocalName
,
920 const ::com::sun::star::uno::Reference
<
921 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
923 SvXMLImportContext
*pContext(0);
925 if (nPrefix
== XML_NAMESPACE_TABLE
)
927 // #i80033# read both old (dependence) and new (dependency) elements
928 if (IsXMLToken(rLocalName
, XML_DEPENDENCE
) || IsXMLToken(rLocalName
, XML_DEPENDENCY
))
929 pContext
= new ScXMLDependenceContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
933 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
938 void ScXMLDependingsContext::EndElement()
942 ScXMLChangeDeletionContext::ScXMLChangeDeletionContext( ScXMLImport
& rImport
,
944 const ::rtl::OUString
& rLName
,
945 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
946 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
947 SvXMLImportContext( rImport
, nPrfx
, rLName
),
948 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
951 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
952 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
954 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
955 rtl::OUString aLocalName
;
956 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
957 sAttrName
, &aLocalName
));
958 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
960 if (nPrefix
== XML_NAMESPACE_TABLE
)
962 if (IsXMLToken(aLocalName
, XML_ID
))
963 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
966 pChangeTrackingImportHelper
->AddDeleted(nID
);
969 ScXMLChangeDeletionContext::~ScXMLChangeDeletionContext()
973 SvXMLImportContext
*ScXMLChangeDeletionContext::CreateChildContext( USHORT nPrefix
,
974 const ::rtl::OUString
& rLocalName
,
975 const ::com::sun::star::uno::Reference
<
976 ::com::sun::star::xml::sax::XAttributeList
>& /* xAttrList */ )
978 return new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
981 void ScXMLChangeDeletionContext::EndElement()
985 ScXMLDeletionsContext::ScXMLDeletionsContext( ScXMLImport
& rImport
,
987 const ::rtl::OUString
& rLName
,
988 const uno::Reference
<xml::sax::XAttributeList
>& /* xAttrList */,
989 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
990 SvXMLImportContext( rImport
, nPrfx
, rLName
),
991 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
993 // here are no attributes
996 ScXMLDeletionsContext::~ScXMLDeletionsContext()
1000 SvXMLImportContext
*ScXMLDeletionsContext::CreateChildContext( USHORT nPrefix
,
1001 const ::rtl::OUString
& rLocalName
,
1002 const ::com::sun::star::uno::Reference
<
1003 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1005 SvXMLImportContext
*pContext(0);
1007 if (nPrefix
== XML_NAMESPACE_TABLE
)
1009 if (IsXMLToken(rLocalName
, XML_CHANGE_DELETION
))
1010 pContext
= new ScXMLChangeDeletionContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1011 else if (IsXMLToken(rLocalName
, XML_CELL_CONTENT_DELETION
))
1012 pContext
= new ScXMLCellContentDeletionContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1016 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1021 void ScXMLDeletionsContext::EndElement()
1025 ScXMLChangeTextPContext::ScXMLChangeTextPContext( ScXMLImport
& rImport
,
1027 const ::rtl::OUString
& rLName
,
1028 const ::com::sun::star::uno::Reference
<
1029 ::com::sun::star::xml::sax::XAttributeList
>& xTempAttrList
,
1030 ScXMLChangeCellContext
* pTempChangeCellContext
) :
1031 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1032 xAttrList(xTempAttrList
),
1035 pChangeCellContext(pTempChangeCellContext
),
1036 pTextPContext(NULL
),
1039 // here are no attributes
1042 ScXMLChangeTextPContext::~ScXMLChangeTextPContext()
1045 delete pTextPContext
;
1048 SvXMLImportContext
*ScXMLChangeTextPContext::CreateChildContext( USHORT nTempPrefix
,
1049 const ::rtl::OUString
& rLName
,
1050 const ::com::sun::star::uno::Reference
<
1051 ::com::sun::star::xml::sax::XAttributeList
>& xTempAttrList
)
1053 SvXMLImportContext
*pContext(0);
1055 if ((nPrefix
== XML_NAMESPACE_TEXT
) && (IsXMLToken(rLName
, XML_S
)) && !pTextPContext
)
1057 sal_Int32
nRepeat(0);
1058 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1059 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1061 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1062 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1063 rtl::OUString aLocalName
;
1064 USHORT
nPrfx(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1065 sAttrName
, &aLocalName
));
1066 if ((nPrfx
== XML_NAMESPACE_TEXT
) && (IsXMLToken(aLocalName
, XML_C
)))
1067 nRepeat
= sValue
.toInt32();
1070 for (sal_Int32 j
= 0; j
< nRepeat
; ++j
)
1071 sText
.append(static_cast<sal_Unicode
>(' '));
1073 sText
.append(static_cast<sal_Unicode
>(' '));
1077 if (!pChangeCellContext
->IsEditCell())
1078 pChangeCellContext
->CreateTextPContext(sal_False
);
1079 sal_Bool
bWasContext (sal_True
);
1082 bWasContext
= sal_False
;
1083 pTextPContext
= GetScImport().GetTextImport()->CreateTextChildContext(
1084 GetScImport(), nPrefix
, sLName
, xAttrList
);
1089 pTextPContext
->Characters(sText
.makeStringAndClear());
1090 pContext
= pTextPContext
->CreateChildContext(nTempPrefix
, rLName
, xTempAttrList
);
1095 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLName
);
1100 void ScXMLChangeTextPContext::Characters( const ::rtl::OUString
& rChars
)
1103 sText
.append(rChars
);
1105 pTextPContext
->Characters(rChars
);
1108 void ScXMLChangeTextPContext::EndElement()
1111 pChangeCellContext
->SetText(sText
.makeStringAndClear());
1114 ScXMLChangeCellContext::ScXMLChangeCellContext( ScXMLImport
& rImport
,
1116 const ::rtl::OUString
& rLName
,
1117 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1118 ScBaseCell
*& rTempOldCell
, rtl::OUString
& rAddress
, rtl::OUString
& rFormula
,
1119 formula::FormulaGrammar::Grammar
& rGrammar
,
1120 rtl::OUString
& rTempInputString
, double& fDateTimeValue
, sal_uInt16
& nType
,
1121 sal_uInt8
& nMatrixFlag
, sal_Int32
& nMatrixCols
, sal_Int32
& nMatrixRows
) :
1122 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1123 rInputString(rTempInputString
),
1124 rOldCell(rTempOldCell
),
1126 rDateTimeValue(fDateTimeValue
),
1129 bFirstParagraph(sal_True
),
1133 const formula::FormulaGrammar::Grammar eStorageGrammar
= rGrammar
= GetScImport().GetDocument()->GetStorageGrammar();
1134 sal_Bool
bIsMatrix(sal_False
);
1135 sal_Bool
bIsCoveredMatrix(sal_False
);
1136 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1137 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1139 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1140 rtl::OUString aLocalName
;
1141 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1142 sAttrName
, &aLocalName
));
1143 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1145 if (nPrefix
== XML_NAMESPACE_TABLE
)
1147 if (IsXMLToken(aLocalName
, XML_FORMULA
))
1150 sal_uInt16 nFormulaPrefix
= GetImport().GetNamespaceMap().
1151 _GetKeyByAttrName( sValue
, &rFormula
, sal_False
);
1153 if (!ScXMLImport::IsAcceptedFormulaNamespace( nFormulaPrefix
,
1154 sValue
, rGrammar
, eStorageGrammar
))
1156 bFormula
= sal_True
;
1158 else if (IsXMLToken(aLocalName
, XML_CELL_ADDRESS
))
1162 else if (IsXMLToken(aLocalName
, XML_MATRIX_COVERED
))
1164 bIsCoveredMatrix
= IsXMLToken(sValue
, XML_TRUE
);
1166 else if (IsXMLToken(aLocalName
, XML_NUMBER_MATRIX_COLUMNS_SPANNED
))
1168 bIsMatrix
= sal_True
;
1169 SvXMLUnitConverter::convertNumber(nMatrixCols
, sValue
);
1171 else if (IsXMLToken(aLocalName
, XML_NUMBER_MATRIX_ROWS_SPANNED
))
1173 bIsMatrix
= sal_True
;
1174 SvXMLUnitConverter::convertNumber(nMatrixRows
, sValue
);
1177 else if (nPrefix
== XML_NAMESPACE_OFFICE
)
1179 if (IsXMLToken(aLocalName
, XML_VALUE_TYPE
))
1181 if (IsXMLToken(sValue
, XML_FLOAT
))
1182 bString
= sal_False
;
1183 else if (IsXMLToken(sValue
, XML_DATE
))
1185 rType
= NUMBERFORMAT_DATE
;
1186 bString
= sal_False
;
1188 else if (IsXMLToken(sValue
, XML_TIME
))
1190 rType
= NUMBERFORMAT_TIME
;
1191 bString
= sal_False
;
1194 else if (IsXMLToken(aLocalName
, XML_VALUE
))
1196 SvXMLUnitConverter::convertDouble(fValue
, sValue
);
1199 else if (IsXMLToken(aLocalName
, XML_DATE_VALUE
))
1202 if (GetScImport().GetMM100UnitConverter().setNullDate(GetScImport().GetModel()))
1203 GetScImport().GetMM100UnitConverter().convertDateTime(rDateTimeValue
, sValue
);
1204 fValue
= rDateTimeValue
;
1206 else if (IsXMLToken(aLocalName
, XML_TIME_VALUE
))
1209 GetScImport().GetMM100UnitConverter().convertTime(rDateTimeValue
, sValue
);
1210 fValue
= rDateTimeValue
;
1214 if (bIsCoveredMatrix
)
1215 nMatrixFlag
= MM_REFERENCE
;
1216 else if (bIsMatrix
&& nMatrixRows
&& nMatrixCols
)
1217 nMatrixFlag
= MM_FORMULA
;
1220 ScXMLChangeCellContext::~ScXMLChangeCellContext()
1224 SvXMLImportContext
*ScXMLChangeCellContext::CreateChildContext( USHORT nPrefix
,
1225 const ::rtl::OUString
& rLocalName
,
1226 const ::com::sun::star::uno::Reference
<
1227 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1229 SvXMLImportContext
*pContext(0);
1231 if ((nPrefix
== XML_NAMESPACE_TEXT
) && (IsXMLToken(rLocalName
, XML_P
)))
1234 if (bFirstParagraph
)
1236 pContext
= new ScXMLChangeTextPContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, this);
1237 bFirstParagraph
= sal_False
;
1242 CreateTextPContext(sal_True
);
1243 pContext
= GetScImport().GetTextImport()->CreateTextChildContext(
1244 GetScImport(), nPrefix
, rLocalName
, xAttrList
);
1249 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1254 void ScXMLChangeCellContext::CreateTextPContext(sal_Bool bIsNewParagraph
)
1256 if (GetScImport().GetDocument())
1258 pEditTextObj
= new ScEditEngineTextObj();
1259 pEditTextObj
->acquire();
1260 pEditTextObj
->GetEditEngine()->SetEditTextObjectPool(GetScImport().GetDocument()->GetEditPool());
1261 uno::Reference
<text::XText
> xText(pEditTextObj
);
1264 uno::Reference
<text::XTextCursor
> xTextCursor(xText
->createTextCursor());
1265 if (bIsNewParagraph
)
1267 xText
->setString(sText
);
1268 xTextCursor
->gotoEnd(sal_False
);
1269 uno::Reference
< text::XTextRange
> xTextRange (xTextCursor
, uno::UNO_QUERY
);
1270 if (xTextRange
.is())
1271 xText
->insertControlCharacter(xTextRange
, text::ControlCharacter::PARAGRAPH_BREAK
, sal_False
);
1273 GetScImport().GetTextImport()->SetCursor(xTextCursor
);
1278 void ScXMLChangeCellContext::EndElement()
1284 if (GetImport().GetTextImport()->GetCursor().is())
1286 //GetImport().GetTextImport()->GetCursor()->gotoEnd(sal_False);
1287 if( GetImport().GetTextImport()->GetCursor()->goLeft( 1, sal_True
) )
1290 GetImport().GetTextImport()->GetText()->insertString(
1291 GetImport().GetTextImport()->GetCursorAsRange(), sEmpty
,
1295 if (GetScImport().GetDocument())
1296 rOldCell
= new ScEditCell(pEditTextObj
->CreateTextObject(), GetScImport().GetDocument(), GetScImport().GetDocument()->GetEditPool());
1297 GetScImport().GetTextImport()->ResetCursor();
1298 // delete pEditTextObj;
1299 pEditTextObj
->release();
1305 if (sText
.getLength() && bString
)
1306 rOldCell
= new ScStringCell(sText
);
1308 rOldCell
= new ScValueCell(fValue
);
1309 if (rType
== NUMBERFORMAT_DATE
|| rType
== NUMBERFORMAT_TIME
)
1310 rInputString
= sText
;
1314 // do nothing, this has to do later (on another place)
1315 /*ScAddress aCellPos;
1316 rOldCell = new ScFormulaCell(GetScImport().GetDocument(), aCellPos, sFormula);
1318 static_cast<ScFormulaCell*>(rOldCell)->SetString(sValue);
1320 static_cast<ScFormulaCell*>(rOldCell)->SetDouble(fValue);
1321 static_cast<ScFormulaCell*>(rOldCell)->SetInChangeTrack(sal_True);
1322 if (bIsCoveredMatrix)
1323 static_cast<ScFormulaCell*>(rOldCell)->SetMatrixFlag(MM_REFERENCE);
1324 else if (bIsMatrix && nMatrixRows && nMatrixCols)
1326 static_cast<ScFormulaCell*>(rOldCell)->SetMatrixFlag(MM_FORMULA);
1327 static_cast<ScFormulaCell*>(rOldCell)->SetMatColsRows(static_cast<SCCOL>(nMatrixCols), static_cast<SCROW>(nMatrixRows));
1336 ScXMLPreviousContext::ScXMLPreviousContext( ScXMLImport
& rImport
,
1338 const ::rtl::OUString
& rLName
,
1339 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1340 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1341 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1344 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
),
1349 eGrammar( formula::FormulaGrammar::GRAM_STORAGE_DEFAULT
),
1350 nType(NUMBERFORMAT_ALL
),
1351 nMatrixFlag(MM_NONE
)
1353 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1354 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1356 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1357 rtl::OUString aLocalName
;
1358 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1359 sAttrName
, &aLocalName
));
1360 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1362 if (nPrefix
== XML_NAMESPACE_TABLE
)
1364 if (IsXMLToken(aLocalName
, XML_ID
))
1365 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1370 ScXMLPreviousContext::~ScXMLPreviousContext()
1374 SvXMLImportContext
*ScXMLPreviousContext::CreateChildContext( USHORT nPrefix
,
1375 const ::rtl::OUString
& rLocalName
,
1376 const ::com::sun::star::uno::Reference
<
1377 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1379 SvXMLImportContext
*pContext(0);
1381 if ((nPrefix
== XML_NAMESPACE_TABLE
) && (IsXMLToken(rLocalName
, XML_CHANGE_TRACK_TABLE_CELL
)))
1382 pContext
= new ScXMLChangeCellContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
,
1383 pOldCell
, sFormulaAddress
, sFormula
, eGrammar
, sInputString
, fValue
, nType
, nMatrixFlag
, nMatrixCols
, nMatrixRows
);
1386 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1391 void ScXMLPreviousContext::EndElement()
1393 pChangeTrackingImportHelper
->SetPreviousChange(nID
, new ScMyCellInfo(pOldCell
, sFormulaAddress
, sFormula
, eGrammar
, sInputString
,
1394 fValue
, nType
, nMatrixFlag
, nMatrixCols
, nMatrixRows
));
1397 ScXMLContentChangeContext::ScXMLContentChangeContext( ScXMLImport
& rImport
,
1399 const ::rtl::OUString
& rLName
,
1400 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1401 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1402 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1403 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1405 sal_uInt32
nActionNumber(0);
1406 sal_uInt32
nRejectingNumber(0);
1407 ScChangeActionState
nActionState(SC_CAS_VIRGIN
);
1409 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1410 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1412 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1413 rtl::OUString aLocalName
;
1414 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1415 sAttrName
, &aLocalName
));
1416 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1418 if (nPrefix
== XML_NAMESPACE_TABLE
)
1420 if (IsXMLToken(aLocalName
, XML_ID
))
1422 nActionNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1424 else if (IsXMLToken(aLocalName
, XML_ACCEPTANCE_STATE
))
1426 if (IsXMLToken(sValue
, XML_ACCEPTED
))
1427 nActionState
= SC_CAS_ACCEPTED
;
1428 else if (IsXMLToken(sValue
, XML_REJECTED
))
1429 nActionState
= SC_CAS_REJECTED
;
1431 else if (IsXMLToken(aLocalName
, XML_REJECTING_CHANGE_ID
))
1433 nRejectingNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1438 pChangeTrackingImportHelper
->StartChangeAction(SC_CAT_CONTENT
);
1439 pChangeTrackingImportHelper
->SetActionNumber(nActionNumber
);
1440 pChangeTrackingImportHelper
->SetActionState(nActionState
);
1441 pChangeTrackingImportHelper
->SetRejectingNumber(nRejectingNumber
);
1444 ScXMLContentChangeContext::~ScXMLContentChangeContext()
1448 SvXMLImportContext
*ScXMLContentChangeContext::CreateChildContext( USHORT nPrefix
,
1449 const ::rtl::OUString
& rLocalName
,
1450 const ::com::sun::star::uno::Reference
<
1451 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1453 SvXMLImportContext
*pContext(0);
1455 if ((nPrefix
== XML_NAMESPACE_OFFICE
) && (IsXMLToken(rLocalName
, XML_CHANGE_INFO
)))
1457 pContext
= new ScXMLChangeInfoContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1459 else if (nPrefix
== XML_NAMESPACE_TABLE
)
1461 if (IsXMLToken(rLocalName
, XML_CELL_ADDRESS
))
1463 pContext
= new ScXMLBigRangeContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, aBigRange
);
1465 else if (IsXMLToken(rLocalName
, XML_DEPENDENCIES
))
1467 pContext
= new ScXMLDependingsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1469 else if (IsXMLToken(rLocalName
, XML_DELETIONS
))
1470 pContext
= new ScXMLDeletionsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1471 else if (IsXMLToken(rLocalName
, XML_PREVIOUS
))
1473 pContext
= new ScXMLPreviousContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1478 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1483 void ScXMLContentChangeContext::EndElement()
1485 pChangeTrackingImportHelper
->SetBigRange(aBigRange
);
1486 pChangeTrackingImportHelper
->EndChangeAction();
1489 ScXMLInsertionContext::ScXMLInsertionContext( ScXMLImport
& rImport
,
1491 const ::rtl::OUString
& rLName
,
1492 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1493 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1494 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1495 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1497 sal_uInt32
nActionNumber(0);
1498 sal_uInt32
nRejectingNumber(0);
1499 sal_Int32
nPosition(0);
1500 sal_Int32
nCount(1);
1501 sal_Int32
nTable(0);
1502 ScChangeActionState
nActionState(SC_CAS_VIRGIN
);
1503 ScChangeActionType
nActionType(SC_CAT_INSERT_COLS
);
1505 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1506 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1508 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1509 rtl::OUString aLocalName
;
1510 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1511 sAttrName
, &aLocalName
));
1512 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1514 if (nPrefix
== XML_NAMESPACE_TABLE
)
1516 if (IsXMLToken(aLocalName
, XML_ID
))
1518 nActionNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1520 else if (IsXMLToken(aLocalName
, XML_ACCEPTANCE_STATE
))
1522 if (IsXMLToken(sValue
, XML_ACCEPTED
))
1523 nActionState
= SC_CAS_ACCEPTED
;
1524 else if (IsXMLToken(sValue
, XML_REJECTED
))
1525 nActionState
= SC_CAS_REJECTED
;
1527 else if (IsXMLToken(aLocalName
, XML_REJECTING_CHANGE_ID
))
1529 nRejectingNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1531 else if (IsXMLToken(aLocalName
, XML_TYPE
))
1533 if (IsXMLToken(sValue
, XML_ROW
))
1534 nActionType
= SC_CAT_INSERT_ROWS
;
1535 else if (IsXMLToken(sValue
, XML_TABLE
))
1536 nActionType
= SC_CAT_INSERT_TABS
;
1538 else if (IsXMLToken(aLocalName
, XML_POSITION
))
1540 SvXMLUnitConverter::convertNumber(nPosition
, sValue
);
1542 else if (IsXMLToken(aLocalName
, XML_TABLE
))
1544 SvXMLUnitConverter::convertNumber(nTable
, sValue
);
1546 else if (IsXMLToken(aLocalName
, XML_COUNT
))
1548 SvXMLUnitConverter::convertNumber(nCount
, sValue
);
1553 pChangeTrackingImportHelper
->StartChangeAction(nActionType
);
1554 pChangeTrackingImportHelper
->SetActionNumber(nActionNumber
);
1555 pChangeTrackingImportHelper
->SetActionState(nActionState
);
1556 pChangeTrackingImportHelper
->SetRejectingNumber(nRejectingNumber
);
1557 pChangeTrackingImportHelper
->SetPosition(nPosition
, nCount
, nTable
);
1560 ScXMLInsertionContext::~ScXMLInsertionContext()
1564 SvXMLImportContext
*ScXMLInsertionContext::CreateChildContext( USHORT nPrefix
,
1565 const ::rtl::OUString
& rLocalName
,
1566 const ::com::sun::star::uno::Reference
<
1567 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1569 SvXMLImportContext
*pContext(0);
1571 if ((nPrefix
== XML_NAMESPACE_OFFICE
) && (IsXMLToken(rLocalName
, XML_CHANGE_INFO
)))
1573 pContext
= new ScXMLChangeInfoContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1575 else if (nPrefix
== XML_NAMESPACE_TABLE
)
1577 if (IsXMLToken(rLocalName
, XML_DEPENDENCIES
))
1578 pContext
= new ScXMLDependingsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1579 else if (IsXMLToken(rLocalName
, XML_DELETIONS
))
1580 pContext
= new ScXMLDeletionsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1584 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1589 void ScXMLInsertionContext::EndElement()
1591 pChangeTrackingImportHelper
->EndChangeAction();
1594 ScXMLInsertionCutOffContext::ScXMLInsertionCutOffContext( ScXMLImport
& rImport
,
1596 const ::rtl::OUString
& rLName
,
1597 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1598 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1599 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1600 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1603 sal_Int32
nPosition(0);
1604 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1605 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1607 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1608 rtl::OUString aLocalName
;
1609 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1610 sAttrName
, &aLocalName
));
1611 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1613 if (nPrefix
== XML_NAMESPACE_TABLE
)
1615 if (IsXMLToken(aLocalName
, XML_ID
))
1617 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1619 else if (IsXMLToken(aLocalName
, XML_POSITION
))
1621 SvXMLUnitConverter::convertNumber(nPosition
, sValue
);
1625 pChangeTrackingImportHelper
->SetInsertionCutOff(nID
, nPosition
);
1628 ScXMLInsertionCutOffContext::~ScXMLInsertionCutOffContext()
1632 SvXMLImportContext
*ScXMLInsertionCutOffContext::CreateChildContext( USHORT nPrefix
,
1633 const ::rtl::OUString
& rLocalName
,
1634 const ::com::sun::star::uno::Reference
<
1635 ::com::sun::star::xml::sax::XAttributeList
>& /* xAttrList */ )
1637 return new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1640 void ScXMLInsertionCutOffContext::EndElement()
1644 ScXMLMovementCutOffContext::ScXMLMovementCutOffContext( ScXMLImport
& rImport
,
1646 const ::rtl::OUString
& rLName
,
1647 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1648 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1649 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1650 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1653 sal_Int32
nPosition(0);
1654 sal_Int32
nStartPosition(0);
1655 sal_Int32
nEndPosition(0);
1656 sal_Bool
bPosition(sal_False
);
1657 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1658 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1660 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1661 rtl::OUString aLocalName
;
1662 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1663 sAttrName
, &aLocalName
));
1664 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1666 if (nPrefix
== XML_NAMESPACE_TABLE
)
1668 if (IsXMLToken(aLocalName
, XML_ID
))
1670 nID
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1672 else if (IsXMLToken(aLocalName
, XML_POSITION
))
1674 bPosition
= sal_True
;
1675 SvXMLUnitConverter::convertNumber(nPosition
, sValue
);
1677 else if (IsXMLToken(aLocalName
, XML_START_POSITION
))
1679 SvXMLUnitConverter::convertNumber(nStartPosition
, sValue
);
1681 else if (IsXMLToken(aLocalName
, XML_END_POSITION
))
1683 SvXMLUnitConverter::convertNumber(nEndPosition
, sValue
);
1688 nStartPosition
= nEndPosition
= nPosition
;
1689 pChangeTrackingImportHelper
->AddMoveCutOff(nID
, nStartPosition
, nEndPosition
);
1692 ScXMLMovementCutOffContext::~ScXMLMovementCutOffContext()
1696 SvXMLImportContext
*ScXMLMovementCutOffContext::CreateChildContext( USHORT nPrefix
,
1697 const ::rtl::OUString
& rLocalName
,
1698 const ::com::sun::star::uno::Reference
<
1699 ::com::sun::star::xml::sax::XAttributeList
>& /* xAttrList */ )
1701 return new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1704 void ScXMLMovementCutOffContext::EndElement()
1708 ScXMLCutOffsContext::ScXMLCutOffsContext( ScXMLImport
& rImport
,
1710 const ::rtl::OUString
& rLName
,
1711 const uno::Reference
<xml::sax::XAttributeList
>& /* xAttrList */,
1712 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1713 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1714 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1716 // here are no attributes
1719 ScXMLCutOffsContext::~ScXMLCutOffsContext()
1723 SvXMLImportContext
*ScXMLCutOffsContext::CreateChildContext( USHORT nPrefix
,
1724 const ::rtl::OUString
& rLocalName
,
1725 const ::com::sun::star::uno::Reference
<
1726 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1728 SvXMLImportContext
*pContext(0);
1730 if (nPrefix
== XML_NAMESPACE_TABLE
)
1732 if (IsXMLToken(rLocalName
, XML_INSERTION_CUT_OFF
))
1733 pContext
= new ScXMLInsertionCutOffContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1734 else if (IsXMLToken(rLocalName
, XML_MOVEMENT_CUT_OFF
))
1735 pContext
= new ScXMLMovementCutOffContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1739 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1744 void ScXMLCutOffsContext::EndElement()
1748 ScXMLDeletionContext::ScXMLDeletionContext( ScXMLImport
& rImport
,
1750 const ::rtl::OUString
& rLName
,
1751 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1752 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1753 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1754 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1756 sal_uInt32
nActionNumber(0);
1757 sal_uInt32
nRejectingNumber(0);
1758 sal_Int32
nPosition(0);
1759 sal_Int32
nMultiSpanned(0);
1760 sal_Int32
nTable(0);
1761 ScChangeActionState
nActionState(SC_CAS_VIRGIN
);
1762 ScChangeActionType
nActionType(SC_CAT_DELETE_COLS
);
1764 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1765 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
1767 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1768 rtl::OUString aLocalName
;
1769 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1770 sAttrName
, &aLocalName
));
1771 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1773 if (nPrefix
== XML_NAMESPACE_TABLE
)
1775 if (IsXMLToken(aLocalName
, XML_ID
))
1777 nActionNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1779 else if (IsXMLToken(aLocalName
, XML_ACCEPTANCE_STATE
))
1781 if (IsXMLToken(sValue
, XML_ACCEPTED
))
1782 nActionState
= SC_CAS_ACCEPTED
;
1783 else if (IsXMLToken(sValue
, XML_REJECTED
))
1784 nActionState
= SC_CAS_REJECTED
;
1786 else if (IsXMLToken(aLocalName
, XML_REJECTING_CHANGE_ID
))
1788 nRejectingNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1790 else if (IsXMLToken(aLocalName
, XML_TYPE
))
1792 if (IsXMLToken(sValue
, XML_ROW
))
1794 nActionType
= SC_CAT_DELETE_ROWS
;
1796 else if (IsXMLToken(aLocalName
, XML_TABLE
))
1798 nActionType
= SC_CAT_DELETE_TABS
;
1801 else if (IsXMLToken(aLocalName
, XML_POSITION
))
1803 SvXMLUnitConverter::convertNumber(nPosition
, sValue
);
1805 else if (IsXMLToken(aLocalName
, XML_TABLE
))
1807 SvXMLUnitConverter::convertNumber(nTable
, sValue
);
1809 else if (IsXMLToken(aLocalName
, XML_MULTI_DELETION_SPANNED
))
1811 SvXMLUnitConverter::convertNumber(nMultiSpanned
, sValue
);
1816 pChangeTrackingImportHelper
->StartChangeAction(nActionType
);
1817 pChangeTrackingImportHelper
->SetActionNumber(nActionNumber
);
1818 pChangeTrackingImportHelper
->SetActionState(nActionState
);
1819 pChangeTrackingImportHelper
->SetRejectingNumber(nRejectingNumber
);
1820 pChangeTrackingImportHelper
->SetPosition(nPosition
, 1, nTable
);
1821 pChangeTrackingImportHelper
->SetMultiSpanned(static_cast<sal_Int16
>(nMultiSpanned
));
1824 ScXMLDeletionContext::~ScXMLDeletionContext()
1828 SvXMLImportContext
*ScXMLDeletionContext::CreateChildContext( USHORT nPrefix
,
1829 const ::rtl::OUString
& rLocalName
,
1830 const ::com::sun::star::uno::Reference
<
1831 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1833 SvXMLImportContext
*pContext(0);
1835 if ((nPrefix
== XML_NAMESPACE_OFFICE
) && (IsXMLToken(rLocalName
, XML_CHANGE_INFO
)))
1837 pContext
= new ScXMLChangeInfoContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1839 else if (nPrefix
== XML_NAMESPACE_TABLE
)
1841 if (IsXMLToken(rLocalName
, XML_DEPENDENCIES
))
1842 pContext
= new ScXMLDependingsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1843 else if (IsXMLToken(rLocalName
, XML_DELETIONS
))
1844 pContext
= new ScXMLDeletionsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1845 else if (IsXMLToken(rLocalName
, XML_CUT_OFFS
) || rLocalName
.equalsAsciiL("cut_offs", 8))
1846 pContext
= new ScXMLCutOffsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1849 DBG_ERROR("don't know this");
1854 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1859 void ScXMLDeletionContext::EndElement()
1861 pChangeTrackingImportHelper
->EndChangeAction();
1864 ScXMLMovementContext::ScXMLMovementContext( ScXMLImport
& rImport
,
1866 const ::rtl::OUString
& rLName
,
1867 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1868 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1869 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1870 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1872 sal_uInt32
nActionNumber(0);
1873 sal_uInt32
nRejectingNumber(0);
1874 ScChangeActionState
nActionState(SC_CAS_VIRGIN
);
1876 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1877 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1879 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1880 rtl::OUString aLocalName
;
1881 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1882 sAttrName
, &aLocalName
));
1883 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1885 if (nPrefix
== XML_NAMESPACE_TABLE
)
1887 if (IsXMLToken(aLocalName
, XML_ID
))
1889 nActionNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1891 else if (IsXMLToken(aLocalName
, XML_ACCEPTANCE_STATE
))
1893 if (IsXMLToken(sValue
, XML_ACCEPTED
))
1894 nActionState
= SC_CAS_ACCEPTED
;
1895 else if (IsXMLToken(sValue
, XML_REJECTED
))
1896 nActionState
= SC_CAS_REJECTED
;
1898 else if (IsXMLToken(aLocalName
, XML_REJECTING_CHANGE_ID
))
1900 nRejectingNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1905 pChangeTrackingImportHelper
->StartChangeAction(SC_CAT_MOVE
);
1906 pChangeTrackingImportHelper
->SetActionNumber(nActionNumber
);
1907 pChangeTrackingImportHelper
->SetActionState(nActionState
);
1908 pChangeTrackingImportHelper
->SetRejectingNumber(nRejectingNumber
);
1911 ScXMLMovementContext::~ScXMLMovementContext()
1915 SvXMLImportContext
*ScXMLMovementContext::CreateChildContext( USHORT nPrefix
,
1916 const ::rtl::OUString
& rLocalName
,
1917 const ::com::sun::star::uno::Reference
<
1918 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
1920 SvXMLImportContext
*pContext(0);
1922 if ((nPrefix
== XML_NAMESPACE_OFFICE
) && (IsXMLToken(rLocalName
, XML_CHANGE_INFO
)))
1924 pContext
= new ScXMLChangeInfoContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1926 else if (nPrefix
== XML_NAMESPACE_TABLE
)
1928 if (IsXMLToken(rLocalName
, XML_DEPENDENCIES
))
1929 pContext
= new ScXMLDependingsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1930 else if (IsXMLToken(rLocalName
, XML_DELETIONS
))
1931 pContext
= new ScXMLDeletionsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
1932 else if (IsXMLToken(rLocalName
, XML_SOURCE_RANGE_ADDRESS
))
1933 pContext
= new ScXMLBigRangeContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, aSourceRange
);
1934 else if (IsXMLToken(rLocalName
, XML_TARGET_RANGE_ADDRESS
))
1935 pContext
= new ScXMLBigRangeContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, aTargetRange
);
1939 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
1944 void ScXMLMovementContext::EndElement()
1946 pChangeTrackingImportHelper
->SetMoveRanges(aSourceRange
, aTargetRange
);
1947 pChangeTrackingImportHelper
->EndChangeAction();
1950 ScXMLRejectionContext::ScXMLRejectionContext( ScXMLImport
& rImport
,
1952 const ::rtl::OUString
& rLName
,
1953 const uno::Reference
<xml::sax::XAttributeList
>& xAttrList
,
1954 ScXMLChangeTrackingImportHelper
* pTempChangeTrackingImportHelper
) :
1955 SvXMLImportContext( rImport
, nPrfx
, rLName
),
1956 pChangeTrackingImportHelper(pTempChangeTrackingImportHelper
)
1958 sal_uInt32
nActionNumber(0);
1959 sal_uInt32
nRejectingNumber(0);
1960 ScChangeActionState
nActionState(SC_CAS_VIRGIN
);
1962 sal_Int16
nAttrCount(xAttrList
.is() ? xAttrList
->getLength() : 0);
1963 for( sal_Int16 i
=0; i
< nAttrCount
; ++i
)
1965 const rtl::OUString
& sAttrName(xAttrList
->getNameByIndex( i
));
1966 rtl::OUString aLocalName
;
1967 USHORT
nPrefix(GetScImport().GetNamespaceMap().GetKeyByAttrName(
1968 sAttrName
, &aLocalName
));
1969 const rtl::OUString
& sValue(xAttrList
->getValueByIndex( i
));
1971 if (nPrefix
== XML_NAMESPACE_TABLE
)
1973 if (IsXMLToken(aLocalName
, XML_ID
))
1975 nActionNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1977 else if (IsXMLToken(aLocalName
, XML_ACCEPTANCE_STATE
))
1979 if (IsXMLToken(sValue
, XML_ACCEPTED
))
1980 nActionState
= SC_CAS_ACCEPTED
;
1981 else if (IsXMLToken(sValue
, XML_REJECTED
))
1982 nActionState
= SC_CAS_REJECTED
;
1984 else if (IsXMLToken(aLocalName
, XML_REJECTING_CHANGE_ID
))
1986 nRejectingNumber
= pChangeTrackingImportHelper
->GetIDFromString(sValue
);
1991 pChangeTrackingImportHelper
->StartChangeAction(SC_CAT_MOVE
);
1992 pChangeTrackingImportHelper
->SetActionNumber(nActionNumber
);
1993 pChangeTrackingImportHelper
->SetActionState(nActionState
);
1994 pChangeTrackingImportHelper
->SetRejectingNumber(nRejectingNumber
);
1997 ScXMLRejectionContext::~ScXMLRejectionContext()
2001 SvXMLImportContext
*ScXMLRejectionContext::CreateChildContext( USHORT nPrefix
,
2002 const ::rtl::OUString
& rLocalName
,
2003 const ::com::sun::star::uno::Reference
<
2004 ::com::sun::star::xml::sax::XAttributeList
>& xAttrList
)
2006 SvXMLImportContext
*pContext(0);
2008 if ((nPrefix
== XML_NAMESPACE_OFFICE
) && (IsXMLToken(rLocalName
, XML_CHANGE_INFO
)))
2010 pContext
= new ScXMLChangeInfoContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
2012 else if (nPrefix
== XML_NAMESPACE_TABLE
)
2014 if (IsXMLToken(rLocalName
, XML_DEPENDENCIES
))
2015 pContext
= new ScXMLDependingsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
2016 else if (IsXMLToken(rLocalName
, XML_DELETIONS
))
2017 pContext
= new ScXMLDeletionsContext(GetScImport(), nPrefix
, rLocalName
, xAttrList
, pChangeTrackingImportHelper
);
2021 pContext
= new SvXMLImportContext( GetImport(), nPrefix
, rLocalName
);
2026 void ScXMLRejectionContext::EndElement()
2028 pChangeTrackingImportHelper
->EndChangeAction();