Bump for 4.0-11
[LibreOffice.git] / xmloff / source / transform / StyleOOoTContext.cxx
blob5f5930c449648b871dc725f8e4869c4fdbc7505b
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
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>
45 using ::rtl::OUString;
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 }
57 #define ENTRY2(a,b) \
58 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##b, \
59 XML_PROP_TYPE_END, XML_PROP_TYPE_END }
60 #define ENTRY1(a) \
61 { XML_PROP_TYPE_##a, XML_PROP_TYPE_##END, \
62 XML_PROP_TYPE_END, XML_PROP_TYPE_END }
64 static 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,
88 ENTRY1( END ) // XML_FAMILY_TYPE_PRESENTATION_PAGE_LAYOUT,
91 static XMLTokenEnum aPropTokens[XML_PROP_TYPE_END] =
93 XML_GRAPHIC_PROPERTIES,
94 XML_DRAWING_PAGE_PROPERTIES,
95 XML_PAGE_LAYOUT_PROPERTIES,
96 XML_HEADER_FOOTER_PROPERTIES,
97 XML_TEXT_PROPERTIES,
98 XML_PARAGRAPH_PROPERTIES,
99 XML_RUBY_PROPERTIES,
100 XML_SECTION_PROPERTIES,
101 XML_TABLE_PROPERTIES,
102 XML_TABLE_COLUMN_PROPERTIES,
103 XML_TABLE_ROW_PROPERTIES,
104 XML_TABLE_CELL_PROPERTIES,
105 XML_LIST_LEVEL_PROPERTIES,
106 XML_CHART_PROPERTIES
109 static sal_uInt16 aAttrActionMaps[XML_PROP_TYPE_END] =
111 PROP_OOO_GRAPHIC_ATTR_ACTIONS,
112 PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS, // DRAWING_PAGE
113 PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS,
114 PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS,
115 PROP_OOO_TEXT_ATTR_ACTIONS,
116 PROP_OOO_PARAGRAPH_ATTR_ACTIONS,
117 MAX_OOO_PROP_ACTIONS, // RUBY
118 PROP_OOO_SECTION_ATTR_ACTIONS,
119 PROP_OOO_TABLE_ATTR_ACTIONS,
120 PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS,
121 PROP_OOO_TABLE_ROW_ATTR_ACTIONS,
122 PROP_OOO_TABLE_CELL_ATTR_ACTIONS,
123 PROP_OOO_LIST_LEVEL_ATTR_ACTIONS,
124 PROP_OOO_CHART_ATTR_ACTIONS
127 static sal_uInt16 aElemActionMaps[XML_PROP_TYPE_END] =
129 PROP_OOO_GRAPHIC_ELEM_ACTIONS,
130 MAX_OOO_PROP_ACTIONS,
131 MAX_OOO_PROP_ACTIONS,
132 MAX_OOO_PROP_ACTIONS,
133 PROP_OOO_TEXT_ELEM_ACTIONS,
134 PROP_OOO_PARAGRAPH_ELEM_ACTIONS,
135 MAX_OOO_PROP_ACTIONS,
136 MAX_OOO_PROP_ACTIONS,
137 MAX_OOO_PROP_ACTIONS,
138 MAX_OOO_PROP_ACTIONS,
139 MAX_OOO_PROP_ACTIONS,
140 PROP_OOO_TABLE_CELL_ELEM_ACTIONS,
141 MAX_OOO_PROP_ACTIONS,
142 PROP_OOO_CHART_ELEM_ACTIONS
146 //------------------------------------------------------------------------------
148 class XMLTypedPropertiesOOoTContext_Impl : public XMLPersElemContentTContext
150 ::com::sun::star::uno::Reference<
151 ::com::sun::star::xml::sax::XAttributeList > m_xAttrList;
153 public:
155 TYPEINFO();
157 XMLTypedPropertiesOOoTContext_Impl( XMLTransformerBase& rTransformer,
158 const ::rtl::OUString& rQName );
160 virtual ~XMLTypedPropertiesOOoTContext_Impl();
162 using XMLPersAttrListTContext::AddAttribute;
163 void AddAttribute( const ::rtl::OUString &sName ,
164 const ::rtl::OUString &sValue );
165 void AddAttribute( sal_uInt16 nPrefix, XMLTokenEnum eToken,
166 const ::rtl::OUString &sValue );
168 virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttrList );
170 virtual void Export();
173 TYPEINIT1( XMLTypedPropertiesOOoTContext_Impl, XMLPersElemContentTContext );
175 XMLTypedPropertiesOOoTContext_Impl::XMLTypedPropertiesOOoTContext_Impl(
176 XMLTransformerBase& rImp,
177 const OUString& rQName ) :
178 XMLPersElemContentTContext( rImp, rQName ),
179 m_xAttrList( new XMLMutableAttributeList() )
183 XMLTypedPropertiesOOoTContext_Impl::~XMLTypedPropertiesOOoTContext_Impl()
187 void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
188 const ::rtl::OUString &sName ,
189 const ::rtl::OUString &sValue )
191 static_cast< XMLMutableAttributeList * >( m_xAttrList.get() )
192 ->AddAttribute( sName, sValue );
195 void XMLTypedPropertiesOOoTContext_Impl::AddAttribute(
196 sal_uInt16 nPrefix, XMLTokenEnum eToken,
197 const ::rtl::OUString &sValue )
199 OUString sName(
200 GetTransformer().GetNamespaceMap().GetQNameByKey(
201 nPrefix, ::xmloff::token::GetXMLToken( eToken ) ) );
202 static_cast< XMLMutableAttributeList * >( m_xAttrList.get() )
203 ->AddAttribute( sName, sValue );
206 void XMLTypedPropertiesOOoTContext_Impl::StartElement(
207 const Reference< XAttributeList >& )
209 // empty, ignore even the attribute list
212 void XMLTypedPropertiesOOoTContext_Impl::Export()
214 if( m_xAttrList->getLength() || HasElementContent() )
216 GetTransformer().GetDocHandler()->startElement( GetQName(), m_xAttrList );
217 ExportContent();
218 GetTransformer().GetDocHandler()->endElement( GetQName() );
222 //------------------------------------------------------------------------------
224 class XMLPropertiesOOoTContext_Impl : public XMLTransformerContext
226 ::rtl::Reference < XMLTypedPropertiesOOoTContext_Impl >
227 m_aPropContexts[MAX_PROP_TYPES];
229 typedef XMLPropType XMLPropTypes[MAX_PROP_TYPES];
231 XMLPropTypes m_aPropTypes;
233 sal_Bool m_bPersistent;
235 XMLTypedPropertiesOOoTContext_Impl *GetPropContextAndAction(
236 TransformerAction_Impl& rAction,
237 sal_uInt16 nPrefix, const OUString& rLocalName,
238 sal_Bool bElem );
240 XMLTypedPropertiesOOoTContext_Impl *GetPropContext(
241 XMLPropType eType );
244 public:
246 TYPEINFO();
248 XMLPropertiesOOoTContext_Impl( XMLTransformerBase& rTransformer,
249 const ::rtl::OUString& rQName,
250 XMLPropTypes& rTypes,
251 sal_Bool bPersistent );
253 virtual ~XMLPropertiesOOoTContext_Impl();
255 XMLTransformerContext *CreateChildContext(
256 sal_uInt16 nPrefix,
257 const OUString& rLocalName,
258 const OUString& rQName,
259 const Reference< XAttributeList >& rAttrList );
261 virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& rAttrList );
263 virtual void EndElement();
265 virtual void Characters( const ::rtl::OUString& rChars );
267 virtual void Export();
269 virtual sal_Bool IsPersistent() const;
272 TYPEINIT1( XMLPropertiesOOoTContext_Impl, XMLTransformerContext );
274 XMLTypedPropertiesOOoTContext_Impl
275 *XMLPropertiesOOoTContext_Impl::GetPropContext(
276 XMLPropType eType )
278 sal_uInt16 nIndex = MAX_PROP_TYPES;
279 for( sal_uInt16 i=0; i< MAX_PROP_TYPES; i++ )
281 if( m_aPropTypes[i] == eType )
283 nIndex = i;
284 break;
287 if( MAX_PROP_TYPES == nIndex )
288 return 0;
290 if( !m_aPropContexts[nIndex].is() )
292 m_aPropContexts[nIndex] =
293 new XMLTypedPropertiesOOoTContext_Impl(
294 GetTransformer(),
295 GetTransformer().GetNamespaceMap().GetQNameByKey(
296 XML_NAMESPACE_STYLE,
297 ::xmloff::token::GetXMLToken(
298 aPropTokens[m_aPropTypes[nIndex]] ) ));
301 return m_aPropContexts[nIndex].get();
305 XMLTypedPropertiesOOoTContext_Impl
306 *XMLPropertiesOOoTContext_Impl::GetPropContextAndAction(
307 TransformerAction_Impl& rAction,
308 sal_uInt16 nPrefix, const OUString& rLocalName,
309 sal_Bool bElem )
311 rAction.m_nActionType = XML_ATACTION_COPY;
312 sal_uInt16 nIndex = 0;
314 XMLTransformerActions::key_type aKey( nPrefix, rLocalName );
315 sal_uInt16 i=0;
316 while( i < MAX_PROP_TYPES && XML_PROP_TYPE_END!=m_aPropTypes[i])
318 sal_uInt16 nActionMap =
319 (bElem ? aElemActionMaps : aAttrActionMaps)[m_aPropTypes[i]];
320 if( nActionMap < MAX_OOO_PROP_ACTIONS )
322 XMLTransformerActions *pActions =
323 GetTransformer().GetUserDefinedActions( nActionMap );
324 OSL_ENSURE( pActions, "go no actions" );
325 if( pActions )
327 XMLTransformerActions::const_iterator aIter =
328 pActions->find( aKey );
330 if( !(aIter == pActions->end()) )
332 rAction = (*aIter).second;
333 nIndex = i;
334 break;
338 ++i;
341 #ifdef DBG_UTIL
342 if( !( XML_NAMESPACE_NONE == nPrefix ||
343 (XML_NAMESPACE_UNKNOWN_FLAG & nPrefix) ||
344 XML_PROP_TYPE_END==m_aPropTypes[1] ||
345 (i<MAX_PROP_TYPES && XML_PROP_TYPE_END!=m_aPropTypes[i]) ) )
347 ::rtl::OString aTmp("Didnt't find property: ");
348 const ::rtl::OUString& rPrefix =
349 GetTransformer().GetNamespaceMap().GetPrefixByKey( nPrefix );
350 aTmp += ::rtl::OString( rPrefix.getStr(), rPrefix.getLength(),
351 RTL_TEXTENCODING_ASCII_US );
352 aTmp += ::rtl::OString::valueOf( ':' );
353 aTmp += ::rtl::OString( rLocalName.getStr(), rLocalName.getLength(),
354 RTL_TEXTENCODING_ASCII_US );
355 aTmp += ::rtl::OString(", assuming <style:");
356 const ::rtl::OUString& rName =
357 ::xmloff::token::GetXMLToken( aPropTokens[m_aPropTypes[0]] );
358 aTmp += ::rtl::OString( rName.getStr(), rName.getLength(),
359 RTL_TEXTENCODING_ASCII_US );
360 aTmp += ::rtl::OString::valueOf( '>' );
362 OSL_FAIL(aTmp.getStr());
364 #endif
366 if( !m_aPropContexts[nIndex].is() )
368 m_aPropContexts[nIndex] =
369 new XMLTypedPropertiesOOoTContext_Impl(
370 GetTransformer(),
371 GetTransformer().GetNamespaceMap().GetQNameByKey(
372 XML_NAMESPACE_STYLE,
373 ::xmloff::token::GetXMLToken(
374 aPropTokens[m_aPropTypes[nIndex]] ) ));
377 return m_aPropContexts[nIndex].get();
380 XMLPropertiesOOoTContext_Impl::XMLPropertiesOOoTContext_Impl(
381 XMLTransformerBase& rImp,
382 const OUString& rQName,
383 XMLPropTypes& rTypes,
384 sal_Bool bPersistent ) :
385 XMLTransformerContext( rImp, rQName ),
386 m_bPersistent( bPersistent )
388 for( sal_uInt16 i=0; i < MAX_PROP_TYPES; ++i )
390 // remember the types that belong to the attribute and element lists
391 m_aPropTypes[i] = rTypes[i];
395 XMLPropertiesOOoTContext_Impl::~XMLPropertiesOOoTContext_Impl()
399 XMLTransformerContext *XMLPropertiesOOoTContext_Impl::CreateChildContext(
400 sal_uInt16 nPrefix,
401 const OUString& rLocalName,
402 const OUString& rQName,
403 const Reference< XAttributeList >& rAttrList )
405 TransformerAction_Impl aAction;
406 return GetPropContextAndAction( aAction, nPrefix, rLocalName, sal_True )
407 ->CreateChildContext( nPrefix, rLocalName, rQName, rAttrList );
411 void XMLPropertiesOOoTContext_Impl::StartElement(
412 const Reference< XAttributeList >& rAttrList )
414 Reference< XAttributeList > xAttrList( rAttrList );
416 XMLTypedPropertiesOOoTContext_Impl * pIntervalMinorDivisorContext = 0;
417 double fIntervalMajor = 0.0;
418 double fIntervalMinor = 0.0;
419 sal_Bool bMoveProtect = sal_False;
420 sal_Bool bSizeProtect = sal_False;
421 OUString aProtectAttrValue;
422 XMLTypedPropertiesOOoTContext_Impl * pProtectContext = 0;
424 /* Attribute <style:mirror> has to be priority over attribute <style:draw>.
425 The filter from OpenDocument file format to OpenOffice.org file format
426 produces styles with both attributes. (#i49139#)
428 sal_Bool bExistStyleMirror( sal_False );
429 OUString aStyleMirrorAttrValue;
430 sal_Bool bExistDrawMirror( sal_False );
431 OUString aDrawMirrorAttrValue;
432 XMLTypedPropertiesOOoTContext_Impl* pMirrorContext( 0L );
434 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
435 for( sal_Int16 i=0; i < nAttrCount; i++ )
437 const OUString sAttrName = xAttrList->getNameByIndex( i );
438 const OUString sAttrValue = xAttrList->getValueByIndex( i );
439 OUString aLocalName;
440 sal_uInt16 nPrefix =
441 GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName,
442 &aLocalName );
443 TransformerAction_Impl aAction;
444 XMLTypedPropertiesOOoTContext_Impl *pContext =
445 GetPropContextAndAction( aAction, nPrefix, aLocalName, sal_False );
446 switch( aAction.m_nActionType )
448 case XML_ATACTION_REMOVE:
449 break;
450 case XML_ATACTION_COPY:
451 pContext->AddAttribute( sAttrName, sAttrValue );
452 break;
453 case XML_ATACTION_COPY_DUPLICATE:
455 pContext->AddAttribute( sAttrName, sAttrValue );
456 XMLTypedPropertiesOOoTContext_Impl *pContext2 =
457 GetPropContext( (XMLPropType)aAction.m_nParam1 );
458 if( pContext2 )
459 pContext2->AddAttribute( sAttrName, sAttrValue );
461 break;
462 case XML_ATACTION_RENAME:
464 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
465 aAction.GetQNameTokenFromParam1(),
466 sAttrValue );
468 break;
469 case XML_ATACTION_ENCODE_STYLE_NAME_REF:
471 OUString aAttrValue( sAttrValue );
472 GetTransformer().EncodeStyleName(aAttrValue);
473 pContext->AddAttribute( sAttrName, aAttrValue );
475 break;
476 case XML_ATACTION_RENAME_ENCODE_STYLE_NAME_REF:
478 OUString aAttrValue( sAttrValue );
479 GetTransformer().EncodeStyleName(aAttrValue);
480 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
481 aAction.GetQNameTokenFromParam1(),
482 aAttrValue );
484 break;
485 case XML_ATACTION_NEG_PERCENT:
487 OUString aAttrValue( sAttrValue );
488 GetTransformer().NegPercent(aAttrValue);
489 pContext->AddAttribute( sAttrName, aAttrValue );
491 break;
492 case XML_ATACTION_RENAME_NEG_PERCENT:
494 OUString aAttrValue( sAttrValue );
495 GetTransformer().NegPercent(aAttrValue);
496 pContext->AddAttribute( aAction.GetQNamePrefixFromParam1(),
497 aAction.GetQNameTokenFromParam1(),
498 aAttrValue );
500 break;
501 case XML_ATACTION_INCH2IN:
503 OUString aAttrValue( sAttrValue );
504 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
505 pContext->AddAttribute( sAttrName, aAttrValue );
507 break;
508 case XML_ATACTION_INCH2IN_DUPLICATE:
510 OUString aAttrValue( sAttrValue );
511 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
512 pContext->AddAttribute( sAttrName, aAttrValue );
513 XMLTypedPropertiesOOoTContext_Impl *pContext2 =
514 GetPropContext( (XMLPropType)aAction.m_nParam1 );
515 if( pContext2 )
516 pContext2->AddAttribute( sAttrName, aAttrValue );
518 break;
519 case XML_ATACTION_INCHS2INS:
521 OUString aAttrValue( sAttrValue );
522 XMLTransformerBase::ReplaceInchWithIn( aAttrValue );
523 pContext->AddAttribute( sAttrName, aAttrValue );
525 break;
526 case XML_PTACTION_LINE_MODE:
528 OUString aAttrValue( GetXMLToken(
529 IsXMLToken( sAttrValue, XML_TRUE )
530 ? XML_CONTINUOUS
531 : XML_SKIP_WHITE_SPACE) );
532 OUString aAttrQName(
533 GetTransformer().GetNamespaceMap().GetQNameByKey(
534 XML_NAMESPACE_STYLE,
535 GetXMLToken( XML_TEXT_UNDERLINE_MODE ) ) );
536 pContext->AddAttribute( aAttrQName, aAttrValue );
538 aAttrQName =
539 GetTransformer().GetNamespaceMap().GetQNameByKey(
540 XML_NAMESPACE_STYLE,
541 GetXMLToken( XML_TEXT_LINE_THROUGH_MODE ) );
542 pContext->AddAttribute( aAttrQName, aAttrValue );
544 break;
545 case XML_PTACTION_KEEP_WITH_NEXT:
547 OUString aAttrValue( GetXMLToken(
548 IsXMLToken( sAttrValue, XML_TRUE )
549 ? XML_ALWAYS
550 : XML_AUTO) );
551 pContext->AddAttribute( sAttrName, aAttrValue );
553 break;
554 case XML_PTACTION_UNDERLINE:
556 XMLTokenEnum eToken = GetTransformer().GetToken( sAttrValue );
557 sal_Bool bBold = sal_False, bDouble = sal_False;
558 switch( eToken )
560 case XML_SINGLE:
561 eToken = XML_SOLID;
562 break;
563 case XML_DOUBLE:
564 eToken = XML_SOLID;
565 bDouble = sal_True;
566 break;
567 case XML_BOLD:
568 eToken = XML_SOLID;
569 bBold = sal_True;
570 break;
571 case XML_BOLD_DOTTED:
572 eToken = XML_DOTTED;
573 bBold = sal_True;
574 break;
575 case XML_BOLD_DASH:
576 eToken = XML_DASH;
577 bBold = sal_True;
578 break;
579 case XML_BOLD_LONG_DASH:
580 eToken = XML_LONG_DASH;
581 bBold = sal_True;
582 break;
583 case XML_BOLD_DOT_DASH:
584 eToken = XML_DOT_DASH;
585 bBold = sal_True;
586 break;
587 case XML_BOLD_DOT_DOT_DASH:
588 eToken = XML_DOT_DOT_DASH;
589 bBold = sal_True;
590 break;
591 case XML_BOLD_WAVE:
592 eToken = XML_WAVE;
593 bBold = sal_True;
594 break;
595 case XML_DOUBLE_WAVE:
596 eToken = XML_WAVE;
597 bDouble = sal_True;
598 break;
599 case XML_NONE:
600 eToken = XML_NONE;
601 bDouble = sal_False;
602 break;
603 default:
604 OSL_FAIL( "xmloff::XMLPropertiesOOoTContext_Impl::StartElement(), unknown underline token!" );
605 break;
607 pContext->AddAttribute(
608 GetTransformer().GetNamespaceMap().GetQNameByKey(
609 XML_NAMESPACE_STYLE,
610 GetXMLToken( XML_TEXT_UNDERLINE_STYLE ) ),
611 eToken != XML_TOKEN_END ? GetXMLToken( eToken )
612 : sAttrValue );
613 if( bDouble )
614 pContext->AddAttribute(
615 GetTransformer().GetNamespaceMap().GetQNameByKey(
616 XML_NAMESPACE_STYLE,
617 GetXMLToken( XML_TEXT_UNDERLINE_TYPE ) ),
618 GetXMLToken( XML_DOUBLE ) );
619 if( bBold )
620 pContext->AddAttribute(
621 GetTransformer().GetNamespaceMap().GetQNameByKey(
622 XML_NAMESPACE_STYLE,
623 GetXMLToken( XML_TEXT_UNDERLINE_WIDTH ) ),
624 GetXMLToken( XML_BOLD ) );
626 break;
627 case XML_PTACTION_LINETHROUGH:
629 XMLTokenEnum eToken = GetTransformer().GetToken( sAttrValue );
630 sal_Bool bBold = sal_False, bDouble = sal_False;
631 sal_Unicode c = 0;
632 switch( eToken )
634 case XML_SINGLE_LINE:
635 eToken = XML_SOLID;
636 break;
637 case XML_DOUBLE_LINE:
638 eToken = XML_SOLID;
639 bDouble = sal_True;
640 break;
641 case XML_THICK_LINE:
642 eToken = XML_SOLID;
643 bBold = sal_True;
644 break;
645 case XML_SLASH:
646 eToken = XML_SOLID;
647 c = '/';
648 break;
649 case XML_uX:
650 eToken = XML_SOLID;
651 c = 'X';
652 break;
653 default:
654 break;
656 pContext->AddAttribute(
657 GetTransformer().GetNamespaceMap().GetQNameByKey(
658 XML_NAMESPACE_STYLE,
659 GetXMLToken( XML_TEXT_LINE_THROUGH_STYLE ) ),
660 eToken != XML_TOKEN_END ? GetXMLToken( eToken )
661 : sAttrValue );
662 if( bDouble )
663 pContext->AddAttribute(
664 GetTransformer().GetNamespaceMap().GetQNameByKey(
665 XML_NAMESPACE_STYLE,
666 GetXMLToken( XML_TEXT_LINE_THROUGH_TYPE ) ),
667 GetXMLToken( XML_DOUBLE ) );
668 if( bBold )
669 pContext->AddAttribute(
670 GetTransformer().GetNamespaceMap().GetQNameByKey(
671 XML_NAMESPACE_STYLE,
672 GetXMLToken( XML_TEXT_LINE_THROUGH_WIDTH ) ),
673 GetXMLToken( XML_BOLD ) );
674 if( c )
675 pContext->AddAttribute(
676 GetTransformer().GetNamespaceMap().GetQNameByKey(
677 XML_NAMESPACE_STYLE,
678 GetXMLToken( XML_TEXT_LINE_THROUGH_TEXT ) ),
679 OUString::valueOf( c ) );
681 break;
682 case XML_PTACTION_SPLINES:
684 sal_Int32 nSplineType = sAttrValue.toInt32();
685 OUString aNewAttrName = GetTransformer().GetNamespaceMap().GetQNameByKey(
686 XML_NAMESPACE_CHART, GetXMLToken( XML_INTERPOLATION ) );
688 switch( nSplineType )
690 // straight lines
691 case 0:
692 pContext->AddAttribute(
693 aNewAttrName, GetXMLToken( XML_NONE ));
694 break;
695 // cubic spline
696 case 1:
697 pContext->AddAttribute(
698 aNewAttrName, GetXMLToken( XML_CUBIC_SPLINE ));
699 break;
700 // B-spline
701 case 2:
702 pContext->AddAttribute(
703 aNewAttrName, GetXMLToken( XML_B_SPLINE ));
704 break;
706 default:
707 OSL_FAIL( "invalid spline type" );
708 pContext->AddAttribute(
709 aNewAttrName, GetXMLToken( XML_NONE ));
710 break;
713 break;
714 case XML_PTACTION_INTERVAL_MAJOR:
715 pContext->AddAttribute( sAttrName, sAttrValue );
716 ::sax::Converter::convertDouble( fIntervalMajor, sAttrValue );
717 break;
718 case XML_PTACTION_INTERVAL_MINOR:
719 ::sax::Converter::convertDouble( fIntervalMinor, sAttrValue );
720 pIntervalMinorDivisorContext = pContext;
721 break;
722 case XML_PTACTION_SYMBOL:
724 sal_Int32 nSymbolType = sAttrValue.toInt32();
725 OUString aNewAttrName = GetTransformer().GetNamespaceMap().GetQNameByKey(
726 XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_TYPE ) );
728 if( nSymbolType >= 0 )
730 pContext->AddAttribute( aNewAttrName, GetXMLToken( XML_NAMED_SYMBOL ));
731 enum XMLTokenEnum eToken = XML_TOKEN_INVALID;
732 switch( nSymbolType )
734 // SYMBOL0
735 case 0:
736 // "square" has an awkward token name
737 eToken = XML_GRADIENTSTYLE_SQUARE;
738 break;
739 // SYMBOL1
740 case 1:
741 eToken = XML_DIAMOND;
742 break;
743 // SYMBOL2
744 case 2:
745 eToken = XML_ARROW_DOWN;
746 break;
747 // SYMBOL3
748 case 3:
749 eToken = XML_ARROW_UP;
750 break;
751 // SYMBOL4
752 case 4:
753 eToken = XML_ARROW_RIGHT;
754 break;
755 // SYMBOL5
756 case 5:
757 eToken = XML_ARROW_LEFT;
758 break;
759 // SYMBOL6
760 case 6:
761 eToken = XML_BOW_TIE;
762 break;
763 // SYMBOL7
764 case 7:
765 eToken = XML_HOURGLASS;
766 break;
767 case 8:
768 eToken = XML_CIRCLE;
769 break;
770 case 9:
771 eToken = XML_STAR;
772 break;
773 case 10:
774 eToken = XML_X;
775 break;
776 case 11:
777 eToken = XML_PLUS;
778 break;
779 case 12:
780 eToken = XML_ASTERISK;
781 break;
782 case 13:
783 eToken = XML_HORIZONTAL_BAR;
784 break;
785 case 14:
786 eToken = XML_VERTICAL_BAR;
787 break;
788 default:
789 OSL_FAIL( "invalid named symbol" );
790 break;
793 if( eToken != XML_TOKEN_INVALID )
795 pContext->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey(
796 XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_NAME )),
797 GetXMLToken( eToken ));
800 else
802 switch( nSymbolType )
804 // NONE
805 case -3:
806 pContext->AddAttribute(
807 aNewAttrName, GetXMLToken( XML_NONE ));
808 break;
809 // AUTO
810 case -2:
811 pContext->AddAttribute(
812 aNewAttrName, GetXMLToken( XML_AUTOMATIC ));
813 break;
814 // BITMAPURL
815 case -1:
816 pContext->AddAttribute(
817 aNewAttrName, GetXMLToken( XML_IMAGE ));
818 break;
819 default:
820 OSL_FAIL( "invalid symbol type" );
821 pContext->AddAttribute(
822 aNewAttrName, GetXMLToken( XML_NONE ));
823 break;
827 break;
828 case XML_PTACTION_SYMBOL_IMAGE_NAME:
830 // create an xlink:href element for URI attribute
831 XMLPersAttrListTContext *pSymbolImageContext = new XMLPersAttrListTContext(
832 GetTransformer(), GetTransformer().GetNamespaceMap().GetQNameByKey(
833 XML_NAMESPACE_CHART, GetXMLToken( XML_SYMBOL_IMAGE )));
835 OUString aAttrValue( sAttrValue );
836 if( GetTransformer().ConvertURIToOASIS( aAttrValue, sal_True ))
838 pSymbolImageContext->AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, aAttrValue );
839 pContext->AddContent( pSymbolImageContext );
842 break;
844 // #i25616#
845 case XML_PTACTION_TRANSPARENCY :
847 OUString aAttrValue( sAttrValue );
848 GetTransformer().NegPercent(aAttrValue);
849 pContext->AddAttribute( XML_NAMESPACE_DRAW,
850 XML_OPACITY,
851 aAttrValue );
852 pContext->AddAttribute( XML_NAMESPACE_DRAW,
853 XML_IMAGE_OPACITY,
854 aAttrValue );
856 break;
858 case XML_PTACTION_BREAK_INSIDE:
860 pContext->AddAttribute(
861 XML_NAMESPACE_FO, XML_KEEP_TOGETHER,
862 GetXMLToken(
863 IsXMLToken( sAttrValue, XML_COLUMNSPLIT_AVOID )
864 ? XML_ALWAYS
865 : XML_AUTO ) );
867 break;
868 case XML_ATACTION_CAPTION_ESCAPE_OOO:
870 OUString aAttrValue( sAttrValue );
871 if( aAttrValue.indexOf( sal_Unicode('%') ) != -1 )
873 sal_Int32 nValue = 0;
874 ::sax::Converter::convertPercent( nValue, sAttrValue );
875 if( nValue )
877 nValue /= 100;
878 rtl::OUStringBuffer aOut;
879 ::sax::Converter::convertPercent( aOut, nValue );
880 aAttrValue = aOut.makeStringAndClear();
883 else
885 XMLTransformerBase::ReplaceSingleInchWithIn( aAttrValue );
888 pContext->AddAttribute( sAttrName, aAttrValue );
890 break;
891 case XML_ATACTION_MOVE_PROTECT:
892 bMoveProtect = IsXMLToken( sAttrValue, XML_TRUE );
893 pProtectContext = pContext;
894 break;
895 case XML_ATACTION_SIZE_PROTECT:
896 bSizeProtect = IsXMLToken( sAttrValue, XML_TRUE );
897 pProtectContext = pContext;
898 break;
899 case XML_ATACTION_PROTECT:
900 aProtectAttrValue = sAttrValue;
901 pProtectContext = pContext;
902 break;
903 case XML_ATACTION_DRAW_MIRROR_OOO: // renames draw:mirror to style:mirror and adapts values
905 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
906 aDrawMirrorAttrValue =
907 GetXMLToken( IsXMLToken( sAttrValue, XML_TRUE )
908 ? XML_HORIZONTAL : XML_NONE );
909 bExistDrawMirror = sal_True;
910 pMirrorContext = pContext;
912 break;
913 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
914 case XML_ATACTION_STYLE_MIRROR_OOO: // adapts style:mirror values
916 SvXMLTokenEnumerator aTokenEnum( sAttrValue );
917 OUString aToken;
918 while( aTokenEnum.getNextToken( aToken ) )
920 if ( !aStyleMirrorAttrValue.isEmpty() )
922 aStyleMirrorAttrValue += rtl::OUString(" " );
925 if ( IsXMLToken( aToken, XML_HORIZONTAL_ON_LEFT_PAGES ) )
927 aStyleMirrorAttrValue += GetXMLToken( XML_HORIZONTAL_ON_EVEN );
929 else if ( IsXMLToken( aToken, XML_HORIZONTAL_ON_RIGHT_PAGES ) )
931 aStyleMirrorAttrValue += GetXMLToken( XML_HORIZONTAL_ON_ODD );
933 else
935 aStyleMirrorAttrValue += aToken;
938 bExistStyleMirror = sal_True;
939 pMirrorContext = pContext;
941 break;
942 case XML_ATACTION_GAMMA_OOO: // converts double value to percentage
944 double fValue = sAttrValue.toDouble();
945 sal_Int32 nValue = (sal_Int32)((fValue * 100.0) + ( fValue > 0 ? 0.5 : - 0.5 ) );
947 rtl::OUStringBuffer aOut;
948 ::sax::Converter::convertPercent( aOut, nValue );
949 OUString aAttrValue( aOut.makeStringAndClear() );
950 pContext->AddAttribute( sAttrName, aAttrValue );
952 break;
953 case XML_ATACTION_OPACITY_FIX:
955 sal_Int32 nValue;
956 if( sAttrValue.indexOf( sal_Unicode('%') ) != -1 )
958 ::sax::Converter::convertPercent( nValue, sAttrValue );
960 else
962 nValue = sal_Int32( sAttrValue.toDouble() * 100.0 );
964 nValue = 100 - nValue;
966 rtl::OUStringBuffer aOut;
967 ::sax::Converter::convertPercent( aOut, nValue );
968 pContext->AddAttribute( sAttrName, aOut.makeStringAndClear() );
970 break;
971 default:
972 OSL_ENSURE( !this, "unknown action" );
973 break;
977 // OpenDocument file format: attribute value of <style:mirror> wrong (#i49139#)
978 if ( bExistStyleMirror )
980 pMirrorContext->AddAttribute(
981 GetTransformer().GetNamespaceMap().GetQNameByKey(
982 XML_NAMESPACE_STYLE, GetXMLToken( XML_MIRROR ) ),
983 aStyleMirrorAttrValue);
985 else if ( bExistDrawMirror )
987 pMirrorContext->AddAttribute(
988 GetTransformer().GetNamespaceMap().GetQNameByKey(
989 XML_NAMESPACE_STYLE, GetXMLToken( XML_MIRROR ) ),
990 aDrawMirrorAttrValue);
993 if( bMoveProtect || bSizeProtect || !aProtectAttrValue.isEmpty() )
995 if( (bMoveProtect ||bSizeProtect) && IsXMLToken( aProtectAttrValue, XML_NONE ) )
996 aProtectAttrValue = OUString();
998 const OUString& rPosition = GetXMLToken( XML_POSITION );
999 if( bMoveProtect && -1 == aProtectAttrValue.indexOf( rPosition ) )
1001 if( !aProtectAttrValue.isEmpty() )
1002 aProtectAttrValue += OUString::valueOf( sal_Unicode( ' ' ) );
1003 aProtectAttrValue += rPosition;
1006 const OUString& rSize = GetXMLToken( XML_SIZE );
1007 if( bSizeProtect && -1 == aProtectAttrValue.indexOf( rSize ) )
1009 if( !aProtectAttrValue.isEmpty() )
1010 aProtectAttrValue += OUString::valueOf( sal_Unicode( ' ' ) );
1011 aProtectAttrValue += rSize;
1014 pProtectContext->AddAttribute( GetTransformer().GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_STYLE, GetXMLToken( XML_PROTECT ) ), aProtectAttrValue );
1017 if( pIntervalMinorDivisorContext )
1019 if( fIntervalMinor != 0.0 )
1021 sal_Int32 nIntervalMinorDivisor = static_cast< sal_Int32 >(
1022 ::rtl::math::round( fIntervalMajor / fIntervalMinor ));
1024 ::rtl::OUStringBuffer aBuf;
1025 ::sax::Converter::convertNumber( aBuf, nIntervalMinorDivisor );
1026 pIntervalMinorDivisorContext->AddAttribute(
1027 GetTransformer().GetNamespaceMap().GetQNameByKey(
1028 XML_NAMESPACE_CHART,
1029 GetXMLToken( XML_INTERVAL_MINOR_DIVISOR )),
1030 aBuf.makeStringAndClear());
1035 void XMLPropertiesOOoTContext_Impl::EndElement()
1037 if( !m_bPersistent )
1038 Export();
1041 void XMLPropertiesOOoTContext_Impl::Characters( const OUString& )
1043 // ignore them
1046 void XMLPropertiesOOoTContext_Impl::Export()
1049 for( sal_uInt16 i=0; i < MAX_PROP_TYPES; i++ )
1051 if( m_aPropContexts[i].is() )
1052 m_aPropContexts[i]->Export();
1056 sal_Bool XMLPropertiesOOoTContext_Impl::IsPersistent() const
1058 return m_bPersistent;
1062 //------------------------------------------------------------------------------
1064 TYPEINIT1( XMLStyleOOoTContext, XMLPersElemContentTContext );
1066 XMLStyleOOoTContext::XMLStyleOOoTContext( XMLTransformerBase& rImp,
1067 const OUString& rQName,
1068 XMLFamilyType eT,
1069 sal_Bool bPersistent ) :
1070 XMLPersElemContentTContext( rImp, rQName ),
1071 m_eFamily( eT ),
1072 m_bPersistent( bPersistent )
1076 XMLStyleOOoTContext::XMLStyleOOoTContext(
1077 XMLTransformerBase& rImp,
1078 const OUString& rQName,
1079 XMLFamilyType eT,
1080 sal_uInt16 nPrefix,
1081 ::xmloff::token::XMLTokenEnum eToken,
1082 sal_Bool bPersistent ) :
1083 XMLPersElemContentTContext( rImp, rQName, nPrefix, eToken ),
1084 m_eFamily( eT ),
1085 m_bPersistent( bPersistent )
1089 XMLStyleOOoTContext::~XMLStyleOOoTContext()
1093 XMLTransformerContext *XMLStyleOOoTContext::CreateChildContext(
1094 sal_uInt16 nPrefix,
1095 const OUString& rLocalName,
1096 const OUString& rQName,
1097 const Reference< XAttributeList >& rAttrList )
1099 XMLTransformerContext *pContext = 0;
1101 if( XML_NAMESPACE_STYLE == nPrefix &&
1102 IsXMLToken( rLocalName, XML_PROPERTIES ) )
1104 if( aPropTypes[m_eFamily][0] == XML_PROP_TYPE_END )
1106 OSL_ENSURE( !this, "unexpected properties element" );
1107 pContext = m_bPersistent
1108 ? XMLPersElemContentTContext::CreateChildContext(
1109 nPrefix, rLocalName, rQName, rAttrList )
1110 : XMLTransformerContext::CreateChildContext(
1111 nPrefix, rLocalName, rQName, rAttrList );
1113 else if( aPropTypes[m_eFamily][1] == XML_PROP_TYPE_END )
1115 sal_uInt16 nActionMap =
1116 aAttrActionMaps[aPropTypes[m_eFamily][0]];
1117 if( nActionMap < MAX_OOO_PROP_ACTIONS )
1119 pContext = new XMLPropertiesOOoTContext_Impl(
1120 GetTransformer(), rQName,
1121 aPropTypes[m_eFamily], m_bPersistent );
1123 else
1125 if( m_bPersistent )
1126 pContext = new XMLPersElemContentTContext(
1127 GetTransformer(), rQName,
1128 XML_NAMESPACE_STYLE,
1129 aPropTokens[aPropTypes[m_eFamily][0]] );
1130 else
1131 pContext = new XMLRenameElemTransformerContext(
1132 GetTransformer(), rQName,
1133 XML_NAMESPACE_STYLE,
1134 aPropTokens[aPropTypes[m_eFamily][0]] );
1137 else
1139 pContext = new XMLPropertiesOOoTContext_Impl(
1140 GetTransformer(), rQName,
1141 aPropTypes[m_eFamily], m_bPersistent);
1144 if( m_bPersistent )
1145 AddContent( pContext );
1147 else
1149 pContext = m_bPersistent
1150 ? XMLPersElemContentTContext::CreateChildContext(
1151 nPrefix, rLocalName, rQName, rAttrList )
1152 : XMLTransformerContext::CreateChildContext(
1153 nPrefix, rLocalName, rQName, rAttrList );
1156 return pContext;
1159 void XMLStyleOOoTContext::StartElement(
1160 const Reference< XAttributeList >& rAttrList )
1162 XMLTransformerActions *pActions =
1163 GetTransformer().GetUserDefinedActions( OOO_STYLE_ACTIONS );
1164 OSL_ENSURE( pActions, "go no actions" );
1166 Reference< XAttributeList > xAttrList( rAttrList );
1167 XMLMutableAttributeList *pMutableAttrList = 0;
1168 sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
1169 for( sal_Int16 i=0; i < nAttrCount; i++ )
1171 const OUString sAttrName = xAttrList->getNameByIndex( i );
1172 OUString aLocalName;
1173 sal_uInt16 nPrefix =
1174 GetTransformer().GetNamespaceMap().GetKeyByAttrName( sAttrName,
1175 &aLocalName );
1176 XMLTransformerActions::key_type aKey( nPrefix, aLocalName );
1177 XMLTransformerActions::const_iterator aIter =
1178 pActions->find( aKey );
1179 if( !(aIter == pActions->end() ) )
1181 if( !pMutableAttrList )
1183 pMutableAttrList =
1184 new XMLMutableAttributeList( xAttrList );
1185 xAttrList = pMutableAttrList;
1187 const OUString sAttrValue = xAttrList->getValueByIndex( i );
1188 switch( (*aIter).second.m_nActionType )
1190 case XML_ATACTION_STYLE_FAMILY:
1192 sal_Bool bControl = sal_False;
1193 if( XML_FAMILY_TYPE_END == m_eFamily )
1195 if( IsXMLToken( sAttrValue, XML_GRAPHICS ) )
1196 m_eFamily = XML_FAMILY_TYPE_GRAPHIC;
1197 else if( IsXMLToken( sAttrValue, XML_PRESENTATION ) )
1198 m_eFamily = XML_FAMILY_TYPE_PRESENTATION;
1199 else if( IsXMLToken( sAttrValue, XML_DRAWING_PAGE ) )
1200 m_eFamily = XML_FAMILY_TYPE_DRAWING_PAGE;
1201 else if( IsXMLToken( sAttrValue, XML_TEXT) )
1202 m_eFamily = XML_FAMILY_TYPE_TEXT;
1203 else if( IsXMLToken( sAttrValue, XML_PARAGRAPH) )
1204 m_eFamily = XML_FAMILY_TYPE_PARAGRAPH;
1205 else if( IsXMLToken( sAttrValue, XML_RUBY) )
1206 m_eFamily = XML_FAMILY_TYPE_RUBY;
1207 else if( IsXMLToken( sAttrValue, XML_SECTION) )
1208 m_eFamily = XML_FAMILY_TYPE_SECTION;
1209 else if( IsXMLToken( sAttrValue, XML_TABLE) )
1210 m_eFamily = XML_FAMILY_TYPE_TABLE;
1211 else if( IsXMLToken( sAttrValue, XML_TABLE_COLUMN) )
1212 m_eFamily = XML_FAMILY_TYPE_TABLE_COLUMN;
1213 else if( IsXMLToken( sAttrValue, XML_TABLE_ROW) )
1214 m_eFamily = XML_FAMILY_TYPE_TABLE_ROW;
1215 else if( IsXMLToken( sAttrValue, XML_TABLE_CELL) )
1216 m_eFamily = XML_FAMILY_TYPE_TABLE_CELL;
1217 else if( IsXMLToken( sAttrValue, XML_CHART) )
1218 m_eFamily = XML_FAMILY_TYPE_CHART;
1219 else if( IsXMLToken( sAttrValue, XML_CONTROL) )
1221 m_eFamily = XML_FAMILY_TYPE_PARAGRAPH;
1222 bControl = sal_True;
1225 if( XML_FAMILY_TYPE_GRAPHIC == m_eFamily )
1227 pMutableAttrList->SetValueByIndex( i,
1228 GetXMLToken( XML_GRAPHIC ) );
1230 else if( bControl )
1232 pMutableAttrList->SetValueByIndex( i,
1233 GetXMLToken( XML_PARAGRAPH ) );
1236 break;
1237 case XML_ATACTION_INCH2IN:
1239 OUString aAttrValue( sAttrValue );
1240 if( XMLTransformerBase::ReplaceSingleInchWithIn(
1241 aAttrValue ) )
1242 pMutableAttrList->SetValueByIndex( i, aAttrValue );
1244 break;
1245 case XML_ATACTION_ENCODE_STYLE_NAME:
1247 OUString aAttrValue( sAttrValue );
1248 if( GetTransformer().EncodeStyleName(aAttrValue) )
1250 pMutableAttrList->SetValueByIndex( i, aAttrValue );
1251 OUString aNewAttrQName(
1252 GetTransformer().GetNamespaceMap().
1253 GetQNameByKey(
1254 nPrefix, ::xmloff::token::GetXMLToken(
1255 XML_DISPLAY_NAME ) ) );
1256 pMutableAttrList->AddAttribute( aNewAttrQName,
1257 sAttrValue );
1260 break;
1261 case XML_ATACTION_ENCODE_STYLE_NAME_REF:
1263 OUString aAttrValue( sAttrValue );
1264 if( GetTransformer().EncodeStyleName(aAttrValue) )
1265 pMutableAttrList->SetValueByIndex( i, aAttrValue );
1267 break;
1268 case XML_ATACTION_NEG_PERCENT:
1270 OUString aAttrValue( sAttrValue );
1271 if( GetTransformer().NegPercent(aAttrValue) )
1272 pMutableAttrList->SetValueByIndex( i, aAttrValue );
1274 break;
1275 case XML_ATACTION_URI_OOO:
1277 OUString aAttrValue( sAttrValue );
1278 if( GetTransformer().ConvertURIToOASIS( aAttrValue,
1279 static_cast< sal_Bool >((*aIter).second.m_nParam1)))
1280 pMutableAttrList->SetValueByIndex( i, aAttrValue );
1282 break;
1283 default:
1284 OSL_ENSURE( !this, "unknown action" );
1285 break;
1289 if( XML_FAMILY_TYPE_END == m_eFamily )
1290 m_eFamily = XML_FAMILY_TYPE_TEXT;
1291 if( m_bPersistent )
1292 XMLPersElemContentTContext::StartElement( xAttrList );
1293 else
1294 GetTransformer().GetDocHandler()->startElement( GetExportQName(),
1295 xAttrList );
1298 void XMLStyleOOoTContext::EndElement()
1300 if( m_bPersistent )
1301 XMLPersElemContentTContext::EndElement();
1302 else
1303 GetTransformer().GetDocHandler()->endElement( GetExportQName() );
1306 void XMLStyleOOoTContext::Characters( const OUString& )
1308 // element content only:
1311 sal_Bool XMLStyleOOoTContext::IsPersistent() const
1313 return m_bPersistent;
1316 XMLTransformerActions *XMLStyleOOoTContext::CreateTransformerActions(
1317 sal_uInt16 nType )
1319 XMLTransformerActionInit *pInit = 0;
1321 switch( nType )
1323 case PROP_OOO_GRAPHIC_ATTR_ACTIONS:
1324 pInit = aGraphicPropertyOOoAttrActionTable;
1325 break;
1326 case PROP_OOO_GRAPHIC_ELEM_ACTIONS:
1327 pInit = aGraphicPropertyOOoElemActionTable;
1328 break;
1329 case PROP_OOO_DRAWING_PAGE_ATTR_ACTIONS:
1330 pInit = aDrawingPagePropertyOOoAttrActionTable;
1331 break;
1332 case PROP_OOO_PAGE_LAYOUT_ATTR_ACTIONS:
1333 pInit = aPageLayoutPropertyOOoAttrActionTable;
1334 break;
1335 case PROP_OOO_HEADER_FOOTER_ATTR_ACTIONS:
1336 pInit = aHeaderFooterPropertyOOoAttrActionTable;
1337 break;
1338 case PROP_OOO_TEXT_ATTR_ACTIONS:
1339 pInit = aTextPropertyOOoAttrActionTable;
1340 break;
1341 case PROP_OOO_TEXT_ELEM_ACTIONS:
1342 pInit = aTextPropertyOOoElemActionTable;
1343 break;
1344 case PROP_OOO_PARAGRAPH_ATTR_ACTIONS:
1345 pInit = aParagraphPropertyOOoAttrActionTable;
1346 break;
1347 case PROP_OOO_PARAGRAPH_ELEM_ACTIONS:
1348 pInit = aParagraphPropertyOOoElemActionTable;
1349 break;
1350 case PROP_OOO_SECTION_ATTR_ACTIONS:
1351 pInit = aSectionPropertyOOoAttrActionTable;
1352 break;
1353 case PROP_OOO_TABLE_ATTR_ACTIONS:
1354 pInit = aTablePropertyOOoAttrActionTable;
1355 break;
1356 case PROP_OOO_TABLE_COLUMN_ATTR_ACTIONS:
1357 pInit = aTableColumnPropertyOOoAttrActionTable;
1358 break;
1359 case PROP_OOO_TABLE_ROW_ATTR_ACTIONS:
1360 pInit = aTableRowPropertyOOoAttrActionTable;
1361 break;
1362 case PROP_OOO_TABLE_CELL_ATTR_ACTIONS:
1363 pInit = aTableCellPropertyOOoAttrActionTable;
1364 break;
1365 case PROP_OOO_TABLE_CELL_ELEM_ACTIONS:
1366 pInit = aTableCellPropertyOOoElemActionTable;
1367 break;
1368 case PROP_OOO_LIST_LEVEL_ATTR_ACTIONS:
1369 pInit = aListLevelPropertyOOoAttrActionTable;
1370 break;
1371 case PROP_OOO_CHART_ATTR_ACTIONS:
1372 pInit = aChartPropertyOOoAttrActionTable;
1373 break;
1374 case PROP_OOO_CHART_ELEM_ACTIONS:
1375 pInit = aChartPropertyOOoElemActionTable;
1376 break;
1379 XMLTransformerActions *pActions = 0;
1380 if( pInit )
1381 pActions = new XMLTransformerActions( pInit );
1383 return pActions;
1386 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */