1*63bba73cSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*63bba73cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*63bba73cSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*63bba73cSAndrew Rist * distributed with this work for additional information 6*63bba73cSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*63bba73cSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*63bba73cSAndrew Rist * "License"); you may not use this file except in compliance 9*63bba73cSAndrew Rist * with the License. You may obtain a copy of the License at 10*63bba73cSAndrew Rist * 11*63bba73cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*63bba73cSAndrew Rist * 13*63bba73cSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*63bba73cSAndrew Rist * software distributed under the License is distributed on an 15*63bba73cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*63bba73cSAndrew Rist * KIND, either express or implied. See the License for the 17*63bba73cSAndrew Rist * specific language governing permissions and limitations 18*63bba73cSAndrew Rist * under the License. 19*63bba73cSAndrew Rist * 20*63bba73cSAndrew Rist *************************************************************/ 21*63bba73cSAndrew Rist 22*63bba73cSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_xmloff.hxx" 26cdf0e10cSrcweir #include "unointerfacetouniqueidentifiermapper.hxx" 27cdf0e10cSrcweir #include <rtl/ustring.hxx> 28cdf0e10cSrcweir #include <rtl/ustrbuf.hxx> 29cdf0e10cSrcweir #include <tools/debug.hxx> 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <tools/string.hxx> 32cdf0e10cSrcweir #include <svl/svarray.hxx> 33cdf0e10cSrcweir #include <com/sun/star/text/XTextFrame.hpp> 34cdf0e10cSrcweir #include <com/sun/star/text/XTextCursor.hpp> 35cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 36cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp> 37cdf0e10cSrcweir #include <com/sun/star/text/ControlCharacter.hpp> 38cdf0e10cSrcweir #include <com/sun/star/container/XIndexReplace.hpp> 39cdf0e10cSrcweir #include <com/sun/star/drawing/XShapes.hpp> 40cdf0e10cSrcweir #include <com/sun/star/container/XEnumerationAccess.hpp> 41cdf0e10cSrcweir #include <com/sun/star/rdf/XMetadatable.hpp> 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir #include <xmloff/xmlictxt.hxx> 45cdf0e10cSrcweir #include <xmloff/xmlimp.hxx> 46cdf0e10cSrcweir #include <xmloff/xmltoken.hxx> 47cdf0e10cSrcweir #include <xmloff/nmspmap.hxx> 48cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx" 49cdf0e10cSrcweir #include <xmloff/txtimp.hxx> 50cdf0e10cSrcweir #include "txtparai.hxx" 51cdf0e10cSrcweir #include "txtfldi.hxx" 52cdf0e10cSrcweir #include <xmloff/xmluconv.hxx> 53cdf0e10cSrcweir #include "XMLFootnoteImportContext.hxx" 54cdf0e10cSrcweir #include "XMLTextMarkImportContext.hxx" 55cdf0e10cSrcweir #include "XMLTextFrameContext.hxx" 56cdf0e10cSrcweir #include <xmloff/XMLCharContext.hxx> 57cdf0e10cSrcweir #include "XMLTextFrameHyperlinkContext.hxx" 58cdf0e10cSrcweir #include <xmloff/XMLEventsImportContext.hxx> 59cdf0e10cSrcweir #include "XMLChangeImportContext.hxx" 60cdf0e10cSrcweir #include "txtlists.hxx" 61cdf0e10cSrcweir 62cdf0e10cSrcweir 63cdf0e10cSrcweir // OD 2004-04-21 #i26791# 64cdf0e10cSrcweir #include <txtparaimphint.hxx> 65cdf0e10cSrcweir typedef XMLHint_Impl *XMLHint_ImplPtr; 66cdf0e10cSrcweir SV_DECL_PTRARR_DEL( XMLHints_Impl, XMLHint_ImplPtr, 5, 5 ) 67cdf0e10cSrcweir SV_IMPL_PTRARR( XMLHints_Impl, XMLHint_ImplPtr ) 68cdf0e10cSrcweir // OD 2004-04-21 #i26791# 69cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 70cdf0e10cSrcweir 71cdf0e10cSrcweir using ::rtl::OUString; 72cdf0e10cSrcweir using ::rtl::OUStringBuffer; 73cdf0e10cSrcweir 74cdf0e10cSrcweir using namespace ::com::sun::star; 75cdf0e10cSrcweir using namespace ::com::sun::star::uno; 76cdf0e10cSrcweir using namespace ::com::sun::star::text; 77cdf0e10cSrcweir using namespace ::com::sun::star::drawing; 78cdf0e10cSrcweir using namespace ::com::sun::star::beans; 79cdf0e10cSrcweir using namespace ::xmloff::token; 80cdf0e10cSrcweir using ::com::sun::star::container::XEnumerationAccess; 81cdf0e10cSrcweir using ::com::sun::star::container::XEnumeration; 82cdf0e10cSrcweir 83cdf0e10cSrcweir 84cdf0e10cSrcweir TYPEINIT1( XMLCharContext, SvXMLImportContext ); 85cdf0e10cSrcweir 86cdf0e10cSrcweir XMLCharContext::XMLCharContext( 87cdf0e10cSrcweir SvXMLImport& rImport, 88cdf0e10cSrcweir sal_uInt16 nPrfx, 89cdf0e10cSrcweir const OUString& rLName, 90cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 91cdf0e10cSrcweir sal_Unicode c, 92cdf0e10cSrcweir sal_Bool bCount ) : 93cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ) 94cdf0e10cSrcweir ,m_nControl(0) 95cdf0e10cSrcweir ,m_nCount(1) 96cdf0e10cSrcweir ,m_c(c) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir if( bCount ) 99cdf0e10cSrcweir { 100cdf0e10cSrcweir const SvXMLNamespaceMap& rMap = GetImport().GetNamespaceMap(); 101cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 102cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 105cdf0e10cSrcweir 106cdf0e10cSrcweir OUString aLocalName; 107cdf0e10cSrcweir sal_uInt16 nPrefix =rMap.GetKeyByAttrName( rAttrName,&aLocalName ); 108cdf0e10cSrcweir if( XML_NAMESPACE_TEXT == nPrefix && 109cdf0e10cSrcweir IsXMLToken( aLocalName, XML_C ) ) 110cdf0e10cSrcweir { 111cdf0e10cSrcweir sal_Int32 nTmp = xAttrList->getValueByIndex(i).toInt32(); 112cdf0e10cSrcweir if( nTmp > 0L ) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir if( nTmp > USHRT_MAX ) 115cdf0e10cSrcweir m_nCount = USHRT_MAX; 116cdf0e10cSrcweir else 117cdf0e10cSrcweir m_nCount = (sal_uInt16)nTmp; 118cdf0e10cSrcweir } 119cdf0e10cSrcweir } 120cdf0e10cSrcweir } 121cdf0e10cSrcweir } 122cdf0e10cSrcweir } 123cdf0e10cSrcweir 124cdf0e10cSrcweir XMLCharContext::XMLCharContext( 125cdf0e10cSrcweir SvXMLImport& rImp, 126cdf0e10cSrcweir sal_uInt16 nPrfx, 127cdf0e10cSrcweir const OUString& rLName, 128cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > &, 129cdf0e10cSrcweir sal_Int16 nControl ) : 130cdf0e10cSrcweir SvXMLImportContext( rImp, nPrfx, rLName ) 131cdf0e10cSrcweir ,m_nControl(nControl) 132cdf0e10cSrcweir ,m_nCount(0) 133cdf0e10cSrcweir { 134cdf0e10cSrcweir } 135cdf0e10cSrcweir 136cdf0e10cSrcweir XMLCharContext::~XMLCharContext() 137cdf0e10cSrcweir { 138cdf0e10cSrcweir } 139cdf0e10cSrcweir // ----------------------------------------------------------------------------- 140cdf0e10cSrcweir void XMLCharContext::EndElement() 141cdf0e10cSrcweir { 142cdf0e10cSrcweir if ( !m_nCount ) 143cdf0e10cSrcweir InsertControlCharacter( m_nControl ); 144cdf0e10cSrcweir else 145cdf0e10cSrcweir { 146cdf0e10cSrcweir if( 1U == m_nCount ) 147cdf0e10cSrcweir { 148cdf0e10cSrcweir OUString sBuff( &m_c, 1 ); 149cdf0e10cSrcweir InsertString(sBuff); 150cdf0e10cSrcweir } 151cdf0e10cSrcweir else 152cdf0e10cSrcweir { 153cdf0e10cSrcweir OUStringBuffer sBuff( m_nCount ); 154cdf0e10cSrcweir while( m_nCount-- ) 155cdf0e10cSrcweir sBuff.append( &m_c, 1 ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir InsertString(sBuff.makeStringAndClear() ); 158cdf0e10cSrcweir } 159cdf0e10cSrcweir } 160cdf0e10cSrcweir } 161cdf0e10cSrcweir // ----------------------------------------------------------------------------- 162cdf0e10cSrcweir void XMLCharContext::InsertControlCharacter(sal_Int16 _nControl) 163cdf0e10cSrcweir { 164cdf0e10cSrcweir GetImport().GetTextImport()->InsertControlCharacter( _nControl ); 165cdf0e10cSrcweir } 166cdf0e10cSrcweir void XMLCharContext::InsertString(const ::rtl::OUString& _sString) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir GetImport().GetTextImport()->InsertString( _sString ); 169cdf0e10cSrcweir } 170cdf0e10cSrcweir 171cdf0e10cSrcweir // --------------------------------------------------------------------- 172cdf0e10cSrcweir 173cdf0e10cSrcweir /** import start of reference (<text:reference-start>) */ 174cdf0e10cSrcweir class XMLStartReferenceContext_Impl : public SvXMLImportContext 175cdf0e10cSrcweir { 176cdf0e10cSrcweir public: 177cdf0e10cSrcweir TYPEINFO(); 178cdf0e10cSrcweir 179cdf0e10cSrcweir // Do everything in constructor. Well ... 180cdf0e10cSrcweir XMLStartReferenceContext_Impl ( 181cdf0e10cSrcweir SvXMLImport& rImport, 182cdf0e10cSrcweir sal_uInt16 nPrefix, 183cdf0e10cSrcweir const OUString& rLocalName, 184cdf0e10cSrcweir XMLHints_Impl& rHnts, 185cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList); 186cdf0e10cSrcweir 187cdf0e10cSrcweir static sal_Bool FindName( 188cdf0e10cSrcweir SvXMLImport& rImport, 189cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList, 190cdf0e10cSrcweir OUString& rName); 191cdf0e10cSrcweir }; 192cdf0e10cSrcweir 193cdf0e10cSrcweir TYPEINIT1( XMLStartReferenceContext_Impl, SvXMLImportContext ); 194cdf0e10cSrcweir 195cdf0e10cSrcweir XMLStartReferenceContext_Impl::XMLStartReferenceContext_Impl( 196cdf0e10cSrcweir SvXMLImport& rImport, 197cdf0e10cSrcweir sal_uInt16 nPrefix, 198cdf0e10cSrcweir const OUString& rLocalName, 199cdf0e10cSrcweir XMLHints_Impl& rHints, 200cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList) : 201cdf0e10cSrcweir SvXMLImportContext(rImport, nPrefix, rLocalName) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir OUString sName; 204cdf0e10cSrcweir 205cdf0e10cSrcweir if (FindName(GetImport(), xAttrList, sName)) 206cdf0e10cSrcweir { 207cdf0e10cSrcweir XMLHint_Impl* pHint = new XMLReferenceHint_Impl( 208cdf0e10cSrcweir sName, rImport.GetTextImport()->GetCursor()->getStart() ); 209cdf0e10cSrcweir 210cdf0e10cSrcweir // degenerates to point reference, if no end is found! 211cdf0e10cSrcweir pHint->SetEnd(rImport.GetTextImport()->GetCursor()->getStart() ); 212cdf0e10cSrcweir 213cdf0e10cSrcweir rHints.Insert(pHint, rHints.Count()); 214cdf0e10cSrcweir } 215cdf0e10cSrcweir } 216cdf0e10cSrcweir 217cdf0e10cSrcweir sal_Bool XMLStartReferenceContext_Impl::FindName( 218cdf0e10cSrcweir SvXMLImport& rImport, 219cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList, 220cdf0e10cSrcweir OUString& rName) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir sal_Bool bNameOK( sal_False ); 223cdf0e10cSrcweir 224cdf0e10cSrcweir // find name attribute first 225cdf0e10cSrcweir const sal_Int16 nLength( xAttrList->getLength() ); 226cdf0e10cSrcweir for (sal_Int16 nAttr = 0; nAttr < nLength; nAttr++) 227cdf0e10cSrcweir { 228cdf0e10cSrcweir OUString sLocalName; 229cdf0e10cSrcweir const sal_uInt16 nPrefix = rImport.GetNamespaceMap(). 230cdf0e10cSrcweir GetKeyByAttrName( xAttrList->getNameByIndex(nAttr), 231cdf0e10cSrcweir &sLocalName ); 232cdf0e10cSrcweir 233cdf0e10cSrcweir if ( (XML_NAMESPACE_TEXT == nPrefix) && 234cdf0e10cSrcweir IsXMLToken(sLocalName, XML_NAME) ) 235cdf0e10cSrcweir { 236cdf0e10cSrcweir rName = xAttrList->getValueByIndex(nAttr); 237cdf0e10cSrcweir bNameOK = sal_True; 238cdf0e10cSrcweir } 239cdf0e10cSrcweir } 240cdf0e10cSrcweir 241cdf0e10cSrcweir return bNameOK; 242cdf0e10cSrcweir } 243cdf0e10cSrcweir 244cdf0e10cSrcweir // --------------------------------------------------------------------- 245cdf0e10cSrcweir 246cdf0e10cSrcweir /** import end of reference (<text:reference-end>) */ 247cdf0e10cSrcweir class XMLEndReferenceContext_Impl : public SvXMLImportContext 248cdf0e10cSrcweir { 249cdf0e10cSrcweir public: 250cdf0e10cSrcweir TYPEINFO(); 251cdf0e10cSrcweir 252cdf0e10cSrcweir // Do everything in constructor. Well ... 253cdf0e10cSrcweir XMLEndReferenceContext_Impl( 254cdf0e10cSrcweir SvXMLImport& rImport, 255cdf0e10cSrcweir sal_uInt16 nPrefix, 256cdf0e10cSrcweir const OUString& rLocalName, 257cdf0e10cSrcweir XMLHints_Impl& rHnts, 258cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList); 259cdf0e10cSrcweir }; 260cdf0e10cSrcweir 261cdf0e10cSrcweir TYPEINIT1( XMLEndReferenceContext_Impl, SvXMLImportContext ); 262cdf0e10cSrcweir 263cdf0e10cSrcweir XMLEndReferenceContext_Impl::XMLEndReferenceContext_Impl( 264cdf0e10cSrcweir SvXMLImport& rImport, 265cdf0e10cSrcweir sal_uInt16 nPrefix, 266cdf0e10cSrcweir const OUString& rLocalName, 267cdf0e10cSrcweir XMLHints_Impl& rHints, 268cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList) : 269cdf0e10cSrcweir SvXMLImportContext(rImport, nPrefix, rLocalName) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir OUString sName; 272cdf0e10cSrcweir 273cdf0e10cSrcweir // borrow from XMLStartReferenceContext_Impl 274cdf0e10cSrcweir if (XMLStartReferenceContext_Impl::FindName(GetImport(), xAttrList, sName)) 275cdf0e10cSrcweir { 276cdf0e10cSrcweir // search for reference start 277cdf0e10cSrcweir sal_uInt16 nCount = rHints.Count(); 278cdf0e10cSrcweir for(sal_uInt16 nPos = 0; nPos < nCount; nPos++) 279cdf0e10cSrcweir { 280cdf0e10cSrcweir XMLHint_Impl *pHint = rHints[nPos]; 281cdf0e10cSrcweir if ( pHint->IsReference() && 282cdf0e10cSrcweir sName.equals( ((XMLReferenceHint_Impl *)pHint)->GetRefName()) ) 283cdf0e10cSrcweir { 284cdf0e10cSrcweir // set end and stop searching 285cdf0e10cSrcweir pHint->SetEnd(GetImport().GetTextImport()-> 286cdf0e10cSrcweir GetCursor()->getStart() ); 287cdf0e10cSrcweir break; 288cdf0e10cSrcweir } 289cdf0e10cSrcweir } 290cdf0e10cSrcweir // else: no start (in this paragraph) -> ignore 291cdf0e10cSrcweir } 292cdf0e10cSrcweir } 293cdf0e10cSrcweir 294cdf0e10cSrcweir // --------------------------------------------------------------------- 295cdf0e10cSrcweir 296cdf0e10cSrcweir class XMLImpSpanContext_Impl : public SvXMLImportContext 297cdf0e10cSrcweir { 298cdf0e10cSrcweir const OUString sTextFrame; 299cdf0e10cSrcweir 300cdf0e10cSrcweir XMLHints_Impl& rHints; 301cdf0e10cSrcweir XMLStyleHint_Impl *pHint; 302cdf0e10cSrcweir 303cdf0e10cSrcweir sal_Bool& rIgnoreLeadingSpace; 304cdf0e10cSrcweir 305cdf0e10cSrcweir sal_uInt8 nStarFontsConvFlags; 306cdf0e10cSrcweir 307cdf0e10cSrcweir public: 308cdf0e10cSrcweir 309cdf0e10cSrcweir TYPEINFO(); 310cdf0e10cSrcweir 311cdf0e10cSrcweir XMLImpSpanContext_Impl( 312cdf0e10cSrcweir SvXMLImport& rImport, 313cdf0e10cSrcweir sal_uInt16 nPrfx, 314cdf0e10cSrcweir const OUString& rLName, 315cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 316cdf0e10cSrcweir XMLHints_Impl& rHnts, 317cdf0e10cSrcweir sal_Bool& rIgnLeadSpace 318cdf0e10cSrcweir ,sal_uInt8 nSFConvFlags 319cdf0e10cSrcweir ); 320cdf0e10cSrcweir 321cdf0e10cSrcweir virtual ~XMLImpSpanContext_Impl(); 322cdf0e10cSrcweir 323cdf0e10cSrcweir static SvXMLImportContext *CreateChildContext( 324cdf0e10cSrcweir SvXMLImport& rImport, 325cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 326cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 327cdf0e10cSrcweir sal_uInt16 nToken, XMLHints_Impl& rHnts, 328cdf0e10cSrcweir sal_Bool& rIgnLeadSpace 329cdf0e10cSrcweir ,sal_uInt8 nStarFontsConvFlags = 0 330cdf0e10cSrcweir ); 331cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( 332cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 333cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ); 334cdf0e10cSrcweir 335cdf0e10cSrcweir virtual void Characters( const OUString& rChars ); 336cdf0e10cSrcweir }; 337cdf0e10cSrcweir // --------------------------------------------------------------------- 338cdf0e10cSrcweir 339cdf0e10cSrcweir class XMLImpHyperlinkContext_Impl : public SvXMLImportContext 340cdf0e10cSrcweir { 341cdf0e10cSrcweir XMLHints_Impl& rHints; 342cdf0e10cSrcweir XMLHyperlinkHint_Impl *pHint; 343cdf0e10cSrcweir 344cdf0e10cSrcweir sal_Bool& rIgnoreLeadingSpace; 345cdf0e10cSrcweir 346cdf0e10cSrcweir public: 347cdf0e10cSrcweir 348cdf0e10cSrcweir TYPEINFO(); 349cdf0e10cSrcweir 350cdf0e10cSrcweir XMLImpHyperlinkContext_Impl( 351cdf0e10cSrcweir SvXMLImport& rImport, 352cdf0e10cSrcweir sal_uInt16 nPrfx, 353cdf0e10cSrcweir const OUString& rLName, 354cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 355cdf0e10cSrcweir XMLHints_Impl& rHnts, 356cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ); 357cdf0e10cSrcweir 358cdf0e10cSrcweir virtual ~XMLImpHyperlinkContext_Impl(); 359cdf0e10cSrcweir 360cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( 361cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 362cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ); 363cdf0e10cSrcweir 364cdf0e10cSrcweir virtual void Characters( const OUString& rChars ); 365cdf0e10cSrcweir }; 366cdf0e10cSrcweir 367cdf0e10cSrcweir TYPEINIT1( XMLImpHyperlinkContext_Impl, SvXMLImportContext ); 368cdf0e10cSrcweir 369cdf0e10cSrcweir XMLImpHyperlinkContext_Impl::XMLImpHyperlinkContext_Impl( 370cdf0e10cSrcweir SvXMLImport& rImport, 371cdf0e10cSrcweir sal_uInt16 nPrfx, 372cdf0e10cSrcweir const OUString& rLName, 373cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 374cdf0e10cSrcweir XMLHints_Impl& rHnts, 375cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ) : 376cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ), 377cdf0e10cSrcweir rHints( rHnts ), 378cdf0e10cSrcweir pHint( new XMLHyperlinkHint_Impl( 379cdf0e10cSrcweir GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) ), 380cdf0e10cSrcweir rIgnoreLeadingSpace( rIgnLeadSpace ) 381cdf0e10cSrcweir { 382cdf0e10cSrcweir OUString sShow; 383cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 384cdf0e10cSrcweir GetImport().GetTextImport()->GetTextHyperlinkAttrTokenMap(); 385cdf0e10cSrcweir 386cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 387cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 388cdf0e10cSrcweir { 389cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 390cdf0e10cSrcweir const OUString& rValue = xAttrList->getValueByIndex( i ); 391cdf0e10cSrcweir 392cdf0e10cSrcweir OUString aLocalName; 393cdf0e10cSrcweir sal_uInt16 nPrefix = 394cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 395cdf0e10cSrcweir &aLocalName ); 396cdf0e10cSrcweir switch( rTokenMap.Get( nPrefix, aLocalName ) ) 397cdf0e10cSrcweir { 398cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_HREF: 399cdf0e10cSrcweir pHint->SetHRef( GetImport().GetAbsoluteReference( rValue ) ); 400cdf0e10cSrcweir break; 401cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_NAME: 402cdf0e10cSrcweir pHint->SetName( rValue ); 403cdf0e10cSrcweir break; 404cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_TARGET_FRAME: 405cdf0e10cSrcweir pHint->SetTargetFrameName( rValue ); 406cdf0e10cSrcweir break; 407cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_SHOW: 408cdf0e10cSrcweir sShow = rValue; 409cdf0e10cSrcweir break; 410cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_STYLE_NAME: 411cdf0e10cSrcweir pHint->SetStyleName( rValue ); 412cdf0e10cSrcweir break; 413cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK_VIS_STYLE_NAME: 414cdf0e10cSrcweir pHint->SetVisitedStyleName( rValue ); 415cdf0e10cSrcweir break; 416cdf0e10cSrcweir } 417cdf0e10cSrcweir } 418cdf0e10cSrcweir 419cdf0e10cSrcweir if( sShow.getLength() && !pHint->GetTargetFrameName().getLength() ) 420cdf0e10cSrcweir { 421cdf0e10cSrcweir if( IsXMLToken( sShow, XML_NEW ) ) 422cdf0e10cSrcweir pHint->SetTargetFrameName( 423cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("_blank" ) ) ); 424cdf0e10cSrcweir else if( IsXMLToken( sShow, XML_REPLACE ) ) 425cdf0e10cSrcweir pHint->SetTargetFrameName( 426cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("_self" ) ) ); 427cdf0e10cSrcweir } 428cdf0e10cSrcweir rHints.Insert( pHint, rHints.Count() ); 429cdf0e10cSrcweir } 430cdf0e10cSrcweir 431cdf0e10cSrcweir XMLImpHyperlinkContext_Impl::~XMLImpHyperlinkContext_Impl() 432cdf0e10cSrcweir { 433cdf0e10cSrcweir if( pHint ) 434cdf0e10cSrcweir pHint->SetEnd( GetImport().GetTextImport() 435cdf0e10cSrcweir ->GetCursorAsRange()->getStart() ); 436cdf0e10cSrcweir } 437cdf0e10cSrcweir 438cdf0e10cSrcweir SvXMLImportContext *XMLImpHyperlinkContext_Impl::CreateChildContext( 439cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 440cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ) 441cdf0e10cSrcweir { 442cdf0e10cSrcweir if ( (nPrefix == XML_NAMESPACE_OFFICE) && 443cdf0e10cSrcweir IsXMLToken(rLocalName, XML_EVENT_LISTENERS) ) 444cdf0e10cSrcweir { 445cdf0e10cSrcweir XMLEventsImportContext* pCtxt = new XMLEventsImportContext( 446cdf0e10cSrcweir GetImport(), nPrefix, rLocalName); 447cdf0e10cSrcweir pHint->SetEventsContext(pCtxt); 448cdf0e10cSrcweir return pCtxt; 449cdf0e10cSrcweir } 450cdf0e10cSrcweir else 451cdf0e10cSrcweir { 452cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 453cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPElemTokenMap(); 454cdf0e10cSrcweir sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); 455cdf0e10cSrcweir 456cdf0e10cSrcweir return XMLImpSpanContext_Impl::CreateChildContext( 457cdf0e10cSrcweir GetImport(), nPrefix, rLocalName, xAttrList, 458cdf0e10cSrcweir nToken, rHints, rIgnoreLeadingSpace ); 459cdf0e10cSrcweir } 460cdf0e10cSrcweir } 461cdf0e10cSrcweir 462cdf0e10cSrcweir void XMLImpHyperlinkContext_Impl::Characters( const OUString& rChars ) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir GetImport().GetTextImport()->InsertString( rChars, rIgnoreLeadingSpace ); 465cdf0e10cSrcweir } 466cdf0e10cSrcweir 467cdf0e10cSrcweir // --------------------------------------------------------------------- 468cdf0e10cSrcweir 469cdf0e10cSrcweir class XMLImpRubyBaseContext_Impl : public SvXMLImportContext 470cdf0e10cSrcweir { 471cdf0e10cSrcweir XMLHints_Impl& rHints; 472cdf0e10cSrcweir 473cdf0e10cSrcweir sal_Bool& rIgnoreLeadingSpace; 474cdf0e10cSrcweir 475cdf0e10cSrcweir public: 476cdf0e10cSrcweir 477cdf0e10cSrcweir TYPEINFO(); 478cdf0e10cSrcweir 479cdf0e10cSrcweir XMLImpRubyBaseContext_Impl( 480cdf0e10cSrcweir SvXMLImport& rImport, 481cdf0e10cSrcweir sal_uInt16 nPrfx, 482cdf0e10cSrcweir const OUString& rLName, 483cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 484cdf0e10cSrcweir XMLHints_Impl& rHnts, 485cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ); 486cdf0e10cSrcweir 487cdf0e10cSrcweir virtual ~XMLImpRubyBaseContext_Impl(); 488cdf0e10cSrcweir 489cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( 490cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 491cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ); 492cdf0e10cSrcweir 493cdf0e10cSrcweir virtual void Characters( const OUString& rChars ); 494cdf0e10cSrcweir }; 495cdf0e10cSrcweir 496cdf0e10cSrcweir TYPEINIT1( XMLImpRubyBaseContext_Impl, SvXMLImportContext ); 497cdf0e10cSrcweir 498cdf0e10cSrcweir XMLImpRubyBaseContext_Impl::XMLImpRubyBaseContext_Impl( 499cdf0e10cSrcweir SvXMLImport& rImport, 500cdf0e10cSrcweir sal_uInt16 nPrfx, 501cdf0e10cSrcweir const OUString& rLName, 502cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > &, 503cdf0e10cSrcweir XMLHints_Impl& rHnts, 504cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ) : 505cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ), 506cdf0e10cSrcweir rHints( rHnts ), 507cdf0e10cSrcweir rIgnoreLeadingSpace( rIgnLeadSpace ) 508cdf0e10cSrcweir { 509cdf0e10cSrcweir } 510cdf0e10cSrcweir 511cdf0e10cSrcweir XMLImpRubyBaseContext_Impl::~XMLImpRubyBaseContext_Impl() 512cdf0e10cSrcweir { 513cdf0e10cSrcweir } 514cdf0e10cSrcweir 515cdf0e10cSrcweir SvXMLImportContext *XMLImpRubyBaseContext_Impl::CreateChildContext( 516cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 517cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ) 518cdf0e10cSrcweir { 519cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 520cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPElemTokenMap(); 521cdf0e10cSrcweir sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); 522cdf0e10cSrcweir 523cdf0e10cSrcweir return XMLImpSpanContext_Impl::CreateChildContext( GetImport(), nPrefix, 524cdf0e10cSrcweir rLocalName, xAttrList, 525cdf0e10cSrcweir nToken, rHints, rIgnoreLeadingSpace ); 526cdf0e10cSrcweir } 527cdf0e10cSrcweir 528cdf0e10cSrcweir void XMLImpRubyBaseContext_Impl::Characters( const OUString& rChars ) 529cdf0e10cSrcweir { 530cdf0e10cSrcweir GetImport().GetTextImport()->InsertString( rChars, rIgnoreLeadingSpace ); 531cdf0e10cSrcweir } 532cdf0e10cSrcweir 533cdf0e10cSrcweir // --------------------------------------------------------------------- 534cdf0e10cSrcweir 535cdf0e10cSrcweir class XMLImpRubyContext_Impl : public SvXMLImportContext 536cdf0e10cSrcweir { 537cdf0e10cSrcweir XMLHints_Impl& rHints; 538cdf0e10cSrcweir 539cdf0e10cSrcweir sal_Bool& rIgnoreLeadingSpace; 540cdf0e10cSrcweir 541cdf0e10cSrcweir Reference < XTextRange > m_xStart; 542cdf0e10cSrcweir OUString m_sStyleName; 543cdf0e10cSrcweir OUString m_sTextStyleName; 544cdf0e10cSrcweir OUString m_sText; 545cdf0e10cSrcweir 546cdf0e10cSrcweir public: 547cdf0e10cSrcweir 548cdf0e10cSrcweir TYPEINFO(); 549cdf0e10cSrcweir 550cdf0e10cSrcweir XMLImpRubyContext_Impl( 551cdf0e10cSrcweir SvXMLImport& rImport, 552cdf0e10cSrcweir sal_uInt16 nPrfx, 553cdf0e10cSrcweir const OUString& rLName, 554cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 555cdf0e10cSrcweir XMLHints_Impl& rHnts, 556cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ); 557cdf0e10cSrcweir 558cdf0e10cSrcweir virtual ~XMLImpRubyContext_Impl(); 559cdf0e10cSrcweir 560cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( 561cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 562cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ); 563cdf0e10cSrcweir 564cdf0e10cSrcweir void SetTextStyleName( const OUString& s ) { m_sTextStyleName = s; } 565cdf0e10cSrcweir void AppendText( const OUString& s ) { m_sText += s; } 566cdf0e10cSrcweir }; 567cdf0e10cSrcweir 568cdf0e10cSrcweir // --------------------------------------------------------------------- 569cdf0e10cSrcweir 570cdf0e10cSrcweir class XMLImpRubyTextContext_Impl : public SvXMLImportContext 571cdf0e10cSrcweir { 572cdf0e10cSrcweir XMLImpRubyContext_Impl & m_rRubyContext; 573cdf0e10cSrcweir 574cdf0e10cSrcweir public: 575cdf0e10cSrcweir 576cdf0e10cSrcweir TYPEINFO(); 577cdf0e10cSrcweir 578cdf0e10cSrcweir XMLImpRubyTextContext_Impl( 579cdf0e10cSrcweir SvXMLImport& rImport, 580cdf0e10cSrcweir sal_uInt16 nPrfx, 581cdf0e10cSrcweir const OUString& rLName, 582cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 583cdf0e10cSrcweir XMLImpRubyContext_Impl & rParent ); 584cdf0e10cSrcweir 585cdf0e10cSrcweir virtual ~XMLImpRubyTextContext_Impl(); 586cdf0e10cSrcweir 587cdf0e10cSrcweir virtual void Characters( const OUString& rChars ); 588cdf0e10cSrcweir }; 589cdf0e10cSrcweir 590cdf0e10cSrcweir TYPEINIT1( XMLImpRubyTextContext_Impl, SvXMLImportContext ); 591cdf0e10cSrcweir 592cdf0e10cSrcweir XMLImpRubyTextContext_Impl::XMLImpRubyTextContext_Impl( 593cdf0e10cSrcweir SvXMLImport& rImport, 594cdf0e10cSrcweir sal_uInt16 nPrfx, 595cdf0e10cSrcweir const OUString& rLName, 596cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 597cdf0e10cSrcweir XMLImpRubyContext_Impl & rParent ) 598cdf0e10cSrcweir : SvXMLImportContext( rImport, nPrfx, rLName ) 599cdf0e10cSrcweir , m_rRubyContext( rParent ) 600cdf0e10cSrcweir { 601cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 602cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 603cdf0e10cSrcweir { 604cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 605cdf0e10cSrcweir const OUString& rValue = xAttrList->getValueByIndex( i ); 606cdf0e10cSrcweir 607cdf0e10cSrcweir OUString aLocalName; 608cdf0e10cSrcweir sal_uInt16 nPrefix = 609cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 610cdf0e10cSrcweir &aLocalName ); 611cdf0e10cSrcweir if( XML_NAMESPACE_TEXT == nPrefix && 612cdf0e10cSrcweir IsXMLToken( aLocalName, XML_STYLE_NAME ) ) 613cdf0e10cSrcweir { 614cdf0e10cSrcweir m_rRubyContext.SetTextStyleName( rValue ); 615cdf0e10cSrcweir break; 616cdf0e10cSrcweir } 617cdf0e10cSrcweir } 618cdf0e10cSrcweir } 619cdf0e10cSrcweir 620cdf0e10cSrcweir XMLImpRubyTextContext_Impl::~XMLImpRubyTextContext_Impl() 621cdf0e10cSrcweir { 622cdf0e10cSrcweir } 623cdf0e10cSrcweir 624cdf0e10cSrcweir void XMLImpRubyTextContext_Impl::Characters( const OUString& rChars ) 625cdf0e10cSrcweir { 626cdf0e10cSrcweir m_rRubyContext.AppendText( rChars ); 627cdf0e10cSrcweir } 628cdf0e10cSrcweir 629cdf0e10cSrcweir // --------------------------------------------------------------------- 630cdf0e10cSrcweir 631cdf0e10cSrcweir TYPEINIT1( XMLImpRubyContext_Impl, SvXMLImportContext ); 632cdf0e10cSrcweir 633cdf0e10cSrcweir XMLImpRubyContext_Impl::XMLImpRubyContext_Impl( 634cdf0e10cSrcweir SvXMLImport& rImport, 635cdf0e10cSrcweir sal_uInt16 nPrfx, 636cdf0e10cSrcweir const OUString& rLName, 637cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 638cdf0e10cSrcweir XMLHints_Impl& rHnts, 639cdf0e10cSrcweir sal_Bool& rIgnLeadSpace ) : 640cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ), 641cdf0e10cSrcweir rHints( rHnts ), 642cdf0e10cSrcweir rIgnoreLeadingSpace( rIgnLeadSpace ) 643cdf0e10cSrcweir , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) 644cdf0e10cSrcweir { 645cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 646cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 647cdf0e10cSrcweir { 648cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 649cdf0e10cSrcweir const OUString& rValue = xAttrList->getValueByIndex( i ); 650cdf0e10cSrcweir 651cdf0e10cSrcweir OUString aLocalName; 652cdf0e10cSrcweir sal_uInt16 nPrefix = 653cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 654cdf0e10cSrcweir &aLocalName ); 655cdf0e10cSrcweir if( XML_NAMESPACE_TEXT == nPrefix && 656cdf0e10cSrcweir IsXMLToken( aLocalName, XML_STYLE_NAME ) ) 657cdf0e10cSrcweir { 658cdf0e10cSrcweir m_sStyleName = rValue; 659cdf0e10cSrcweir break; 660cdf0e10cSrcweir } 661cdf0e10cSrcweir } 662cdf0e10cSrcweir } 663cdf0e10cSrcweir 664cdf0e10cSrcweir XMLImpRubyContext_Impl::~XMLImpRubyContext_Impl() 665cdf0e10cSrcweir { 666cdf0e10cSrcweir const UniReference < XMLTextImportHelper > xTextImport( 667cdf0e10cSrcweir GetImport().GetTextImport()); 668cdf0e10cSrcweir const Reference < XTextCursor > xAttrCursor( 669cdf0e10cSrcweir xTextImport->GetText()->createTextCursorByRange( m_xStart )); 670cdf0e10cSrcweir xAttrCursor->gotoRange(xTextImport->GetCursorAsRange()->getStart(), 671cdf0e10cSrcweir sal_True); 672cdf0e10cSrcweir xTextImport->SetRuby( GetImport(), xAttrCursor, 673cdf0e10cSrcweir m_sStyleName, m_sTextStyleName, m_sText ); 674cdf0e10cSrcweir } 675cdf0e10cSrcweir 676cdf0e10cSrcweir SvXMLImportContext *XMLImpRubyContext_Impl::CreateChildContext( 677cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 678cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ) 679cdf0e10cSrcweir { 680cdf0e10cSrcweir SvXMLImportContext *pContext; 681cdf0e10cSrcweir if( XML_NAMESPACE_TEXT == nPrefix ) 682cdf0e10cSrcweir { 683cdf0e10cSrcweir if( IsXMLToken( rLocalName, XML_RUBY_BASE ) ) 684cdf0e10cSrcweir pContext = new XMLImpRubyBaseContext_Impl( GetImport(), nPrefix, 685cdf0e10cSrcweir rLocalName, 686cdf0e10cSrcweir xAttrList, 687cdf0e10cSrcweir rHints, 688cdf0e10cSrcweir rIgnoreLeadingSpace ); 689cdf0e10cSrcweir else if( IsXMLToken( rLocalName, XML_RUBY_TEXT ) ) 690cdf0e10cSrcweir pContext = new XMLImpRubyTextContext_Impl( GetImport(), nPrefix, 691cdf0e10cSrcweir rLocalName, 692cdf0e10cSrcweir xAttrList, 693cdf0e10cSrcweir *this ); 694cdf0e10cSrcweir else 695cdf0e10cSrcweir pContext = new SvXMLImportContext( 696cdf0e10cSrcweir GetImport(), nPrefix, rLocalName ); 697cdf0e10cSrcweir } 698cdf0e10cSrcweir else 699cdf0e10cSrcweir pContext = SvXMLImportContext::CreateChildContext( nPrefix, rLocalName, 700cdf0e10cSrcweir xAttrList ); 701cdf0e10cSrcweir 702cdf0e10cSrcweir return pContext; 703cdf0e10cSrcweir } 704cdf0e10cSrcweir 705cdf0e10cSrcweir // --------------------------------------------------------------------- 706cdf0e10cSrcweir 707cdf0e10cSrcweir /** for text:meta and text:meta-field 708cdf0e10cSrcweir */ 709cdf0e10cSrcweir class XMLMetaImportContextBase : public SvXMLImportContext 710cdf0e10cSrcweir { 711cdf0e10cSrcweir XMLHints_Impl& m_rHints; 712cdf0e10cSrcweir 713cdf0e10cSrcweir sal_Bool& m_rIgnoreLeadingSpace; 714cdf0e10cSrcweir 715cdf0e10cSrcweir /// start position 716cdf0e10cSrcweir Reference<XTextRange> m_xStart; 717cdf0e10cSrcweir 718cdf0e10cSrcweir protected: 719cdf0e10cSrcweir OUString m_XmlId; 720cdf0e10cSrcweir 721cdf0e10cSrcweir public: 722cdf0e10cSrcweir TYPEINFO(); 723cdf0e10cSrcweir 724cdf0e10cSrcweir XMLMetaImportContextBase( 725cdf0e10cSrcweir SvXMLImport& i_rImport, 726cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 727cdf0e10cSrcweir const OUString& i_rLocalName, 728cdf0e10cSrcweir XMLHints_Impl& i_rHints, 729cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ); 730cdf0e10cSrcweir 731cdf0e10cSrcweir virtual ~XMLMetaImportContextBase(); 732cdf0e10cSrcweir 733cdf0e10cSrcweir virtual void StartElement( 734cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & i_xAttrList); 735cdf0e10cSrcweir 736cdf0e10cSrcweir virtual void EndElement(); 737cdf0e10cSrcweir 738cdf0e10cSrcweir virtual SvXMLImportContext *CreateChildContext( 739cdf0e10cSrcweir sal_uInt16 i_nPrefix, const OUString& i_rLocalName, 740cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & i_xAttrList); 741cdf0e10cSrcweir 742cdf0e10cSrcweir virtual void Characters( const OUString& i_rChars ); 743cdf0e10cSrcweir 744cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 const i_nPrefix, 745cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue); 746cdf0e10cSrcweir 747cdf0e10cSrcweir virtual void InsertMeta(const Reference<XTextRange> & i_xInsertionRange) 748cdf0e10cSrcweir = 0; 749cdf0e10cSrcweir }; 750cdf0e10cSrcweir 751cdf0e10cSrcweir TYPEINIT1( XMLMetaImportContextBase, SvXMLImportContext ); 752cdf0e10cSrcweir 753cdf0e10cSrcweir XMLMetaImportContextBase::XMLMetaImportContextBase( 754cdf0e10cSrcweir SvXMLImport& i_rImport, 755cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 756cdf0e10cSrcweir const OUString& i_rLocalName, 757cdf0e10cSrcweir XMLHints_Impl& i_rHints, 758cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ) 759cdf0e10cSrcweir : SvXMLImportContext( i_rImport, i_nPrefix, i_rLocalName ) 760cdf0e10cSrcweir , m_rHints( i_rHints ) 761cdf0e10cSrcweir , m_rIgnoreLeadingSpace( i_rIgnoreLeadingSpace ) 762cdf0e10cSrcweir , m_xStart( GetImport().GetTextImport()->GetCursorAsRange()->getStart() ) 763cdf0e10cSrcweir { 764cdf0e10cSrcweir } 765cdf0e10cSrcweir 766cdf0e10cSrcweir XMLMetaImportContextBase::~XMLMetaImportContextBase() 767cdf0e10cSrcweir { 768cdf0e10cSrcweir } 769cdf0e10cSrcweir 770cdf0e10cSrcweir void XMLMetaImportContextBase::StartElement( 771cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & i_xAttrList) 772cdf0e10cSrcweir { 773cdf0e10cSrcweir const sal_Int16 nAttrCount(i_xAttrList.is() ? i_xAttrList->getLength() : 0); 774cdf0e10cSrcweir for ( sal_Int16 i = 0; i < nAttrCount; ++i ) 775cdf0e10cSrcweir { 776cdf0e10cSrcweir const OUString& rAttrName( i_xAttrList->getNameByIndex( i ) ); 777cdf0e10cSrcweir const OUString& rValue( i_xAttrList->getValueByIndex( i ) ); 778cdf0e10cSrcweir 779cdf0e10cSrcweir OUString sLocalName; 780cdf0e10cSrcweir const sal_uInt16 nPrefix( 781cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 782cdf0e10cSrcweir &sLocalName )); 783cdf0e10cSrcweir ProcessAttribute(nPrefix, sLocalName, rValue); 784cdf0e10cSrcweir } 785cdf0e10cSrcweir } 786cdf0e10cSrcweir 787cdf0e10cSrcweir void XMLMetaImportContextBase::EndElement() 788cdf0e10cSrcweir { 789cdf0e10cSrcweir OSL_ENSURE(m_xStart.is(), "no mxStart?"); 790cdf0e10cSrcweir if (!m_xStart.is()) return; 791cdf0e10cSrcweir 792cdf0e10cSrcweir const Reference<XTextRange> xEndRange( 793cdf0e10cSrcweir GetImport().GetTextImport()->GetCursorAsRange()->getStart() ); 794cdf0e10cSrcweir 795cdf0e10cSrcweir // create range for insertion 796cdf0e10cSrcweir const Reference<XTextCursor> xInsertionCursor( 797cdf0e10cSrcweir GetImport().GetTextImport()->GetText()->createTextCursorByRange( 798cdf0e10cSrcweir xEndRange) ); 799cdf0e10cSrcweir xInsertionCursor->gotoRange(m_xStart, sal_True); 800cdf0e10cSrcweir 801cdf0e10cSrcweir const Reference<XTextRange> xInsertionRange(xInsertionCursor, UNO_QUERY); 802cdf0e10cSrcweir 803cdf0e10cSrcweir InsertMeta(xInsertionRange); 804cdf0e10cSrcweir } 805cdf0e10cSrcweir 806cdf0e10cSrcweir SvXMLImportContext * XMLMetaImportContextBase::CreateChildContext( 807cdf0e10cSrcweir sal_uInt16 i_nPrefix, const OUString& i_rLocalName, 808cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & i_xAttrList ) 809cdf0e10cSrcweir { 810cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap( 811cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPElemTokenMap() ); 812cdf0e10cSrcweir const sal_uInt16 nToken( rTokenMap.Get( i_nPrefix, i_rLocalName ) ); 813cdf0e10cSrcweir 814cdf0e10cSrcweir return XMLImpSpanContext_Impl::CreateChildContext( GetImport(), i_nPrefix, 815cdf0e10cSrcweir i_rLocalName, i_xAttrList, nToken, m_rHints, m_rIgnoreLeadingSpace ); 816cdf0e10cSrcweir } 817cdf0e10cSrcweir 818cdf0e10cSrcweir void XMLMetaImportContextBase::Characters( const OUString& i_rChars ) 819cdf0e10cSrcweir { 820cdf0e10cSrcweir GetImport().GetTextImport()->InsertString(i_rChars, m_rIgnoreLeadingSpace); 821cdf0e10cSrcweir } 822cdf0e10cSrcweir 823cdf0e10cSrcweir void XMLMetaImportContextBase::ProcessAttribute(sal_uInt16 const i_nPrefix, 824cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue) 825cdf0e10cSrcweir { 826cdf0e10cSrcweir if ( (XML_NAMESPACE_XML == i_nPrefix) && IsXMLToken(i_rLocalName, XML_ID) ) 827cdf0e10cSrcweir { 828cdf0e10cSrcweir m_XmlId = i_rValue; 829cdf0e10cSrcweir } 830cdf0e10cSrcweir } 831cdf0e10cSrcweir 832cdf0e10cSrcweir 833cdf0e10cSrcweir // --------------------------------------------------------------------- 834cdf0e10cSrcweir 835cdf0e10cSrcweir /** text:meta */ 836cdf0e10cSrcweir class XMLMetaImportContext : public XMLMetaImportContextBase 837cdf0e10cSrcweir { 838cdf0e10cSrcweir // RDFa 839cdf0e10cSrcweir bool m_bHaveAbout; 840cdf0e10cSrcweir ::rtl::OUString m_sAbout; 841cdf0e10cSrcweir ::rtl::OUString m_sProperty; 842cdf0e10cSrcweir ::rtl::OUString m_sContent; 843cdf0e10cSrcweir ::rtl::OUString m_sDatatype; 844cdf0e10cSrcweir 845cdf0e10cSrcweir public: 846cdf0e10cSrcweir TYPEINFO(); 847cdf0e10cSrcweir 848cdf0e10cSrcweir XMLMetaImportContext( 849cdf0e10cSrcweir SvXMLImport& i_rImport, 850cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 851cdf0e10cSrcweir const OUString& i_rLocalName, 852cdf0e10cSrcweir XMLHints_Impl& i_rHints, 853cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ); 854cdf0e10cSrcweir 855cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 const i_nPrefix, 856cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue); 857cdf0e10cSrcweir 858cdf0e10cSrcweir virtual void InsertMeta(const Reference<XTextRange> & i_xInsertionRange); 859cdf0e10cSrcweir }; 860cdf0e10cSrcweir 861cdf0e10cSrcweir TYPEINIT1( XMLMetaImportContext, XMLMetaImportContextBase ); 862cdf0e10cSrcweir 863cdf0e10cSrcweir XMLMetaImportContext::XMLMetaImportContext( 864cdf0e10cSrcweir SvXMLImport& i_rImport, 865cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 866cdf0e10cSrcweir const OUString& i_rLocalName, 867cdf0e10cSrcweir XMLHints_Impl& i_rHints, 868cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ) 869cdf0e10cSrcweir : XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName, 870cdf0e10cSrcweir i_rHints, i_rIgnoreLeadingSpace ) 871cdf0e10cSrcweir , m_bHaveAbout(false) 872cdf0e10cSrcweir { 873cdf0e10cSrcweir } 874cdf0e10cSrcweir 875cdf0e10cSrcweir void XMLMetaImportContext::ProcessAttribute(sal_uInt16 const i_nPrefix, 876cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue) 877cdf0e10cSrcweir { 878cdf0e10cSrcweir if ( XML_NAMESPACE_XHTML == i_nPrefix ) 879cdf0e10cSrcweir { 880cdf0e10cSrcweir // RDFa 881cdf0e10cSrcweir if ( IsXMLToken( i_rLocalName, XML_ABOUT) ) 882cdf0e10cSrcweir { 883cdf0e10cSrcweir m_sAbout = i_rValue; 884cdf0e10cSrcweir m_bHaveAbout = true; 885cdf0e10cSrcweir } 886cdf0e10cSrcweir else if ( IsXMLToken( i_rLocalName, XML_PROPERTY) ) 887cdf0e10cSrcweir { 888cdf0e10cSrcweir m_sProperty = i_rValue; 889cdf0e10cSrcweir } 890cdf0e10cSrcweir else if ( IsXMLToken( i_rLocalName, XML_CONTENT) ) 891cdf0e10cSrcweir { 892cdf0e10cSrcweir m_sContent = i_rValue; 893cdf0e10cSrcweir } 894cdf0e10cSrcweir else if ( IsXMLToken( i_rLocalName, XML_DATATYPE) ) 895cdf0e10cSrcweir { 896cdf0e10cSrcweir m_sDatatype = i_rValue; 897cdf0e10cSrcweir } 898cdf0e10cSrcweir } 899cdf0e10cSrcweir else 900cdf0e10cSrcweir { 901cdf0e10cSrcweir XMLMetaImportContextBase::ProcessAttribute( 902cdf0e10cSrcweir i_nPrefix, i_rLocalName, i_rValue); 903cdf0e10cSrcweir } 904cdf0e10cSrcweir } 905cdf0e10cSrcweir 906cdf0e10cSrcweir void XMLMetaImportContext::InsertMeta( 907cdf0e10cSrcweir const Reference<XTextRange> & i_xInsertionRange) 908cdf0e10cSrcweir { 909cdf0e10cSrcweir OSL_ENSURE(!m_bHaveAbout == !m_sProperty.getLength(), 910cdf0e10cSrcweir "XMLMetaImportContext::InsertMeta: invalid RDFa?"); 911cdf0e10cSrcweir if (m_XmlId.getLength() || (m_bHaveAbout && m_sProperty.getLength())) 912cdf0e10cSrcweir { 913cdf0e10cSrcweir // insert mark 914cdf0e10cSrcweir const uno::Reference<rdf::XMetadatable> xMeta( 915cdf0e10cSrcweir XMLTextMarkImportContext::CreateAndInsertMark( 916cdf0e10cSrcweir GetImport(), 917cdf0e10cSrcweir OUString::createFromAscii( 918cdf0e10cSrcweir "com.sun.star.text.InContentMetadata"), 919cdf0e10cSrcweir OUString(), 920cdf0e10cSrcweir i_xInsertionRange, m_XmlId), 921cdf0e10cSrcweir uno::UNO_QUERY); 922cdf0e10cSrcweir OSL_ENSURE(xMeta.is(), "cannot insert Meta?"); 923cdf0e10cSrcweir 924cdf0e10cSrcweir if (xMeta.is() && m_bHaveAbout) 925cdf0e10cSrcweir { 926cdf0e10cSrcweir GetImport().AddRDFa(xMeta, 927cdf0e10cSrcweir m_sAbout, m_sProperty, m_sContent, m_sDatatype); 928cdf0e10cSrcweir } 929cdf0e10cSrcweir } 930cdf0e10cSrcweir else 931cdf0e10cSrcweir { 932cdf0e10cSrcweir OSL_TRACE("invalid <text:meta>: no xml:id, no valid RDFa"); 933cdf0e10cSrcweir } 934cdf0e10cSrcweir } 935cdf0e10cSrcweir 936cdf0e10cSrcweir // --------------------------------------------------------------------- 937cdf0e10cSrcweir 938cdf0e10cSrcweir /** text:meta-field */ 939cdf0e10cSrcweir class XMLMetaFieldImportContext : public XMLMetaImportContextBase 940cdf0e10cSrcweir { 941cdf0e10cSrcweir OUString m_DataStyleName; 942cdf0e10cSrcweir 943cdf0e10cSrcweir public: 944cdf0e10cSrcweir TYPEINFO(); 945cdf0e10cSrcweir 946cdf0e10cSrcweir XMLMetaFieldImportContext( 947cdf0e10cSrcweir SvXMLImport& i_rImport, 948cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 949cdf0e10cSrcweir const OUString& i_rLocalName, 950cdf0e10cSrcweir XMLHints_Impl& i_rHints, 951cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ); 952cdf0e10cSrcweir 953cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 const i_nPrefix, 954cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue); 955cdf0e10cSrcweir 956cdf0e10cSrcweir virtual void InsertMeta(const Reference<XTextRange> & i_xInsertionRange); 957cdf0e10cSrcweir }; 958cdf0e10cSrcweir 959cdf0e10cSrcweir TYPEINIT1( XMLMetaFieldImportContext, XMLMetaImportContextBase ); 960cdf0e10cSrcweir 961cdf0e10cSrcweir XMLMetaFieldImportContext::XMLMetaFieldImportContext( 962cdf0e10cSrcweir SvXMLImport& i_rImport, 963cdf0e10cSrcweir const sal_uInt16 i_nPrefix, 964cdf0e10cSrcweir const OUString& i_rLocalName, 965cdf0e10cSrcweir XMLHints_Impl& i_rHints, 966cdf0e10cSrcweir sal_Bool & i_rIgnoreLeadingSpace ) 967cdf0e10cSrcweir : XMLMetaImportContextBase( i_rImport, i_nPrefix, i_rLocalName, 968cdf0e10cSrcweir i_rHints, i_rIgnoreLeadingSpace ) 969cdf0e10cSrcweir { 970cdf0e10cSrcweir } 971cdf0e10cSrcweir 972cdf0e10cSrcweir void XMLMetaFieldImportContext::ProcessAttribute(sal_uInt16 const i_nPrefix, 973cdf0e10cSrcweir OUString const & i_rLocalName, OUString const & i_rValue) 974cdf0e10cSrcweir { 975cdf0e10cSrcweir if ( XML_NAMESPACE_STYLE == i_nPrefix && 976cdf0e10cSrcweir IsXMLToken( i_rLocalName, XML_DATA_STYLE_NAME ) ) 977cdf0e10cSrcweir { 978cdf0e10cSrcweir m_DataStyleName = i_rValue; 979cdf0e10cSrcweir } 980cdf0e10cSrcweir else 981cdf0e10cSrcweir { 982cdf0e10cSrcweir XMLMetaImportContextBase::ProcessAttribute( 983cdf0e10cSrcweir i_nPrefix, i_rLocalName, i_rValue); 984cdf0e10cSrcweir } 985cdf0e10cSrcweir } 986cdf0e10cSrcweir 987cdf0e10cSrcweir void XMLMetaFieldImportContext::InsertMeta( 988cdf0e10cSrcweir const Reference<XTextRange> & i_xInsertionRange) 989cdf0e10cSrcweir { 990cdf0e10cSrcweir if (m_XmlId.getLength()) // valid? 991cdf0e10cSrcweir { 992cdf0e10cSrcweir // insert mark 993cdf0e10cSrcweir const Reference<XPropertySet> xPropertySet( 994cdf0e10cSrcweir XMLTextMarkImportContext::CreateAndInsertMark( 995cdf0e10cSrcweir GetImport(), 996cdf0e10cSrcweir OUString::createFromAscii( 997cdf0e10cSrcweir "com.sun.star.text.textfield.MetadataField"), 998cdf0e10cSrcweir OUString(), 999cdf0e10cSrcweir i_xInsertionRange, m_XmlId), 1000cdf0e10cSrcweir UNO_QUERY); 1001cdf0e10cSrcweir OSL_ENSURE(xPropertySet.is(), "cannot insert MetaField?"); 1002cdf0e10cSrcweir if (!xPropertySet.is()) return; 1003cdf0e10cSrcweir 1004cdf0e10cSrcweir if (m_DataStyleName.getLength()) 1005cdf0e10cSrcweir { 1006cdf0e10cSrcweir sal_Bool isDefaultLanguage(sal_True); 1007cdf0e10cSrcweir 1008cdf0e10cSrcweir const sal_Int32 nKey( GetImport().GetTextImport()->GetDataStyleKey( 1009cdf0e10cSrcweir m_DataStyleName, & isDefaultLanguage) ); 1010cdf0e10cSrcweir 1011cdf0e10cSrcweir if (-1 != nKey) 1012cdf0e10cSrcweir { 1013cdf0e10cSrcweir static ::rtl::OUString sPropertyIsFixedLanguage( 1014cdf0e10cSrcweir ::rtl::OUString::createFromAscii("IsFixedLanguage") ); 1015cdf0e10cSrcweir Any any; 1016cdf0e10cSrcweir any <<= nKey; 1017cdf0e10cSrcweir xPropertySet->setPropertyValue( 1018cdf0e10cSrcweir OUString::createFromAscii("NumberFormat"), any); 1019cdf0e10cSrcweir if ( xPropertySet->getPropertySetInfo()-> 1020cdf0e10cSrcweir hasPropertyByName( sPropertyIsFixedLanguage ) ) 1021cdf0e10cSrcweir { 1022cdf0e10cSrcweir any <<= static_cast<bool>(!isDefaultLanguage); 1023cdf0e10cSrcweir xPropertySet->setPropertyValue( sPropertyIsFixedLanguage, 1024cdf0e10cSrcweir any ); 1025cdf0e10cSrcweir } 1026cdf0e10cSrcweir } 1027cdf0e10cSrcweir } 1028cdf0e10cSrcweir } 1029cdf0e10cSrcweir else 1030cdf0e10cSrcweir { 1031cdf0e10cSrcweir OSL_TRACE("invalid <text:meta-field>: no xml:id"); 1032cdf0e10cSrcweir } 1033cdf0e10cSrcweir } 1034cdf0e10cSrcweir 1035cdf0e10cSrcweir 1036cdf0e10cSrcweir // --------------------------------------------------------------------- 1037cdf0e10cSrcweir 1038cdf0e10cSrcweir 1039cdf0e10cSrcweir /** 1040cdf0e10cSrcweir * Process index marks. 1041cdf0e10cSrcweir * 1042cdf0e10cSrcweir * All *-mark-end index marks should instantiate *this* class (because 1043cdf0e10cSrcweir * it doesn't process attributes other than ID), while the *-mark and 1044cdf0e10cSrcweir * *-mark-start classes should instantiate the apporpiate subclasses. 1045cdf0e10cSrcweir */ 1046cdf0e10cSrcweir class XMLIndexMarkImportContext_Impl : public SvXMLImportContext 1047cdf0e10cSrcweir { 1048cdf0e10cSrcweir const OUString sAlternativeText; 1049cdf0e10cSrcweir 1050cdf0e10cSrcweir XMLHints_Impl& rHints; 1051cdf0e10cSrcweir const enum XMLTextPElemTokens eToken; 1052cdf0e10cSrcweir OUString sID; 1053cdf0e10cSrcweir 1054cdf0e10cSrcweir public: 1055cdf0e10cSrcweir TYPEINFO(); 1056cdf0e10cSrcweir 1057cdf0e10cSrcweir XMLIndexMarkImportContext_Impl( 1058cdf0e10cSrcweir SvXMLImport& rImport, 1059cdf0e10cSrcweir sal_uInt16 nPrefix, 1060cdf0e10cSrcweir const OUString& rLocalName, 1061cdf0e10cSrcweir enum XMLTextPElemTokens nTok, 1062cdf0e10cSrcweir XMLHints_Impl& rHnts); 1063cdf0e10cSrcweir 1064cdf0e10cSrcweir void StartElement(const Reference<xml::sax::XAttributeList> & xAttrList); 1065cdf0e10cSrcweir 1066cdf0e10cSrcweir protected: 1067cdf0e10cSrcweir 1068cdf0e10cSrcweir /// process all attributes 1069cdf0e10cSrcweir void ProcessAttributes(const Reference<xml::sax::XAttributeList> & xAttrList, 1070cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet); 1071cdf0e10cSrcweir 1072cdf0e10cSrcweir /** 1073cdf0e10cSrcweir * All marks can be created immediatly. Since we don't care about 1074cdf0e10cSrcweir * the element content, ProcessAttribute should set the properties 1075cdf0e10cSrcweir * immediatly. 1076cdf0e10cSrcweir * 1077cdf0e10cSrcweir * This method tolerates an empty PropertySet; subclasses however 1078cdf0e10cSrcweir * are not expected to. 1079cdf0e10cSrcweir */ 1080cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 nNamespace, 1081cdf0e10cSrcweir OUString sLocalName, 1082cdf0e10cSrcweir OUString sValue, 1083cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet); 1084cdf0e10cSrcweir 1085cdf0e10cSrcweir static void GetServiceName(OUString& sServiceName, 1086cdf0e10cSrcweir enum XMLTextPElemTokens nToken); 1087cdf0e10cSrcweir 1088cdf0e10cSrcweir sal_Bool CreateMark(Reference<beans::XPropertySet>& rPropSet, 1089cdf0e10cSrcweir const OUString& rServiceName); 1090cdf0e10cSrcweir }; 1091cdf0e10cSrcweir 1092cdf0e10cSrcweir 1093cdf0e10cSrcweir TYPEINIT1( XMLIndexMarkImportContext_Impl, SvXMLImportContext ); 1094cdf0e10cSrcweir 1095cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::XMLIndexMarkImportContext_Impl( 1096cdf0e10cSrcweir SvXMLImport& rImport, 1097cdf0e10cSrcweir sal_uInt16 nPrefix, 1098cdf0e10cSrcweir const OUString& rLocalName, 1099cdf0e10cSrcweir enum XMLTextPElemTokens eTok, 1100cdf0e10cSrcweir XMLHints_Impl& rHnts) : 1101cdf0e10cSrcweir SvXMLImportContext(rImport, nPrefix, rLocalName), 1102cdf0e10cSrcweir sAlternativeText(RTL_CONSTASCII_USTRINGPARAM("AlternativeText")), 1103cdf0e10cSrcweir rHints(rHnts), 1104cdf0e10cSrcweir eToken(eTok) 1105cdf0e10cSrcweir { 1106cdf0e10cSrcweir } 1107cdf0e10cSrcweir 1108cdf0e10cSrcweir void XMLIndexMarkImportContext_Impl::StartElement( 1109cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList) 1110cdf0e10cSrcweir { 1111cdf0e10cSrcweir // get Cursor position (needed for all cases) 1112cdf0e10cSrcweir Reference<XTextRange> xPos( 1113cdf0e10cSrcweir GetImport().GetTextImport()->GetCursor()->getStart()); 1114cdf0e10cSrcweir Reference<beans::XPropertySet> xMark; 1115cdf0e10cSrcweir 1116cdf0e10cSrcweir switch (eToken) 1117cdf0e10cSrcweir { 1118cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK: 1119cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK: 1120cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK: 1121cdf0e10cSrcweir { 1122cdf0e10cSrcweir // single mark: create mark and insert 1123cdf0e10cSrcweir OUString sService; 1124cdf0e10cSrcweir GetServiceName(sService, eToken); 1125cdf0e10cSrcweir if (CreateMark(xMark, sService)) 1126cdf0e10cSrcweir { 1127cdf0e10cSrcweir ProcessAttributes(xAttrList, xMark); 1128cdf0e10cSrcweir XMLHint_Impl* pHint = new XMLIndexMarkHint_Impl(xMark, xPos); 1129cdf0e10cSrcweir rHints.Insert(pHint, rHints.Count()); 1130cdf0e10cSrcweir } 1131cdf0e10cSrcweir // else: can't create mark -> ignore 1132cdf0e10cSrcweir break; 1133cdf0e10cSrcweir } 1134cdf0e10cSrcweir 1135cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_START: 1136cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_START: 1137cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_START: 1138cdf0e10cSrcweir { 1139cdf0e10cSrcweir // start: create mark and insert (if ID is found) 1140cdf0e10cSrcweir OUString sService; 1141cdf0e10cSrcweir GetServiceName(sService, eToken); 1142cdf0e10cSrcweir if (CreateMark(xMark, sService)) 1143cdf0e10cSrcweir { 1144cdf0e10cSrcweir ProcessAttributes(xAttrList, xMark); 1145cdf0e10cSrcweir if (sID.getLength() > 0) 1146cdf0e10cSrcweir { 1147cdf0e10cSrcweir // process only if we find an ID 1148cdf0e10cSrcweir XMLHint_Impl* pHint = 1149cdf0e10cSrcweir new XMLIndexMarkHint_Impl(xMark, xPos, sID); 1150cdf0e10cSrcweir rHints.Insert(pHint, rHints.Count()); 1151cdf0e10cSrcweir } 1152cdf0e10cSrcweir // else: no ID -> we'll never find the end -> ignore 1153cdf0e10cSrcweir } 1154cdf0e10cSrcweir // else: can't create mark -> ignore 1155cdf0e10cSrcweir break; 1156cdf0e10cSrcweir } 1157cdf0e10cSrcweir 1158cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_END: 1159cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_END: 1160cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_END: 1161cdf0e10cSrcweir { 1162cdf0e10cSrcweir // end: search for ID and set end of mark 1163cdf0e10cSrcweir 1164cdf0e10cSrcweir // call process attributes with empty XPropertySet: 1165cdf0e10cSrcweir ProcessAttributes(xAttrList, xMark); 1166cdf0e10cSrcweir if (sID.getLength() > 0) 1167cdf0e10cSrcweir { 1168cdf0e10cSrcweir // if we have an ID, find the hint and set the end position 1169cdf0e10cSrcweir sal_uInt16 nCount = rHints.Count(); 1170cdf0e10cSrcweir for(sal_uInt16 nPos = 0; nPos < nCount; nPos++) 1171cdf0e10cSrcweir { 1172cdf0e10cSrcweir XMLHint_Impl *pHint = rHints[nPos]; 1173cdf0e10cSrcweir if ( pHint->IsIndexMark() && 1174cdf0e10cSrcweir sID.equals( 1175cdf0e10cSrcweir ((XMLIndexMarkHint_Impl *)pHint)->GetID()) ) 1176cdf0e10cSrcweir { 1177cdf0e10cSrcweir // set end and stop searching 1178cdf0e10cSrcweir pHint->SetEnd(xPos); 1179cdf0e10cSrcweir break; 1180cdf0e10cSrcweir } 1181cdf0e10cSrcweir } 1182cdf0e10cSrcweir } 1183cdf0e10cSrcweir // else: no ID -> ignore 1184cdf0e10cSrcweir break; 1185cdf0e10cSrcweir } 1186cdf0e10cSrcweir 1187cdf0e10cSrcweir default: 1188cdf0e10cSrcweir DBG_ERROR("unknown index mark type!"); 1189cdf0e10cSrcweir break; 1190cdf0e10cSrcweir } 1191cdf0e10cSrcweir } 1192cdf0e10cSrcweir 1193cdf0e10cSrcweir void XMLIndexMarkImportContext_Impl::ProcessAttributes( 1194cdf0e10cSrcweir const Reference<xml::sax::XAttributeList> & xAttrList, 1195cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet) 1196cdf0e10cSrcweir { 1197cdf0e10cSrcweir // process attributes 1198cdf0e10cSrcweir sal_Int16 nLength = xAttrList->getLength(); 1199cdf0e10cSrcweir for(sal_Int16 i=0; i<nLength; i++) 1200cdf0e10cSrcweir { 1201cdf0e10cSrcweir OUString sLocalName; 1202cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap(). 1203cdf0e10cSrcweir GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName ); 1204cdf0e10cSrcweir 1205cdf0e10cSrcweir ProcessAttribute(nPrefix, sLocalName, 1206cdf0e10cSrcweir xAttrList->getValueByIndex(i), 1207cdf0e10cSrcweir rPropSet); 1208cdf0e10cSrcweir } 1209cdf0e10cSrcweir } 1210cdf0e10cSrcweir 1211cdf0e10cSrcweir void XMLIndexMarkImportContext_Impl::ProcessAttribute( 1212cdf0e10cSrcweir sal_uInt16 nNamespace, 1213cdf0e10cSrcweir OUString sLocalName, 1214cdf0e10cSrcweir OUString sValue, 1215cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet) 1216cdf0e10cSrcweir { 1217cdf0e10cSrcweir // we only know ID + string-value attribute; 1218cdf0e10cSrcweir // (former: marks, latter: -start + -end-marks) 1219cdf0e10cSrcweir // the remainder is handled in sub-classes 1220cdf0e10cSrcweir switch (eToken) 1221cdf0e10cSrcweir { 1222cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK: 1223cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK: 1224cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK: 1225cdf0e10cSrcweir if ( (XML_NAMESPACE_TEXT == nNamespace) && 1226cdf0e10cSrcweir IsXMLToken( sLocalName, XML_STRING_VALUE ) ) 1227cdf0e10cSrcweir { 1228cdf0e10cSrcweir rPropSet->setPropertyValue(sAlternativeText, uno::makeAny(sValue)); 1229cdf0e10cSrcweir } 1230cdf0e10cSrcweir // else: ignore! 1231cdf0e10cSrcweir break; 1232cdf0e10cSrcweir 1233cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_START: 1234cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_START: 1235cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_START: 1236cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_END: 1237cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_END: 1238cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_END: 1239cdf0e10cSrcweir if ( (XML_NAMESPACE_TEXT == nNamespace) && 1240cdf0e10cSrcweir IsXMLToken( sLocalName, XML_ID ) ) 1241cdf0e10cSrcweir { 1242cdf0e10cSrcweir sID = sValue; 1243cdf0e10cSrcweir } 1244cdf0e10cSrcweir // else: ignore 1245cdf0e10cSrcweir break; 1246cdf0e10cSrcweir 1247cdf0e10cSrcweir default: 1248cdf0e10cSrcweir DBG_ERROR("unknown index mark type!"); 1249cdf0e10cSrcweir break; 1250cdf0e10cSrcweir } 1251cdf0e10cSrcweir } 1252cdf0e10cSrcweir 1253cdf0e10cSrcweir static const sal_Char sAPI_com_sun_star_text_ContentIndexMark[] = 1254cdf0e10cSrcweir "com.sun.star.text.ContentIndexMark"; 1255cdf0e10cSrcweir static const sal_Char sAPI_com_sun_star_text_UserIndexMark[] = 1256cdf0e10cSrcweir "com.sun.star.text.UserIndexMark"; 1257cdf0e10cSrcweir static const sal_Char sAPI_com_sun_star_text_DocumentIndexMark[] = 1258cdf0e10cSrcweir "com.sun.star.text.DocumentIndexMark"; 1259cdf0e10cSrcweir 1260cdf0e10cSrcweir 1261cdf0e10cSrcweir void XMLIndexMarkImportContext_Impl::GetServiceName( 1262cdf0e10cSrcweir OUString& sServiceName, 1263cdf0e10cSrcweir enum XMLTextPElemTokens eToken) 1264cdf0e10cSrcweir { 1265cdf0e10cSrcweir switch (eToken) 1266cdf0e10cSrcweir { 1267cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK: 1268cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_START: 1269cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_END: 1270cdf0e10cSrcweir { 1271cdf0e10cSrcweir OUString sTmp(RTL_CONSTASCII_USTRINGPARAM( 1272cdf0e10cSrcweir sAPI_com_sun_star_text_ContentIndexMark)); 1273cdf0e10cSrcweir sServiceName = sTmp; 1274cdf0e10cSrcweir break; 1275cdf0e10cSrcweir } 1276cdf0e10cSrcweir 1277cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK: 1278cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_START: 1279cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_END: 1280cdf0e10cSrcweir { 1281cdf0e10cSrcweir OUString sTmp(RTL_CONSTASCII_USTRINGPARAM( 1282cdf0e10cSrcweir sAPI_com_sun_star_text_UserIndexMark)); 1283cdf0e10cSrcweir sServiceName = sTmp; 1284cdf0e10cSrcweir break; 1285cdf0e10cSrcweir } 1286cdf0e10cSrcweir 1287cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK: 1288cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_START: 1289cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_END: 1290cdf0e10cSrcweir { 1291cdf0e10cSrcweir OUString sTmp(RTL_CONSTASCII_USTRINGPARAM( 1292cdf0e10cSrcweir sAPI_com_sun_star_text_DocumentIndexMark)); 1293cdf0e10cSrcweir sServiceName = sTmp; 1294cdf0e10cSrcweir break; 1295cdf0e10cSrcweir } 1296cdf0e10cSrcweir 1297cdf0e10cSrcweir default: 1298cdf0e10cSrcweir { 1299cdf0e10cSrcweir DBG_ERROR("unknown index mark type!"); 1300cdf0e10cSrcweir OUString sTmp; 1301cdf0e10cSrcweir sServiceName = sTmp; 1302cdf0e10cSrcweir break; 1303cdf0e10cSrcweir } 1304cdf0e10cSrcweir } 1305cdf0e10cSrcweir } 1306cdf0e10cSrcweir 1307cdf0e10cSrcweir 1308cdf0e10cSrcweir sal_Bool XMLIndexMarkImportContext_Impl::CreateMark( 1309cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet, 1310cdf0e10cSrcweir const OUString& rServiceName) 1311cdf0e10cSrcweir { 1312cdf0e10cSrcweir Reference<lang::XMultiServiceFactory> 1313cdf0e10cSrcweir xFactory(GetImport().GetModel(), UNO_QUERY); 1314cdf0e10cSrcweir 1315cdf0e10cSrcweir if( xFactory.is() ) 1316cdf0e10cSrcweir { 1317cdf0e10cSrcweir Reference<beans::XPropertySet> xPropSet( xFactory->createInstance(rServiceName), UNO_QUERY ); 1318cdf0e10cSrcweir if (xPropSet.is()) 1319cdf0e10cSrcweir rPropSet = xPropSet; 1320cdf0e10cSrcweir return sal_True; 1321cdf0e10cSrcweir } 1322cdf0e10cSrcweir 1323cdf0e10cSrcweir return sal_False; 1324cdf0e10cSrcweir } 1325cdf0e10cSrcweir 1326cdf0e10cSrcweir 1327cdf0e10cSrcweir class XMLTOCMarkImportContext_Impl : public XMLIndexMarkImportContext_Impl 1328cdf0e10cSrcweir { 1329cdf0e10cSrcweir const OUString sLevel; 1330cdf0e10cSrcweir 1331cdf0e10cSrcweir public: 1332cdf0e10cSrcweir TYPEINFO(); 1333cdf0e10cSrcweir 1334cdf0e10cSrcweir XMLTOCMarkImportContext_Impl( 1335cdf0e10cSrcweir SvXMLImport& rImport, 1336cdf0e10cSrcweir sal_uInt16 nPrefix, 1337cdf0e10cSrcweir const OUString& rLocalName, 1338cdf0e10cSrcweir enum XMLTextPElemTokens nTok, 1339cdf0e10cSrcweir XMLHints_Impl& rHnts); 1340cdf0e10cSrcweir 1341cdf0e10cSrcweir protected: 1342cdf0e10cSrcweir 1343cdf0e10cSrcweir /** process outline level */ 1344cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 nNamespace, 1345cdf0e10cSrcweir OUString sLocalName, 1346cdf0e10cSrcweir OUString sValue, 1347cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet); 1348cdf0e10cSrcweir }; 1349cdf0e10cSrcweir 1350cdf0e10cSrcweir TYPEINIT1( XMLTOCMarkImportContext_Impl, XMLIndexMarkImportContext_Impl ); 1351cdf0e10cSrcweir 1352cdf0e10cSrcweir 1353cdf0e10cSrcweir XMLTOCMarkImportContext_Impl::XMLTOCMarkImportContext_Impl( 1354cdf0e10cSrcweir SvXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLocalName, 1355cdf0e10cSrcweir enum XMLTextPElemTokens nTok, XMLHints_Impl& rHnts) : 1356cdf0e10cSrcweir XMLIndexMarkImportContext_Impl(rImport, nPrefix, rLocalName, 1357cdf0e10cSrcweir nTok, rHnts), 1358cdf0e10cSrcweir sLevel(RTL_CONSTASCII_USTRINGPARAM("Level")) 1359cdf0e10cSrcweir { 1360cdf0e10cSrcweir } 1361cdf0e10cSrcweir 1362cdf0e10cSrcweir void XMLTOCMarkImportContext_Impl::ProcessAttribute( 1363cdf0e10cSrcweir sal_uInt16 nNamespace, 1364cdf0e10cSrcweir OUString sLocalName, 1365cdf0e10cSrcweir OUString sValue, 1366cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet) 1367cdf0e10cSrcweir { 1368cdf0e10cSrcweir DBG_ASSERT(rPropSet.is(), "need PropertySet"); 1369cdf0e10cSrcweir 1370cdf0e10cSrcweir if ((XML_NAMESPACE_TEXT == nNamespace) && 1371cdf0e10cSrcweir IsXMLToken( sLocalName, XML_OUTLINE_LEVEL ) ) 1372cdf0e10cSrcweir { 1373cdf0e10cSrcweir // ouline level: set Level property 1374cdf0e10cSrcweir sal_Int32 nTmp; 1375cdf0e10cSrcweir if ( SvXMLUnitConverter::convertNumber( nTmp, sValue ) 1376cdf0e10cSrcweir && nTmp >= 1 1377cdf0e10cSrcweir && nTmp < GetImport().GetTextImport()-> 1378cdf0e10cSrcweir GetChapterNumbering()->getCount() ) 1379cdf0e10cSrcweir { 1380cdf0e10cSrcweir rPropSet->setPropertyValue(sLevel, uno::makeAny((sal_Int16)(nTmp - 1))); 1381cdf0e10cSrcweir } 1382cdf0e10cSrcweir // else: value out of range -> ignore 1383cdf0e10cSrcweir } 1384cdf0e10cSrcweir else 1385cdf0e10cSrcweir { 1386cdf0e10cSrcweir // else: delegate to superclass 1387cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::ProcessAttribute( 1388cdf0e10cSrcweir nNamespace, sLocalName, sValue, rPropSet); 1389cdf0e10cSrcweir } 1390cdf0e10cSrcweir } 1391cdf0e10cSrcweir 1392cdf0e10cSrcweir class XMLUserIndexMarkImportContext_Impl : public XMLIndexMarkImportContext_Impl 1393cdf0e10cSrcweir { 1394cdf0e10cSrcweir const OUString sUserIndexName; 1395cdf0e10cSrcweir const OUString sLevel; 1396cdf0e10cSrcweir 1397cdf0e10cSrcweir public: 1398cdf0e10cSrcweir TYPEINFO(); 1399cdf0e10cSrcweir 1400cdf0e10cSrcweir XMLUserIndexMarkImportContext_Impl( 1401cdf0e10cSrcweir SvXMLImport& rImport, 1402cdf0e10cSrcweir sal_uInt16 nPrefix, 1403cdf0e10cSrcweir const OUString& rLocalName, 1404cdf0e10cSrcweir enum XMLTextPElemTokens nTok, 1405cdf0e10cSrcweir XMLHints_Impl& rHnts); 1406cdf0e10cSrcweir 1407cdf0e10cSrcweir protected: 1408cdf0e10cSrcweir 1409cdf0e10cSrcweir /** process index name */ 1410cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 nNamespace, 1411cdf0e10cSrcweir OUString sLocalName, 1412cdf0e10cSrcweir OUString sValue, 1413cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet); 1414cdf0e10cSrcweir }; 1415cdf0e10cSrcweir 1416cdf0e10cSrcweir TYPEINIT1( XMLUserIndexMarkImportContext_Impl, XMLIndexMarkImportContext_Impl); 1417cdf0e10cSrcweir 1418cdf0e10cSrcweir XMLUserIndexMarkImportContext_Impl::XMLUserIndexMarkImportContext_Impl( 1419cdf0e10cSrcweir SvXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLocalName, 1420cdf0e10cSrcweir enum XMLTextPElemTokens nTok, XMLHints_Impl& rHnts) : 1421cdf0e10cSrcweir XMLIndexMarkImportContext_Impl(rImport, nPrefix, rLocalName, 1422cdf0e10cSrcweir nTok, rHnts), 1423cdf0e10cSrcweir sUserIndexName(RTL_CONSTASCII_USTRINGPARAM("UserIndexName")), 1424cdf0e10cSrcweir sLevel(RTL_CONSTASCII_USTRINGPARAM("Level")) 1425cdf0e10cSrcweir { 1426cdf0e10cSrcweir } 1427cdf0e10cSrcweir 1428cdf0e10cSrcweir void XMLUserIndexMarkImportContext_Impl::ProcessAttribute( 1429cdf0e10cSrcweir sal_uInt16 nNamespace, OUString sLocalName, OUString sValue, 1430cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet) 1431cdf0e10cSrcweir { 1432cdf0e10cSrcweir if ( XML_NAMESPACE_TEXT == nNamespace ) 1433cdf0e10cSrcweir { 1434cdf0e10cSrcweir if ( IsXMLToken( sLocalName, XML_INDEX_NAME ) ) 1435cdf0e10cSrcweir { 1436cdf0e10cSrcweir rPropSet->setPropertyValue(sUserIndexName, uno::makeAny(sValue)); 1437cdf0e10cSrcweir } 1438cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_OUTLINE_LEVEL ) ) 1439cdf0e10cSrcweir { 1440cdf0e10cSrcweir // ouline level: set Level property 1441cdf0e10cSrcweir sal_Int32 nTmp; 1442cdf0e10cSrcweir if (SvXMLUnitConverter::convertNumber( 1443cdf0e10cSrcweir nTmp, sValue, 0, 1444cdf0e10cSrcweir GetImport().GetTextImport()->GetChapterNumbering()->getCount())) 1445cdf0e10cSrcweir { 1446cdf0e10cSrcweir rPropSet->setPropertyValue(sLevel, uno::makeAny(static_cast<sal_Int16>(nTmp - 1))); 1447cdf0e10cSrcweir } 1448cdf0e10cSrcweir // else: value out of range -> ignore 1449cdf0e10cSrcweir } 1450cdf0e10cSrcweir else 1451cdf0e10cSrcweir { 1452cdf0e10cSrcweir // else: unknown text property: delegate to super class 1453cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::ProcessAttribute( 1454cdf0e10cSrcweir nNamespace, sLocalName, sValue, rPropSet); 1455cdf0e10cSrcweir } 1456cdf0e10cSrcweir } 1457cdf0e10cSrcweir else 1458cdf0e10cSrcweir { 1459cdf0e10cSrcweir // else: unknown namespace: delegate to super class 1460cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::ProcessAttribute( 1461cdf0e10cSrcweir nNamespace, sLocalName, sValue, rPropSet); 1462cdf0e10cSrcweir } 1463cdf0e10cSrcweir } 1464cdf0e10cSrcweir 1465cdf0e10cSrcweir 1466cdf0e10cSrcweir class XMLAlphaIndexMarkImportContext_Impl : public XMLIndexMarkImportContext_Impl 1467cdf0e10cSrcweir { 1468cdf0e10cSrcweir const OUString sPrimaryKey; 1469cdf0e10cSrcweir const OUString sSecondaryKey; 1470cdf0e10cSrcweir const OUString sTextReading; 1471cdf0e10cSrcweir const OUString sPrimaryKeyReading; 1472cdf0e10cSrcweir const OUString sSecondaryKeyReading; 1473cdf0e10cSrcweir const OUString sMainEntry; 1474cdf0e10cSrcweir 1475cdf0e10cSrcweir public: 1476cdf0e10cSrcweir TYPEINFO(); 1477cdf0e10cSrcweir 1478cdf0e10cSrcweir XMLAlphaIndexMarkImportContext_Impl( 1479cdf0e10cSrcweir SvXMLImport& rImport, 1480cdf0e10cSrcweir sal_uInt16 nPrefix, 1481cdf0e10cSrcweir const OUString& rLocalName, 1482cdf0e10cSrcweir enum XMLTextPElemTokens nTok, 1483cdf0e10cSrcweir XMLHints_Impl& rHnts); 1484cdf0e10cSrcweir 1485cdf0e10cSrcweir protected: 1486cdf0e10cSrcweir 1487cdf0e10cSrcweir /** process primary + secondary keys */ 1488cdf0e10cSrcweir virtual void ProcessAttribute(sal_uInt16 nNamespace, 1489cdf0e10cSrcweir OUString sLocalName, 1490cdf0e10cSrcweir OUString sValue, 1491cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet); 1492cdf0e10cSrcweir }; 1493cdf0e10cSrcweir 1494cdf0e10cSrcweir TYPEINIT1( XMLAlphaIndexMarkImportContext_Impl, 1495cdf0e10cSrcweir XMLIndexMarkImportContext_Impl ); 1496cdf0e10cSrcweir 1497cdf0e10cSrcweir XMLAlphaIndexMarkImportContext_Impl::XMLAlphaIndexMarkImportContext_Impl( 1498cdf0e10cSrcweir SvXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLocalName, 1499cdf0e10cSrcweir enum XMLTextPElemTokens nTok, XMLHints_Impl& rHnts) : 1500cdf0e10cSrcweir XMLIndexMarkImportContext_Impl(rImport, nPrefix, rLocalName, 1501cdf0e10cSrcweir nTok, rHnts), 1502cdf0e10cSrcweir sPrimaryKey(RTL_CONSTASCII_USTRINGPARAM("PrimaryKey")), 1503cdf0e10cSrcweir sSecondaryKey(RTL_CONSTASCII_USTRINGPARAM("SecondaryKey")), 1504cdf0e10cSrcweir sTextReading(RTL_CONSTASCII_USTRINGPARAM("TextReading")), 1505cdf0e10cSrcweir sPrimaryKeyReading(RTL_CONSTASCII_USTRINGPARAM("PrimaryKeyReading")), 1506cdf0e10cSrcweir sSecondaryKeyReading(RTL_CONSTASCII_USTRINGPARAM("SecondaryKeyReading")), 1507cdf0e10cSrcweir sMainEntry(RTL_CONSTASCII_USTRINGPARAM("IsMainEntry")) 1508cdf0e10cSrcweir { 1509cdf0e10cSrcweir } 1510cdf0e10cSrcweir 1511cdf0e10cSrcweir void XMLAlphaIndexMarkImportContext_Impl::ProcessAttribute( 1512cdf0e10cSrcweir sal_uInt16 nNamespace, OUString sLocalName, OUString sValue, 1513cdf0e10cSrcweir Reference<beans::XPropertySet>& rPropSet) 1514cdf0e10cSrcweir { 1515cdf0e10cSrcweir if (XML_NAMESPACE_TEXT == nNamespace) 1516cdf0e10cSrcweir { 1517cdf0e10cSrcweir if ( IsXMLToken( sLocalName, XML_KEY1 ) ) 1518cdf0e10cSrcweir { 1519cdf0e10cSrcweir rPropSet->setPropertyValue(sPrimaryKey, uno::makeAny(sValue)); 1520cdf0e10cSrcweir } 1521cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_KEY2 ) ) 1522cdf0e10cSrcweir { 1523cdf0e10cSrcweir rPropSet->setPropertyValue(sSecondaryKey, uno::makeAny(sValue)); 1524cdf0e10cSrcweir } 1525cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_KEY1_PHONETIC ) ) 1526cdf0e10cSrcweir { 1527cdf0e10cSrcweir rPropSet->setPropertyValue(sPrimaryKeyReading, uno::makeAny(sValue)); 1528cdf0e10cSrcweir } 1529cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_KEY2_PHONETIC ) ) 1530cdf0e10cSrcweir { 1531cdf0e10cSrcweir rPropSet->setPropertyValue(sSecondaryKeyReading, uno::makeAny(sValue)); 1532cdf0e10cSrcweir } 1533cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_STRING_VALUE_PHONETIC ) ) 1534cdf0e10cSrcweir { 1535cdf0e10cSrcweir rPropSet->setPropertyValue(sTextReading, uno::makeAny(sValue)); 1536cdf0e10cSrcweir } 1537cdf0e10cSrcweir else if ( IsXMLToken( sLocalName, XML_MAIN_ENTRY ) ) 1538cdf0e10cSrcweir { 1539cdf0e10cSrcweir sal_Bool bMainEntry = sal_False, bTmp; 1540cdf0e10cSrcweir 1541cdf0e10cSrcweir if (SvXMLUnitConverter::convertBool(bTmp, sValue)) 1542cdf0e10cSrcweir bMainEntry = bTmp; 1543cdf0e10cSrcweir 1544cdf0e10cSrcweir rPropSet->setPropertyValue(sMainEntry, uno::makeAny(bMainEntry)); 1545cdf0e10cSrcweir } 1546cdf0e10cSrcweir else 1547cdf0e10cSrcweir { 1548cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::ProcessAttribute( 1549cdf0e10cSrcweir nNamespace, sLocalName, sValue, rPropSet); 1550cdf0e10cSrcweir } 1551cdf0e10cSrcweir } 1552cdf0e10cSrcweir else 1553cdf0e10cSrcweir { 1554cdf0e10cSrcweir XMLIndexMarkImportContext_Impl::ProcessAttribute( 1555cdf0e10cSrcweir nNamespace, sLocalName, sValue, rPropSet); 1556cdf0e10cSrcweir } 1557cdf0e10cSrcweir } 1558cdf0e10cSrcweir 1559cdf0e10cSrcweir 1560cdf0e10cSrcweir // --------------------------------------------------------------------- 1561cdf0e10cSrcweir 1562cdf0e10cSrcweir TYPEINIT1( XMLImpSpanContext_Impl, SvXMLImportContext ); 1563cdf0e10cSrcweir 1564cdf0e10cSrcweir XMLImpSpanContext_Impl::XMLImpSpanContext_Impl( 1565cdf0e10cSrcweir SvXMLImport& rImport, 1566cdf0e10cSrcweir sal_uInt16 nPrfx, 1567cdf0e10cSrcweir const OUString& rLName, 1568cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 1569cdf0e10cSrcweir XMLHints_Impl& rHnts, 1570cdf0e10cSrcweir sal_Bool& rIgnLeadSpace 1571cdf0e10cSrcweir ,sal_uInt8 nSFConvFlags 1572cdf0e10cSrcweir ) 1573cdf0e10cSrcweir : SvXMLImportContext( rImport, nPrfx, rLName ) 1574cdf0e10cSrcweir , sTextFrame(RTL_CONSTASCII_USTRINGPARAM("TextFrame")) 1575cdf0e10cSrcweir , rHints( rHnts ) 1576cdf0e10cSrcweir , pHint( 0 ) 1577cdf0e10cSrcweir , rIgnoreLeadingSpace( rIgnLeadSpace ) 1578cdf0e10cSrcweir , nStarFontsConvFlags( nSFConvFlags & (CONV_FROM_STAR_BATS|CONV_FROM_STAR_MATH) ) 1579cdf0e10cSrcweir { 1580cdf0e10cSrcweir OUString aStyleName; 1581cdf0e10cSrcweir 1582cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 1583cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 1584cdf0e10cSrcweir { 1585cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 1586cdf0e10cSrcweir 1587cdf0e10cSrcweir OUString aLocalName; 1588cdf0e10cSrcweir sal_uInt16 nPrefix = 1589cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 1590cdf0e10cSrcweir &aLocalName ); 1591cdf0e10cSrcweir if( XML_NAMESPACE_TEXT == nPrefix && 1592cdf0e10cSrcweir IsXMLToken( aLocalName, XML_STYLE_NAME ) ) 1593cdf0e10cSrcweir aStyleName = xAttrList->getValueByIndex( i ); 1594cdf0e10cSrcweir } 1595cdf0e10cSrcweir 1596cdf0e10cSrcweir if( aStyleName.getLength() ) 1597cdf0e10cSrcweir { 1598cdf0e10cSrcweir pHint = new XMLStyleHint_Impl( aStyleName, 1599cdf0e10cSrcweir GetImport().GetTextImport()->GetCursorAsRange()->getStart() ); 1600cdf0e10cSrcweir rHints.Insert( pHint, rHints.Count() ); 1601cdf0e10cSrcweir } 1602cdf0e10cSrcweir } 1603cdf0e10cSrcweir 1604cdf0e10cSrcweir XMLImpSpanContext_Impl::~XMLImpSpanContext_Impl() 1605cdf0e10cSrcweir { 1606cdf0e10cSrcweir if( pHint ) 1607cdf0e10cSrcweir pHint->SetEnd( GetImport().GetTextImport() 1608cdf0e10cSrcweir ->GetCursorAsRange()->getStart() ); 1609cdf0e10cSrcweir } 1610cdf0e10cSrcweir 1611cdf0e10cSrcweir SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( 1612cdf0e10cSrcweir SvXMLImport& rImport, 1613cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 1614cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 1615cdf0e10cSrcweir sal_uInt16 nToken, 1616cdf0e10cSrcweir XMLHints_Impl& rHints, 1617cdf0e10cSrcweir sal_Bool& rIgnoreLeadingSpace 1618cdf0e10cSrcweir ,sal_uInt8 nStarFontsConvFlags 1619cdf0e10cSrcweir ) 1620cdf0e10cSrcweir { 1621cdf0e10cSrcweir SvXMLImportContext *pContext = 0; 1622cdf0e10cSrcweir 1623cdf0e10cSrcweir switch( nToken ) 1624cdf0e10cSrcweir { 1625cdf0e10cSrcweir case XML_TOK_TEXT_SPAN: 1626cdf0e10cSrcweir pContext = new XMLImpSpanContext_Impl( rImport, nPrefix, 1627cdf0e10cSrcweir rLocalName, xAttrList, 1628cdf0e10cSrcweir rHints, 1629cdf0e10cSrcweir rIgnoreLeadingSpace 1630cdf0e10cSrcweir ,nStarFontsConvFlags 1631cdf0e10cSrcweir ); 1632cdf0e10cSrcweir break; 1633cdf0e10cSrcweir 1634cdf0e10cSrcweir case XML_TOK_TEXT_TAB_STOP: 1635cdf0e10cSrcweir pContext = new XMLCharContext( rImport, nPrefix, 1636cdf0e10cSrcweir rLocalName, xAttrList, 1637cdf0e10cSrcweir 0x0009, sal_False ); 1638cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1639cdf0e10cSrcweir break; 1640cdf0e10cSrcweir 1641cdf0e10cSrcweir case XML_TOK_TEXT_LINE_BREAK: 1642cdf0e10cSrcweir pContext = new XMLCharContext( rImport, nPrefix, 1643cdf0e10cSrcweir rLocalName, xAttrList, 1644cdf0e10cSrcweir ControlCharacter::LINE_BREAK ); 1645cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1646cdf0e10cSrcweir break; 1647cdf0e10cSrcweir 1648cdf0e10cSrcweir case XML_TOK_TEXT_S: 1649cdf0e10cSrcweir pContext = new XMLCharContext( rImport, nPrefix, 1650cdf0e10cSrcweir rLocalName, xAttrList, 1651cdf0e10cSrcweir 0x0020, sal_True ); 1652cdf0e10cSrcweir break; 1653cdf0e10cSrcweir 1654cdf0e10cSrcweir case XML_TOK_TEXT_HYPERLINK: 1655cdf0e10cSrcweir { 1656cdf0e10cSrcweir // test for HyperLinkURL property. If present, insert link as 1657cdf0e10cSrcweir // text property (StarWriter), else try to insert as text 1658cdf0e10cSrcweir // field (StarCalc, StarDraw, ...) 1659cdf0e10cSrcweir Reference<beans::XPropertySet> xPropSet( 1660cdf0e10cSrcweir rImport.GetTextImport()->GetCursor(), 1661cdf0e10cSrcweir UNO_QUERY ); 1662cdf0e10cSrcweir 1663cdf0e10cSrcweir const OUString sHyperLinkURL( 1664cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL")); 1665cdf0e10cSrcweir 1666cdf0e10cSrcweir if (xPropSet->getPropertySetInfo()->hasPropertyByName(sHyperLinkURL)) 1667cdf0e10cSrcweir { 1668cdf0e10cSrcweir pContext = new XMLImpHyperlinkContext_Impl( rImport, nPrefix, 1669cdf0e10cSrcweir rLocalName, xAttrList, 1670cdf0e10cSrcweir rHints, 1671cdf0e10cSrcweir rIgnoreLeadingSpace ); 1672cdf0e10cSrcweir } 1673cdf0e10cSrcweir else 1674cdf0e10cSrcweir { 1675cdf0e10cSrcweir pContext = new XMLUrlFieldImportContext( rImport, 1676cdf0e10cSrcweir *rImport.GetTextImport().get(), 1677cdf0e10cSrcweir nPrefix, rLocalName); 1678cdf0e10cSrcweir //whitespace handling like other fields 1679cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1680cdf0e10cSrcweir 1681cdf0e10cSrcweir } 1682cdf0e10cSrcweir break; 1683cdf0e10cSrcweir } 1684cdf0e10cSrcweir 1685cdf0e10cSrcweir case XML_TOK_TEXT_RUBY: 1686cdf0e10cSrcweir pContext = new XMLImpRubyContext_Impl( rImport, nPrefix, 1687cdf0e10cSrcweir rLocalName, xAttrList, 1688cdf0e10cSrcweir rHints, 1689cdf0e10cSrcweir rIgnoreLeadingSpace ); 1690cdf0e10cSrcweir break; 1691cdf0e10cSrcweir 1692cdf0e10cSrcweir case XML_TOK_TEXT_NOTE: 1693cdf0e10cSrcweir #ifndef SVX_LIGHT 1694cdf0e10cSrcweir if (rImport.GetTextImport()->IsInFrame()) 1695cdf0e10cSrcweir { 1696cdf0e10cSrcweir // we must not insert footnotes into text frames 1697cdf0e10cSrcweir pContext = new SvXMLImportContext( rImport, nPrefix, 1698cdf0e10cSrcweir rLocalName ); 1699cdf0e10cSrcweir } 1700cdf0e10cSrcweir else 1701cdf0e10cSrcweir { 1702cdf0e10cSrcweir pContext = new XMLFootnoteImportContext( rImport, 1703cdf0e10cSrcweir *rImport.GetTextImport().get(), 1704cdf0e10cSrcweir nPrefix, rLocalName ); 1705cdf0e10cSrcweir } 1706cdf0e10cSrcweir #else 1707cdf0e10cSrcweir // create default context to skip content 1708cdf0e10cSrcweir pContext = new SvXMLImportContext( rImport, nPrefix, rLocalName ); 1709cdf0e10cSrcweir #endif // #ifndef SVX_LIGHT 1710cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1711cdf0e10cSrcweir break; 1712cdf0e10cSrcweir 1713cdf0e10cSrcweir case XML_TOK_TEXT_REFERENCE: 1714cdf0e10cSrcweir case XML_TOK_TEXT_BOOKMARK: 1715cdf0e10cSrcweir case XML_TOK_TEXT_BOOKMARK_START: 1716cdf0e10cSrcweir case XML_TOK_TEXT_BOOKMARK_END: 1717cdf0e10cSrcweir pContext = new XMLTextMarkImportContext( rImport, 1718cdf0e10cSrcweir *rImport.GetTextImport().get(), 1719cdf0e10cSrcweir nPrefix, rLocalName ); 1720cdf0e10cSrcweir break; 1721cdf0e10cSrcweir 1722cdf0e10cSrcweir case XML_TOK_TEXT_FIELDMARK: 1723cdf0e10cSrcweir case XML_TOK_TEXT_FIELDMARK_START: 1724cdf0e10cSrcweir case XML_TOK_TEXT_FIELDMARK_END: 1725cdf0e10cSrcweir pContext = new XMLTextMarkImportContext( rImport, 1726cdf0e10cSrcweir *rImport.GetTextImport().get(), 1727cdf0e10cSrcweir nPrefix, rLocalName ); 1728cdf0e10cSrcweir break; 1729cdf0e10cSrcweir 1730cdf0e10cSrcweir case XML_TOK_TEXT_REFERENCE_START: 1731cdf0e10cSrcweir pContext = new XMLStartReferenceContext_Impl( rImport, 1732cdf0e10cSrcweir nPrefix, rLocalName, 1733cdf0e10cSrcweir rHints, xAttrList ); 1734cdf0e10cSrcweir break; 1735cdf0e10cSrcweir 1736cdf0e10cSrcweir case XML_TOK_TEXT_REFERENCE_END: 1737cdf0e10cSrcweir pContext = new XMLEndReferenceContext_Impl( rImport, 1738cdf0e10cSrcweir nPrefix, rLocalName, 1739cdf0e10cSrcweir rHints, xAttrList ); 1740cdf0e10cSrcweir break; 1741cdf0e10cSrcweir 1742cdf0e10cSrcweir case XML_TOK_TEXT_FRAME: 1743cdf0e10cSrcweir { 1744cdf0e10cSrcweir Reference < XTextRange > xAnchorPos = 1745cdf0e10cSrcweir rImport.GetTextImport()->GetCursor()->getStart(); 1746cdf0e10cSrcweir XMLTextFrameContext *pTextFrameContext = 1747cdf0e10cSrcweir new XMLTextFrameContext( rImport, nPrefix, 1748cdf0e10cSrcweir rLocalName, xAttrList, 1749cdf0e10cSrcweir TextContentAnchorType_AS_CHARACTER ); 1750cdf0e10cSrcweir // --> OD 2004-08-24 #i33242# - remove check for text content. 1751cdf0e10cSrcweir // Check for text content is done on the processing of the hint 1752cdf0e10cSrcweir if( TextContentAnchorType_AT_CHARACTER == 1753cdf0e10cSrcweir pTextFrameContext->GetAnchorType() ) 1754cdf0e10cSrcweir // <-- 1755cdf0e10cSrcweir { 1756cdf0e10cSrcweir rHints.Insert( new XMLTextFrameHint_Impl( 1757cdf0e10cSrcweir pTextFrameContext, xAnchorPos ), 1758cdf0e10cSrcweir rHints.Count() ); 1759cdf0e10cSrcweir } 1760cdf0e10cSrcweir pContext = pTextFrameContext; 1761cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1762cdf0e10cSrcweir } 1763cdf0e10cSrcweir break; 1764cdf0e10cSrcweir case XML_TOK_DRAW_A: 1765cdf0e10cSrcweir { 1766cdf0e10cSrcweir Reference < XTextRange > xAnchorPos(rImport.GetTextImport()->GetCursor()->getStart()); 1767cdf0e10cSrcweir pContext = 1768cdf0e10cSrcweir new XMLTextFrameHyperlinkContext( rImport, nPrefix, 1769cdf0e10cSrcweir rLocalName, xAttrList, 1770cdf0e10cSrcweir TextContentAnchorType_AS_CHARACTER ); 1771cdf0e10cSrcweir XMLTextFrameHint_Impl *pHint = 1772cdf0e10cSrcweir new XMLTextFrameHint_Impl( pContext, xAnchorPos); 1773cdf0e10cSrcweir rHints.Insert( pHint, rHints.Count() ); 1774cdf0e10cSrcweir } 1775cdf0e10cSrcweir break; 1776cdf0e10cSrcweir 1777cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK: 1778cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_START: 1779cdf0e10cSrcweir pContext = new XMLTOCMarkImportContext_Impl( 1780cdf0e10cSrcweir rImport, nPrefix, rLocalName, 1781cdf0e10cSrcweir (enum XMLTextPElemTokens)nToken, rHints); 1782cdf0e10cSrcweir break; 1783cdf0e10cSrcweir 1784cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK: 1785cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_START: 1786cdf0e10cSrcweir pContext = new XMLUserIndexMarkImportContext_Impl( 1787cdf0e10cSrcweir rImport, nPrefix, rLocalName, 1788cdf0e10cSrcweir (enum XMLTextPElemTokens)nToken, rHints); 1789cdf0e10cSrcweir break; 1790cdf0e10cSrcweir 1791cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK: 1792cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_START: 1793cdf0e10cSrcweir pContext = new XMLAlphaIndexMarkImportContext_Impl( 1794cdf0e10cSrcweir rImport, nPrefix, rLocalName, 1795cdf0e10cSrcweir (enum XMLTextPElemTokens)nToken, rHints); 1796cdf0e10cSrcweir break; 1797cdf0e10cSrcweir 1798cdf0e10cSrcweir case XML_TOK_TEXT_TOC_MARK_END: 1799cdf0e10cSrcweir case XML_TOK_TEXT_USER_INDEX_MARK_END: 1800cdf0e10cSrcweir case XML_TOK_TEXT_ALPHA_INDEX_MARK_END: 1801cdf0e10cSrcweir pContext = new XMLIndexMarkImportContext_Impl( 1802cdf0e10cSrcweir rImport, nPrefix, rLocalName, (enum XMLTextPElemTokens)nToken, 1803cdf0e10cSrcweir rHints); 1804cdf0e10cSrcweir break; 1805cdf0e10cSrcweir 1806cdf0e10cSrcweir case XML_TOK_TEXTP_CHANGE_START: 1807cdf0e10cSrcweir case XML_TOK_TEXTP_CHANGE_END: 1808cdf0e10cSrcweir case XML_TOK_TEXTP_CHANGE: 1809cdf0e10cSrcweir pContext = new XMLChangeImportContext( 1810cdf0e10cSrcweir rImport, nPrefix, rLocalName, 1811cdf0e10cSrcweir (nToken != XML_TOK_TEXTP_CHANGE_END), 1812cdf0e10cSrcweir (nToken != XML_TOK_TEXTP_CHANGE_START), 1813cdf0e10cSrcweir sal_False); 1814cdf0e10cSrcweir break; 1815cdf0e10cSrcweir 1816cdf0e10cSrcweir case XML_TOK_TEXT_META: 1817cdf0e10cSrcweir pContext = new XMLMetaImportContext(rImport, nPrefix, rLocalName, 1818cdf0e10cSrcweir rHints, rIgnoreLeadingSpace ); 1819cdf0e10cSrcweir break; 1820cdf0e10cSrcweir 1821cdf0e10cSrcweir case XML_TOK_TEXT_META_FIELD: 1822cdf0e10cSrcweir pContext = new XMLMetaFieldImportContext(rImport, nPrefix, rLocalName, 1823cdf0e10cSrcweir rHints, rIgnoreLeadingSpace ); 1824cdf0e10cSrcweir break; 1825cdf0e10cSrcweir 1826cdf0e10cSrcweir default: 1827cdf0e10cSrcweir // none of the above? then it's probably a text field! 1828cdf0e10cSrcweir pContext = 1829cdf0e10cSrcweir XMLTextFieldImportContext::CreateTextFieldImportContext( 1830cdf0e10cSrcweir rImport, *rImport.GetTextImport().get(), nPrefix, rLocalName, 1831cdf0e10cSrcweir nToken); 1832cdf0e10cSrcweir // #108784# import draw elements (except control shapes in headers) 1833cdf0e10cSrcweir if( pContext == NULL && 1834cdf0e10cSrcweir !( rImport.GetTextImport()->IsInHeaderFooter() && 1835cdf0e10cSrcweir nPrefix == XML_NAMESPACE_DRAW && 1836cdf0e10cSrcweir IsXMLToken( rLocalName, XML_CONTROL ) ) ) 1837cdf0e10cSrcweir { 1838cdf0e10cSrcweir Reference < XShapes > xShapes; 1839cdf0e10cSrcweir SvXMLShapeContext* pShapeContext = rImport.GetShapeImport()->CreateGroupChildContext( 1840cdf0e10cSrcweir rImport, nPrefix, rLocalName, xAttrList, xShapes ); 1841cdf0e10cSrcweir pContext = pShapeContext; 1842cdf0e10cSrcweir // OD 2004-04-20 #i26791# - keep shape in a text frame hint to 1843cdf0e10cSrcweir // adjust its anchor position, if its at-character anchored 1844cdf0e10cSrcweir Reference < XTextRange > xAnchorPos = 1845cdf0e10cSrcweir rImport.GetTextImport()->GetCursor()->getStart(); 1846cdf0e10cSrcweir rHints.Insert( new XMLDrawHint_Impl( pShapeContext, xAnchorPos ), 1847cdf0e10cSrcweir rHints.Count() ); 1848cdf0e10cSrcweir } 1849cdf0e10cSrcweir if( !pContext ) 1850cdf0e10cSrcweir { 1851cdf0e10cSrcweir // ignore unknown content 1852cdf0e10cSrcweir pContext = 1853cdf0e10cSrcweir new SvXMLImportContext( rImport, nPrefix, rLocalName ); 1854cdf0e10cSrcweir } 1855cdf0e10cSrcweir // Behind fields, shapes and any unknown content blanks aren't ignored 1856cdf0e10cSrcweir rIgnoreLeadingSpace = sal_False; 1857cdf0e10cSrcweir } 1858cdf0e10cSrcweir 1859cdf0e10cSrcweir return pContext; 1860cdf0e10cSrcweir } 1861cdf0e10cSrcweir 1862cdf0e10cSrcweir SvXMLImportContext *XMLImpSpanContext_Impl::CreateChildContext( 1863cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 1864cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ) 1865cdf0e10cSrcweir { 1866cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 1867cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPElemTokenMap(); 1868cdf0e10cSrcweir sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); 1869cdf0e10cSrcweir 1870cdf0e10cSrcweir return CreateChildContext( GetImport(), nPrefix, rLocalName, xAttrList, 1871cdf0e10cSrcweir nToken, rHints, rIgnoreLeadingSpace 1872cdf0e10cSrcweir ,nStarFontsConvFlags 1873cdf0e10cSrcweir ); 1874cdf0e10cSrcweir } 1875cdf0e10cSrcweir 1876cdf0e10cSrcweir void XMLImpSpanContext_Impl::Characters( const OUString& rChars ) 1877cdf0e10cSrcweir { 1878cdf0e10cSrcweir OUString sStyleName; 1879cdf0e10cSrcweir if( pHint ) 1880cdf0e10cSrcweir sStyleName = pHint->GetStyleName(); 1881cdf0e10cSrcweir OUString sChars = 1882cdf0e10cSrcweir GetImport().GetTextImport()->ConvertStarFonts( rChars, sStyleName, 1883cdf0e10cSrcweir nStarFontsConvFlags, 1884cdf0e10cSrcweir sal_False, GetImport() ); 1885cdf0e10cSrcweir GetImport().GetTextImport()->InsertString( sChars, rIgnoreLeadingSpace ); 1886cdf0e10cSrcweir } 1887cdf0e10cSrcweir 1888cdf0e10cSrcweir // --------------------------------------------------------------------- 1889cdf0e10cSrcweir 1890cdf0e10cSrcweir TYPEINIT1( XMLParaContext, SvXMLImportContext ); 1891cdf0e10cSrcweir 1892cdf0e10cSrcweir XMLParaContext::XMLParaContext( 1893cdf0e10cSrcweir SvXMLImport& rImport, 1894cdf0e10cSrcweir sal_uInt16 nPrfx, 1895cdf0e10cSrcweir const OUString& rLName, 1896cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList, 1897cdf0e10cSrcweir sal_Bool bHead ) : 1898cdf0e10cSrcweir SvXMLImportContext( rImport, nPrfx, rLName ), 1899cdf0e10cSrcweir xStart( rImport.GetTextImport()->GetCursorAsRange()->getStart() ), 1900cdf0e10cSrcweir m_bHaveAbout(false), 1901cdf0e10cSrcweir nOutlineLevel( IsXMLToken( rLName, XML_H ) ? 1 : -1 ), 1902cdf0e10cSrcweir pHints( 0 ), 1903cdf0e10cSrcweir // --> OD 2007-07-25 #i73509# 1904cdf0e10cSrcweir mbOutlineLevelAttrFound( sal_False ), 1905cdf0e10cSrcweir // <-- 1906cdf0e10cSrcweir bIgnoreLeadingSpace( sal_True ), 1907cdf0e10cSrcweir bHeading( bHead ), 1908cdf0e10cSrcweir bIsListHeader( false ), 1909cdf0e10cSrcweir bIsRestart (false), 1910cdf0e10cSrcweir nStartValue(0) 1911cdf0e10cSrcweir ,nStarFontsConvFlags( 0 ) 1912cdf0e10cSrcweir { 1913cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 1914cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPAttrTokenMap(); 1915cdf0e10cSrcweir 1916cdf0e10cSrcweir bool bHaveXmlId( false ); 1917cdf0e10cSrcweir OUString aCondStyleName, sClassNames; 1918cdf0e10cSrcweir 1919cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 1920cdf0e10cSrcweir for( sal_Int16 i=0; i < nAttrCount; i++ ) 1921cdf0e10cSrcweir { 1922cdf0e10cSrcweir const OUString& rAttrName = xAttrList->getNameByIndex( i ); 1923cdf0e10cSrcweir const OUString& rValue = xAttrList->getValueByIndex( i ); 1924cdf0e10cSrcweir 1925cdf0e10cSrcweir OUString aLocalName; 1926cdf0e10cSrcweir sal_uInt16 nPrefix = 1927cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, 1928cdf0e10cSrcweir &aLocalName ); 1929cdf0e10cSrcweir switch( rTokenMap.Get( nPrefix, aLocalName ) ) 1930cdf0e10cSrcweir { 1931cdf0e10cSrcweir case XML_TOK_TEXT_P_XMLID: 1932cdf0e10cSrcweir m_sXmlId = rValue; 1933cdf0e10cSrcweir bHaveXmlId = true; 1934cdf0e10cSrcweir break; 1935cdf0e10cSrcweir case XML_TOK_TEXT_P_ABOUT: 1936cdf0e10cSrcweir m_sAbout = rValue; 1937cdf0e10cSrcweir m_bHaveAbout = true; 1938cdf0e10cSrcweir break; 1939cdf0e10cSrcweir case XML_TOK_TEXT_P_PROPERTY: 1940cdf0e10cSrcweir m_sProperty = rValue; 1941cdf0e10cSrcweir break; 1942cdf0e10cSrcweir case XML_TOK_TEXT_P_CONTENT: 1943cdf0e10cSrcweir m_sContent = rValue; 1944cdf0e10cSrcweir break; 1945cdf0e10cSrcweir case XML_TOK_TEXT_P_DATATYPE: 1946cdf0e10cSrcweir m_sDatatype = rValue; 1947cdf0e10cSrcweir break; 1948cdf0e10cSrcweir case XML_TOK_TEXT_P_TEXTID: 1949cdf0e10cSrcweir if (!bHaveXmlId) { m_sXmlId = rValue; } 1950cdf0e10cSrcweir break; 1951cdf0e10cSrcweir case XML_TOK_TEXT_P_STYLE_NAME: 1952cdf0e10cSrcweir sStyleName = rValue; 1953cdf0e10cSrcweir break; 1954cdf0e10cSrcweir case XML_TOK_TEXT_P_CLASS_NAMES: 1955cdf0e10cSrcweir sClassNames = rValue; 1956cdf0e10cSrcweir break; 1957cdf0e10cSrcweir case XML_TOK_TEXT_P_COND_STYLE_NAME: 1958cdf0e10cSrcweir aCondStyleName = rValue; 1959cdf0e10cSrcweir break; 1960cdf0e10cSrcweir case XML_TOK_TEXT_P_LEVEL: 1961cdf0e10cSrcweir { 1962cdf0e10cSrcweir sal_Int32 nTmp = rValue.toInt32(); 1963cdf0e10cSrcweir if( nTmp > 0L ) 1964cdf0e10cSrcweir { 1965cdf0e10cSrcweir if( nTmp > 127 ) 1966cdf0e10cSrcweir nTmp = 127; 1967cdf0e10cSrcweir nOutlineLevel = (sal_Int8)nTmp; 1968cdf0e10cSrcweir } 1969cdf0e10cSrcweir // --> OD 2007-07-25 #i73509# 1970cdf0e10cSrcweir mbOutlineLevelAttrFound = sal_True; 1971cdf0e10cSrcweir // <-- 1972cdf0e10cSrcweir } 1973cdf0e10cSrcweir break; 1974cdf0e10cSrcweir case XML_TOK_TEXT_P_IS_LIST_HEADER: 1975cdf0e10cSrcweir { 1976cdf0e10cSrcweir sal_Bool bBool; 1977cdf0e10cSrcweir if( SvXMLUnitConverter::convertBool( bBool, rValue ) ) 1978cdf0e10cSrcweir { 1979cdf0e10cSrcweir bIsListHeader = bBool; 1980cdf0e10cSrcweir } 1981cdf0e10cSrcweir } 1982cdf0e10cSrcweir break; 1983cdf0e10cSrcweir case XML_TOK_TEXT_P_RESTART_NUMBERING: 1984cdf0e10cSrcweir { 1985cdf0e10cSrcweir sal_Bool bBool; 1986cdf0e10cSrcweir if (SvXMLUnitConverter::convertBool(bBool, rValue)) 1987cdf0e10cSrcweir { 1988cdf0e10cSrcweir bIsRestart = bBool; 1989cdf0e10cSrcweir } 1990cdf0e10cSrcweir } 1991cdf0e10cSrcweir break; 1992cdf0e10cSrcweir case XML_TOK_TEXT_P_START_VALUE: 1993cdf0e10cSrcweir { 1994cdf0e10cSrcweir nStartValue = sal::static_int_cast< sal_Int16 >( 1995cdf0e10cSrcweir rValue.toInt32()); 1996cdf0e10cSrcweir } 1997cdf0e10cSrcweir break; 1998cdf0e10cSrcweir } 1999cdf0e10cSrcweir } 2000cdf0e10cSrcweir 2001cdf0e10cSrcweir if( aCondStyleName.getLength() ) 2002cdf0e10cSrcweir sStyleName = aCondStyleName; 2003cdf0e10cSrcweir else if( sClassNames.getLength() ) 2004cdf0e10cSrcweir { 2005cdf0e10cSrcweir sal_Int32 nDummy = 0; 2006cdf0e10cSrcweir sStyleName = sClassNames.getToken( 0, ' ', nDummy ); 2007cdf0e10cSrcweir } 2008cdf0e10cSrcweir } 2009cdf0e10cSrcweir 2010cdf0e10cSrcweir XMLParaContext::~XMLParaContext() 2011cdf0e10cSrcweir { 2012cdf0e10cSrcweir UniReference < XMLTextImportHelper > xTxtImport( 2013cdf0e10cSrcweir GetImport().GetTextImport()); 2014cdf0e10cSrcweir Reference < XTextRange > xCrsrRange( xTxtImport->GetCursorAsRange() ); 2015cdf0e10cSrcweir if( !xCrsrRange.is() ) 2016cdf0e10cSrcweir return; // Robust (defect file) 2017cdf0e10cSrcweir Reference < XTextRange > xEnd(xCrsrRange->getStart()); 2018cdf0e10cSrcweir 2019cdf0e10cSrcweir // if we have an id set for this paragraph, get a cursor for this 2020cdf0e10cSrcweir // paragraph and register it with the given identifier 2021cdf0e10cSrcweir // FIXME: this is just temporary, and should be removed when 2022cdf0e10cSrcweir // EditEngine paragraphs implement XMetadatable! 2023cdf0e10cSrcweir if (m_sXmlId.getLength()) 2024cdf0e10cSrcweir { 2025cdf0e10cSrcweir Reference < XTextCursor > xIdCursor( xTxtImport->GetText()->createTextCursorByRange( xStart ) ); 2026cdf0e10cSrcweir if( xIdCursor.is() ) 2027cdf0e10cSrcweir { 2028cdf0e10cSrcweir xIdCursor->gotoRange( xEnd, sal_True ); 2029cdf0e10cSrcweir Reference< XInterface > xRef( xIdCursor, UNO_QUERY ); 2030cdf0e10cSrcweir GetImport().getInterfaceToIdentifierMapper().registerReference( 2031cdf0e10cSrcweir m_sXmlId, xRef); 2032cdf0e10cSrcweir } 2033cdf0e10cSrcweir } 2034cdf0e10cSrcweir 2035cdf0e10cSrcweir // insert a paragraph break 2036cdf0e10cSrcweir xTxtImport->InsertControlCharacter( ControlCharacter::APPEND_PARAGRAPH ); 2037cdf0e10cSrcweir 2038cdf0e10cSrcweir // create a cursor that select the whole last paragraph 2039cdf0e10cSrcweir Reference < XTextCursor > xAttrCursor( 2040cdf0e10cSrcweir xTxtImport->GetText()->createTextCursorByRange( xStart )); 2041cdf0e10cSrcweir if( !xAttrCursor.is() ) 2042cdf0e10cSrcweir return; // Robust (defect file) 2043cdf0e10cSrcweir xAttrCursor->gotoRange( xEnd, sal_True ); 2044cdf0e10cSrcweir 2045cdf0e10cSrcweir // xml:id for RDF metadata 2046cdf0e10cSrcweir if (m_sXmlId.getLength() || m_bHaveAbout || m_sProperty.getLength()) 2047cdf0e10cSrcweir { 2048cdf0e10cSrcweir try { 2049cdf0e10cSrcweir const uno::Reference<container::XEnumerationAccess> xEA 2050cdf0e10cSrcweir (xAttrCursor, uno::UNO_QUERY_THROW); 2051cdf0e10cSrcweir const uno::Reference<container::XEnumeration> xEnum( 2052cdf0e10cSrcweir xEA->createEnumeration(), uno::UNO_QUERY_THROW); 2053cdf0e10cSrcweir OSL_ENSURE(xEnum->hasMoreElements(), "xml:id: no paragraph?"); 2054cdf0e10cSrcweir if (xEnum->hasMoreElements()) { 2055cdf0e10cSrcweir uno::Reference<rdf::XMetadatable> xMeta; 2056cdf0e10cSrcweir xEnum->nextElement() >>= xMeta; 2057cdf0e10cSrcweir OSL_ENSURE(xMeta.is(), "xml:id: not XMetadatable"); 2058cdf0e10cSrcweir GetImport().SetXmlId(xMeta, m_sXmlId); 2059cdf0e10cSrcweir if (m_bHaveAbout) 2060cdf0e10cSrcweir { 2061cdf0e10cSrcweir GetImport().AddRDFa(xMeta, 2062cdf0e10cSrcweir m_sAbout, m_sProperty, m_sContent, m_sDatatype); 2063cdf0e10cSrcweir } 2064cdf0e10cSrcweir OSL_ENSURE(!xEnum->hasMoreElements(), "xml:id: > 1 paragraph?"); 2065cdf0e10cSrcweir } 2066cdf0e10cSrcweir } catch (uno::Exception &) { 2067cdf0e10cSrcweir OSL_TRACE("XMLParaContext::~XMLParaContext: exception"); 2068cdf0e10cSrcweir } 2069cdf0e10cSrcweir } 2070cdf0e10cSrcweir 2071cdf0e10cSrcweir OUString const sCellParaStyleName(xTxtImport->GetCellParaStyleDefault()); 2072cdf0e10cSrcweir if( sCellParaStyleName.getLength() > 0 ) 2073cdf0e10cSrcweir { 2074cdf0e10cSrcweir // --> OD 2007-08-16 #i80724# 2075cdf0e10cSrcweir // suppress handling of outline and list attributes, 2076cdf0e10cSrcweir // because of side effects of method <SetStyleAndAttrs(..)> 2077cdf0e10cSrcweir xTxtImport->SetStyleAndAttrs( GetImport(), xAttrCursor, 2078cdf0e10cSrcweir sCellParaStyleName, 2079cdf0e10cSrcweir sal_True, 2080cdf0e10cSrcweir sal_False, -1, // suppress outline handling 2081cdf0e10cSrcweir sal_False ); // suppress list attributes handling 2082cdf0e10cSrcweir // <-- 2083cdf0e10cSrcweir } 2084cdf0e10cSrcweir 2085cdf0e10cSrcweir // #103445# for headings without style name, find the proper style 2086cdf0e10cSrcweir if( bHeading && (sStyleName.getLength() == 0) ) 2087cdf0e10cSrcweir xTxtImport->FindOutlineStyleName( sStyleName, nOutlineLevel ); 2088cdf0e10cSrcweir 2089cdf0e10cSrcweir // set style and hard attributes at the previous paragraph 2090cdf0e10cSrcweir // --> OD 2007-07-25 #i73509# - add paramter <mbOutlineLevelAttrFound> 2091cdf0e10cSrcweir sStyleName = xTxtImport->SetStyleAndAttrs( GetImport(), xAttrCursor, 2092cdf0e10cSrcweir sStyleName, 2093cdf0e10cSrcweir sal_True, 2094cdf0e10cSrcweir mbOutlineLevelAttrFound, 2095cdf0e10cSrcweir bHeading ? nOutlineLevel : -1 ); 2096cdf0e10cSrcweir // <-- 2097cdf0e10cSrcweir 2098cdf0e10cSrcweir // handle list style header 2099cdf0e10cSrcweir if (bHeading && (bIsListHeader || bIsRestart)) 2100cdf0e10cSrcweir { 2101cdf0e10cSrcweir Reference<XPropertySet> xPropSet( xAttrCursor, UNO_QUERY ); 2102cdf0e10cSrcweir 2103cdf0e10cSrcweir if (xPropSet.is()) 2104cdf0e10cSrcweir { 2105cdf0e10cSrcweir if (bIsListHeader) 2106cdf0e10cSrcweir { 2107cdf0e10cSrcweir OUString sNumberingIsNumber 2108cdf0e10cSrcweir (RTL_CONSTASCII_USTRINGPARAM("NumberingIsNumber")); 2109cdf0e10cSrcweir if(xPropSet->getPropertySetInfo()-> 2110cdf0e10cSrcweir hasPropertyByName(sNumberingIsNumber)) 2111cdf0e10cSrcweir { 2112cdf0e10cSrcweir xPropSet->setPropertyValue 2113cdf0e10cSrcweir (sNumberingIsNumber, makeAny( false ) ); 2114cdf0e10cSrcweir } 2115cdf0e10cSrcweir } 2116cdf0e10cSrcweir if (bIsRestart) 2117cdf0e10cSrcweir { 2118cdf0e10cSrcweir OUString sParaIsNumberingRestart 2119cdf0e10cSrcweir (RTL_CONSTASCII_USTRINGPARAM("ParaIsNumberingRestart")); 2120cdf0e10cSrcweir OUString sNumberingStartValue 2121cdf0e10cSrcweir (RTL_CONSTASCII_USTRINGPARAM("NumberingStartValue")); 2122cdf0e10cSrcweir if (xPropSet->getPropertySetInfo()-> 2123cdf0e10cSrcweir hasPropertyByName(sParaIsNumberingRestart)) 2124cdf0e10cSrcweir { 2125cdf0e10cSrcweir xPropSet->setPropertyValue 2126cdf0e10cSrcweir (sParaIsNumberingRestart, makeAny(true)); 2127cdf0e10cSrcweir } 2128cdf0e10cSrcweir 2129cdf0e10cSrcweir if (xPropSet->getPropertySetInfo()-> 2130cdf0e10cSrcweir hasPropertyByName(sNumberingStartValue)) 2131cdf0e10cSrcweir { 2132cdf0e10cSrcweir xPropSet->setPropertyValue 2133cdf0e10cSrcweir (sNumberingStartValue, makeAny(nStartValue)); 2134cdf0e10cSrcweir } 2135cdf0e10cSrcweir } 2136cdf0e10cSrcweir 2137cdf0e10cSrcweir } 2138cdf0e10cSrcweir } 2139cdf0e10cSrcweir 2140cdf0e10cSrcweir if( pHints && pHints->Count() ) 2141cdf0e10cSrcweir { 2142cdf0e10cSrcweir for( sal_uInt16 i=0; i<pHints->Count(); i++ ) 2143cdf0e10cSrcweir { 2144cdf0e10cSrcweir XMLHint_Impl *pHint = (*pHints)[i]; 2145cdf0e10cSrcweir xAttrCursor->gotoRange( pHint->GetStart(), sal_False ); 2146cdf0e10cSrcweir xAttrCursor->gotoRange( pHint->GetEnd(), sal_True ); 2147cdf0e10cSrcweir switch( pHint->GetType() ) 2148cdf0e10cSrcweir { 2149cdf0e10cSrcweir case XML_HINT_STYLE: 2150cdf0e10cSrcweir { 2151cdf0e10cSrcweir const OUString& rStyleName = 2152cdf0e10cSrcweir ((XMLStyleHint_Impl *)pHint)->GetStyleName(); 2153cdf0e10cSrcweir if( rStyleName.getLength() ) 2154cdf0e10cSrcweir xTxtImport->SetStyleAndAttrs( GetImport(), 2155cdf0e10cSrcweir xAttrCursor, rStyleName, 2156cdf0e10cSrcweir sal_False ); 2157cdf0e10cSrcweir } 2158cdf0e10cSrcweir break; 2159cdf0e10cSrcweir case XML_HINT_REFERENCE: 2160cdf0e10cSrcweir { 2161cdf0e10cSrcweir const OUString& rRefName = 2162cdf0e10cSrcweir ((XMLReferenceHint_Impl *)pHint)->GetRefName(); 2163cdf0e10cSrcweir if( rRefName.getLength() ) 2164cdf0e10cSrcweir { 2165cdf0e10cSrcweir if( !pHint->GetEnd().is() ) 2166cdf0e10cSrcweir pHint->SetEnd(xEnd); 2167cdf0e10cSrcweir 2168cdf0e10cSrcweir // convert XCursor to XTextRange 2169cdf0e10cSrcweir Reference<XTextRange> xRange(xAttrCursor, UNO_QUERY); 2170cdf0e10cSrcweir 2171cdf0e10cSrcweir // reference name uses rStyleName member 2172cdf0e10cSrcweir // borrow from XMLTextMarkImportContext 2173cdf0e10cSrcweir XMLTextMarkImportContext::CreateAndInsertMark( 2174cdf0e10cSrcweir GetImport(), 2175cdf0e10cSrcweir OUString( 2176cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( 2177cdf0e10cSrcweir "com.sun.star.text.ReferenceMark")), 2178cdf0e10cSrcweir rRefName, 2179cdf0e10cSrcweir xRange); 2180cdf0e10cSrcweir } 2181cdf0e10cSrcweir } 2182cdf0e10cSrcweir break; 2183cdf0e10cSrcweir case XML_HINT_HYPERLINK: 2184cdf0e10cSrcweir { 2185cdf0e10cSrcweir const XMLHyperlinkHint_Impl *pHHint = 2186cdf0e10cSrcweir (const XMLHyperlinkHint_Impl *)pHint; 2187cdf0e10cSrcweir xTxtImport->SetHyperlink( GetImport(), 2188cdf0e10cSrcweir xAttrCursor, 2189cdf0e10cSrcweir pHHint->GetHRef(), 2190cdf0e10cSrcweir pHHint->GetName(), 2191cdf0e10cSrcweir pHHint->GetTargetFrameName(), 2192cdf0e10cSrcweir pHHint->GetStyleName(), 2193cdf0e10cSrcweir pHHint->GetVisitedStyleName(), 2194cdf0e10cSrcweir pHHint->GetEventsContext() ); 2195cdf0e10cSrcweir } 2196cdf0e10cSrcweir break; 2197cdf0e10cSrcweir case XML_HINT_INDEX_MARK: 2198cdf0e10cSrcweir { 2199cdf0e10cSrcweir Reference<beans::XPropertySet> xMark( 2200cdf0e10cSrcweir ((const XMLIndexMarkHint_Impl *)pHint)->GetMark()); 2201cdf0e10cSrcweir Reference<XTextContent> xContent(xMark, UNO_QUERY); 2202cdf0e10cSrcweir Reference<XTextRange> xRange(xAttrCursor, UNO_QUERY); 2203cdf0e10cSrcweir xTxtImport->GetText()->insertTextContent( 2204cdf0e10cSrcweir xRange, xContent, sal_True ); 2205cdf0e10cSrcweir } 2206cdf0e10cSrcweir break; 2207cdf0e10cSrcweir case XML_HINT_TEXT_FRAME: 2208cdf0e10cSrcweir { 2209cdf0e10cSrcweir const XMLTextFrameHint_Impl *pFHint = 2210cdf0e10cSrcweir (const XMLTextFrameHint_Impl *)pHint; 2211cdf0e10cSrcweir // --> OD 2004-08-24 #i33242# - check for text content 2212cdf0e10cSrcweir Reference < XTextContent > xTextContent = 2213cdf0e10cSrcweir pFHint->GetTextContent(); 2214cdf0e10cSrcweir if ( xTextContent.is() ) 2215cdf0e10cSrcweir { 2216cdf0e10cSrcweir // OD 2004-04-20 #i26791# 2217cdf0e10cSrcweir Reference<XTextRange> xRange(xAttrCursor, UNO_QUERY); 2218cdf0e10cSrcweir if ( pFHint->IsBoundAtChar() ) 2219cdf0e10cSrcweir { 2220cdf0e10cSrcweir xTextContent->attach( xRange ); 2221cdf0e10cSrcweir } 2222cdf0e10cSrcweir } 2223cdf0e10cSrcweir // <-- 2224cdf0e10cSrcweir // --> OD 2004-08-24 #i33242# - consider, that hint can 2225cdf0e10cSrcweir // also contain a shape - e.g. drawing object of type 'Text'. 2226cdf0e10cSrcweir else 2227cdf0e10cSrcweir { 2228cdf0e10cSrcweir Reference < XShape > xShape = pFHint->GetShape(); 2229cdf0e10cSrcweir if ( xShape.is() ) 2230cdf0e10cSrcweir { 2231cdf0e10cSrcweir // determine anchor type 2232cdf0e10cSrcweir Reference < XPropertySet > xPropSet( xShape, UNO_QUERY ); 2233cdf0e10cSrcweir TextContentAnchorType eAnchorType = 2234cdf0e10cSrcweir TextContentAnchorType_AT_PARAGRAPH; 2235cdf0e10cSrcweir { 2236cdf0e10cSrcweir OUString sAnchorType( RTL_CONSTASCII_USTRINGPARAM( "AnchorType" ) ); 2237cdf0e10cSrcweir Any aAny = xPropSet->getPropertyValue( sAnchorType ); 2238cdf0e10cSrcweir aAny >>= eAnchorType; 2239cdf0e10cSrcweir } 2240cdf0e10cSrcweir if ( TextContentAnchorType_AT_CHARACTER == eAnchorType ) 2241cdf0e10cSrcweir { 2242cdf0e10cSrcweir // set anchor position for at-character anchored objects 2243cdf0e10cSrcweir Reference<XTextRange> xRange(xAttrCursor, UNO_QUERY); 2244cdf0e10cSrcweir Any aPos; 2245cdf0e10cSrcweir aPos <<= xRange; 2246cdf0e10cSrcweir OUString sTextRange( RTL_CONSTASCII_USTRINGPARAM( "TextRange" ) ); 2247cdf0e10cSrcweir xPropSet->setPropertyValue(sTextRange, aPos); 2248cdf0e10cSrcweir } 2249cdf0e10cSrcweir } 2250cdf0e10cSrcweir } 2251cdf0e10cSrcweir // <-- 2252cdf0e10cSrcweir } 2253cdf0e10cSrcweir break; 2254cdf0e10cSrcweir // --> DVO, OD 2004-07-14 #i26791# 2255cdf0e10cSrcweir case XML_HINT_DRAW: 2256cdf0e10cSrcweir { 2257cdf0e10cSrcweir const XMLDrawHint_Impl *pDHint = 2258cdf0e10cSrcweir static_cast<const XMLDrawHint_Impl*>(pHint); 2259cdf0e10cSrcweir // --> OD 2004-08-24 #i33242# - improvement: hint directly 2260cdf0e10cSrcweir // provides the shape. 2261cdf0e10cSrcweir Reference < XShape > xShape = pDHint->GetShape(); 2262cdf0e10cSrcweir if ( xShape.is() ) 2263cdf0e10cSrcweir { 2264cdf0e10cSrcweir // determine anchor type 2265cdf0e10cSrcweir Reference < XPropertySet > xPropSet( xShape, UNO_QUERY ); 2266cdf0e10cSrcweir TextContentAnchorType eAnchorType = TextContentAnchorType_AT_PARAGRAPH; 2267cdf0e10cSrcweir { 2268cdf0e10cSrcweir OUString sAnchorType( RTL_CONSTASCII_USTRINGPARAM( "AnchorType" ) ); 2269cdf0e10cSrcweir Any aAny = xPropSet->getPropertyValue( sAnchorType ); 2270cdf0e10cSrcweir aAny >>= eAnchorType; 2271cdf0e10cSrcweir } 2272cdf0e10cSrcweir if ( TextContentAnchorType_AT_CHARACTER == eAnchorType ) 2273cdf0e10cSrcweir { 2274cdf0e10cSrcweir // set anchor position for at-character anchored objects 2275cdf0e10cSrcweir Reference<XTextRange> xRange(xAttrCursor, UNO_QUERY); 2276cdf0e10cSrcweir Any aPos; 2277cdf0e10cSrcweir aPos <<= xRange; 2278cdf0e10cSrcweir OUString sTextRange( RTL_CONSTASCII_USTRINGPARAM( "TextRange" ) ); 2279cdf0e10cSrcweir xPropSet->setPropertyValue(sTextRange, aPos); 2280cdf0e10cSrcweir } 2281cdf0e10cSrcweir } 2282cdf0e10cSrcweir // <-- 2283cdf0e10cSrcweir } 2284cdf0e10cSrcweir break; 2285cdf0e10cSrcweir // <-- 2286cdf0e10cSrcweir 2287cdf0e10cSrcweir default: 2288cdf0e10cSrcweir DBG_ASSERT( !this, "What's this" ); 2289cdf0e10cSrcweir break; 2290cdf0e10cSrcweir } 2291cdf0e10cSrcweir } 2292cdf0e10cSrcweir } 2293cdf0e10cSrcweir delete pHints; 2294cdf0e10cSrcweir } 2295cdf0e10cSrcweir 2296cdf0e10cSrcweir SvXMLImportContext *XMLParaContext::CreateChildContext( 2297cdf0e10cSrcweir sal_uInt16 nPrefix, const OUString& rLocalName, 2298cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & xAttrList ) 2299cdf0e10cSrcweir { 2300cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap = 2301cdf0e10cSrcweir GetImport().GetTextImport()->GetTextPElemTokenMap(); 2302cdf0e10cSrcweir sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); 2303cdf0e10cSrcweir if( !pHints ) 2304cdf0e10cSrcweir pHints = new XMLHints_Impl; 2305cdf0e10cSrcweir return XMLImpSpanContext_Impl::CreateChildContext( 2306cdf0e10cSrcweir GetImport(), nPrefix, rLocalName, xAttrList, 2307cdf0e10cSrcweir nToken, *pHints, bIgnoreLeadingSpace 2308cdf0e10cSrcweir , nStarFontsConvFlags 2309cdf0e10cSrcweir ); 2310cdf0e10cSrcweir } 2311cdf0e10cSrcweir 2312cdf0e10cSrcweir void XMLParaContext::Characters( const OUString& rChars ) 2313cdf0e10cSrcweir { 2314cdf0e10cSrcweir OUString sChars = 2315cdf0e10cSrcweir GetImport().GetTextImport()->ConvertStarFonts( rChars, sStyleName, 2316cdf0e10cSrcweir nStarFontsConvFlags, 2317cdf0e10cSrcweir sal_True, GetImport() ); 2318cdf0e10cSrcweir GetImport().GetTextImport()->InsertString( sChars, bIgnoreLeadingSpace ); 2319cdf0e10cSrcweir } 2320cdf0e10cSrcweir 2321cdf0e10cSrcweir 2322cdf0e10cSrcweir 2323cdf0e10cSrcweir TYPEINIT1( XMLNumberedParaContext, SvXMLImportContext ); 2324cdf0e10cSrcweir 2325cdf0e10cSrcweir XMLNumberedParaContext::XMLNumberedParaContext( 2326cdf0e10cSrcweir SvXMLImport& i_rImport, 2327cdf0e10cSrcweir sal_uInt16 i_nPrefix, 2328cdf0e10cSrcweir const OUString& i_rLocalName, 2329cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & i_xAttrList ) : 2330cdf0e10cSrcweir SvXMLImportContext( i_rImport, i_nPrefix, i_rLocalName ), 2331cdf0e10cSrcweir m_Level(0), 2332cdf0e10cSrcweir m_StartValue(-1), 2333cdf0e10cSrcweir m_ListId(), 2334cdf0e10cSrcweir m_xNumRules() 2335cdf0e10cSrcweir { 2336cdf0e10cSrcweir ::rtl::OUString StyleName; 2337cdf0e10cSrcweir 2338cdf0e10cSrcweir const SvXMLTokenMap& rTokenMap( 2339cdf0e10cSrcweir i_rImport.GetTextImport()->GetTextNumberedParagraphAttrTokenMap() ); 2340cdf0e10cSrcweir 2341cdf0e10cSrcweir const sal_Int16 nAttrCount( i_xAttrList.is() ? 2342cdf0e10cSrcweir i_xAttrList->getLength() : 0 ); 2343cdf0e10cSrcweir for ( sal_Int16 i=0; i < nAttrCount; i++ ) 2344cdf0e10cSrcweir { 2345cdf0e10cSrcweir const ::rtl::OUString& rAttrName( i_xAttrList->getNameByIndex( i ) ); 2346cdf0e10cSrcweir const ::rtl::OUString& rValue ( i_xAttrList->getValueByIndex( i ) ); 2347cdf0e10cSrcweir 2348cdf0e10cSrcweir ::rtl::OUString aLocalName; 2349cdf0e10cSrcweir const sal_uInt16 nPrefix( 2350cdf0e10cSrcweir GetImport().GetNamespaceMap().GetKeyByAttrName( 2351cdf0e10cSrcweir rAttrName, &aLocalName ) ); 2352cdf0e10cSrcweir switch( rTokenMap.Get( nPrefix, aLocalName ) ) 2353cdf0e10cSrcweir { 2354cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_XMLID: 2355cdf0e10cSrcweir m_XmlId = rValue; 2356cdf0e10cSrcweir //FIXME: there is no UNO API for lists 2357cdf0e10cSrcweir break; 2358cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_LIST_ID: 2359cdf0e10cSrcweir m_ListId = rValue; 2360cdf0e10cSrcweir break; 2361cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_LEVEL: 2362cdf0e10cSrcweir { 2363cdf0e10cSrcweir sal_Int32 nTmp = rValue.toInt32(); 2364cdf0e10cSrcweir if ( nTmp >= 1 && nTmp <= SHRT_MAX ) { 2365cdf0e10cSrcweir m_Level = static_cast<sal_uInt16>(nTmp) - 1; 2366cdf0e10cSrcweir } 2367cdf0e10cSrcweir } 2368cdf0e10cSrcweir break; 2369cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_STYLE_NAME: 2370cdf0e10cSrcweir StyleName = rValue; 2371cdf0e10cSrcweir break; 2372cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING: 2373cdf0e10cSrcweir // this attribute is deprecated 2374cdf0e10cSrcweir // ContinuteNumbering = IsXMLToken(rValue, XML_TRUE); 2375cdf0e10cSrcweir break; 2376cdf0e10cSrcweir case XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE: 2377cdf0e10cSrcweir { 2378cdf0e10cSrcweir sal_Int32 nTmp = rValue.toInt32(); 2379cdf0e10cSrcweir if ( nTmp >= 0 && nTmp <= SHRT_MAX ) { 2380cdf0e10cSrcweir m_StartValue = static_cast<sal_Int16>(nTmp); 2381cdf0e10cSrcweir } 2382cdf0e10cSrcweir } 2383cdf0e10cSrcweir break; 2384cdf0e10cSrcweir } 2385cdf0e10cSrcweir } 2386cdf0e10cSrcweir 2387cdf0e10cSrcweir XMLTextListsHelper& rTextListsHelper( 2388cdf0e10cSrcweir i_rImport.GetTextImport()->GetTextListHelper() ); 2389cdf0e10cSrcweir if (!m_ListId.getLength()) { 2390cdf0e10cSrcweir OSL_ENSURE( ! i_rImport.GetODFVersion().equalsAsciiL( 2391cdf0e10cSrcweir RTL_CONSTASCII_STRINGPARAM("1.2") ), 2392cdf0e10cSrcweir "invalid numbered-paragraph: no list-id (1.2)"); 2393cdf0e10cSrcweir m_ListId = rTextListsHelper.GetNumberedParagraphListId(m_Level, 2394cdf0e10cSrcweir StyleName); 2395cdf0e10cSrcweir OSL_ENSURE(m_ListId.getLength(), "numbered-paragraph: no ListId"); 2396cdf0e10cSrcweir if (!m_ListId.getLength()) { 2397cdf0e10cSrcweir return; 2398cdf0e10cSrcweir } 2399cdf0e10cSrcweir } 2400cdf0e10cSrcweir m_xNumRules = rTextListsHelper.EnsureNumberedParagraph( i_rImport, 2401cdf0e10cSrcweir m_ListId, m_Level, StyleName); 2402cdf0e10cSrcweir 2403cdf0e10cSrcweir OSL_ENSURE(m_xNumRules.is(), "numbered-paragraph: no NumRules"); 2404cdf0e10cSrcweir 2405cdf0e10cSrcweir i_rImport.GetTextImport()->GetTextListHelper().PushListContext( this ); 2406cdf0e10cSrcweir } 2407cdf0e10cSrcweir 2408cdf0e10cSrcweir XMLNumberedParaContext::~XMLNumberedParaContext() 2409cdf0e10cSrcweir { 2410cdf0e10cSrcweir } 2411cdf0e10cSrcweir 2412cdf0e10cSrcweir void XMLNumberedParaContext::EndElement() 2413cdf0e10cSrcweir { 2414cdf0e10cSrcweir if (m_ListId.getLength()) { 2415cdf0e10cSrcweir GetImport().GetTextImport()->PopListContext(); 2416cdf0e10cSrcweir } 2417cdf0e10cSrcweir } 2418cdf0e10cSrcweir 2419cdf0e10cSrcweir SvXMLImportContext *XMLNumberedParaContext::CreateChildContext( 2420cdf0e10cSrcweir sal_uInt16 i_nPrefix, const OUString& i_rLocalName, 2421cdf0e10cSrcweir const Reference< xml::sax::XAttributeList > & i_xAttrList ) 2422cdf0e10cSrcweir { 2423cdf0e10cSrcweir SvXMLImportContext *pContext( 0 ); 2424cdf0e10cSrcweir 2425cdf0e10cSrcweir if ( XML_NAMESPACE_TEXT == i_nPrefix ) 2426cdf0e10cSrcweir { 2427cdf0e10cSrcweir bool bIsHeader( IsXMLToken( i_rLocalName, XML_H ) ); 2428cdf0e10cSrcweir if ( bIsHeader || IsXMLToken( i_rLocalName, XML_P ) ) 2429cdf0e10cSrcweir { 2430cdf0e10cSrcweir pContext = new XMLParaContext( GetImport(), 2431cdf0e10cSrcweir i_nPrefix, i_rLocalName, i_xAttrList, bIsHeader ); 2432cdf0e10cSrcweir // ignore text:number } else if (IsXMLToken( i_rLocalName, XML_NUMBER )) { 2433cdf0e10cSrcweir } 2434cdf0e10cSrcweir } 2435cdf0e10cSrcweir 2436cdf0e10cSrcweir if (!pContext) { 2437cdf0e10cSrcweir pContext = SvXMLImportContext::CreateChildContext( 2438cdf0e10cSrcweir i_nPrefix, i_rLocalName, i_xAttrList ); 2439cdf0e10cSrcweir } 2440cdf0e10cSrcweir 2441cdf0e10cSrcweir return pContext; 2442cdf0e10cSrcweir } 2443