xref: /AOO41X/main/sw/source/core/swg/SwXMLSectionList.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 #define _SVSTDARR_STRINGSDTOR
27 #define _SVSTDARR_STRINGS
28 #include <svl/svstdarr.hxx>
29 #include <SwXMLSectionList.hxx>
30 #include <xmloff/nmspmap.hxx>
31 #include <xmloff/xmlnmspe.hxx>
32 
33 using namespace ::com::sun::star;
34 using ::rtl::OUString;
35 using namespace ::xmloff::token;
36 
37 sal_Char __READONLY_DATA sXML_np__office[] = "_ooffice";
38 sal_Char __READONLY_DATA sXML_np__text[] = "_otext";
39 
40 // #110680#
SwXMLSectionList(const uno::Reference<lang::XMultiServiceFactory> xServiceFactory,SvStrings & rNewSectionList)41 SwXMLSectionList::SwXMLSectionList(
42     const uno::Reference< lang::XMultiServiceFactory > xServiceFactory,
43     SvStrings & rNewSectionList)
44 :   SvXMLImport( xServiceFactory ),
45     rSectionList ( rNewSectionList )
46 {
47     GetNamespaceMap().Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__office ) ),
48                             GetXMLToken(XML_N_OFFICE_OOO),
49                             XML_NAMESPACE_OFFICE );
50     GetNamespaceMap().Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__text ) ),
51                             GetXMLToken(XML_N_TEXT_OOO),
52                             XML_NAMESPACE_TEXT );
53 }
54 
~SwXMLSectionList(void)55 SwXMLSectionList::~SwXMLSectionList ( void )
56     throw()
57 {
58 }
59 
CreateContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)60 SvXMLImportContext *SwXMLSectionList::CreateContext(
61         sal_uInt16 nPrefix,
62         const OUString& rLocalName,
63         const uno::Reference< xml::sax::XAttributeList > & xAttrList )
64 {
65     SvXMLImportContext *pContext = 0;
66 
67     if(( nPrefix == XML_NAMESPACE_OFFICE && IsXMLToken ( rLocalName, XML_BODY )) ||
68         ( nPrefix == XML_NAMESPACE_TEXT &&
69             (IsXMLToken ( rLocalName, XML_P ) ||
70             IsXMLToken ( rLocalName, XML_H ) ||
71             IsXMLToken ( rLocalName, XML_A ) ||
72             IsXMLToken ( rLocalName, XML_SPAN ) ||
73             IsXMLToken ( rLocalName, XML_SECTION ) ||
74             IsXMLToken ( rLocalName, XML_INDEX_BODY ) ||
75             IsXMLToken ( rLocalName, XML_INDEX_TITLE )||
76             IsXMLToken ( rLocalName, XML_INSERTION ) ||
77             IsXMLToken ( rLocalName, XML_DELETION ) )
78         )
79       )
80     {
81         pContext = new SvXMLSectionListContext (*this, nPrefix, rLocalName, xAttrList);
82     }
83     else
84         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
85     return pContext;
86 }
87 
SvXMLSectionListContext(SwXMLSectionList & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)88 SvXMLSectionListContext::SvXMLSectionListContext(
89    SwXMLSectionList& rImport,
90    sal_uInt16 nPrefix,
91    const OUString& rLocalName,
92    const uno::Reference<   xml::sax::XAttributeList > & ) :
93    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
94    rLocalRef(rImport)
95 {
96 }
97 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)98 SvXMLImportContext *SvXMLSectionListContext::CreateChildContext(
99     sal_uInt16 nPrefix,
100     const OUString& rLocalName,
101     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
102 {
103     SvXMLImportContext *pContext = 0;
104     String sName;
105 
106     if (nPrefix == XML_NAMESPACE_TEXT && ( IsXMLToken ( rLocalName, XML_SECTION ) ||
107                                            IsXMLToken ( rLocalName, XML_BOOKMARK) ) )
108     {
109         sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
110 
111         for (sal_Int16 i=0; i < nAttrCount; i++)
112         {
113             const OUString& rAttrName = xAttrList->getNameByIndex( i );
114             OUString aLocalName;
115             sal_uInt16 nPrefx = rLocalRef.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName);
116             const OUString& rAttrValue = xAttrList->getValueByIndex( i );
117             if (XML_NAMESPACE_TEXT == nPrefx && IsXMLToken ( aLocalName, XML_NAME ) )
118                 sName = rAttrValue;
119         }
120         if ( sName.Len() )
121             rLocalRef.rSectionList.Insert ( new String(sName), rLocalRef.rSectionList.Count() );
122     }
123 
124     pContext = new SvXMLSectionListContext (rLocalRef, nPrefix, rLocalName, xAttrList);
125     return pContext;
126 }
~SvXMLSectionListContext(void)127 SvXMLSectionListContext::~SvXMLSectionListContext ( void )
128 {
129 }
130 
SvXMLIgnoreSectionListContext(SwXMLSectionList & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> &)131 SvXMLIgnoreSectionListContext::SvXMLIgnoreSectionListContext(
132    SwXMLSectionList& rImport,
133    sal_uInt16 nPrefix,
134    const OUString& rLocalName,
135    const uno::Reference< xml::sax::XAttributeList > & ) :
136    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
137    rLocalRef(rImport)
138 {
139 }
140 
~SvXMLIgnoreSectionListContext(void)141 SvXMLIgnoreSectionListContext::~SvXMLIgnoreSectionListContext ( void )
142 {
143 }
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)144 SvXMLImportContext *SvXMLIgnoreSectionListContext::CreateChildContext(
145     sal_uInt16 nPrefix,
146     const OUString& rLocalName,
147     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
148 {
149     return  new SvXMLIgnoreSectionListContext (rLocalRef, nPrefix, rLocalName, xAttrList);
150 }
151