| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  | /*************************************************************************
 | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *  OpenOffice.org - a multi-platform office productivity suite | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *  $RCSfile: FrameOOoTContext.cxx,v $ | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-06-27 15:20:56 +00:00
										 |  |  |  *  $Revision: 1.5 $ | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2007-06-27 15:20:56 +00:00
										 |  |  |  *  last change: $Author: hr $ $Date: 2007-06-27 16:20:56 $ | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *  The Contents of this file are made available subject to | 
					
						
							|  |  |  |  *  the terms of GNU Lesser General Public License Version 2.1. | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *    GNU Lesser General Public License Version 2.1 | 
					
						
							|  |  |  |  *    ============================================= | 
					
						
							|  |  |  |  *    Copyright 2005 by Sun Microsystems, Inc. | 
					
						
							|  |  |  |  *    901 San Antonio Road, Palo Alto, CA 94303, USA | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *    This library is free software; you can redistribute it and/or | 
					
						
							|  |  |  |  *    modify it under the terms of the GNU Lesser General Public | 
					
						
							|  |  |  |  *    License version 2.1, as published by the Free Software Foundation. | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *    This library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |  *    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
					
						
							|  |  |  |  *    Lesser General Public License for more details. | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2005-09-09 14:46:42 +00:00
										 |  |  |  *    You should have received a copy of the GNU Lesser General Public | 
					
						
							|  |  |  |  *    License along with this library; if not, write to the Free Software | 
					
						
							|  |  |  |  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, | 
					
						
							|  |  |  |  *    MA  02111-1307  USA | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  |  * | 
					
						
							|  |  |  |  ************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-17 10:24:45 +00:00
										 |  |  | // MARKER(update_precomp.py): autogen include statement, do not remove
 | 
					
						
							|  |  |  | #include "precompiled_xmloff.hxx"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  | #ifndef _XMLOFF_FRAMEOOOTCONTEXT_HXX
 | 
					
						
							|  |  |  | #include "FrameOOoTContext.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_IGNORETCONTEXT_HXX
 | 
					
						
							|  |  |  | #include "IgnoreTContext.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_MUTABLEATTRLIST_HXX
 | 
					
						
							|  |  |  | #include "MutableAttrList.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_XMLNMSPE_HXX
 | 
					
						
							|  |  |  | #include "xmlnmspe.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_NMSPMAP_HXX
 | 
					
						
							| 
									
										
										
										
											2007-06-27 15:20:56 +00:00
										 |  |  | #include <xmloff/nmspmap.hxx>
 | 
					
						
							| 
									
										
										
										
											2004-07-13 07:51:40 +00:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_ACTIONMAPTYPESOOO_HXX
 | 
					
						
							|  |  |  | #include "ActionMapTypesOOo.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_ATTRTRANSFORMERACTION_HXX
 | 
					
						
							|  |  |  | #include "AttrTransformerAction.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_ELEMTRANSFORMERACTION_HXX
 | 
					
						
							|  |  |  | #include "ElemTransformerAction.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_TRANSFORMERACTIONS_HXX
 | 
					
						
							|  |  |  | #include "TransformerActions.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifndef _XMLOFF_TRANSFORMERBASE_HXX
 | 
					
						
							|  |  |  | #include "TransformerBase.hxx"
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using ::rtl::OUString; | 
					
						
							|  |  |  | using namespace ::com::sun::star::uno; | 
					
						
							|  |  |  | using namespace ::com::sun::star::xml::sax; | 
					
						
							|  |  |  | using namespace ::xmloff::token; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TYPEINIT1( XMLFrameOOoTransformerContext, XMLPersElemContentTContext ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XMLFrameOOoTransformerContext::XMLFrameOOoTransformerContext( | 
					
						
							|  |  |  |         XMLTransformerBase& rImp, | 
					
						
							|  |  |  |         const OUString& rQName ) : | 
					
						
							|  |  |  |     XMLPersElemContentTContext( rImp, rQName ), | 
					
						
							|  |  |  |     m_aElemQName( rImp.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, | 
					
						
							|  |  |  |                             ::xmloff::token::GetXMLToken( XML_FRAME ) ) ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XMLFrameOOoTransformerContext::~XMLFrameOOoTransformerContext() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void XMLFrameOOoTransformerContext::StartElement( | 
					
						
							|  |  |  |     const Reference< XAttributeList >& rAttrList ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     XMLTransformerActions *pActions = | 
					
						
							|  |  |  |         GetTransformer().GetUserDefinedActions( OOO_FRAME_ATTR_ACTIONS ); | 
					
						
							|  |  |  |     OSL_ENSURE( pActions, "go no actions" ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Reference< XAttributeList > xAttrList( rAttrList ); | 
					
						
							|  |  |  |     XMLMutableAttributeList *pMutableAttrList = | 
					
						
							|  |  |  |         GetTransformer().ProcessAttrList( xAttrList, OOO_SHAPE_ACTIONS, | 
					
						
							|  |  |  |                                           sal_True ); | 
					
						
							|  |  |  |     if( !pMutableAttrList ) | 
					
						
							|  |  |  |         pMutableAttrList = new XMLMutableAttributeList( rAttrList ); | 
					
						
							|  |  |  |     xAttrList = pMutableAttrList; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     XMLMutableAttributeList *pFrameMutableAttrList = | 
					
						
							|  |  |  |         new XMLMutableAttributeList; | 
					
						
							|  |  |  |     Reference< XAttributeList > xFrameAttrList( pFrameMutableAttrList ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; | 
					
						
							|  |  |  |     for( sal_Int16 i=0; i < nAttrCount; i++ ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         const OUString& rAttrName = xAttrList->getNameByIndex( i ); | 
					
						
							|  |  |  |         OUString aLocalName; | 
					
						
							|  |  |  |         sal_uInt16 nPrefix = | 
					
						
							|  |  |  |             GetTransformer().GetNamespaceMap().GetKeyByAttrName( rAttrName, | 
					
						
							|  |  |  |                                                                  &aLocalName ); | 
					
						
							|  |  |  |         XMLTransformerActions::key_type aKey( nPrefix, aLocalName ); | 
					
						
							|  |  |  |         XMLTransformerActions::const_iterator aIter = | 
					
						
							|  |  |  |             pActions->find( aKey ); | 
					
						
							|  |  |  |         if( !(aIter == pActions->end() ) ) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             const OUString& rAttrValue = xAttrList->getValueByIndex( i ); | 
					
						
							|  |  |  |             switch( (*aIter).second.m_nActionType ) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |             case XML_ATACTION_MOVE_TO_ELEM: | 
					
						
							|  |  |  |                 pFrameMutableAttrList->AddAttribute( rAttrName, rAttrValue ); | 
					
						
							|  |  |  |                 pMutableAttrList->RemoveAttributeByIndex( i ); | 
					
						
							|  |  |  |                 --i; | 
					
						
							|  |  |  |                 --nAttrCount; | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             default: | 
					
						
							|  |  |  |                 OSL_ENSURE( !this, "unknown action" ); | 
					
						
							|  |  |  |                 break; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     GetTransformer().GetDocHandler()->startElement( m_aElemQName, | 
					
						
							|  |  |  |                                                     xFrameAttrList ); | 
					
						
							|  |  |  |     XMLTransformerContext::StartElement( xAttrList ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XMLTransformerContext *XMLFrameOOoTransformerContext::CreateChildContext( | 
					
						
							|  |  |  |         sal_uInt16 nPrefix, | 
					
						
							|  |  |  |         const OUString& rLocalName, | 
					
						
							|  |  |  |         const OUString& rQName, | 
					
						
							|  |  |  |         const Reference< XAttributeList >& rAttrList ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     XMLTransformerContext *pContext = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     XMLTransformerActions *pActions = | 
					
						
							|  |  |  |         GetTransformer().GetUserDefinedActions( OOO_FRAME_ELEM_ACTIONS ); | 
					
						
							|  |  |  |     OSL_ENSURE( pActions, "go no actions" ); | 
					
						
							|  |  |  |     XMLTransformerActions::key_type aKey( nPrefix, rLocalName ); | 
					
						
							|  |  |  |     XMLTransformerActions::const_iterator aIter = pActions->find( aKey ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if( !(aIter == pActions->end()) ) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         switch( (*aIter).second.m_nActionType ) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |         case XML_ETACTION_COPY: | 
					
						
							|  |  |  |         case XML_ETACTION_COPY_TEXT: | 
					
						
							|  |  |  |         case XML_ETACTION_RENAME_ELEM: | 
					
						
							|  |  |  |             // the ones in the list have to be persistent
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             pContext = XMLPersElemContentTContext::CreateChildContext( | 
					
						
							|  |  |  |                            nPrefix, rLocalName, rQName, rAttrList ); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         default: | 
					
						
							|  |  |  |             OSL_ENSURE( !this, "unknown action" ); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // default is copying
 | 
					
						
							|  |  |  |     if( !pContext ) | 
					
						
							|  |  |  |         pContext = XMLTransformerContext::CreateChildContext( | 
					
						
							|  |  |  |                     nPrefix, rLocalName, rQName, rAttrList ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return pContext; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void XMLFrameOOoTransformerContext::EndElement() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     XMLTransformerContext::EndElement(); | 
					
						
							|  |  |  |     ExportContent(); | 
					
						
							|  |  |  |     GetTransformer().GetDocHandler()->endElement( m_aElemQName ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void XMLFrameOOoTransformerContext::Characters( const OUString& rChars ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     XMLTransformerContext::Characters( rChars ); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sal_Bool XMLFrameOOoTransformerContext::IsPersistent() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // this context stores some of its child elements, but is not persistent
 | 
					
						
							|  |  |  |     // itself.
 | 
					
						
							|  |  |  |     return sal_False; | 
					
						
							|  |  |  | } |