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