1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <com/sun/star/xml/sax/SAXParseException.hpp>
21 #include <com/sun/star/xml/sax/SAXException.hpp>
22 #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
23 #include <com/sun/star/xml/sax/XAttributeList.hpp>
25 #include <sax/tools/converter.hxx>
27 #include <xmloff/nmspmap.hxx>
28 #include <xmloff/xmltoken.hxx>
29 #include <xmloff/xmlnmspe.hxx>
30 #include "PropType.hxx"
31 #include "DeepTContext.hxx"
32 #include "RenameElemTContext.hxx"
33 #include "ProcAttrTContext.hxx"
34 #include "ActionMapTypesOOo.hxx"
35 #include "MutableAttrList.hxx"
36 #include "TransformerActions.hxx"
37 #include "PropertyActionsOOo.hxx"
38 #include "TransformerBase.hxx"
40 #include "StyleOOoTContext.hxx"
41 #include <xmloff/xmluconv.hxx>
42 #include <rtl/ustrbuf.hxx>
43 #include <rtl/math.hxx>
44 #include <osl/diagnose.h>
46 using namespace ::xmloff::token
;
47 using namespace ::com::sun::star::uno
;
48 using namespace ::com::sun::star::xml::sax
;
50 const sal_uInt16 MAX_PROP_TYPES
= 4;
51 #define ENTRY4(a,b,c,d) \
52 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
53 XML_PROP_TYPE_##c, XML_PROP_TYPE_##d }
54 #define ENTRY3(a,b,c) \
55 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
56 XML_PROP_TYPE_##c, XML_PROP_TYPE_END }
58 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
59 XML_PROP_TYPE_END, XML_PROP_TYPE_END }
61 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##END, \
62 XML_PROP_TYPE_END, XML_PROP_TYPE_END }
64 static const XMLPropType aPropTypes
[XML_FAMILY_TYPE_END
][MAX_PROP_TYPES
] =
66 ENTRY3( GRAPHIC
, PARAGRAPH
, TEXT
), // XML_FAMILY_TYPE_GRAPHIC,
67 ENTRY3( GRAPHIC
, PARAGRAPH
, TEXT
), // XML_FAMILY_TYPE_PRESENTATION,
68 ENTRY1( DRAWING_PAGE
), // XML_FAMILY_TYPE_DRAWING_PAGE,
69 ENTRY1( END
), // XML_FAMILY_TYPE_MASTER_PAGE
70 ENTRY1( PAGE_LAYOUT
), // XML_FAMILY_TYPE_PAGE_LAYOUT,
71 ENTRY1( HEADER_FOOTER
), // XML_FAMILY_TYPE_HEADER_FOOTER
72 ENTRY1( TEXT
), // XML_FAMILY_TYPE_TEXT,
73 ENTRY2( PARAGRAPH
, TEXT
), // XML_FAMILY_TYPE_PARAGRAPH,
74 ENTRY1( RUBY
), //XML_FAMILY_TYPE_RUBY,
75 ENTRY1( SECTION
), // XML_FAMILY_TYPE_SECTION,
76 ENTRY1( TABLE
), // XML_FAMILY_TYPE_TABLE,
77 ENTRY1( TABLE_COLUMN
), // XML_FAMILY_TYPE_TABLE_COLUMN,
78 ENTRY1( TABLE_ROW
), // XML_FAMILY_TYPE_TABLE_ROW,
79 ENTRY3( TABLE_CELL
, PARAGRAPH
, TEXT
), // XML_FAMILY_TYPE_TABLE_CELL,
80 ENTRY1( LIST_LEVEL
), // XML_FAMILY_TYPE_LIST,
81 ENTRY4( CHART
, GRAPHIC
, PARAGRAPH
, TEXT
), // XML_FAMILY_TYPE_CHART,
82 ENTRY1( TEXT
), // XML_FAMILY_TYPE_DATA,
83 ENTRY1( END
), // XML_FAMILY_TYPE_GRADIENT,
84 ENTRY1( END
), // XML_FAMILY_TYPE_HATCH,
85 ENTRY1( END
), // XML_FAMILY_TYPE_FILL_IMAGE,
86 ENTRY1( END
), // XML_FAMILY_TYPE_STROKE_DASH,
87 ENTRY1( END
), // XML_FAMILY_TYPE_MARKER,
90 static const XMLTokenEnum aPropTokens
[XML_PROP_TYPE_END
] =
92 XML_GRAPHIC_PROPERTIES
,
93 XML_DRAWING_PAGE_PROPERTIES
,
94 XML_PAGE_LAYOUT_PROPERTIES
,
95 XML_HEADER_FOOTER_PROPERTIES
,
97 XML_PARAGRAPH_PROPERTIES
,
99 XML_SECTION_PROPERTIES
,
100 XML_TABLE_PROPERTIES
,
101 XML_TABLE_COLUMN_PROPERTIES
,
102 XML_TABLE_ROW_PROPERTIES
,
103 XML_TABLE_CELL_PROPERTIES
,
104 XML_LIST_LEVEL_PROPERTIES
,
108 static const sal_uInt16 aAttrActionMaps
[XML_PROP_TYPE_END
] =
110 PROP_OOO_GRAPHIC_ATTR_ACTIONS
,
111 PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS
, // DRAWING_PAGE
112 PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS
,
113 PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS
,
114 PROP_OOO_TEXT_ATTR_ACTIONS
,
115 PROP_OOO_PARAGRAPH_ATTR_ACTIONS
,
116 MAX_OOO_PROP_ACTIONS
, // RUBY
117 PROP_OOO_SECTION_ATTR_ACTIONS
,
118 PROP_OOO_TABLE_ATTR_ACTIONS
,
119 PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS
,
120 PROP_OOO_TABLE_ROW_ATTR_ACTIONS
,
121 PROP_OOO_TABLE_CELL_ATTR_ACTIONS
,
122 PROP_OOO_LIST_LEVEL_ATTR_ACTIONS
,
123 PROP_OOO_CHART_ATTR_ACTIONS
126 static const sal_uInt16 aElemActionMaps
[XML_PROP_TYPE_END
] =
128 PROP_OOO_GRAPHIC_ELEM_ACTIONS
,
129 MAX_OOO_PROP_ACTIONS
,
130 MAX_OOO_PROP_ACTIONS
,
131 MAX_OOO_PROP_ACTIONS
,
132 PROP_OOO_TEXT_ELEM_ACTIONS
,
133 PROP_OOO_PARAGRAPH_ELEM_ACTIONS
,
134 MAX_OOO_PROP_ACTIONS
,
135 MAX_OOO_PROP_ACTIONS
,
136 MAX_OOO_PROP_ACTIONS
,
137 MAX_OOO_PROP_ACTIONS
,
138 MAX_OOO_PROP_ACTIONS
,
139 PROP_OOO_TABLE_CELL_ELEM_ACTIONS
,
140 MAX_OOO_PROP_ACTIONS
,
141 PROP_OOO_CHART_ELEM_ACTIONS
144 class XMLTypedPropertiesOOoTContext_Impl
: public XMLPersElemContentTContext
146 css::uno::Reference
< css::xml::sax::XAttributeList
> m_xAttrList
;
149 XMLTypedPropertiesOOoTContext_Impl( XMLTransformerBase
& rTransformer
,
150 const OUString
& rQName
);
152 virtual ~XMLTypedPropertiesOOoTContext_Impl() override
;
154 using XMLPersAttrListTContext::AddAttribute
;
155 void AddAttribute( const OUString
&sName
,
156 const OUString
&sValue
);
157 void AddAttribute( sal_uInt16 nPrefix
, XMLTokenEnum eToken
,
158 const OUString
&sValue
);
160 virtual void StartElement( const css::uno::Reference
< css::xml::sax::XAttributeList
>& rAttrList
) override
;
162 virtual void Export() override
;
165 XMLTypedPropertiesOOoTContext_Impl::XMLTypedPropertiesOOoTContext_Impl(
166 XMLTransformerBase
& rImp
,
167 const OUString
& rQName
) :
168 XMLPersElemContentTContext( rImp
, rQName
),
169 m_xAttrList( new XMLMutableAttributeList() )
173 XMLTypedPropertiesOOoTContext_Impl::~XMLTypedPropertiesOOoTContext_Impl()
177 void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
178 const OUString
&sName
,
179 const OUString
&sValue
)
181 static_cast< XMLMutableAttributeList
* >( m_xAttrList
.get() )
182 ->AddAttribute( sName
, sValue
);
185 void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
186 sal_uInt16 nPrefix
, XMLTokenEnum eToken
,
187 const OUString
&sValue
)
190 GetTransformer().GetNamespaceMap().GetQNameByKey(
191 nPrefix
, ::xmloff::token::GetXMLToken( eToken
) ) );
192 static_cast< XMLMutableAttributeList
* >( m_xAttrList
.get() )
193 ->AddAttribute( sName
, sValue
);
196 void XMLTypedPropertiesOOoTContext_Impl::StartElement(
197 const Reference
< XAttributeList
>& )
199 // empty, ignore even the attribute list
202 void XMLTypedPropertiesOOoTContext_Impl::Export()
204 if( m_xAttrList
->getLength() || HasElementContent() )
206 GetTransformer().GetDocHandler()->startElement( GetQName(), m_xAttrList
);
208 GetTransformer().GetDocHandler()->endElement( GetQName() );
212 class XMLPropertiesOOoTContext_Impl
: public XMLTransformerContext
214 ::rtl::Reference
< XMLTypedPropertiesOOoTContext_Impl
>
215 m_aPropContexts
[MAX_PROP_TYPES
];
217 typedef XMLPropType XMLPropTypes
[MAX_PROP_TYPES
];
219 XMLPropTypes m_aPropTypes
;
223 XMLTypedPropertiesOOoTContext_Impl
*GetPropContextAndAction(
224 TransformerAction_Impl
& rAction
,
225 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
228 XMLTypedPropertiesOOoTContext_Impl
*GetPropContext(
232 XMLPropertiesOOoTContext_Impl( XMLTransformerBase
& rTransformer
,
233 const OUString
& rQName
,
234 const XMLPropTypes
& rTypes
,
237 virtual ~XMLPropertiesOOoTContext_Impl() override
;
239 rtl::Reference
<XMLTransformerContext
> CreateChildContext(
241 const OUString
& rLocalName
,
242 const OUString
& rQName
,
243 const Reference
< XAttributeList
>& rAttrList
) override
;
245 virtual void StartElement( const css::uno::Reference
< css::xml::sax::XAttributeList
>& rAttrList
) override
;
247 virtual void EndElement() override
;
249 virtual void Characters( const OUString
& rChars
) override
;
251 virtual void Export() override
;
253 virtual bool IsPersistent() const override
;
256 XMLTypedPropertiesOOoTContext_Impl
257 *XMLPropertiesOOoTContext_Impl::GetPropContext(
260 sal_uInt16 nIndex
= MAX_PROP_TYPES
;
261 for( sal_uInt16 i
=0; i
< MAX_PROP_TYPES
; i
++ )
263 if( m_aPropTypes
[i
] == eType
)
269 if( MAX_PROP_TYPES
== nIndex
)
272 if( !m_aPropContexts
[nIndex
].is() )
274 m_aPropContexts
[nIndex
] =
275 new XMLTypedPropertiesOOoTContext_Impl(
277 GetTransformer().GetNamespaceMap().GetQNameByKey(
279 ::xmloff::token::GetXMLToken(
280 aPropTokens
[m_aPropTypes
[nIndex
]] ) ));
283 return m_aPropContexts
[nIndex
].get();
286 XMLTypedPropertiesOOoTContext_Impl
287 *XMLPropertiesOOoTContext_Impl::GetPropContextAndAction(
288 TransformerAction_Impl
& rAction
,
289 sal_uInt16 nPrefix
, const OUString
& rLocalName
,
292 rAction
.m_nActionType
= XML_ATACTION_COPY
;
293 sal_uInt16 nIndex
= 0;
295 XMLTransformerActions::key_type
aKey( nPrefix
, rLocalName
);
297 while( i
< MAX_PROP_TYPES
&& XML_PROP_TYPE_END
!=m_aPropTypes
[i
])
299 sal_uInt16 nActionMap
=
300 (bElem
? aElemActionMaps
: aAttrActionMaps
)[m_aPropTypes
[i
]];
301 if( nActionMap
< MAX_OOO_PROP_ACTIONS
)
303 XMLTransformerActions
*pActions
=
304 GetTransformer().GetUserDefinedActions( nActionMap
);
305 OSL_ENSURE( pActions
, "go no actions" );
308 XMLTransformerActions::const_iterator aIter
=
309 pActions
->find( aKey
);
311 if( !(aIter
== pActions
->end()) )
313 rAction
= (*aIter
).second
;
323 if( !( XML_NAMESPACE_NONE
== nPrefix
||
324 (XML_NAMESPACE_UNKNOWN_FLAG
& nPrefix
) ||
325 XML_PROP_TYPE_END
==m_aPropTypes
[1] ||
326 (i
<MAX_PROP_TYPES
&& XML_PROP_TYPE_END
!=m_aPropTypes
[i
]) ) )
328 OString
aTmp("Didn't find property: ");
329 const OUString
& rPrefix
=
330 GetTransformer().GetNamespaceMap().GetPrefixByKey( nPrefix
);
331 aTmp
+= OString( rPrefix
.getStr(), rPrefix
.getLength(),
332 RTL_TEXTENCODING_ASCII_US
);
333 aTmp
+= OString( ':' );
334 aTmp
+= OString( rLocalName
.getStr(), rLocalName
.getLength(),
335 RTL_TEXTENCODING_ASCII_US
);
336 aTmp
+= OString(", assuming <style:");
337 const OUString
& rName
=
338 ::xmloff::token::GetXMLToken( aPropTokens
[m_aPropTypes
[0]] );
339 aTmp
+= OString( rName
.getStr(), rName
.getLength(),
340 RTL_TEXTENCODING_ASCII_US
);
341 aTmp
+= OString( '>' );
343 OSL_FAIL(aTmp
.getStr());
347 if( !m_aPropContexts
[nIndex
].is() )
349 m_aPropContexts
[nIndex
] =
350 new XMLTypedPropertiesOOoTContext_Impl(
352 GetTransformer().GetNamespaceMap().GetQNameByKey(
354 ::xmloff::token::GetXMLToken(
355 aPropTokens
[m_aPropTypes
[nIndex
]] ) ));
358 return m_aPropContexts
[nIndex
].get();
361 XMLPropertiesOOoTContext_Impl::XMLPropertiesOOoTContext_Impl(
362 XMLTransformerBase
& rImp
,
363 const OUString
& rQName
,
364 const XMLPropTypes
& rTypes
,
366 XMLTransformerContext( rImp
, rQName
),
367 m_bPersistent( bPersistent
)
369 for( sal_uInt16 i
=0; i
< MAX_PROP_TYPES
; ++i
)
371 // remember the types that belong to the attribute and element lists
372 m_aPropTypes
[i
] = rTypes
[i
];
376 XMLPropertiesOOoTContext_Impl::~XMLPropertiesOOoTContext_Impl()
380 rtl::Reference
<XMLTransformerContext
> XMLPropertiesOOoTContext_Impl::CreateChildContext(
382 const OUString
& rLocalName
,
383 const OUString
& rQName
,
384 const Reference
< XAttributeList
>& rAttrList
)
386 TransformerAction_Impl aAction
;
387 return GetPropContextAndAction( aAction
, nPrefix
, rLocalName
, true )
388 ->CreateChildContext( nPrefix
, rLocalName
, rQName
, rAttrList
);
391 void XMLPropertiesOOoTContext_Impl::StartElement(
392 const Reference
< XAttributeList
>& rAttrList
)
394 XMLTypedPropertiesOOoTContext_Impl
* pIntervalMinorDivisorContext
= nullptr;
395 double fIntervalMajor
= 0.0;
396 double fIntervalMinor
= 0.0;
397 bool bMoveProtect
= false;
398 bool bSizeProtect
= false;
399 OUString aProtectAttrValue
;
400 XMLTypedPropertiesOOoTContext_Impl
* pProtectContext
= nullptr;
402 /* Attribute <style:mirror> has to be priority over attribute <style:draw>.
403 The filter from OpenDocument file format to OpenOffice.org file format
404 produces styles with both attributes. (#i49139#)
406 bool bExistStyleMirror( false );
407 OUString aStyleMirrorAttrValue
;
408 bool bExistDrawMirror( false );
409 OUString aDrawMirrorAttrValue
;
410 XMLTypedPropertiesOOoTContext_Impl
* pMirrorContext( nullptr );
412 sal_Int16 nAttrCount
= rAttrList
.is() ? rAttrList
->getLength() : 0;
413 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
415 const OUString sAttrName
= rAttrList
->getNameByIndex( i
);
416 const OUString sAttrValue
= rAttrList
->getValueByIndex( i
);
419 GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName
,
421 TransformerAction_Impl aAction
;
422 XMLTypedPropertiesOOoTContext_Impl
*pContext
=
423 GetPropContextAndAction( aAction
, nPrefix
, aLocalName
, false );
424 switch( aAction
.m_nActionType
)
426 case XML_ATACTION_REMOVE
:
428 case XML_ATACTION_COPY
:
429 pContext
->AddAttribute( sAttrName
, sAttrValue
);
431 case XML_ATACTION_COPY_DUPLICATE
:
433 pContext
->AddAttribute( sAttrName
, sAttrValue
);
434 XMLTypedPropertiesOOoTContext_Impl
*pContext2
=
435 GetPropContext( (XMLPropType
)aAction
.m_nParam1
);
437 pContext2
->AddAttribute( sAttrName
, sAttrValue
);
440 case XML_ATACTION_RENAME
:
442 pContext
->AddAttribute( aAction
.GetQNamePrefixFromParam1(),
443 aAction
.GetQNameTokenFromParam1(),
447 case XML_ATACTION_ENCODE_STYLE_NAME_REF
:
449 OUString
aAttrValue( sAttrValue
);
450 GetTransformer().EncodeStyleName(aAttrValue
);
451 pContext
->AddAttribute( sAttrName
, aAttrValue
);
454 case XML_ATACTION_RENAME_ENCODE_STYLE_NAME_REF
:
456 OUString
aAttrValue( sAttrValue
);
457 GetTransformer().EncodeStyleName(aAttrValue
);
458 pContext
->AddAttribute( aAction
.GetQNamePrefixFromParam1(),
459 aAction
.GetQNameTokenFromParam1(),
463 case XML_ATACTION_NEG_PERCENT
:
465 OUString
aAttrValue( sAttrValue
);
466 XMLTransformerBase::NegPercent(aAttrValue
);
467 pContext
->AddAttribute( sAttrName
, aAttrValue
);
470 case XML_ATACTION_RENAME_NEG_PERCENT
:
472 OUString
aAttrValue( sAttrValue
);
473 XMLTransformerBase::NegPercent(aAttrValue
);
474 pContext
->AddAttribute( aAction
.GetQNamePrefixFromParam1(),
475 aAction
.GetQNameTokenFromParam1(),
479 case XML_ATACTION_INCH2IN
:
481 OUString
aAttrValue( sAttrValue
);
482 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue
);
483 pContext
->AddAttribute( sAttrName
, aAttrValue
);
486 case XML_ATACTION_INCH2IN_DUPLICATE
:
488 OUString
aAttrValue( sAttrValue
);
489 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue
);
490 pContext
->AddAttribute( sAttrName
, aAttrValue
);
491 XMLTypedPropertiesOOoTContext_Impl
*pContext2
=
492 GetPropContext( (XMLPropType
)aAction
.m_nParam1
);
494 pContext2
->AddAttribute( sAttrName
, aAttrValue
);
497 case XML_ATACTION_INCHS2INS
:
499 OUString
aAttrValue( sAttrValue
);
500 XMLTransformerBase::ReplaceInchWithIn( aAttrValue
);
501 pContext
->AddAttribute( sAttrName
, aAttrValue
);
504 case XML_PTACTION_LINE_MODE
:
506 const OUString
& aAttrValue( GetXMLToken(
507 IsXMLToken( sAttrValue
, XML_TRUE
)
509 : XML_SKIP_WHITE_SPACE
) );
511 GetTransformer().GetNamespaceMap().GetQNameByKey(
513 GetXMLToken( XML_TEXT_UNDERLINE_MODE
) ) );
514 pContext
->AddAttribute( aAttrQName
, aAttrValue
);
517 GetTransformer().GetNamespaceMap().GetQNameByKey(
519 GetXMLToken( XML_TEXT_LINE_THROUGH_MODE
) );
520 pContext
->AddAttribute( aAttrQName
, aAttrValue
);
523 case XML_PTACTION_KEEP_WITH_NEXT
:
525 const OUString
& aAttrValue( GetXMLToken(
526 IsXMLToken( sAttrValue
, XML_TRUE
)
529 pContext
->AddAttribute( sAttrName
, aAttrValue
);
532 case XML_PTACTION_UNDERLINE
:
534 XMLTokenEnum eToken
= GetTransformer().GetToken( sAttrValue
);
535 bool bBold
= false, bDouble
= false;
549 case XML_BOLD_DOTTED
:
557 case XML_BOLD_LONG_DASH
:
558 eToken
= XML_LONG_DASH
;
561 case XML_BOLD_DOT_DASH
:
562 eToken
= XML_DOT_DASH
;
565 case XML_BOLD_DOT_DOT_DASH
:
566 eToken
= XML_DOT_DOT_DASH
;
573 case XML_DOUBLE_WAVE
:
582 OSL_FAIL( "xmloff::XMLPropertiesOOoTContext_Impl::StartElement(), unknown underline token!" );
585 pContext
->AddAttribute(
586 GetTransformer().GetNamespaceMap().GetQNameByKey(
588 GetXMLToken( XML_TEXT_UNDERLINE_STYLE
) ),
589 eToken
!= XML_TOKEN_END
? GetXMLToken( eToken
)
592 pContext
->AddAttribute(
593 GetTransformer().GetNamespaceMap().GetQNameByKey(
595 GetXMLToken( XML_TEXT_UNDERLINE_TYPE
) ),
596 GetXMLToken( XML_DOUBLE
) );
598 pContext
->AddAttribute(
599 GetTransformer().GetNamespaceMap().GetQNameByKey(
601 GetXMLToken( XML_TEXT_UNDERLINE_WIDTH
) ),
602 GetXMLToken( XML_BOLD
) );
605 case XML_PTACTION_LINETHROUGH
:
607 XMLTokenEnum eToken
= GetTransformer().GetToken( sAttrValue
);
608 bool bBold
= false, bDouble
= false;
612 case XML_SINGLE_LINE
:
615 case XML_DOUBLE_LINE
:
634 pContext
->AddAttribute(
635 GetTransformer().GetNamespaceMap().GetQNameByKey(
637 GetXMLToken( XML_TEXT_LINE_THROUGH_STYLE
) ),
638 eToken
!= XML_TOKEN_END
? GetXMLToken( eToken
)
641 pContext
->AddAttribute(
642 GetTransformer().GetNamespaceMap().GetQNameByKey(
644 GetXMLToken( XML_TEXT_LINE_THROUGH_TYPE
) ),
645 GetXMLToken( XML_DOUBLE
) );
647 pContext
->AddAttribute(
648 GetTransformer().GetNamespaceMap().GetQNameByKey(
650 GetXMLToken( XML_TEXT_LINE_THROUGH_WIDTH
) ),
651 GetXMLToken( XML_BOLD
) );
653 pContext
->AddAttribute(
654 GetTransformer().GetNamespaceMap().GetQNameByKey(
656 GetXMLToken( XML_TEXT_LINE_THROUGH_TEXT
) ),
660 case XML_PTACTION_SPLINES
:
662 sal_Int32 nSplineType
= sAttrValue
.toInt32();
663 OUString aNewAttrName
= GetTransformer().GetNamespaceMap().GetQNameByKey(
664 XML_NAMESPACE_CHART
, GetXMLToken( XML_INTERPOLATION
) );
666 switch( nSplineType
)
670 pContext
->AddAttribute(
671 aNewAttrName
, GetXMLToken( XML_NONE
));
675 pContext
->AddAttribute(
676 aNewAttrName
, GetXMLToken( XML_CUBIC_SPLINE
));
680 pContext
->AddAttribute(
681 aNewAttrName
, GetXMLToken( XML_B_SPLINE
));
685 OSL_FAIL( "invalid spline type" );
686 pContext
->AddAttribute(
687 aNewAttrName
, GetXMLToken( XML_NONE
));
692 case XML_PTACTION_INTERVAL_MAJOR
:
693 pContext
->AddAttribute( sAttrName
, sAttrValue
);
694 ::sax::Converter::convertDouble( fIntervalMajor
, sAttrValue
);
696 case XML_PTACTION_INTERVAL_MINOR
:
697 ::sax::Converter::convertDouble( fIntervalMinor
, sAttrValue
);
698 pIntervalMinorDivisorContext
= pContext
;
700 case XML_PTACTION_SYMBOL
:
702 sal_Int32 nSymbolType
= sAttrValue
.toInt32();
703 OUString aNewAttrName
= GetTransformer().GetNamespaceMap().GetQNameByKey(
704 XML_NAMESPACE_CHART
, GetXMLToken( XML_SYMBOL_TYPE
) );
706 if( nSymbolType
>= 0 )
708 pContext
->AddAttribute( aNewAttrName
, GetXMLToken( XML_NAMED_SYMBOL
));
709 enum XMLTokenEnum eToken
= XML_TOKEN_INVALID
;
710 switch( nSymbolType
)
714 // "square" has an awkward token name
715 eToken
= XML_GRADIENTSTYLE_SQUARE
;
719 eToken
= XML_DIAMOND
;
723 eToken
= XML_ARROW_DOWN
;
727 eToken
= XML_ARROW_UP
;
731 eToken
= XML_ARROW_RIGHT
;
735 eToken
= XML_ARROW_LEFT
;
739 eToken
= XML_BOW_TIE
;
743 eToken
= XML_HOURGLASS
;
758 eToken
= XML_ASTERISK
;
761 eToken
= XML_HORIZONTAL_BAR
;
764 eToken
= XML_VERTICAL_BAR
;
767 OSL_FAIL( "invalid named symbol" );
771 if( eToken
!= XML_TOKEN_INVALID
)
773 pContext
->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey(
774 XML_NAMESPACE_CHART
, GetXMLToken( XML_SYMBOL_NAME
)),
775 GetXMLToken( eToken
));
780 switch( nSymbolType
)
784 pContext
->AddAttribute(
785 aNewAttrName
, GetXMLToken( XML_NONE
));
789 pContext
->AddAttribute(
790 aNewAttrName
, GetXMLToken( XML_AUTOMATIC
));
794 pContext
->AddAttribute(
795 aNewAttrName
, GetXMLToken( XML_IMAGE
));
798 OSL_FAIL( "invalid symbol type" );
799 pContext
->AddAttribute(
800 aNewAttrName
, GetXMLToken( XML_NONE
));
806 case XML_PTACTION_SYMBOL_IMAGE_NAME
:
808 // create an xlink:href element for URI attribute
809 XMLPersAttrListTContext
*pSymbolImageContext
= new XMLPersAttrListTContext(
810 GetTransformer(), GetTransformer().GetNamespaceMap().GetQNameByKey(
811 XML_NAMESPACE_CHART
, GetXMLToken( XML_SYMBOL_IMAGE
)));
812 rtl::Reference
<XMLTransformerContext
> xSymbolImageContext(pSymbolImageContext
);
814 OUString
aAttrValue( sAttrValue
);
815 if( GetTransformer().ConvertURIToOASIS( aAttrValue
, true ))
817 pSymbolImageContext
->AddAttribute( XML_NAMESPACE_XLINK
, XML_HREF
, aAttrValue
);
818 pContext
->AddContent(xSymbolImageContext
);
824 case XML_PTACTION_TRANSPARENCY
:
826 OUString
aAttrValue( sAttrValue
);
827 XMLTransformerBase::NegPercent(aAttrValue
);
828 pContext
->AddAttribute( XML_NAMESPACE_DRAW
,
831 pContext
->AddAttribute( XML_NAMESPACE_DRAW
,
837 case XML_PTACTION_BREAK_INSIDE
:
839 pContext
->AddAttribute(
840 XML_NAMESPACE_FO
, XML_KEEP_TOGETHER
,
842 IsXMLToken( sAttrValue
, XML_COLUMNSPLIT_AVOID
)
847 case XML_ATACTION_CAPTION_ESCAPE_OOO
:
849 OUString
aAttrValue( sAttrValue
);
850 if( aAttrValue
.indexOf( '%' ) != -1 )
852 sal_Int32 nValue
= 0;
853 ::sax::Converter::convertPercent( nValue
, sAttrValue
);
858 ::sax::Converter::convertPercent( aOut
, nValue
);
859 aAttrValue
= aOut
.makeStringAndClear();
864 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue
);
867 pContext
->AddAttribute( sAttrName
, aAttrValue
);
870 case XML_ATACTION_MOVE_PROTECT
:
871 bMoveProtect
= IsXMLToken( sAttrValue
, XML_TRUE
);
872 pProtectContext
= pContext
;
874 case XML_ATACTION_SIZE_PROTECT
:
875 bSizeProtect
= IsXMLToken( sAttrValue
, XML_TRUE
);
876 pProtectContext
= pContext
;
878 case XML_ATACTION_PROTECT
:
879 aProtectAttrValue
= sAttrValue
;
880 pProtectContext
= pContext
;
882 case XML_ATACTION_DRAW_MIRROR_OOO
: // renames draw:mirror to style:mirror and adapts values
884 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
885 aDrawMirrorAttrValue
=
886 GetXMLToken( IsXMLToken( sAttrValue
, XML_TRUE
)
887 ? XML_HORIZONTAL
: XML_NONE
);
888 bExistDrawMirror
= true;
889 pMirrorContext
= pContext
;
892 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
893 case XML_ATACTION_STYLE_MIRROR_OOO
: // adapts style:mirror values
895 SvXMLTokenEnumerator
aTokenEnum( sAttrValue
);
897 while( aTokenEnum
.getNextToken( aToken
) )
899 if ( !aStyleMirrorAttrValue
.isEmpty() )
901 aStyleMirrorAttrValue
+= " ";
904 if ( IsXMLToken( aToken
, XML_HORIZONTAL_ON_LEFT_PAGES
) )
906 aStyleMirrorAttrValue
+= GetXMLToken( XML_HORIZONTAL_ON_EVEN
);
908 else if ( IsXMLToken( aToken
, XML_HORIZONTAL_ON_RIGHT_PAGES
) )
910 aStyleMirrorAttrValue
+= GetXMLToken( XML_HORIZONTAL_ON_ODD
);
914 aStyleMirrorAttrValue
+= aToken
;
917 bExistStyleMirror
= true;
918 pMirrorContext
= pContext
;
921 case XML_ATACTION_GAMMA_OOO
: // converts double value to percentage
923 double fValue
= sAttrValue
.toDouble();
924 sal_Int32 nValue
= (sal_Int32
)((fValue
* 100.0) + ( fValue
> 0 ? 0.5 : - 0.5 ) );
927 ::sax::Converter::convertPercent( aOut
, nValue
);
928 OUString
aAttrValue( aOut
.makeStringAndClear() );
929 pContext
->AddAttribute( sAttrName
, aAttrValue
);
932 case XML_ATACTION_OPACITY_FIX
:
935 if( sAttrValue
.indexOf( '%' ) != -1 )
937 ::sax::Converter::convertPercent( nValue
, sAttrValue
);
941 nValue
= sal_Int32( sAttrValue
.toDouble() * 100.0 );
943 nValue
= 100 - nValue
;
946 ::sax::Converter::convertPercent( aOut
, nValue
);
947 pContext
->AddAttribute( sAttrName
, aOut
.makeStringAndClear() );
951 OSL_ENSURE( false, "unknown action" );
956 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
957 if ( bExistStyleMirror
)
959 pMirrorContext
->AddAttribute(
960 GetTransformer().GetNamespaceMap().GetQNameByKey(
961 XML_NAMESPACE_STYLE
, GetXMLToken( XML_MIRROR
) ),
962 aStyleMirrorAttrValue
);
964 else if ( bExistDrawMirror
)
966 pMirrorContext
->AddAttribute(
967 GetTransformer().GetNamespaceMap().GetQNameByKey(
968 XML_NAMESPACE_STYLE
, GetXMLToken( XML_MIRROR
) ),
969 aDrawMirrorAttrValue
);
972 if (bMoveProtect
|| bSizeProtect
|| !aProtectAttrValue
.isEmpty())
974 if( (bMoveProtect
||bSizeProtect
) && IsXMLToken( aProtectAttrValue
, XML_NONE
) )
975 aProtectAttrValue
.clear();
977 const OUString
& rPosition
= GetXMLToken( XML_POSITION
);
978 if( bMoveProtect
&& -1 == aProtectAttrValue
.indexOf( rPosition
) )
980 if( !aProtectAttrValue
.isEmpty() )
981 aProtectAttrValue
+= " ";
982 aProtectAttrValue
+= rPosition
;
985 const OUString
& rSize
= GetXMLToken( XML_SIZE
);
986 if( bSizeProtect
&& -1 == aProtectAttrValue
.indexOf( rSize
) )
988 if( !aProtectAttrValue
.isEmpty() )
989 aProtectAttrValue
+= " ";
990 aProtectAttrValue
+= rSize
;
993 // coverity[var_deref_model] - pProtectContext is assigned in a superset of the enclosing if condition entry logic
994 pProtectContext
->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_STYLE
, GetXMLToken( XML_PROTECT
) ), aProtectAttrValue
);
997 if( pIntervalMinorDivisorContext
)
999 if( fIntervalMinor
!= 0.0 )
1001 sal_Int32 nIntervalMinorDivisor
= static_cast< sal_Int32
>(
1002 ::rtl::math::round( fIntervalMajor
/ fIntervalMinor
));
1004 OUStringBuffer aBuf
;
1005 ::sax::Converter::convertNumber( aBuf
, nIntervalMinorDivisor
);
1006 pIntervalMinorDivisorContext
->AddAttribute(
1007 GetTransformer().GetNamespaceMap().GetQNameByKey(
1008 XML_NAMESPACE_CHART
,
1009 GetXMLToken( XML_INTERVAL_MINOR_DIVISOR
)),
1010 aBuf
.makeStringAndClear());
1015 void XMLPropertiesOOoTContext_Impl::EndElement()
1017 if( !m_bPersistent
)
1021 void XMLPropertiesOOoTContext_Impl::Characters( const OUString
& )
1026 void XMLPropertiesOOoTContext_Impl::Export()
1029 for(rtl::Reference
<XMLTypedPropertiesOOoTContext_Impl
> & rPropContext
: m_aPropContexts
)
1031 if( rPropContext
.is() )
1032 rPropContext
->Export();
1036 bool XMLPropertiesOOoTContext_Impl::IsPersistent() const
1038 return m_bPersistent
;
1041 XMLStyleOOoTContext::XMLStyleOOoTContext( XMLTransformerBase
& rImp
,
1042 const OUString
& rQName
,
1044 bool bPersistent
) :
1045 XMLPersElemContentTContext( rImp
, rQName
),
1047 m_bPersistent( bPersistent
)
1051 XMLStyleOOoTContext::XMLStyleOOoTContext(
1052 XMLTransformerBase
& rImp
,
1053 const OUString
& rQName
,
1056 ::xmloff::token::XMLTokenEnum eToken
,
1057 bool bPersistent
) :
1058 XMLPersElemContentTContext( rImp
, rQName
, nPrefix
, eToken
),
1060 m_bPersistent( bPersistent
)
1064 XMLStyleOOoTContext::~XMLStyleOOoTContext()
1068 rtl::Reference
<XMLTransformerContext
> XMLStyleOOoTContext::CreateChildContext(
1070 const OUString
& rLocalName
,
1071 const OUString
& rQName
,
1072 const Reference
< XAttributeList
>& rAttrList
)
1074 rtl::Reference
<XMLTransformerContext
> pContext
;
1076 if( XML_NAMESPACE_STYLE
== nPrefix
&&
1077 IsXMLToken( rLocalName
, XML_PROPERTIES
) )
1079 if( aPropTypes
[m_eFamily
][0] == XML_PROP_TYPE_END
)
1081 OSL_ENSURE( false, "unexpected properties element" );
1082 pContext
= m_bPersistent
1083 ? XMLPersElemContentTContext::CreateChildContext(
1084 nPrefix
, rLocalName
, rQName
, rAttrList
)
1085 : XMLTransformerContext::CreateChildContext(
1086 nPrefix
, rLocalName
, rQName
, rAttrList
);
1088 else if( aPropTypes
[m_eFamily
][1] == XML_PROP_TYPE_END
)
1090 sal_uInt16 nActionMap
=
1091 aAttrActionMaps
[aPropTypes
[m_eFamily
][0]];
1092 if( nActionMap
< MAX_OOO_PROP_ACTIONS
)
1094 pContext
.set(new XMLPropertiesOOoTContext_Impl(
1095 GetTransformer(), rQName
,
1096 aPropTypes
[m_eFamily
], m_bPersistent
));
1101 pContext
.set(new XMLPersElemContentTContext(
1102 GetTransformer(), rQName
,
1103 XML_NAMESPACE_STYLE
,
1104 aPropTokens
[aPropTypes
[m_eFamily
][0]] ));
1106 pContext
.set(new XMLRenameElemTransformerContext(
1107 GetTransformer(), rQName
,
1108 XML_NAMESPACE_STYLE
,
1109 aPropTokens
[aPropTypes
[m_eFamily
][0]] ));
1114 pContext
.set(new XMLPropertiesOOoTContext_Impl(
1115 GetTransformer(), rQName
,
1116 aPropTypes
[m_eFamily
], m_bPersistent
));
1120 AddContent( pContext
);
1124 pContext
= m_bPersistent
1125 ? XMLPersElemContentTContext::CreateChildContext(
1126 nPrefix
, rLocalName
, rQName
, rAttrList
)
1127 : XMLTransformerContext::CreateChildContext(
1128 nPrefix
, rLocalName
, rQName
, rAttrList
);
1134 void XMLStyleOOoTContext::StartElement(
1135 const Reference
< XAttributeList
>& rAttrList
)
1137 XMLTransformerActions
*pActions
=
1138 GetTransformer().GetUserDefinedActions( OOO_STYLE_ACTIONS
);
1139 OSL_ENSURE( pActions
, "go no actions" );
1141 Reference
< XAttributeList
> xAttrList( rAttrList
);
1142 XMLMutableAttributeList
*pMutableAttrList
= nullptr;
1143 sal_Int16 nAttrCount
= xAttrList
.is() ? xAttrList
->getLength() : 0;
1144 for( sal_Int16 i
=0; i
< nAttrCount
; i
++ )
1146 const OUString sAttrName
= xAttrList
->getNameByIndex( i
);
1147 OUString aLocalName
;
1148 sal_uInt16 nPrefix
=
1149 GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName
,
1151 XMLTransformerActions::key_type
aKey( nPrefix
, aLocalName
);
1152 XMLTransformerActions::const_iterator aIter
=
1153 pActions
->find( aKey
);
1154 if( !(aIter
== pActions
->end() ) )
1156 if( !pMutableAttrList
)
1159 new XMLMutableAttributeList( xAttrList
);
1160 xAttrList
= pMutableAttrList
;
1162 const OUString sAttrValue
= xAttrList
->getValueByIndex( i
);
1163 switch( (*aIter
).second
.m_nActionType
)
1165 case XML_ATACTION_STYLE_FAMILY
:
1167 bool bControl
= false;
1168 if( XML_FAMILY_TYPE_END
== m_eFamily
)
1170 if( IsXMLToken( sAttrValue
, XML_GRAPHICS
) )
1171 m_eFamily
= XML_FAMILY_TYPE_GRAPHIC
;
1172 else if( IsXMLToken( sAttrValue
, XML_PRESENTATION
) )
1173 m_eFamily
= XML_FAMILY_TYPE_PRESENTATION
;
1174 else if( IsXMLToken( sAttrValue
, XML_DRAWING_PAGE
) )
1175 m_eFamily
= XML_FAMILY_TYPE_DRAWING_PAGE
;
1176 else if( IsXMLToken( sAttrValue
, XML_TEXT
) )
1177 m_eFamily
= XML_FAMILY_TYPE_TEXT
;
1178 else if( IsXMLToken( sAttrValue
, XML_PARAGRAPH
) )
1179 m_eFamily
= XML_FAMILY_TYPE_PARAGRAPH
;
1180 else if( IsXMLToken( sAttrValue
, XML_RUBY
) )
1181 m_eFamily
= XML_FAMILY_TYPE_RUBY
;
1182 else if( IsXMLToken( sAttrValue
, XML_SECTION
) )
1183 m_eFamily
= XML_FAMILY_TYPE_SECTION
;
1184 else if( IsXMLToken( sAttrValue
, XML_TABLE
) )
1185 m_eFamily
= XML_FAMILY_TYPE_TABLE
;
1186 else if( IsXMLToken( sAttrValue
, XML_TABLE_COLUMN
) )
1187 m_eFamily
= XML_FAMILY_TYPE_TABLE_COLUMN
;
1188 else if( IsXMLToken( sAttrValue
, XML_TABLE_ROW
) )
1189 m_eFamily
= XML_FAMILY_TYPE_TABLE_ROW
;
1190 else if( IsXMLToken( sAttrValue
, XML_TABLE_CELL
) )
1191 m_eFamily
= XML_FAMILY_TYPE_TABLE_CELL
;
1192 else if( IsXMLToken( sAttrValue
, XML_CHART
) )
1193 m_eFamily
= XML_FAMILY_TYPE_CHART
;
1194 else if( IsXMLToken( sAttrValue
, XML_CONTROL
) )
1196 m_eFamily
= XML_FAMILY_TYPE_PARAGRAPH
;
1200 if( XML_FAMILY_TYPE_GRAPHIC
== m_eFamily
)
1202 pMutableAttrList
->SetValueByIndex( i
,
1203 GetXMLToken( XML_GRAPHIC
) );
1207 pMutableAttrList
->SetValueByIndex( i
,
1208 GetXMLToken( XML_PARAGRAPH
) );
1212 case XML_ATACTION_INCH2IN
:
1214 OUString
aAttrValue( sAttrValue
);
1215 if( XMLTransformerBase::ReplaceSingleInchWithIn(
1217 pMutableAttrList
->SetValueByIndex( i
, aAttrValue
);
1220 case XML_ATACTION_ENCODE_STYLE_NAME
:
1222 OUString
aAttrValue( sAttrValue
);
1223 if( GetTransformer().EncodeStyleName(aAttrValue
) )
1225 pMutableAttrList
->SetValueByIndex( i
, aAttrValue
);
1226 OUString
aNewAttrQName(
1227 GetTransformer().GetNamespaceMap().
1229 nPrefix
, ::xmloff::token::GetXMLToken(
1230 XML_DISPLAY_NAME
) ) );
1231 pMutableAttrList
->AddAttribute( aNewAttrQName
,
1236 case XML_ATACTION_ENCODE_STYLE_NAME_REF
:
1238 OUString
aAttrValue( sAttrValue
);
1239 if( GetTransformer().EncodeStyleName(aAttrValue
) )
1240 pMutableAttrList
->SetValueByIndex( i
, aAttrValue
);
1243 case XML_ATACTION_NEG_PERCENT
:
1245 OUString
aAttrValue( sAttrValue
);
1246 if( XMLTransformerBase::NegPercent(aAttrValue
) )
1247 pMutableAttrList
->SetValueByIndex( i
, aAttrValue
);
1250 case XML_ATACTION_URI_OOO
:
1252 OUString
aAttrValue( sAttrValue
);
1253 if( GetTransformer().ConvertURIToOASIS( aAttrValue
,
1254 static_cast< bool >((*aIter
).second
.m_nParam1
)))
1255 pMutableAttrList
->SetValueByIndex( i
, aAttrValue
);
1259 OSL_ENSURE( false, "unknown action" );
1264 if( XML_FAMILY_TYPE_END
== m_eFamily
)
1265 m_eFamily
= XML_FAMILY_TYPE_TEXT
;
1267 XMLPersElemContentTContext::StartElement( xAttrList
);
1269 GetTransformer().GetDocHandler()->startElement( GetExportQName(),
1273 void XMLStyleOOoTContext::EndElement()
1276 XMLPersElemContentTContext::EndElement();
1278 GetTransformer().GetDocHandler()->endElement( GetExportQName() );
1281 void XMLStyleOOoTContext::Characters( const OUString
& )
1283 // element content only:
1286 bool XMLStyleOOoTContext::IsPersistent() const
1288 return m_bPersistent
;
1291 XMLTransformerActions
*XMLStyleOOoTContext::CreateTransformerActions(
1294 XMLTransformerActionInit
*pInit
= nullptr;
1298 case PROP_OOO_GRAPHIC_ATTR_ACTIONS
:
1299 pInit
= aGraphicPropertyOOoAttrActionTable
;
1301 case PROP_OOO_GRAPHIC_ELEM_ACTIONS
:
1302 pInit
= aGraphicPropertyOOoElemActionTable
;
1304 case PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS
:
1305 pInit
= aDrawingPagePropertyOOoAttrActionTable
;
1307 case PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS
:
1308 pInit
= aPageLayoutPropertyOOoAttrActionTable
;
1310 case PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS
:
1311 pInit
= aHeaderFooterPropertyOOoAttrActionTable
;
1313 case PROP_OOO_TEXT_ATTR_ACTIONS
:
1314 pInit
= aTextPropertyOOoAttrActionTable
;
1316 case PROP_OOO_TEXT_ELEM_ACTIONS
:
1317 pInit
= aTextPropertyOOoElemActionTable
;
1319 case PROP_OOO_PARAGRAPH_ATTR_ACTIONS
:
1320 pInit
= aParagraphPropertyOOoAttrActionTable
;
1322 case PROP_OOO_PARAGRAPH_ELEM_ACTIONS
:
1323 pInit
= aParagraphPropertyOOoElemActionTable
;
1325 case PROP_OOO_SECTION_ATTR_ACTIONS
:
1326 pInit
= aSectionPropertyOOoAttrActionTable
;
1328 case PROP_OOO_TABLE_ATTR_ACTIONS
:
1329 pInit
= aTablePropertyOOoAttrActionTable
;
1331 case PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS
:
1332 pInit
= aTableColumnPropertyOOoAttrActionTable
;
1334 case PROP_OOO_TABLE_ROW_ATTR_ACTIONS
:
1335 pInit
= aTableRowPropertyOOoAttrActionTable
;
1337 case PROP_OOO_TABLE_CELL_ATTR_ACTIONS
:
1338 pInit
= aTableCellPropertyOOoAttrActionTable
;
1340 case PROP_OOO_TABLE_CELL_ELEM_ACTIONS
:
1341 pInit
= aTableCellPropertyOOoElemActionTable
;
1343 case PROP_OOO_LIST_LEVEL_ATTR_ACTIONS
:
1344 pInit
= aListLevelPropertyOOoAttrActionTable
;
1346 case PROP_OOO_CHART_ATTR_ACTIONS
:
1347 pInit
= aChartPropertyOOoAttrActionTable
;
1349 case PROP_OOO_CHART_ELEM_ACTIONS
:
1350 pInit
= aChartPropertyOOoElemActionTable
;
1354 XMLTransformerActions
*pActions
= nullptr;
1356 pActions
= new XMLTransformerActions( pInit
);
1361 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */