Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "celltextparacontext.hxx"
11 : #include "xmlimprt.hxx"
12 : #include "xmlcelli.hxx"
13 :
14 : #include "xmloff/nmspmap.hxx"
15 :
16 : #include <com/sun/star/xml/sax/XAttributeList.hpp>
17 :
18 : using namespace com::sun::star;
19 :
20 3119 : ScXMLCellTextParaContext::ScXMLCellTextParaContext(
21 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLTableRowCellContext& rParent) :
22 : ScXMLImportContext(rImport, nPrefix, rLName),
23 3119 : mrParentCxt(rParent)
24 : {
25 3119 : }
26 :
27 3119 : void ScXMLCellTextParaContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
28 : {
29 3119 : }
30 :
31 3119 : void ScXMLCellTextParaContext::EndElement()
32 : {
33 3119 : if (!maContent.isEmpty())
34 3102 : mrParentCxt.PushParagraphSpan(maContent, OUString());
35 :
36 3119 : mrParentCxt.PushParagraphEnd();
37 3119 : }
38 :
39 3133 : void ScXMLCellTextParaContext::Characters(const OUString& rChars)
40 : {
41 3133 : maContent += rChars;
42 3133 : }
43 :
44 23 : SvXMLImportContext* ScXMLCellTextParaContext::CreateChildContext(
45 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
46 : {
47 23 : if (!maContent.isEmpty())
48 : {
49 13 : mrParentCxt.PushParagraphSpan(maContent, OUString());
50 13 : maContent = OUString();
51 : }
52 :
53 23 : const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextParaElemTokenMap();
54 23 : switch (rTokenMap.Get(nPrefix, rLocalName))
55 : {
56 : case XML_TOK_CELL_TEXT_SPAN:
57 16 : return new ScXMLCellTextSpanContext(GetScImport(), nPrefix, rLocalName, *this);
58 : case XML_TOK_CELL_TEXT_SHEET_NAME:
59 1 : return new ScXMLCellFieldSheetNameContext(GetScImport(), nPrefix, rLocalName, *this);
60 : case XML_TOK_CELL_TEXT_DATE:
61 1 : return new ScXMLCellFieldDateContext(GetScImport(), nPrefix, rLocalName, *this);
62 : case XML_TOK_CELL_TEXT_TITLE:
63 1 : return new ScXMLCellFieldTitleContext(GetScImport(), nPrefix, rLocalName, *this);
64 : case XML_TOK_CELL_TEXT_URL:
65 2 : return new ScXMLCellFieldURLContext(GetScImport(), nPrefix, rLocalName, *this);
66 : default:
67 : ;
68 : }
69 :
70 2 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
71 : }
72 :
73 12 : void ScXMLCellTextParaContext::PushSpan(const OUString& rSpan, const OUString& rStyleName)
74 : {
75 12 : mrParentCxt.PushParagraphSpan(rSpan, rStyleName);
76 12 : }
77 :
78 2 : void ScXMLCellTextParaContext::PushFieldSheetName(const OUString& rStyleName)
79 : {
80 2 : mrParentCxt.PushParagraphFieldSheetName(rStyleName);
81 2 : }
82 :
83 2 : void ScXMLCellTextParaContext::PushFieldDate(const OUString& rStyleName)
84 : {
85 2 : mrParentCxt.PushParagraphFieldDate(rStyleName);
86 2 : }
87 :
88 2 : void ScXMLCellTextParaContext::PushFieldTitle(const OUString& rStyleName)
89 : {
90 2 : mrParentCxt.PushParagraphFieldDocTitle(rStyleName);
91 2 : }
92 :
93 3 : void ScXMLCellTextParaContext::PushFieldURL(
94 : const OUString& rURL, const OUString& rRep, const OUString& rStyleName)
95 : {
96 3 : mrParentCxt.PushParagraphFieldURL(rURL, rRep, rStyleName);
97 3 : }
98 :
99 16 : ScXMLCellTextSpanContext::ScXMLCellTextSpanContext(
100 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) :
101 : ScXMLImportContext(rImport, nPrefix, rLName),
102 16 : mrParentCxt(rParent)
103 : {
104 16 : }
105 :
106 16 : void ScXMLCellTextSpanContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& xAttrList)
107 : {
108 16 : if (!xAttrList.is())
109 16 : return;
110 :
111 16 : OUString aLocalName;
112 16 : sal_Int16 nAttrCount = xAttrList->getLength();
113 :
114 16 : const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextSpanAttrTokenMap();
115 32 : for (sal_Int16 i = 0; i < nAttrCount; ++i)
116 : {
117 16 : sal_uInt16 nAttrPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(
118 32 : xAttrList->getNameByIndex(i), &aLocalName);
119 :
120 16 : const OUString& rAttrValue = xAttrList->getValueByIndex(i);
121 16 : sal_uInt16 nToken = rTokenMap.Get(nAttrPrefix, aLocalName);
122 16 : switch (nToken)
123 : {
124 : case XML_TOK_CELL_TEXT_SPAN_ATTR_STYLE_NAME:
125 16 : maStyleName = rAttrValue;
126 16 : break;
127 : default:
128 : ;
129 : }
130 32 : }
131 : }
132 :
133 16 : void ScXMLCellTextSpanContext::EndElement()
134 : {
135 16 : if (!maContent.isEmpty())
136 : {
137 12 : mrParentCxt.PushSpan(maContent, maStyleName);
138 : }
139 16 : }
140 :
141 12 : void ScXMLCellTextSpanContext::Characters(const OUString& rChars)
142 : {
143 12 : maContent += rChars;
144 12 : }
145 :
146 4 : SvXMLImportContext* ScXMLCellTextSpanContext::CreateChildContext(
147 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
148 : {
149 4 : if (!maContent.isEmpty())
150 : {
151 0 : mrParentCxt.PushSpan(maContent, maStyleName);
152 0 : maContent = OUString();
153 : }
154 :
155 4 : const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextSpanElemTokenMap();
156 4 : switch (rTokenMap.Get(nPrefix, rLocalName))
157 : {
158 : case XML_TOK_CELL_TEXT_SPAN_ELEM_SHEET_NAME:
159 : {
160 1 : ScXMLCellFieldSheetNameContext* p = new ScXMLCellFieldSheetNameContext(GetScImport(), nPrefix, rLocalName, mrParentCxt);
161 1 : p->SetStyleName(maStyleName);
162 1 : return p;
163 : }
164 : case XML_TOK_CELL_TEXT_SPAN_ELEM_DATE:
165 : {
166 1 : ScXMLCellFieldDateContext* p = new ScXMLCellFieldDateContext(GetScImport(), nPrefix, rLocalName, mrParentCxt);
167 1 : p->SetStyleName(maStyleName);
168 1 : return p;
169 : }
170 : case XML_TOK_CELL_TEXT_SPAN_ELEM_TITLE:
171 : {
172 1 : ScXMLCellFieldTitleContext* p = new ScXMLCellFieldTitleContext(GetScImport(), nPrefix, rLocalName, mrParentCxt);
173 1 : p->SetStyleName(maStyleName);
174 1 : return p;
175 : }
176 : case XML_TOK_CELL_TEXT_SPAN_ELEM_URL:
177 : {
178 1 : ScXMLCellFieldURLContext* p = new ScXMLCellFieldURLContext(GetScImport(), nPrefix, rLocalName, mrParentCxt);
179 1 : p->SetStyleName(maStyleName);
180 1 : return p;
181 : }
182 : default:
183 : ;
184 : }
185 :
186 0 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
187 : }
188 :
189 2 : ScXMLCellFieldSheetNameContext::ScXMLCellFieldSheetNameContext(
190 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) :
191 : ScXMLImportContext(rImport, nPrefix, rLName),
192 2 : mrParentCxt(rParent)
193 : {
194 2 : }
195 :
196 1 : void ScXMLCellFieldSheetNameContext::SetStyleName(const OUString& rStyleName)
197 : {
198 1 : maStyleName = rStyleName;
199 1 : }
200 :
201 2 : void ScXMLCellFieldSheetNameContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
202 : {
203 : // <text:sheet-name> has no attributes (that I'm aware of).
204 2 : }
205 :
206 2 : void ScXMLCellFieldSheetNameContext::EndElement()
207 : {
208 2 : mrParentCxt.PushFieldSheetName(maStyleName);
209 2 : }
210 :
211 2 : void ScXMLCellFieldSheetNameContext::Characters(const OUString& /*rChars*/)
212 : {
213 2 : }
214 :
215 0 : SvXMLImportContext* ScXMLCellFieldSheetNameContext::CreateChildContext(
216 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
217 : {
218 0 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
219 : }
220 :
221 2 : ScXMLCellFieldDateContext::ScXMLCellFieldDateContext(
222 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) :
223 : ScXMLImportContext(rImport, nPrefix, rLName),
224 2 : mrParentCxt(rParent)
225 : {
226 2 : }
227 :
228 1 : void ScXMLCellFieldDateContext::SetStyleName(const OUString& rStyleName)
229 : {
230 1 : maStyleName = rStyleName;
231 1 : }
232 :
233 2 : void ScXMLCellFieldDateContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
234 : {
235 2 : }
236 :
237 2 : void ScXMLCellFieldDateContext::EndElement()
238 : {
239 2 : mrParentCxt.PushFieldDate(maStyleName);
240 2 : }
241 :
242 2 : void ScXMLCellFieldDateContext::Characters(const OUString& /*rChars*/)
243 : {
244 2 : }
245 :
246 0 : SvXMLImportContext* ScXMLCellFieldDateContext::CreateChildContext(
247 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
248 : {
249 0 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
250 : }
251 :
252 2 : ScXMLCellFieldTitleContext::ScXMLCellFieldTitleContext(
253 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) :
254 : ScXMLImportContext(rImport, nPrefix, rLName),
255 2 : mrParentCxt(rParent)
256 : {
257 2 : }
258 :
259 1 : void ScXMLCellFieldTitleContext::SetStyleName(const OUString& rStyleName)
260 : {
261 1 : maStyleName = rStyleName;
262 1 : }
263 :
264 2 : void ScXMLCellFieldTitleContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
265 : {
266 2 : }
267 :
268 2 : void ScXMLCellFieldTitleContext::EndElement()
269 : {
270 2 : mrParentCxt.PushFieldTitle(maStyleName);
271 2 : }
272 :
273 2 : void ScXMLCellFieldTitleContext::Characters(const OUString& /*rChars*/)
274 : {
275 2 : }
276 :
277 0 : SvXMLImportContext* ScXMLCellFieldTitleContext::CreateChildContext(
278 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
279 : {
280 0 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
281 : }
282 :
283 3 : ScXMLCellFieldURLContext::ScXMLCellFieldURLContext(
284 : ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) :
285 : ScXMLImportContext(rImport, nPrefix, rLName),
286 3 : mrParentCxt(rParent)
287 : {
288 3 : }
289 :
290 1 : void ScXMLCellFieldURLContext::SetStyleName(const OUString& rStyleName)
291 : {
292 1 : maStyleName = rStyleName;
293 1 : }
294 :
295 3 : void ScXMLCellFieldURLContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& xAttrList)
296 : {
297 3 : if (!xAttrList.is())
298 3 : return;
299 :
300 3 : OUString aLocalName;
301 3 : sal_Int16 nAttrCount = xAttrList->getLength();
302 :
303 3 : const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextURLAttrTokenMap();
304 9 : for (sal_Int16 i = 0; i < nAttrCount; ++i)
305 : {
306 6 : sal_uInt16 nAttrPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(
307 12 : xAttrList->getNameByIndex(i), &aLocalName);
308 :
309 6 : const OUString& rAttrValue = xAttrList->getValueByIndex(i);
310 6 : sal_uInt16 nToken = rTokenMap.Get(nAttrPrefix, aLocalName);
311 6 : switch (nToken)
312 : {
313 : case XML_TOK_CELL_TEXT_URL_ATTR_UREF:
314 3 : maURL = rAttrValue;
315 3 : break;
316 : case XML_TOK_CELL_TEXT_URL_ATTR_TYPE:
317 : // Ignored for now.
318 3 : break;
319 : default:
320 : ;
321 : }
322 9 : }
323 : }
324 :
325 3 : void ScXMLCellFieldURLContext::EndElement()
326 : {
327 3 : mrParentCxt.PushFieldURL(maURL, maRep, maStyleName);
328 3 : }
329 :
330 3 : void ScXMLCellFieldURLContext::Characters(const OUString& rChars)
331 : {
332 3 : maRep += rChars;
333 3 : }
334 :
335 0 : SvXMLImportContext* ScXMLCellFieldURLContext::CreateChildContext(
336 : sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/)
337 : {
338 0 : return new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
339 : }
340 :
341 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|