xref: /AOO41X/main/editeng/source/misc/SvXMLAutoCorrectImport.cxx (revision 190118d08a3be86671f4129b3e9a490e144719cd)
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_editeng.hxx"
26 #include <SvXMLAutoCorrectImport.hxx>
27 #ifndef _APP_HXX //autogen
28 #include <vcl/svapp.hxx>
29 #endif
30 
31 #define _SVSTDARR_STRINGSISORTDTOR
32 #define _SVSTDARR_STRINGSDTOR
33 #include <svl/svstdarr.hxx>
34 #include <xmloff/xmltoken.hxx>
35 
36 using namespace ::com::sun::star;
37 using namespace ::xmloff::token;
38 using namespace ::rtl;
39 
40 
41 static OUString sBlockList ( RTL_CONSTASCII_USTRINGPARAM ( "_block-list" ) );
42 
43 // #110680#
SvXMLAutoCorrectImport(const uno::Reference<lang::XMultiServiceFactory> xServiceFactory,SvxAutocorrWordList * pNewAutocorr_List,SvxAutoCorrect & rNewAutoCorrect,const com::sun::star::uno::Reference<com::sun::star::embed::XStorage> & rNewStorage)44 SvXMLAutoCorrectImport::SvXMLAutoCorrectImport(
45     const uno::Reference< lang::XMultiServiceFactory > xServiceFactory,
46     SvxAutocorrWordList *pNewAutocorr_List,
47     SvxAutoCorrect &rNewAutoCorrect,
48     const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& rNewStorage)
49 :   SvXMLImport( xServiceFactory ),
50     pAutocorr_List (pNewAutocorr_List),
51     rAutoCorrect ( rNewAutoCorrect ),
52     xStorage ( rNewStorage )
53 {
54     GetNamespaceMap().Add(
55             sBlockList,
56             GetXMLToken ( XML_N_BLOCK_LIST),
57             XML_NAMESPACE_BLOCKLIST );
58 }
59 
~SvXMLAutoCorrectImport(void)60 SvXMLAutoCorrectImport::~SvXMLAutoCorrectImport ( void ) throw ()
61 {
62 }
63 
CreateContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)64 SvXMLImportContext *SvXMLAutoCorrectImport::CreateContext(
65         sal_uInt16 nPrefix,
66         const OUString& rLocalName,
67         const uno::Reference< xml::sax::XAttributeList > & xAttrList )
68 {
69     SvXMLImportContext *pContext = 0;
70 
71     if( XML_NAMESPACE_BLOCKLIST == nPrefix &&
72         IsXMLToken ( rLocalName, XML_BLOCK_LIST ) )
73         pContext = new SvXMLWordListContext( *this, nPrefix, rLocalName, xAttrList );
74     else
75         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
76     return pContext;
77 }
78 
SvXMLWordListContext(SvXMLAutoCorrectImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList> &)79 SvXMLWordListContext::SvXMLWordListContext(
80    SvXMLAutoCorrectImport& rImport,
81    sal_uInt16 nPrefix,
82    const OUString& rLocalName,
83    const com::sun::star::uno::Reference<
84    com::sun::star::xml::sax::XAttributeList > & /*xAttrList*/ ) :
85    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
86    rLocalRef(rImport)
87 {
88 }
89 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)90 SvXMLImportContext *SvXMLWordListContext::CreateChildContext(
91     sal_uInt16 nPrefix,
92     const OUString& rLocalName,
93     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
94 {
95     SvXMLImportContext *pContext = 0;
96 
97     if (nPrefix == XML_NAMESPACE_BLOCKLIST &&
98         IsXMLToken ( rLocalName, XML_BLOCK ) )
99         pContext = new SvXMLWordContext (rLocalRef, nPrefix, rLocalName, xAttrList);
100     else
101         pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName);
102     return pContext;
103 }
~SvXMLWordListContext(void)104 SvXMLWordListContext::~SvXMLWordListContext ( void )
105 {
106 }
107 
SvXMLWordContext(SvXMLAutoCorrectImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList> & xAttrList)108 SvXMLWordContext::SvXMLWordContext(
109    SvXMLAutoCorrectImport& rImport,
110    sal_uInt16 nPrefix,
111    const OUString& rLocalName,
112    const com::sun::star::uno::Reference<
113    com::sun::star::xml::sax::XAttributeList > & xAttrList ) :
114    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
115    rLocalRef(rImport)
116 {
117     String sRight, sWrong;
118     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
119 
120     for (sal_Int16 i=0; i < nAttrCount; i++)
121     {
122         const OUString& rAttrName = xAttrList->getNameByIndex( i );
123         OUString aLocalName;
124         sal_uInt16 nAttrPrefix = rImport.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName);
125         const OUString& rAttrValue = xAttrList->getValueByIndex( i );
126         if (XML_NAMESPACE_BLOCKLIST == nAttrPrefix)
127         {
128             if ( IsXMLToken ( aLocalName, XML_ABBREVIATED_NAME ) )
129             {
130                 sWrong = rAttrValue;
131             }
132             else if ( IsXMLToken ( aLocalName, XML_NAME ) )
133             {
134                 sRight = rAttrValue;
135             }
136         }
137     }
138     if (!sWrong.Len() || !sRight.Len() )
139         return;
140 
141 //  const International& rInter = Application::GetAppInternational();
142 //  sal_Bool bOnlyTxt = COMPARE_EQUAL != rInter.Compare( sRight, sWrong, INTN_COMPARE_IGNORECASE );
143     sal_Bool bOnlyTxt = sRight != sWrong;
144     if( !bOnlyTxt )
145     {
146         String sLongSave( sRight );
147         if( !rLocalRef.rAutoCorrect.GetLongText( rLocalRef.xStorage, String(), sWrong, sRight ) &&
148             sLongSave.Len() )
149         {
150             sRight = sLongSave;
151             bOnlyTxt = sal_True;
152         }
153     }
154     SvxAutocorrWordPtr pNew = new SvxAutocorrWord( sWrong, sRight, bOnlyTxt );
155 
156     if( !rLocalRef.pAutocorr_List->Insert( pNew ) )
157         delete pNew;
158 }
159 
~SvXMLWordContext(void)160 SvXMLWordContext::~SvXMLWordContext ( void )
161 {
162 }
163 
164 // #110680#
SvXMLExceptionListImport(const uno::Reference<lang::XMultiServiceFactory> xServiceFactory,SvStringsISortDtor & rNewList)165 SvXMLExceptionListImport::SvXMLExceptionListImport(
166     const uno::Reference< lang::XMultiServiceFactory > xServiceFactory,
167     SvStringsISortDtor & rNewList )
168 :   SvXMLImport( xServiceFactory ),
169     rList (rNewList)
170 {
171     GetNamespaceMap().Add(
172             sBlockList,
173             GetXMLToken ( XML_N_BLOCK_LIST),
174             XML_NAMESPACE_BLOCKLIST );
175 }
176 
~SvXMLExceptionListImport(void)177 SvXMLExceptionListImport::~SvXMLExceptionListImport ( void ) throw ()
178 {
179 }
180 
CreateContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)181 SvXMLImportContext *SvXMLExceptionListImport::CreateContext(
182         sal_uInt16 nPrefix,
183         const OUString& rLocalName,
184         const uno::Reference< xml::sax::XAttributeList > & xAttrList )
185 {
186     SvXMLImportContext *pContext = 0;
187 
188     if( XML_NAMESPACE_BLOCKLIST==nPrefix &&
189         IsXMLToken ( rLocalName, XML_BLOCK_LIST ) )
190         pContext = new SvXMLExceptionListContext( *this, nPrefix, rLocalName, xAttrList );
191     else
192         pContext = SvXMLImport::CreateContext( nPrefix, rLocalName, xAttrList );
193     return pContext;
194 }
195 
SvXMLExceptionListContext(SvXMLExceptionListImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList> &)196 SvXMLExceptionListContext::SvXMLExceptionListContext(
197    SvXMLExceptionListImport& rImport,
198    sal_uInt16 nPrefix,
199    const OUString& rLocalName,
200    const com::sun::star::uno::Reference<
201    com::sun::star::xml::sax::XAttributeList > & /* xAttrList */ ) :
202    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
203    rLocalRef(rImport)
204 {
205 }
206 
CreateChildContext(sal_uInt16 nPrefix,const OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList)207 SvXMLImportContext *SvXMLExceptionListContext::CreateChildContext(
208     sal_uInt16 nPrefix,
209     const OUString& rLocalName,
210     const uno::Reference< xml::sax::XAttributeList > & xAttrList )
211 {
212     SvXMLImportContext *pContext = 0;
213 
214     if (nPrefix == XML_NAMESPACE_BLOCKLIST &&
215         IsXMLToken ( rLocalName, XML_BLOCK ) )
216         pContext = new SvXMLExceptionContext (rLocalRef, nPrefix, rLocalName, xAttrList);
217     else
218         pContext = new SvXMLImportContext( rLocalRef, nPrefix, rLocalName);
219     return pContext;
220 }
~SvXMLExceptionListContext(void)221 SvXMLExceptionListContext::~SvXMLExceptionListContext ( void )
222 {
223 }
224 
SvXMLExceptionContext(SvXMLExceptionListImport & rImport,sal_uInt16 nPrefix,const OUString & rLocalName,const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList> & xAttrList)225 SvXMLExceptionContext::SvXMLExceptionContext(
226    SvXMLExceptionListImport& rImport,
227    sal_uInt16 nPrefix,
228    const OUString& rLocalName,
229    const com::sun::star::uno::Reference<
230    com::sun::star::xml::sax::XAttributeList > & xAttrList ) :
231    SvXMLImportContext ( rImport, nPrefix, rLocalName ),
232    rLocalRef(rImport)
233 {
234     String sWord;
235     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
236 
237     for (sal_Int16 i=0; i < nAttrCount; i++)
238     {
239         const OUString& rAttrName = xAttrList->getNameByIndex( i );
240         OUString aLocalName;
241         sal_uInt16 nAttrPrefix = rImport.GetNamespaceMap().GetKeyByAttrName( rAttrName, &aLocalName);
242         const OUString& rAttrValue = xAttrList->getValueByIndex( i );
243         if (XML_NAMESPACE_BLOCKLIST == nAttrPrefix)
244         {
245             if ( IsXMLToken ( aLocalName, XML_ABBREVIATED_NAME ) )
246             {
247                 sWord = rAttrValue;
248             }
249         }
250     }
251     if (!sWord.Len() )
252         return;
253 
254     String * pNew = new String( sWord );
255 
256     if( !rLocalRef.rList.Insert( pNew ) )
257         delete pNew;
258 }
259 
~SvXMLExceptionContext(void)260 SvXMLExceptionContext::~SvXMLExceptionContext ( void )
261 {
262 }
263