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 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include <vector>
22 :
23 : #include <boost/scoped_array.hpp>
24 :
25 : #include <com/sun/star/container/XEnumerationAccess.hpp>
26 : #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
27 : #include <com/sun/star/text/XChapterNumberingSupplier.hpp>
28 : #include <com/sun/star/text/XTextFramesSupplier.hpp>
29 : #include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
30 : #include <com/sun/star/text/XTextEmbeddedObjectsSupplier.hpp>
31 : #include <com/sun/star/text/XFormField.hpp>
32 : #include <com/sun/star/ucb/XAnyCompareFactory.hpp>
33 : #include "xmloff/xmlnmspe.hxx"
34 : #include <xmloff/txtstyli.hxx>
35 : #include <xmloff/xmlnumi.hxx>
36 :
37 : #include "txtparai.hxx"
38 : #include <xmloff/txtprmap.hxx>
39 : #include "xmloff/txtimppr.hxx"
40 : #include <xmloff/xmlimp.hxx>
41 : #include "txtvfldi.hxx"
42 : #include "xmloff/i18nmap.hxx"
43 : #include "XMLTextListItemContext.hxx"
44 : #include "XMLTextListBlockContext.hxx"
45 : #include "XMLTextFrameContext.hxx"
46 : #include "XMLTextFrameHyperlinkContext.hxx"
47 : #include "XMLSectionImportContext.hxx"
48 : #include "XMLIndexTOCContext.hxx"
49 : #include <xmloff/XMLFontStylesContext.hxx>
50 : #include <xmloff/XMLEventsImportContext.hxx>
51 : #include "XMLTrackedChangesImportContext.hxx"
52 : #include "XMLChangeImportContext.hxx"
53 : #include "XMLAutoMarkFileContext.hxx"
54 :
55 : #include "XMLCalculationSettingsContext.hxx"
56 : #include "XMLNumberStylesImport.hxx"
57 : // XML import: reconstrution of assignment of paragraph style to outline levels (#i69629#)
58 : #include <com/sun/star/beans/XPropertyState.hpp>
59 : #include <txtlists.hxx>
60 : #include <xmloff/odffields.hxx>
61 : #include <comphelper/stlunosequence.hxx>
62 :
63 : using ::com::sun::star::ucb::XAnyCompare;
64 :
65 : using namespace ::std;
66 : using namespace ::com::sun::star;
67 : using namespace ::com::sun::star::uno;
68 : using namespace ::com::sun::star::beans;
69 : using namespace ::com::sun::star::text;
70 : using namespace ::com::sun::star::frame;
71 : using namespace ::com::sun::star::style;
72 : using namespace ::com::sun::star::container;
73 : using namespace ::com::sun::star::drawing;
74 : using namespace ::com::sun::star::xml::sax;
75 : using namespace ::com::sun::star::lang;
76 : using namespace ::xmloff::token;
77 : using namespace ::com::sun::star::ucb;
78 : using ::comphelper::UStringLess;
79 :
80 :
81 :
82 : static SvXMLTokenMapEntry aTextElemTokenMap[] =
83 : {
84 : { XML_NAMESPACE_TEXT, XML_P, XML_TOK_TEXT_P },
85 : { XML_NAMESPACE_TEXT, XML_H, XML_TOK_TEXT_H },
86 : { XML_NAMESPACE_TEXT, XML_LIST, XML_TOK_TEXT_LIST },
87 : { XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_TEXT_FRAME_PAGE },
88 : { XML_NAMESPACE_DRAW, XML_A, XML_TOK_DRAW_A_PAGE },
89 : { XML_NAMESPACE_TABLE,XML_TABLE, XML_TOK_TABLE_TABLE },
90 : { XML_NAMESPACE_TEXT, XML_VARIABLE_DECLS, XML_TOK_TEXT_VARFIELD_DECLS },
91 : { XML_NAMESPACE_TEXT, XML_USER_FIELD_DECLS, XML_TOK_TEXT_USERFIELD_DECLS },
92 : { XML_NAMESPACE_TEXT, XML_SEQUENCE_DECLS, XML_TOK_TEXT_SEQUENCE_DECLS },
93 : { XML_NAMESPACE_TEXT, XML_DDE_CONNECTION_DECLS, XML_TOK_TEXT_DDE_DECLS },
94 : { XML_NAMESPACE_TEXT, XML_SECTION, XML_TOK_TEXT_SECTION },
95 : { XML_NAMESPACE_TEXT, XML_TABLE_OF_CONTENT, XML_TOK_TEXT_TOC },
96 : { XML_NAMESPACE_TEXT, XML_OBJECT_INDEX, XML_TOK_TEXT_OBJECT_INDEX },
97 : { XML_NAMESPACE_TEXT, XML_TABLE_INDEX, XML_TOK_TEXT_TABLE_INDEX },
98 : { XML_NAMESPACE_TEXT, XML_ILLUSTRATION_INDEX, XML_TOK_TEXT_ILLUSTRATION_INDEX },
99 : { XML_NAMESPACE_TEXT, XML_USER_INDEX, XML_TOK_TEXT_USER_INDEX },
100 : { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX, XML_TOK_TEXT_ALPHABETICAL_INDEX },
101 : { XML_NAMESPACE_TEXT, XML_BIBLIOGRAPHY, XML_TOK_TEXT_BIBLIOGRAPHY_INDEX },
102 : { XML_NAMESPACE_TEXT, XML_INDEX_TITLE, XML_TOK_TEXT_INDEX_TITLE },
103 : { XML_NAMESPACE_TEXT, XML_TRACKED_CHANGES, XML_TOK_TEXT_TRACKED_CHANGES },
104 : { XML_NAMESPACE_TEXT, XML_CHANGE_START, XML_TOK_TEXT_CHANGE_START },
105 : { XML_NAMESPACE_TEXT, XML_CHANGE_END, XML_TOK_TEXT_CHANGE_END },
106 : { XML_NAMESPACE_TEXT, XML_CHANGE, XML_TOK_TEXT_CHANGE },
107 : { XML_NAMESPACE_OFFICE, XML_FORMS, XML_TOK_TEXT_FORMS },
108 : { XML_NAMESPACE_TABLE, XML_CALCULATION_SETTINGS, XML_TOK_TEXT_CALCULATION_SETTINGS },
109 : { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_AUTO_MARK_FILE, XML_TOK_TEXT_AUTOMARK },
110 : // #i52127#
111 : { XML_NAMESPACE_TEXT, XML_NUMBERED_PARAGRAPH, XML_TOK_TEXT_NUMBERED_PARAGRAPH },
112 :
113 : XML_TOKEN_MAP_END
114 : };
115 :
116 : static SvXMLTokenMapEntry aTextPElemTokenMap[] =
117 : {
118 : { XML_NAMESPACE_TEXT, XML_SPAN, XML_TOK_TEXT_SPAN },
119 : { XML_NAMESPACE_TEXT, XML_TAB, XML_TOK_TEXT_TAB_STOP },
120 : { XML_NAMESPACE_TEXT, XML_LINE_BREAK, XML_TOK_TEXT_LINE_BREAK },
121 : { XML_NAMESPACE_TEXT, XML_SOFT_PAGE_BREAK, XML_TOK_TEXT_SOFT_PAGE_BREAK },
122 : { XML_NAMESPACE_TEXT, XML_S, XML_TOK_TEXT_S },
123 : { XML_NAMESPACE_TEXT, XML_A, XML_TOK_TEXT_HYPERLINK },
124 : { XML_NAMESPACE_TEXT, XML_RUBY, XML_TOK_TEXT_RUBY },
125 :
126 : { XML_NAMESPACE_TEXT, XML_NOTE, XML_TOK_TEXT_NOTE },
127 : { XML_NAMESPACE_TEXT, XML_BOOKMARK, XML_TOK_TEXT_BOOKMARK },
128 : { XML_NAMESPACE_TEXT, XML_BOOKMARK_START, XML_TOK_TEXT_BOOKMARK_START },
129 : { XML_NAMESPACE_TEXT, XML_BOOKMARK_END, XML_TOK_TEXT_BOOKMARK_END },
130 : { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK, XML_TOK_TEXT_REFERENCE },
131 : { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK_START,
132 : XML_TOK_TEXT_REFERENCE_START },
133 : { XML_NAMESPACE_TEXT, XML_REFERENCE_MARK_END,
134 : XML_TOK_TEXT_REFERENCE_END },
135 :
136 : { XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_TEXT_FRAME },
137 : { XML_NAMESPACE_DRAW, XML_A, XML_TOK_DRAW_A },
138 :
139 : // index marks
140 : { XML_NAMESPACE_TEXT, XML_TOC_MARK, XML_TOK_TEXT_TOC_MARK },
141 : { XML_NAMESPACE_TEXT, XML_TOC_MARK_START, XML_TOK_TEXT_TOC_MARK_START },
142 : { XML_NAMESPACE_TEXT, XML_TOC_MARK_END, XML_TOK_TEXT_TOC_MARK_END },
143 : { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK, XML_TOK_TEXT_USER_INDEX_MARK },
144 : { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK_START,
145 : XML_TOK_TEXT_USER_INDEX_MARK_START },
146 : { XML_NAMESPACE_TEXT, XML_USER_INDEX_MARK_END,
147 : XML_TOK_TEXT_USER_INDEX_MARK_END },
148 : { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK,
149 : XML_TOK_TEXT_ALPHA_INDEX_MARK },
150 : { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK_START,
151 : XML_TOK_TEXT_ALPHA_INDEX_MARK_START },
152 : { XML_NAMESPACE_TEXT, XML_ALPHABETICAL_INDEX_MARK_END,
153 : XML_TOK_TEXT_ALPHA_INDEX_MARK_END },
154 :
155 : // sender fields
156 : { XML_NAMESPACE_TEXT, XML_SENDER_FIRSTNAME,XML_TOK_TEXT_SENDER_FIRSTNAME},
157 : { XML_NAMESPACE_TEXT, XML_SENDER_LASTNAME, XML_TOK_TEXT_SENDER_LASTNAME },
158 : { XML_NAMESPACE_TEXT, XML_SENDER_INITIALS, XML_TOK_TEXT_SENDER_INITIALS },
159 : { XML_NAMESPACE_TEXT, XML_SENDER_TITLE, XML_TOK_TEXT_SENDER_TITLE },
160 : { XML_NAMESPACE_TEXT, XML_SENDER_POSITION, XML_TOK_TEXT_SENDER_POSITION },
161 : { XML_NAMESPACE_TEXT, XML_SENDER_EMAIL, XML_TOK_TEXT_SENDER_EMAIL },
162 : { XML_NAMESPACE_TEXT, XML_SENDER_PHONE_PRIVATE,
163 : XML_TOK_TEXT_SENDER_PHONE_PRIVATE },
164 : { XML_NAMESPACE_TEXT, XML_SENDER_FAX, XML_TOK_TEXT_SENDER_FAX },
165 : { XML_NAMESPACE_TEXT, XML_SENDER_COMPANY, XML_TOK_TEXT_SENDER_COMPANY },
166 : { XML_NAMESPACE_TEXT, XML_SENDER_PHONE_WORK,
167 : XML_TOK_TEXT_SENDER_PHONE_WORK },
168 : { XML_NAMESPACE_TEXT, XML_SENDER_STREET, XML_TOK_TEXT_SENDER_STREET },
169 : { XML_NAMESPACE_TEXT, XML_SENDER_CITY, XML_TOK_TEXT_SENDER_CITY },
170 : { XML_NAMESPACE_TEXT, XML_SENDER_POSTAL_CODE,
171 : XML_TOK_TEXT_SENDER_POSTAL_CODE },
172 : { XML_NAMESPACE_TEXT, XML_SENDER_COUNTRY, XML_TOK_TEXT_SENDER_COUNTRY },
173 : { XML_NAMESPACE_TEXT, XML_SENDER_STATE_OR_PROVINCE,
174 : XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE },
175 :
176 : // misc. document fields
177 : { XML_NAMESPACE_TEXT, XML_AUTHOR_NAME, XML_TOK_TEXT_AUTHOR_NAME },
178 : { XML_NAMESPACE_TEXT, XML_AUTHOR_INITIALS, XML_TOK_TEXT_AUTHOR_INITIALS },
179 : { XML_NAMESPACE_TEXT, XML_DATE, XML_TOK_TEXT_DATE },
180 : { XML_NAMESPACE_TEXT, XML_TIME, XML_TOK_TEXT_TIME },
181 : { XML_NAMESPACE_TEXT, XML_PAGE_NUMBER, XML_TOK_TEXT_PAGE_NUMBER },
182 : { XML_NAMESPACE_TEXT, XML_PAGE_CONTINUATION_STRING,
183 : XML_TOK_TEXT_PAGE_CONTINUATION_STRING },
184 :
185 : // variable fields
186 : { XML_NAMESPACE_TEXT, XML_VARIABLE_SET, XML_TOK_TEXT_VARIABLE_SET },
187 : { XML_NAMESPACE_TEXT, XML_VARIABLE_GET, XML_TOK_TEXT_VARIABLE_GET },
188 : { XML_NAMESPACE_TEXT, XML_VARIABLE_INPUT, XML_TOK_TEXT_VARIABLE_INPUT },
189 : { XML_NAMESPACE_TEXT, XML_USER_FIELD_GET, XML_TOK_TEXT_USER_FIELD_GET },
190 : { XML_NAMESPACE_TEXT, XML_USER_FIELD_INPUT,XML_TOK_TEXT_USER_FIELD_INPUT},
191 : { XML_NAMESPACE_TEXT, XML_SEQUENCE, XML_TOK_TEXT_SEQUENCE },
192 : { XML_NAMESPACE_TEXT, XML_EXPRESSION, XML_TOK_TEXT_EXPRESSION },
193 : { XML_NAMESPACE_TEXT, XML_TEXT_INPUT, XML_TOK_TEXT_TEXT_INPUT },
194 :
195 : // database fields
196 : { XML_NAMESPACE_TEXT, XML_DATABASE_DISPLAY,
197 : XML_TOK_TEXT_DATABASE_DISPLAY },
198 : { XML_NAMESPACE_TEXT, XML_DATABASE_NEXT,
199 : XML_TOK_TEXT_DATABASE_NEXT },
200 : { XML_NAMESPACE_TEXT, XML_DATABASE_ROW_SELECT,
201 : XML_TOK_TEXT_DATABASE_SELECT },
202 : { XML_NAMESPACE_TEXT, XML_DATABASE_ROW_NUMBER,
203 : XML_TOK_TEXT_DATABASE_ROW_NUMBER },
204 : { XML_NAMESPACE_TEXT, XML_DATABASE_NAME, XML_TOK_TEXT_DATABASE_NAME },
205 :
206 : // docinfo fields
207 : { XML_NAMESPACE_TEXT, XML_INITIAL_CREATOR,
208 : XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR },
209 : { XML_NAMESPACE_TEXT, XML_DESCRIPTION, XML_TOK_TEXT_DOCUMENT_DESCRIPTION},
210 : { XML_NAMESPACE_TEXT, XML_PRINTED_BY, XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR},
211 : { XML_NAMESPACE_TEXT, XML_TITLE, XML_TOK_TEXT_DOCUMENT_TITLE },
212 : { XML_NAMESPACE_TEXT, XML_SUBJECT, XML_TOK_TEXT_DOCUMENT_SUBJECT },
213 : { XML_NAMESPACE_TEXT, XML_KEYWORDS, XML_TOK_TEXT_DOCUMENT_KEYWORDS },
214 : { XML_NAMESPACE_TEXT, XML_CREATOR, XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR },
215 : { XML_NAMESPACE_TEXT, XML_EDITING_CYCLES,
216 : XML_TOK_TEXT_DOCUMENT_REVISION },
217 : { XML_NAMESPACE_TEXT, XML_CREATION_DATE,
218 : XML_TOK_TEXT_DOCUMENT_CREATION_DATE },
219 : { XML_NAMESPACE_TEXT, XML_CREATION_TIME,
220 : XML_TOK_TEXT_DOCUMENT_CREATION_TIME },
221 : { XML_NAMESPACE_TEXT, XML_PRINT_DATE, XML_TOK_TEXT_DOCUMENT_PRINT_DATE },
222 : { XML_NAMESPACE_TEXT, XML_PRINT_TIME, XML_TOK_TEXT_DOCUMENT_PRINT_TIME },
223 : { XML_NAMESPACE_TEXT, XML_MODIFICATION_DATE,
224 : XML_TOK_TEXT_DOCUMENT_SAVE_DATE },
225 : { XML_NAMESPACE_TEXT, XML_MODIFICATION_TIME,
226 : XML_TOK_TEXT_DOCUMENT_SAVE_TIME },
227 : { XML_NAMESPACE_TEXT, XML_EDITING_DURATION,
228 : XML_TOK_TEXT_DOCUMENT_EDIT_DURATION },
229 : { XML_NAMESPACE_TEXT, XML_USER_DEFINED,
230 : XML_TOK_TEXT_DOCUMENT_USER_DEFINED },
231 :
232 : // misc fields
233 : { XML_NAMESPACE_TEXT, XML_PLACEHOLDER, XML_TOK_TEXT_PLACEHOLDER },
234 : { XML_NAMESPACE_TEXT, XML_HIDDEN_TEXT, XML_TOK_TEXT_HIDDEN_TEXT },
235 : { XML_NAMESPACE_TEXT, XML_HIDDEN_PARAGRAPH,
236 : XML_TOK_TEXT_HIDDEN_PARAGRAPH },
237 : { XML_NAMESPACE_TEXT, XML_CONDITIONAL_TEXT,
238 : XML_TOK_TEXT_CONDITIONAL_TEXT },
239 : { XML_NAMESPACE_TEXT, XML_FILE_NAME, XML_TOK_TEXT_FILENAME },
240 : { XML_NAMESPACE_TEXT, XML_CHAPTER, XML_TOK_TEXT_CHAPTER },
241 : { XML_NAMESPACE_TEXT, XML_TEMPLATE_NAME, XML_TOK_TEXT_TEMPLATENAME },
242 : { XML_NAMESPACE_TEXT, XML_PARAGRAPH_COUNT, XML_TOK_TEXT_PARAGRAPH_COUNT },
243 : { XML_NAMESPACE_TEXT, XML_WORD_COUNT, XML_TOK_TEXT_WORD_COUNT },
244 : { XML_NAMESPACE_TEXT, XML_TABLE_COUNT, XML_TOK_TEXT_TABLE_COUNT },
245 : { XML_NAMESPACE_TEXT, XML_CHARACTER_COUNT, XML_TOK_TEXT_CHARACTER_COUNT },
246 : { XML_NAMESPACE_TEXT, XML_IMAGE_COUNT, XML_TOK_TEXT_IMAGE_COUNT },
247 : { XML_NAMESPACE_TEXT, XML_OBJECT_COUNT, XML_TOK_TEXT_OBJECT_COUNT },
248 : { XML_NAMESPACE_TEXT, XML_PAGE_COUNT, XML_TOK_TEXT_PAGE_COUNT },
249 : { XML_NAMESPACE_TEXT, XML_PAGE_VARIABLE_GET, XML_TOK_TEXT_GET_PAGE_VAR },
250 : { XML_NAMESPACE_TEXT, XML_PAGE_VARIABLE_SET, XML_TOK_TEXT_SET_PAGE_VAR },
251 : { XML_NAMESPACE_TEXT, XML_EXECUTE_MACRO, XML_TOK_TEXT_MACRO },
252 : { XML_NAMESPACE_TEXT, XML_DDE_CONNECTION, XML_TOK_TEXT_DDE },
253 : { XML_NAMESPACE_TEXT, XML_REFERENCE_REF, XML_TOK_TEXT_REFERENCE_REF },
254 : { XML_NAMESPACE_TEXT, XML_BOOKMARK_REF, XML_TOK_TEXT_BOOKMARK_REF },
255 : { XML_NAMESPACE_TEXT, XML_SEQUENCE_REF, XML_TOK_TEXT_SEQUENCE_REF },
256 : { XML_NAMESPACE_TEXT, XML_NOTE_REF, XML_TOK_TEXT_NOTE_REF },
257 : { XML_NAMESPACE_TEXT, XML_BIBLIOGRAPHY_MARK,
258 : XML_TOK_TEXT_BIBLIOGRAPHY_MARK },
259 : { XML_NAMESPACE_OFFICE, XML_ANNOTATION, XML_TOK_TEXT_ANNOTATION },
260 : { XML_NAMESPACE_OFFICE, XML_ANNOTATION_END, XML_TOK_TEXT_ANNOTATION_END },
261 : { XML_NAMESPACE_TEXT, XML_SCRIPT, XML_TOK_TEXT_SCRIPT },
262 : { XML_NAMESPACE_TEXT, XML_TABLE_FORMULA, XML_TOK_TEXT_TABLE_FORMULA },
263 : { XML_NAMESPACE_TEXT, XML_DROPDOWN, XML_TOK_TEXT_DROPDOWN },
264 :
265 : // Calc fields
266 : { XML_NAMESPACE_TEXT, XML_SHEET_NAME, XML_TOK_TEXT_SHEET_NAME },
267 :
268 : // draw fields
269 : { XML_NAMESPACE_TEXT, XML_MEASURE, XML_TOK_TEXT_MEASURE },
270 :
271 : // RDF metadata
272 : { XML_NAMESPACE_TEXT, XML_META, XML_TOK_TEXT_META },
273 : { XML_NAMESPACE_TEXT, XML_META_FIELD, XML_TOK_TEXT_META_FIELD },
274 :
275 : // redlining (aka change tracking)
276 : { XML_NAMESPACE_TEXT, XML_CHANGE_START, XML_TOK_TEXTP_CHANGE_START },
277 : { XML_NAMESPACE_TEXT, XML_CHANGE_END , XML_TOK_TEXTP_CHANGE_END },
278 : { XML_NAMESPACE_TEXT, XML_CHANGE, XML_TOK_TEXTP_CHANGE },
279 :
280 : { XML_NAMESPACE_PRESENTATION, XML_HEADER, XML_TOK_DRAW_HEADER },
281 : { XML_NAMESPACE_PRESENTATION, XML_FOOTER, XML_TOK_DRAW_FOOTER },
282 : { XML_NAMESPACE_PRESENTATION, XML_DATE_TIME, XML_TOK_DRAW_DATE_TIME },
283 : { XML_NAMESPACE_TEXT, XML_PAGE_CONTINUATION, XML_TOK_TEXT_PAGE_CONTINUATION },
284 :
285 : { XML_NAMESPACE_FIELD, XML_FIELDMARK, XML_TOK_TEXT_FIELDMARK },
286 : { XML_NAMESPACE_FIELD, XML_FIELDMARK_START, XML_TOK_TEXT_FIELDMARK_START },
287 : { XML_NAMESPACE_FIELD, XML_FIELDMARK_END, XML_TOK_TEXT_FIELDMARK_END },
288 :
289 :
290 : XML_TOKEN_MAP_END
291 : };
292 :
293 : static SvXMLTokenMapEntry aTextPAttrTokenMap[] =
294 : {
295 : { XML_NAMESPACE_XML , XML_ID, XML_TOK_TEXT_P_XMLID },
296 : { XML_NAMESPACE_XHTML, XML_ABOUT, XML_TOK_TEXT_P_ABOUT },
297 : { XML_NAMESPACE_XHTML, XML_PROPERTY, XML_TOK_TEXT_P_PROPERTY },
298 : { XML_NAMESPACE_XHTML, XML_CONTENT, XML_TOK_TEXT_P_CONTENT },
299 : { XML_NAMESPACE_XHTML, XML_DATATYPE, XML_TOK_TEXT_P_DATATYPE },
300 : { XML_NAMESPACE_TEXT, XML_ID, XML_TOK_TEXT_P_TEXTID },
301 : { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_P_STYLE_NAME },
302 : { XML_NAMESPACE_TEXT, XML_COND_STYLE_NAME,
303 : XML_TOK_TEXT_P_COND_STYLE_NAME },
304 : { XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL,XML_TOK_TEXT_P_LEVEL },
305 : { XML_NAMESPACE_TEXT, XML_IS_LIST_HEADER,XML_TOK_TEXT_P_IS_LIST_HEADER },
306 : { XML_NAMESPACE_TEXT, XML_RESTART_NUMBERING,XML_TOK_TEXT_P_RESTART_NUMBERING },
307 : { XML_NAMESPACE_TEXT, XML_START_VALUE,XML_TOK_TEXT_P_START_VALUE },
308 : XML_TOKEN_MAP_END
309 : };
310 :
311 : static SvXMLTokenMapEntry aTextNumberedParagraphAttrTokenMap[] =
312 : {
313 : { XML_NAMESPACE_XML , XML_ID, XML_TOK_TEXT_NUMBERED_PARAGRAPH_XMLID },
314 : { XML_NAMESPACE_TEXT, XML_LIST_ID,
315 : XML_TOK_TEXT_NUMBERED_PARAGRAPH_LIST_ID },
316 : { XML_NAMESPACE_TEXT, XML_LEVEL, XML_TOK_TEXT_NUMBERED_PARAGRAPH_LEVEL },
317 : { XML_NAMESPACE_TEXT, XML_STYLE_NAME,
318 : XML_TOK_TEXT_NUMBERED_PARAGRAPH_STYLE_NAME },
319 : { XML_NAMESPACE_TEXT, XML_CONTINUE_NUMBERING,
320 : XML_TOK_TEXT_NUMBERED_PARAGRAPH_CONTINUE_NUMBERING },
321 : { XML_NAMESPACE_TEXT, XML_START_VALUE,
322 : XML_TOK_TEXT_NUMBERED_PARAGRAPH_START_VALUE },
323 : XML_TOKEN_MAP_END
324 : };
325 :
326 : static SvXMLTokenMapEntry aTextListBlockAttrTokenMap[] =
327 : {
328 : { XML_NAMESPACE_XML , XML_ID, XML_TOK_TEXT_LIST_BLOCK_XMLID },
329 : { XML_NAMESPACE_TEXT, XML_STYLE_NAME,
330 : XML_TOK_TEXT_LIST_BLOCK_STYLE_NAME },
331 : { XML_NAMESPACE_TEXT, XML_CONTINUE_NUMBERING,
332 : XML_TOK_TEXT_LIST_BLOCK_CONTINUE_NUMBERING },
333 : { XML_NAMESPACE_TEXT, XML_CONTINUE_LIST,
334 : XML_TOK_TEXT_LIST_BLOCK_CONTINUE_LIST },
335 : XML_TOKEN_MAP_END
336 : };
337 :
338 : static SvXMLTokenMapEntry aTextListBlockElemTokenMap[] =
339 : {
340 : { XML_NAMESPACE_TEXT, XML_LIST_HEADER, XML_TOK_TEXT_LIST_HEADER },
341 : { XML_NAMESPACE_TEXT, XML_LIST_ITEM, XML_TOK_TEXT_LIST_ITEM },
342 : XML_TOKEN_MAP_END
343 : };
344 :
345 : static SvXMLTokenMapEntry aTextFrameAttrTokenMap[] =
346 : {
347 : { XML_NAMESPACE_DRAW, XML_STYLE_NAME, XML_TOK_TEXT_FRAME_STYLE_NAME },
348 : { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_TEXT_FRAME_NAME },
349 : { XML_NAMESPACE_TEXT, XML_ANCHOR_TYPE, XML_TOK_TEXT_FRAME_ANCHOR_TYPE },
350 : { XML_NAMESPACE_TEXT, XML_ANCHOR_PAGE_NUMBER, XML_TOK_TEXT_FRAME_ANCHOR_PAGE_NUMBER },
351 : { XML_NAMESPACE_SVG, XML_X, XML_TOK_TEXT_FRAME_X },
352 : { XML_NAMESPACE_SVG, XML_Y, XML_TOK_TEXT_FRAME_Y },
353 : { XML_NAMESPACE_SVG, XML_WIDTH, XML_TOK_TEXT_FRAME_WIDTH },
354 : { XML_NAMESPACE_FO, XML_MIN_WIDTH, XML_TOK_TEXT_FRAME_MIN_WIDTH },
355 : { XML_NAMESPACE_STYLE, XML_REL_WIDTH, XML_TOK_TEXT_FRAME_REL_WIDTH },
356 : { XML_NAMESPACE_SVG, XML_HEIGHT, XML_TOK_TEXT_FRAME_HEIGHT },
357 : { XML_NAMESPACE_FO, XML_MIN_HEIGHT, XML_TOK_TEXT_FRAME_MIN_HEIGHT },
358 : { XML_NAMESPACE_STYLE, XML_REL_HEIGHT, XML_TOK_TEXT_FRAME_REL_HEIGHT },
359 : { XML_NAMESPACE_DRAW, XML_CHAIN_NEXT_NAME, XML_TOK_TEXT_FRAME_NEXT_CHAIN_NAME },
360 : { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_FRAME_HREF },
361 : { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_TEXT_FRAME_FILTER_NAME },
362 : { XML_NAMESPACE_DRAW, XML_ZINDEX, XML_TOK_TEXT_FRAME_Z_INDEX },
363 : { XML_NAMESPACE_SVG, XML_TRANSFORM, XML_TOK_TEXT_FRAME_TRANSFORM },
364 : { XML_NAMESPACE_DRAW, XML_CLASS_ID, XML_TOK_TEXT_FRAME_CLASS_ID },
365 : { XML_NAMESPACE_DRAW, XML_CODE, XML_TOK_TEXT_FRAME_CODE },
366 : { XML_NAMESPACE_DRAW, XML_OBJECT, XML_TOK_TEXT_FRAME_OBJECT },
367 : { XML_NAMESPACE_DRAW, XML_ARCHIVE, XML_TOK_TEXT_FRAME_ARCHIVE },
368 : { XML_NAMESPACE_DRAW, XML_MAY_SCRIPT, XML_TOK_TEXT_FRAME_MAY_SCRIPT },
369 : { XML_NAMESPACE_DRAW, XML_MIME_TYPE, XML_TOK_TEXT_FRAME_MIME_TYPE },
370 : { XML_NAMESPACE_DRAW, XML_APPLET_NAME, XML_TOK_TEXT_FRAME_APPLET_NAME },
371 : { XML_NAMESPACE_DRAW, XML_FRAME_NAME, XML_TOK_TEXT_FRAME_FRAME_NAME },
372 : { XML_NAMESPACE_DRAW, XML_NOTIFY_ON_UPDATE_OF_RANGES, XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE },
373 : { XML_NAMESPACE_DRAW, XML_NOTIFY_ON_UPDATE_OF_TABLE, XML_TOK_TEXT_FRAME_NOTIFY_ON_UPDATE },
374 : XML_TOKEN_MAP_END
375 : };
376 :
377 : static SvXMLTokenMapEntry aTextContourAttrTokenMap[] =
378 : {
379 : { XML_NAMESPACE_SVG, XML_WIDTH, XML_TOK_TEXT_CONTOUR_WIDTH },
380 : { XML_NAMESPACE_SVG, XML_HEIGHT, XML_TOK_TEXT_CONTOUR_HEIGHT },
381 : { XML_NAMESPACE_SVG, XML_VIEWBOX, XML_TOK_TEXT_CONTOUR_VIEWBOX },
382 : { XML_NAMESPACE_SVG, XML_D, XML_TOK_TEXT_CONTOUR_D },
383 : { XML_NAMESPACE_DRAW,XML_POINTS, XML_TOK_TEXT_CONTOUR_POINTS },
384 : { XML_NAMESPACE_DRAW,XML_RECREATE_ON_EDIT, XML_TOK_TEXT_CONTOUR_AUTO },
385 : XML_TOKEN_MAP_END
386 : };
387 :
388 : static SvXMLTokenMapEntry aTextHyperlinkAttrTokenMap[] =
389 : {
390 : { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_HYPERLINK_HREF },
391 : { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_TEXT_HYPERLINK_NAME },
392 : { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_TEXT_HYPERLINK_SHOW },
393 : { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME, XML_TOK_TEXT_HYPERLINK_TARGET_FRAME },
394 : { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_HYPERLINK_STYLE_NAME },
395 : { XML_NAMESPACE_TEXT, XML_VISITED_STYLE_NAME, XML_TOK_TEXT_HYPERLINK_VIS_STYLE_NAME },
396 : { XML_NAMESPACE_OFFICE, XML_SERVER_MAP, XML_TOK_TEXT_HYPERLINK_SERVER_MAP },
397 : XML_TOKEN_MAP_END
398 : };
399 :
400 : static SvXMLTokenMapEntry aTextMasterPageElemTokenMap[] =
401 : {
402 : { XML_NAMESPACE_STYLE, XML_HEADER, XML_TOK_TEXT_MP_HEADER },
403 : { XML_NAMESPACE_STYLE, XML_FOOTER, XML_TOK_TEXT_MP_FOOTER },
404 : { XML_NAMESPACE_STYLE, XML_HEADER_LEFT, XML_TOK_TEXT_MP_HEADER_LEFT },
405 : { XML_NAMESPACE_STYLE, XML_FOOTER_LEFT, XML_TOK_TEXT_MP_FOOTER_LEFT },
406 : { XML_NAMESPACE_STYLE, XML_HEADER_FIRST, XML_TOK_TEXT_MP_HEADER_FIRST },
407 : { XML_NAMESPACE_STYLE, XML_FOOTER_FIRST, XML_TOK_TEXT_MP_FOOTER_FIRST },
408 :
409 : XML_TOKEN_MAP_END
410 : };
411 :
412 : static SvXMLTokenMapEntry aTextFieldAttrTokenMap[] =
413 : {
414 : { XML_NAMESPACE_TEXT, XML_FIXED, XML_TOK_TEXTFIELD_FIXED },
415 : { XML_NAMESPACE_TEXT, XML_DESCRIPTION, XML_TOK_TEXTFIELD_DESCRIPTION },
416 : { XML_NAMESPACE_TEXT, XML_HELP, XML_TOK_TEXTFIELD_HELP },
417 : { XML_NAMESPACE_TEXT, XML_HINT, XML_TOK_TEXTFIELD_HINT },
418 : { XML_NAMESPACE_TEXT, XML_PLACEHOLDER_TYPE,
419 : XML_TOK_TEXTFIELD_PLACEHOLDER_TYPE },
420 : { XML_NAMESPACE_TEXT, XML_NAME, XML_TOK_TEXTFIELD_NAME },
421 : { XML_NAMESPACE_TEXT, XML_FORMULA, XML_TOK_TEXTFIELD_FORMULA },
422 : { XML_NAMESPACE_STYLE, XML_NUM_FORMAT, XML_TOK_TEXTFIELD_NUM_FORMAT },
423 : { XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC,
424 : XML_TOK_TEXTFIELD_NUM_LETTER_SYNC },
425 : { XML_NAMESPACE_TEXT, XML_DISPLAY_FORMULA,
426 : XML_TOK_TEXTFIELD_DISPLAY_FORMULA },
427 : { XML_NAMESPACE_TEXT, XML_VALUE_TYPE, XML_TOK_TEXTFIELD_VALUE_TYPE }, // #i32362#: src680m48++ saves text:value-type
428 : { XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_TOK_TEXTFIELD_VALUE_TYPE },
429 : { XML_NAMESPACE_TEXT, XML_VALUE, XML_TOK_TEXTFIELD_VALUE },
430 : { XML_NAMESPACE_OFFICE, XML_VALUE, XML_TOK_TEXTFIELD_VALUE },
431 : { XML_NAMESPACE_TEXT, XML_STRING_VALUE, XML_TOK_TEXTFIELD_STRING_VALUE },
432 : { XML_NAMESPACE_OFFICE, XML_STRING_VALUE, XML_TOK_TEXTFIELD_STRING_VALUE },
433 : { XML_NAMESPACE_TEXT, XML_DATE_VALUE, XML_TOK_TEXTFIELD_DATE_VALUE },
434 : { XML_NAMESPACE_OFFICE, XML_DATE_VALUE, XML_TOK_TEXTFIELD_DATE_VALUE },
435 : { XML_NAMESPACE_TEXT, XML_TIME_VALUE, XML_TOK_TEXTFIELD_TIME_VALUE },
436 : { XML_NAMESPACE_OFFICE, XML_TIME_VALUE, XML_TOK_TEXTFIELD_TIME_VALUE },
437 : { XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TOK_TEXTFIELD_BOOL_VALUE},
438 : { XML_NAMESPACE_OFFICE, XML_CURRENCY, XML_TOK_TEXTFIELD_CURRENCY},
439 : { XML_NAMESPACE_STYLE, XML_DATA_STYLE_NAME,
440 : XML_TOK_TEXTFIELD_DATA_STYLE_NAME },
441 : { XML_NAMESPACE_TEXT, XML_DISPLAY_OUTLINE_LEVEL,
442 : XML_TOK_TEXTFIELD_NUMBERING_LEVEL },
443 : { XML_NAMESPACE_TEXT, XML_SEPARATION_CHARACTER,
444 : XML_TOK_TEXTFIELD_NUMBERING_SEPARATOR },
445 : { XML_NAMESPACE_TEXT, XML_DISPLAY, XML_TOK_TEXTFIELD_DISPLAY },
446 : { XML_NAMESPACE_TEXT, XML_TIME_ADJUST, XML_TOK_TEXTFIELD_TIME_ADJUST },
447 : { XML_NAMESPACE_TEXT, XML_DATE_ADJUST, XML_TOK_TEXTFIELD_DATE_ADJUST },
448 : { XML_NAMESPACE_TEXT, XML_PAGE_ADJUST, XML_TOK_TEXTFIELD_PAGE_ADJUST },
449 : { XML_NAMESPACE_TEXT, XML_SELECT_PAGE, XML_TOK_TEXTFIELD_SELECT_PAGE },
450 : { XML_NAMESPACE_TEXT, XML_DATABASE_NAME, XML_TOK_TEXTFIELD_DATABASE_NAME},
451 : { XML_NAMESPACE_TEXT, XML_TABLE_NAME, XML_TOK_TEXTFIELD_TABLE_NAME },
452 : { XML_NAMESPACE_TEXT, XML_COLUMN_NAME, XML_TOK_TEXTFIELD_COLUMN_NAME },
453 : { XML_NAMESPACE_TEXT, XML_ROW_NUMBER, XML_TOK_TEXTFIELD_ROW_NUMBER },
454 : { XML_NAMESPACE_TEXT, XML_CONDITION, XML_TOK_TEXTFIELD_CONDITION },
455 : { XML_NAMESPACE_TEXT, XML_STRING_VALUE_IF_TRUE,
456 : XML_TOK_TEXTFIELD_STRING_VALUE_IF_TRUE },
457 : { XML_NAMESPACE_TEXT, XML_STRING_VALUE_IF_FALSE,
458 : XML_TOK_TEXTFIELD_STRING_VALUE_IF_FALSE },
459 : { XML_NAMESPACE_TEXT, XML_EDITING_CYCLES, XML_TOK_TEXTFIELD_REVISION },
460 : { XML_NAMESPACE_TEXT, XML_OUTLINE_LEVEL, XML_TOK_TEXTFIELD_OUTLINE_LEVEL},
461 : { XML_NAMESPACE_TEXT, XML_ACTIVE, XML_TOK_TEXTFIELD_ACTIVE },
462 : { XML_NAMESPACE_TEXT, XML_NOTE_CLASS, XML_TOK_TEXTFIELD_NOTE_CLASS },
463 : { XML_NAMESPACE_TEXT, XML_REFERENCE_FORMAT,
464 : XML_TOK_TEXTFIELD_REFERENCE_FORMAT },
465 : { XML_NAMESPACE_TEXT, XML_REF_NAME, XML_TOK_TEXTFIELD_REF_NAME },
466 : { XML_NAMESPACE_TEXT, XML_CONNECTION_NAME,
467 : XML_TOK_TEXTFIELD_CONNECTION_NAME },
468 : { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXTFIELD_HREF },
469 : { XML_NAMESPACE_OFFICE, XML_TARGET_FRAME_NAME,
470 : XML_TOK_TEXTFIELD_TARGET_FRAME },
471 : { XML_NAMESPACE_TEXT, XML_ANNOTATION, XML_TOK_TEXTFIELD_ANNOTATION },
472 : { XML_NAMESPACE_SCRIPT, XML_LANGUAGE, XML_TOK_TEXTFIELD_LANGUAGE },
473 : { XML_NAMESPACE_TEXT, XML_KIND, XML_TOK_TEXTFIELD_MEASURE_KIND },
474 : { XML_NAMESPACE_TEXT, XML_IS_HIDDEN, XML_TOK_TEXTFIELD_IS_HIDDEN },
475 : { XML_NAMESPACE_TEXT, XML_CURRENT_VALUE,
476 : XML_TOK_TEXTFIELD_CURRENT_VALUE },
477 : { XML_NAMESPACE_TEXT, XML_TABLE_TYPE, XML_TOK_TEXTFIELD_TABLE_TYPE },
478 : { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_TEXT_NAME },
479 :
480 : XML_TOKEN_MAP_END
481 : };
482 :
483 :
484 : // maximum allowed length of combined characters field
485 : #define MAX_COMBINED_CHARACTERS 6
486 :
487 402 : struct SAL_DLLPRIVATE XMLTextImportHelper::Impl
488 : : private ::boost::noncopyable
489 : {
490 : boost::scoped_ptr<SvXMLTokenMap> m_pTextElemTokenMap;
491 : boost::scoped_ptr<SvXMLTokenMap> m_pTextPElemTokenMap;
492 : boost::scoped_ptr<SvXMLTokenMap> m_pTextPAttrTokenMap;
493 : boost::scoped_ptr<SvXMLTokenMap> m_pTextFieldAttrTokenMap;
494 : boost::scoped_ptr<SvXMLTokenMap> m_pTextNumberedParagraphAttrTokenMap;
495 : boost::scoped_ptr<SvXMLTokenMap> m_pTextListBlockAttrTokenMap;
496 : boost::scoped_ptr<SvXMLTokenMap> m_pTextListBlockElemTokenMap;
497 : boost::scoped_ptr<SvXMLTokenMap> m_pTextFrameAttrTokenMap;
498 : boost::scoped_ptr<SvXMLTokenMap> m_pTextContourAttrTokenMap;
499 : boost::scoped_ptr<SvXMLTokenMap> m_pTextHyperlinkAttrTokenMap;
500 : boost::scoped_ptr<SvXMLTokenMap> m_pTextMasterPageElemTokenMap;
501 : boost::scoped_ptr< std::vector<OUString> > m_pPrevFrmNames;
502 : boost::scoped_ptr< std::vector<OUString> > m_pNextFrmNames;
503 : boost::scoped_ptr<XMLTextListsHelper> m_pTextListsHelper;
504 :
505 : SvXMLImportContextRef m_xAutoStyles;
506 : SvXMLImportContextRef m_xFontDecls;
507 :
508 : UniReference< SvXMLImportPropertyMapper > m_xParaImpPrMap;
509 : UniReference< SvXMLImportPropertyMapper > m_xTextImpPrMap;
510 : UniReference< SvXMLImportPropertyMapper > m_xFrameImpPrMap;
511 : UniReference< SvXMLImportPropertyMapper > m_xSectionImpPrMap;
512 : UniReference< SvXMLImportPropertyMapper > m_xRubyImpPrMap;
513 :
514 : boost::scoped_ptr<SvI18NMap> m_pRenameMap;
515 :
516 : /* Change and extend data structure:
517 : - data structure contains candidates of paragraph styles, which
518 : will be assigned to the outline style
519 : - data structure contains more than one candidate for each list level
520 : of the outline style (#i69629#)
521 : */
522 : ::boost::scoped_array< ::std::vector< OUString > >
523 : m_pOutlineStylesCandidates;
524 :
525 : // start range, xml:id, RDFa stuff
526 : typedef ::boost::tuple<
527 : uno::Reference<text::XTextRange>, OUString,
528 : ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > >
529 : BookmarkMapEntry_t;
530 : /// start ranges for open bookmarks
531 : ::std::map< OUString, BookmarkMapEntry_t,
532 : ::comphelper::UStringLess> m_BookmarkStartRanges;
533 :
534 : typedef ::std::vector< OUString > BookmarkVector_t;
535 : BookmarkVector_t m_BookmarkVector;
536 :
537 : /// name of the last 'open' redline that started between paragraphs
538 : OUString m_sOpenRedlineIdentifier;
539 :
540 : uno::Reference<text::XText> m_xText;
541 : uno::Reference<text::XTextCursor> m_xCursor;
542 : uno::Reference<text::XTextRange> m_xCursorAsRange;
543 : uno::Reference<container::XNameContainer> m_xParaStyles;
544 : uno::Reference<container::XNameContainer> m_xTextStyles;
545 : uno::Reference<container::XNameContainer> m_xNumStyles;
546 : uno::Reference<container::XNameContainer> m_xFrameStyles;
547 : uno::Reference<container::XNameContainer> m_xPageStyles;
548 : uno::Reference<container::XIndexReplace> m_xChapterNumbering;
549 : uno::Reference<container::XNameAccess> m_xTextFrames;
550 : uno::Reference<container::XNameAccess> m_xGraphics;
551 : uno::Reference<container::XNameAccess> m_xObjects;
552 : uno::Reference<lang::XMultiServiceFactory> m_xServiceFactory;
553 :
554 : SvXMLImport & m_rSvXMLImport;
555 :
556 : bool m_bInsertMode : 1;
557 : bool m_bStylesOnlyMode : 1;
558 : bool m_bBlockMode : 1;
559 : bool m_bProgress : 1;
560 : bool m_bOrganizerMode : 1;
561 : bool m_bBodyContentStarted : 1;
562 :
563 : // #107848#
564 : /// Are we inside a <text:deletion> element (deleted redline section)
565 : bool m_bInsideDeleteContext : 1;
566 :
567 : typedef ::std::pair< OUString, OUString> field_name_type_t;
568 : typedef ::std::pair< OUString, OUString > field_param_t;
569 : typedef ::std::vector< field_param_t > field_params_t;
570 : typedef ::std::pair< field_name_type_t, field_params_t > field_stack_item_t;
571 : typedef ::std::stack< field_stack_item_t > field_stack_t;
572 :
573 : field_stack_t m_FieldStack;
574 :
575 : OUString m_sCellParaStyleDefault;
576 :
577 402 : Impl( uno::Reference<frame::XModel> const& rModel,
578 : SvXMLImport & rImport,
579 : bool const bInsertMode, bool const bStylesOnlyMode,
580 : bool const bProgress, bool const bBlockMode,
581 : bool const bOrganizerMode)
582 : : m_pTextElemTokenMap( 0 )
583 : , m_pTextPElemTokenMap( 0 )
584 : , m_pTextPAttrTokenMap( 0 )
585 : , m_pTextFieldAttrTokenMap( 0 )
586 : , m_pTextNumberedParagraphAttrTokenMap( 0 )
587 : , m_pTextListBlockAttrTokenMap( 0 )
588 : , m_pTextListBlockElemTokenMap( 0 )
589 : , m_pTextFrameAttrTokenMap( 0 )
590 : , m_pTextContourAttrTokenMap( 0 )
591 : , m_pTextHyperlinkAttrTokenMap( 0 )
592 : , m_pTextMasterPageElemTokenMap( 0 )
593 : , m_pPrevFrmNames( 0 )
594 : , m_pNextFrmNames( 0 )
595 0 : , m_pTextListsHelper( new XMLTextListsHelper() )
596 : , m_pRenameMap( 0 )
597 : // XML import: reconstrution of assignment of paragraph style to outline levels (#i69629#)
598 : , m_pOutlineStylesCandidates( 0 )
599 : , m_xServiceFactory( rModel, UNO_QUERY )
600 : , m_rSvXMLImport( rImport )
601 : , m_bInsertMode( bInsertMode )
602 : , m_bStylesOnlyMode( bStylesOnlyMode )
603 : , m_bBlockMode( bBlockMode )
604 : , m_bProgress( bProgress )
605 : , m_bOrganizerMode( bOrganizerMode )
606 : , m_bBodyContentStarted( true )
607 402 : , m_bInsideDeleteContext( false )
608 : {
609 402 : }
610 :
611 6 : void InitOutlineStylesCandidates()
612 : {
613 6 : if (!m_pOutlineStylesCandidates)
614 : {
615 4 : size_t const size(m_xChapterNumbering->getCount());
616 : m_pOutlineStylesCandidates.reset(
617 4 : new ::std::vector< OUString >[size] );
618 : }
619 6 : }
620 :
621 : };
622 :
623 :
624 3616 : uno::Reference< text::XText > & XMLTextImportHelper::GetText()
625 : {
626 3616 : return m_pImpl->m_xText;
627 : }
628 :
629 2147 : uno::Reference< text::XTextCursor > & XMLTextImportHelper::GetCursor()
630 : {
631 2147 : return m_pImpl->m_xCursor;
632 : }
633 :
634 4952 : uno::Reference< text::XTextRange > & XMLTextImportHelper::GetCursorAsRange()
635 : {
636 4952 : return m_pImpl->m_xCursorAsRange;
637 : }
638 :
639 321 : bool XMLTextImportHelper::IsInsertMode() const
640 : {
641 321 : return m_pImpl->m_bInsertMode;
642 : }
643 :
644 30 : bool XMLTextImportHelper::IsStylesOnlyMode() const
645 : {
646 30 : return m_pImpl->m_bStylesOnlyMode;
647 : }
648 :
649 30 : bool XMLTextImportHelper::IsBlockMode() const
650 : {
651 30 : return m_pImpl->m_bBlockMode;
652 : }
653 :
654 30 : bool XMLTextImportHelper::IsOrganizerMode() const
655 : {
656 30 : return m_pImpl->m_bOrganizerMode;
657 : }
658 :
659 32 : bool XMLTextImportHelper::IsProgress() const
660 : {
661 32 : return m_pImpl->m_bProgress;
662 : }
663 :
664 : uno::Reference<container::XNameContainer> const&
665 112 : XMLTextImportHelper::GetParaStyles() const
666 : {
667 112 : return m_pImpl->m_xParaStyles;
668 : }
669 :
670 : uno::Reference<container::XNameContainer> const&
671 0 : XMLTextImportHelper::GetTextStyles() const
672 : {
673 0 : return m_pImpl->m_xTextStyles;
674 : }
675 :
676 : uno::Reference<container::XNameContainer> const&
677 47 : XMLTextImportHelper::GetNumberingStyles() const
678 : {
679 47 : return m_pImpl->m_xNumStyles;
680 : }
681 :
682 : uno::Reference<container::XNameContainer> const&
683 61 : XMLTextImportHelper::GetFrameStyles() const
684 : {
685 61 : return m_pImpl->m_xFrameStyles;
686 : }
687 :
688 : uno::Reference<container::XNameContainer> const&
689 472 : XMLTextImportHelper::GetPageStyles() const
690 : {
691 472 : return m_pImpl->m_xPageStyles;
692 : }
693 :
694 : uno::Reference<container::XIndexReplace> const&
695 255 : XMLTextImportHelper::GetChapterNumbering() const
696 : {
697 255 : return m_pImpl->m_xChapterNumbering;
698 : }
699 :
700 : UniReference< SvXMLImportPropertyMapper > const&
701 108 : XMLTextImportHelper::GetParaImportPropertySetMapper() const
702 : {
703 108 : return m_pImpl->m_xParaImpPrMap;
704 : }
705 :
706 : UniReference< SvXMLImportPropertyMapper > const&
707 63 : XMLTextImportHelper::GetTextImportPropertySetMapper() const
708 : {
709 63 : return m_pImpl->m_xTextImpPrMap;
710 : }
711 :
712 : UniReference< SvXMLImportPropertyMapper > const&
713 44 : XMLTextImportHelper::GetSectionImportPropertySetMapper() const
714 : {
715 44 : return m_pImpl->m_xSectionImpPrMap;
716 : }
717 :
718 : UniReference< SvXMLImportPropertyMapper > const&
719 19 : XMLTextImportHelper::GetRubyImportPropertySetMapper() const
720 : {
721 19 : return m_pImpl->m_xRubyImpPrMap;
722 : }
723 :
724 0 : void XMLTextImportHelper::SetInsideDeleteContext(bool const bNew)
725 : {
726 0 : m_pImpl->m_bInsideDeleteContext = bNew;
727 0 : }
728 :
729 308 : bool XMLTextImportHelper::IsInsideDeleteContext() const
730 : {
731 308 : return m_pImpl->m_bInsideDeleteContext;
732 : }
733 :
734 106 : SvXMLImport & XMLTextImportHelper::GetXMLImport()
735 : {
736 106 : return m_pImpl->m_rSvXMLImport;
737 : }
738 :
739 1646 : XMLTextListsHelper & XMLTextImportHelper::GetTextListHelper()
740 : {
741 1646 : return *m_pImpl->m_pTextListsHelper;
742 : }
743 :
744 1229 : const SvXMLTokenMap& XMLTextImportHelper::GetTextElemTokenMap()
745 : {
746 1229 : if (!m_pImpl->m_pTextElemTokenMap.get())
747 : {
748 154 : m_pImpl->m_pTextElemTokenMap.reset(
749 308 : new SvXMLTokenMap( aTextElemTokenMap ));
750 : }
751 1229 : return *m_pImpl->m_pTextElemTokenMap;
752 : }
753 :
754 2884 : const SvXMLTokenMap& XMLTextImportHelper::GetTextPElemTokenMap()
755 : {
756 2884 : if (!m_pImpl->m_pTextPElemTokenMap.get())
757 : {
758 118 : m_pImpl->m_pTextPElemTokenMap.reset(
759 236 : new SvXMLTokenMap( aTextPElemTokenMap ));
760 : }
761 2884 : return *m_pImpl->m_pTextPElemTokenMap;
762 : }
763 :
764 1097 : const SvXMLTokenMap& XMLTextImportHelper::GetTextPAttrTokenMap()
765 : {
766 1097 : if (!m_pImpl->m_pTextPAttrTokenMap.get())
767 : {
768 154 : m_pImpl->m_pTextPAttrTokenMap.reset(
769 308 : new SvXMLTokenMap( aTextPAttrTokenMap ));
770 : }
771 1097 : return *m_pImpl->m_pTextPAttrTokenMap;
772 : }
773 :
774 60 : const SvXMLTokenMap& XMLTextImportHelper::GetTextFrameAttrTokenMap()
775 : {
776 60 : if (!m_pImpl->m_pTextFrameAttrTokenMap.get())
777 : {
778 21 : m_pImpl->m_pTextFrameAttrTokenMap.reset(
779 42 : new SvXMLTokenMap( aTextFrameAttrTokenMap ));
780 : }
781 60 : return *m_pImpl->m_pTextFrameAttrTokenMap;
782 : }
783 :
784 0 : const SvXMLTokenMap& XMLTextImportHelper::GetTextContourAttrTokenMap()
785 : {
786 0 : if (!m_pImpl->m_pTextContourAttrTokenMap.get())
787 : {
788 0 : m_pImpl->m_pTextContourAttrTokenMap.reset(
789 0 : new SvXMLTokenMap( aTextContourAttrTokenMap ));
790 : }
791 0 : return *m_pImpl->m_pTextContourAttrTokenMap;
792 : }
793 :
794 1 : const SvXMLTokenMap& XMLTextImportHelper::GetTextHyperlinkAttrTokenMap()
795 : {
796 1 : if (!m_pImpl->m_pTextHyperlinkAttrTokenMap.get())
797 : {
798 1 : m_pImpl->m_pTextHyperlinkAttrTokenMap.reset(
799 2 : new SvXMLTokenMap( aTextHyperlinkAttrTokenMap ));
800 : }
801 1 : return *m_pImpl->m_pTextHyperlinkAttrTokenMap;
802 : }
803 :
804 639 : const SvXMLTokenMap& XMLTextImportHelper::GetTextMasterPageElemTokenMap()
805 : {
806 639 : if (!m_pImpl->m_pTextMasterPageElemTokenMap.get())
807 : {
808 82 : m_pImpl->m_pTextMasterPageElemTokenMap.reset(
809 164 : new SvXMLTokenMap( aTextMasterPageElemTokenMap ));
810 : }
811 639 : return *m_pImpl->m_pTextMasterPageElemTokenMap;
812 : }
813 :
814 717 : const SvXMLTokenMap& XMLTextImportHelper::GetTextFieldAttrTokenMap()
815 : {
816 717 : if (!m_pImpl->m_pTextFieldAttrTokenMap.get())
817 : {
818 125 : m_pImpl->m_pTextFieldAttrTokenMap.reset(
819 250 : new SvXMLTokenMap( aTextFieldAttrTokenMap ));
820 : }
821 717 : return *m_pImpl->m_pTextFieldAttrTokenMap;
822 : }
823 :
824 :
825 : namespace
826 : {
827 0 : class FieldParamImporter
828 : {
829 : public:
830 : typedef pair<OUString,OUString> field_param_t;
831 : typedef vector<field_param_t> field_params_t;
832 0 : FieldParamImporter(const field_params_t* const pInParams, Reference<XNameContainer> xOutParams)
833 : : m_pInParams(pInParams)
834 0 : , m_xOutParams(xOutParams)
835 0 : { };
836 : void Import();
837 :
838 : private:
839 : const field_params_t* const m_pInParams;
840 : Reference<XNameContainer> m_xOutParams;
841 : };
842 :
843 0 : void FieldParamImporter::Import()
844 : {
845 0 : ::std::vector<OUString> vListEntries;
846 0 : ::std::map<OUString, Any> vOutParams;
847 0 : for(field_params_t::const_iterator pCurrent = m_pInParams->begin();
848 0 : pCurrent != m_pInParams->end();
849 : ++pCurrent)
850 : {
851 0 : if(pCurrent->first.equalsAscii(ODF_FORMDROPDOWN_RESULT))
852 : {
853 : // sal_Int32
854 0 : vOutParams[pCurrent->first] = makeAny(pCurrent->second.toInt32());
855 : }
856 0 : else if(pCurrent->first.equalsAscii(ODF_FORMCHECKBOX_RESULT))
857 : {
858 : // bool
859 0 : vOutParams[pCurrent->first] = makeAny(pCurrent->second.toBoolean());
860 : }
861 0 : else if(pCurrent->first.equalsAscii(ODF_FORMDROPDOWN_LISTENTRY))
862 : {
863 : // sequence
864 0 : vListEntries.push_back(pCurrent->second);
865 : }
866 : else
867 0 : vOutParams[pCurrent->first] = makeAny(pCurrent->second);
868 : }
869 0 : if(!vListEntries.empty())
870 : {
871 0 : Sequence<OUString> vListEntriesSeq(vListEntries.size());
872 0 : copy(vListEntries.begin(), vListEntries.end(), ::comphelper::stl_begin(vListEntriesSeq));
873 0 : vOutParams[OUString(ODF_FORMDROPDOWN_LISTENTRY)] = makeAny(vListEntriesSeq);
874 : }
875 0 : for(::std::map<OUString, Any>::const_iterator pCurrent = vOutParams.begin();
876 0 : pCurrent != vOutParams.end();
877 : ++pCurrent)
878 : {
879 : try
880 : {
881 0 : m_xOutParams->insertByName(pCurrent->first, pCurrent->second);
882 : }
883 0 : catch(const ElementExistException&)
884 : {
885 : }
886 0 : }
887 0 : }
888 : }
889 :
890 402 : XMLTextImportHelper::XMLTextImportHelper(
891 : uno::Reference<frame::XModel> const& rModel,
892 : SvXMLImport& rImport,
893 : bool const bInsertMode, bool const bStylesOnlyMode,
894 : bool const bProgress, bool const bBlockMode,
895 : bool const bOrganizerMode)
896 : : m_pImpl( new Impl(rModel, rImport, bInsertMode, bStylesOnlyMode,
897 402 : bProgress, bBlockMode, bOrganizerMode) )
898 804 : , m_pBackpatcherImpl( MakeBackpatcherImpl() )
899 : {
900 402 : static OUString s_PropNameDefaultListId( "DefaultListId");
901 :
902 402 : Reference< XChapterNumberingSupplier > xCNSupplier( rModel, UNO_QUERY );
903 :
904 402 : if( xCNSupplier.is() )
905 : {
906 207 : m_pImpl->m_xChapterNumbering = xCNSupplier->getChapterNumberingRules();
907 207 : if (m_pImpl->m_xChapterNumbering.is())
908 : {
909 : Reference< XPropertySet > const xNumRuleProps(
910 207 : m_pImpl->m_xChapterNumbering, UNO_QUERY);
911 207 : if ( xNumRuleProps.is() )
912 : {
913 : Reference< XPropertySetInfo > xNumRulePropSetInfo(
914 207 : xNumRuleProps->getPropertySetInfo());
915 414 : if (xNumRulePropSetInfo.is() &&
916 207 : xNumRulePropSetInfo->hasPropertyByName(
917 207 : s_PropNameDefaultListId))
918 : {
919 207 : OUString sListId;
920 207 : xNumRuleProps->getPropertyValue(s_PropNameDefaultListId)
921 207 : >>= sListId;
922 : DBG_ASSERT( !sListId.isEmpty(),
923 : "no default list id found at chapter numbering rules instance. Serious defect -> please inform OD." );
924 207 : if ( !sListId.isEmpty() )
925 : {
926 : Reference< XNamed > const xChapterNumNamed(
927 207 : m_pImpl->m_xChapterNumbering, UNO_QUERY);
928 207 : if ( xChapterNumNamed.is() )
929 : {
930 207 : m_pImpl->m_pTextListsHelper->KeepListAsProcessed(
931 : sListId,
932 207 : xChapterNumNamed->getName(),
933 621 : OUString() );
934 207 : }
935 207 : }
936 207 : }
937 207 : }
938 : }
939 : }
940 :
941 804 : Reference< XStyleFamiliesSupplier > xFamiliesSupp( rModel, UNO_QUERY );
942 : // DBG_ASSERT( xFamiliesSupp.is(), "no chapter numbering supplier" ); for clipboard there may be documents without styles
943 :
944 402 : if( xFamiliesSupp.is() )
945 : {
946 371 : Reference< XNameAccess > xFamilies(xFamiliesSupp->getStyleFamilies());
947 :
948 742 : const OUString aParaStyles("ParagraphStyles");
949 371 : if( xFamilies->hasByName( aParaStyles ) )
950 : {
951 414 : m_pImpl->m_xParaStyles.set(xFamilies->getByName(aParaStyles),
952 414 : UNO_QUERY);
953 : }
954 :
955 742 : const OUString aCharStyles("CharacterStyles");
956 371 : if( xFamilies->hasByName( aCharStyles ) )
957 : {
958 414 : m_pImpl->m_xTextStyles.set(xFamilies->getByName(aCharStyles),
959 414 : UNO_QUERY);
960 : }
961 :
962 742 : const OUString aNumStyles("NumberingStyles");
963 371 : if( xFamilies->hasByName( aNumStyles ) )
964 : {
965 414 : m_pImpl->m_xNumStyles.set(xFamilies->getByName(aNumStyles),
966 414 : UNO_QUERY);
967 : }
968 :
969 742 : const OUString aFrameStyles("FrameStyles");
970 371 : if( xFamilies->hasByName( aFrameStyles ) )
971 : {
972 414 : m_pImpl->m_xFrameStyles.set(xFamilies->getByName(aFrameStyles),
973 414 : UNO_QUERY);
974 : }
975 :
976 742 : const OUString aPageStyles("PageStyles");
977 371 : if( xFamilies->hasByName( aPageStyles ) )
978 : {
979 714 : m_pImpl->m_xPageStyles.set(xFamilies->getByName(aPageStyles),
980 714 : UNO_QUERY);
981 371 : }
982 : }
983 :
984 804 : Reference < XTextFramesSupplier > xTFS( rModel, UNO_QUERY );
985 402 : if( xTFS.is() )
986 : {
987 207 : m_pImpl->m_xTextFrames.set(xTFS->getTextFrames());
988 : }
989 :
990 804 : Reference < XTextGraphicObjectsSupplier > xTGOS( rModel, UNO_QUERY );
991 402 : if( xTGOS.is() )
992 : {
993 207 : m_pImpl->m_xGraphics.set(xTGOS->getGraphicObjects());
994 : }
995 :
996 804 : Reference < XTextEmbeddedObjectsSupplier > xTEOS( rModel, UNO_QUERY );
997 402 : if( xTEOS.is() )
998 : {
999 207 : m_pImpl->m_xObjects.set(xTEOS->getEmbeddedObjects());
1000 : }
1001 :
1002 : XMLPropertySetMapper *pPropMapper =
1003 402 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_PARA );
1004 1206 : m_pImpl->m_xParaImpPrMap =
1005 804 : new XMLTextImportPropertyMapper( pPropMapper, rImport );
1006 :
1007 402 : pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_TEXT );
1008 1206 : m_pImpl->m_xTextImpPrMap =
1009 804 : new XMLTextImportPropertyMapper( pPropMapper, rImport );
1010 :
1011 402 : pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_FRAME );
1012 1206 : m_pImpl->m_xFrameImpPrMap =
1013 804 : new XMLTextImportPropertyMapper( pPropMapper, rImport );
1014 :
1015 402 : pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_SECTION );
1016 1206 : m_pImpl->m_xSectionImpPrMap =
1017 804 : new XMLTextImportPropertyMapper( pPropMapper, rImport );
1018 :
1019 402 : pPropMapper = new XMLTextPropertySetMapper( TEXT_PROP_MAP_RUBY );
1020 1206 : m_pImpl->m_xRubyImpPrMap =
1021 1206 : new SvXMLImportPropertyMapper( pPropMapper, rImport );
1022 402 : }
1023 :
1024 597 : XMLTextImportHelper::~XMLTextImportHelper()
1025 : {
1026 597 : }
1027 :
1028 103 : SvXMLImportPropertyMapper *XMLTextImportHelper::CreateShapeExtPropMapper(SvXMLImport& rImport)
1029 : {
1030 : XMLPropertySetMapper *pPropMapper =
1031 103 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_FRAME );
1032 : return new XMLTextImportPropertyMapper( pPropMapper, rImport,
1033 103 : const_cast<XMLFontStylesContext*>(rImport.GetFontDecls()) );
1034 : }
1035 :
1036 449 : SvXMLImportPropertyMapper *XMLTextImportHelper::CreateParaExtPropMapper(SvXMLImport& rImport, XMLFontStylesContext *pFontDecls)
1037 : {
1038 : XMLPropertySetMapper *pPropMapper =
1039 449 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_SHAPE_PARA );
1040 449 : if (!pFontDecls)
1041 349 : pFontDecls = const_cast<XMLFontStylesContext*>(rImport.GetFontDecls());
1042 449 : return new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls );
1043 : }
1044 :
1045 318 : SvXMLImportPropertyMapper *XMLTextImportHelper::CreateParaDefaultExtPropMapper(SvXMLImport& rImport, XMLFontStylesContext* pFontDecls)
1046 : {
1047 318 : if (!pFontDecls)
1048 318 : pFontDecls = const_cast<XMLFontStylesContext*>(rImport.GetFontDecls());
1049 :
1050 : XMLPropertySetMapper* pPropMapper =
1051 318 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_SHAPE_PARA );
1052 318 : SvXMLImportPropertyMapper* pImportMapper = new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls );
1053 :
1054 : pPropMapper =
1055 318 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_TEXT_ADDITIONAL_DEFAULTS );
1056 318 : pImportMapper->ChainImportMapper( new XMLTextImportPropertyMapper( pPropMapper, rImport, pFontDecls ) );
1057 :
1058 318 : return pImportMapper;
1059 : }
1060 :
1061 : SvXMLImportPropertyMapper*
1062 100 : XMLTextImportHelper::CreateTableDefaultExtPropMapper(
1063 : SvXMLImport& rImport,
1064 : XMLFontStylesContext* )
1065 : {
1066 : XMLPropertySetMapper *pPropMapper =
1067 100 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_TABLE_DEFAULTS );
1068 100 : return new SvXMLImportPropertyMapper( pPropMapper, rImport );
1069 : }
1070 :
1071 : SvXMLImportPropertyMapper*
1072 100 : XMLTextImportHelper::CreateTableRowDefaultExtPropMapper(
1073 : SvXMLImport& rImport,
1074 : XMLFontStylesContext* )
1075 : {
1076 : XMLPropertySetMapper *pPropMapper =
1077 100 : new XMLTextPropertySetMapper( TEXT_PROP_MAP_TABLE_ROW_DEFAULTS );
1078 100 : return new SvXMLImportPropertyMapper( pPropMapper, rImport );
1079 : }
1080 :
1081 978 : void XMLTextImportHelper::SetCursor( const Reference < XTextCursor > & rCursor )
1082 : {
1083 978 : m_pImpl->m_xCursor.set(rCursor);
1084 978 : m_pImpl->m_xText.set(rCursor->getText());
1085 978 : m_pImpl->m_xCursorAsRange.set( rCursor, UNO_QUERY );
1086 978 : }
1087 :
1088 733 : void XMLTextImportHelper::ResetCursor()
1089 : {
1090 733 : m_pImpl->m_xCursor.set(0);
1091 733 : m_pImpl->m_xText.set(0);
1092 733 : m_pImpl->m_xCursorAsRange.set(0);
1093 733 : }
1094 :
1095 :
1096 32 : sal_Bool XMLTextImportHelper::HasFrameByName( const OUString& rName ) const
1097 : {
1098 64 : return (m_pImpl->m_xTextFrames.is() &&
1099 32 : m_pImpl->m_xTextFrames->hasByName(rName))
1100 62 : || (m_pImpl->m_xGraphics.is() &&
1101 31 : m_pImpl->m_xGraphics->hasByName(rName))
1102 94 : || (m_pImpl->m_xObjects.is() &&
1103 63 : m_pImpl->m_xObjects->hasByName(rName));
1104 : }
1105 :
1106 129 : void XMLTextImportHelper::InsertString( const OUString& rChars )
1107 : {
1108 : DBG_ASSERT(m_pImpl->m_xText.is(), "no text");
1109 : DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range");
1110 129 : if (m_pImpl->m_xText.is())
1111 : {
1112 258 : m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange,
1113 258 : rChars, sal_False);
1114 : }
1115 129 : }
1116 :
1117 2732 : void XMLTextImportHelper::InsertString( const OUString& rChars,
1118 : sal_Bool& rIgnoreLeadingSpace )
1119 : {
1120 : DBG_ASSERT(m_pImpl->m_xText.is(), "no text");
1121 : DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range");
1122 2732 : if (m_pImpl->m_xText.is())
1123 : {
1124 2732 : sal_Int32 nLen = rChars.getLength();
1125 2732 : OUStringBuffer sChars( nLen );
1126 :
1127 28662 : for( sal_Int32 i=0; i < nLen; i++ )
1128 : {
1129 25930 : sal_Unicode c = rChars[i];
1130 25930 : switch( c )
1131 : {
1132 : case 0x20:
1133 : case 0x09:
1134 : case 0x0a:
1135 : case 0x0d:
1136 2586 : if( !rIgnoreLeadingSpace )
1137 2415 : sChars.append( (sal_Unicode)0x20 );
1138 2586 : rIgnoreLeadingSpace = sal_True;
1139 2586 : break;
1140 : default:
1141 23344 : rIgnoreLeadingSpace = sal_False;
1142 23344 : sChars.append( c );
1143 23344 : break;
1144 : }
1145 : }
1146 5464 : m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange,
1147 5464 : sChars.makeStringAndClear(), sal_False);
1148 : }
1149 2732 : }
1150 :
1151 1119 : void XMLTextImportHelper::InsertControlCharacter( sal_Int16 nControl )
1152 : {
1153 : DBG_ASSERT(m_pImpl->m_xText.is(), "no text");
1154 : DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range");
1155 1119 : if (m_pImpl->m_xText.is())
1156 : {
1157 1119 : m_pImpl->m_xText->insertControlCharacter(
1158 1119 : m_pImpl->m_xCursorAsRange, nControl, sal_False);
1159 : }
1160 1119 : }
1161 :
1162 726 : void XMLTextImportHelper::InsertTextContent(
1163 : Reference < XTextContent > & xContent )
1164 : {
1165 : DBG_ASSERT(m_pImpl->m_xText.is(), "no text");
1166 : DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range");
1167 726 : if (m_pImpl->m_xText.is())
1168 : {
1169 : try {
1170 726 : m_pImpl->m_xText->insertTextContent( m_pImpl->m_xCursorAsRange, xContent, sal_False);
1171 0 : } catch ( const lang::IllegalArgumentException & )
1172 : {
1173 : SAL_WARN( "xmloff", "Cannot import part of the text - probably an image in the text frame?" );
1174 : }
1175 : }
1176 726 : }
1177 :
1178 181 : void XMLTextImportHelper::DeleteParagraph()
1179 : {
1180 : DBG_ASSERT(m_pImpl->m_xText.is(), "no text");
1181 : DBG_ASSERT(m_pImpl->m_xCursor.is(), "no cursor");
1182 : DBG_ASSERT(m_pImpl->m_xCursorAsRange.is(), "no range");
1183 :
1184 181 : sal_Bool bDelete = sal_True;
1185 : Reference < XEnumerationAccess > const xEnumAccess(
1186 181 : m_pImpl->m_xCursor, UNO_QUERY);
1187 181 : if( xEnumAccess.is() )
1188 : {
1189 181 : Reference < XEnumeration > xEnum(xEnumAccess->createEnumeration());
1190 : DBG_ASSERT( xEnum->hasMoreElements(), "empty text enumeration" );
1191 181 : if( xEnum->hasMoreElements() )
1192 : {
1193 181 : Reference < XComponent > xComp( xEnum->nextElement(), UNO_QUERY );
1194 : DBG_ASSERT( xComp.is(), "got no component" );
1195 181 : if( xComp.is() )
1196 : {
1197 181 : xComp->dispose();
1198 181 : bDelete = sal_False;
1199 181 : }
1200 181 : }
1201 : }
1202 181 : if( bDelete )
1203 : {
1204 0 : if (m_pImpl->m_xCursor->goLeft( 1, sal_True ))
1205 : {
1206 0 : OUString sEmpty;
1207 0 : m_pImpl->m_xText->insertString(m_pImpl->m_xCursorAsRange,
1208 0 : sEmpty, sal_True);
1209 : }
1210 181 : }
1211 181 : }
1212 :
1213 2699 : OUString XMLTextImportHelper::ConvertStarFonts( const OUString& rChars,
1214 : const OUString& rStyleName,
1215 : sal_uInt8& rFlags,
1216 : sal_Bool bPara,
1217 : SvXMLImport& rImport ) const
1218 : {
1219 2699 : OUStringBuffer sChars( rChars );
1220 2699 : sal_Bool bConverted = sal_False;
1221 28542 : for( sal_Int32 j=0; j<rChars.getLength(); j++ )
1222 : {
1223 25843 : sal_Unicode c = rChars[j];
1224 25843 : if( c >= 0xf000 && c <= 0xf0ff )
1225 : {
1226 0 : if( (rFlags & CONV_STAR_FONT_FLAGS_VALID) == 0 )
1227 : {
1228 0 : XMLTextStyleContext *pStyle = 0;
1229 : sal_uInt16 nFamily = bPara ? XML_STYLE_FAMILY_TEXT_PARAGRAPH
1230 0 : : XML_STYLE_FAMILY_TEXT_TEXT;
1231 0 : if (!rStyleName.isEmpty() && m_pImpl->m_xAutoStyles.Is())
1232 : {
1233 : const SvXMLStyleContext* pTempStyle =
1234 0 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
1235 : FindStyleChildContext( nFamily, rStyleName,
1236 0 : sal_True );
1237 0 : pStyle = PTR_CAST( XMLTextStyleContext,pTempStyle);
1238 : }
1239 :
1240 0 : if( pStyle )
1241 : {
1242 0 : sal_Int32 nCount = pStyle->_GetProperties().size();
1243 0 : if( nCount )
1244 : {
1245 : UniReference < SvXMLImportPropertyMapper > xImpPrMap =
1246 0 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)
1247 0 : ->GetImportPropertyMapper(nFamily);
1248 0 : if( xImpPrMap.is() )
1249 : {
1250 : UniReference<XMLPropertySetMapper> rPropMapper =
1251 0 : xImpPrMap->getPropertySetMapper();
1252 0 : for( sal_Int32 i=0; i < nCount; i++ )
1253 : {
1254 0 : const XMLPropertyState& rProp = pStyle->_GetProperties()[i];
1255 0 : sal_Int32 nIdx = rProp.mnIndex;
1256 0 : sal_uInt32 nContextId = rPropMapper->GetEntryContextId(nIdx);
1257 0 : if( CTF_FONTFAMILYNAME == nContextId )
1258 : {
1259 0 : rFlags &= ~(CONV_FROM_STAR_BATS|CONV_FROM_STAR_MATH);
1260 0 : OUString sFontName;
1261 0 : rProp.maValue >>= sFontName;
1262 0 : OUString sStarBats( "StarBats" );
1263 0 : OUString sStarMath( "StarMath" );
1264 0 : if( sFontName.equalsIgnoreAsciiCase( sStarBats ) )
1265 0 : rFlags |= CONV_FROM_STAR_BATS;
1266 0 : else if( sFontName.equalsIgnoreAsciiCase( sStarMath ) )
1267 0 : rFlags |= CONV_FROM_STAR_MATH;
1268 0 : break;
1269 : }
1270 0 : }
1271 0 : }
1272 : }
1273 :
1274 : }
1275 :
1276 0 : rFlags |= CONV_STAR_FONT_FLAGS_VALID;
1277 : }
1278 0 : if( (rFlags & CONV_FROM_STAR_BATS ) != 0 )
1279 : {
1280 0 : sChars[j] = rImport.ConvStarBatsCharToStarSymbol( c );
1281 0 : bConverted = sal_True;
1282 : }
1283 0 : else if( (rFlags & CONV_FROM_STAR_MATH ) != 0 )
1284 : {
1285 0 : sChars[j] = rImport.ConvStarMathCharToStarSymbol( c );
1286 0 : bConverted = sal_True;
1287 : }
1288 : }
1289 : }
1290 :
1291 2699 : return bConverted ? sChars.makeStringAndClear() : rChars;
1292 : }
1293 :
1294 : /* Helper method to determine, if a paragraph style has a list style (inclusive
1295 : an empty one) inherits a list style (inclusive an empty one) from one of its parents (#i69629#)
1296 : */
1297 : /* Apply special case, that found list style equals the chapter numbering, also
1298 : to the found list styles of the parent styles. (#i73973#)
1299 : */
1300 6 : static sal_Bool lcl_HasListStyle( OUString sStyleName,
1301 : const Reference < XNameContainer >& xParaStyles,
1302 : SvXMLImport& rImport,
1303 : const OUString& sNumberingStyleName,
1304 : const OUString& sOutlineStyleName )
1305 : {
1306 6 : sal_Bool bRet( sal_False );
1307 :
1308 6 : if ( !xParaStyles->hasByName( sStyleName ) )
1309 : {
1310 : // error case
1311 0 : return sal_True;
1312 : }
1313 :
1314 12 : Reference< XPropertyState > xPropState( xParaStyles->getByName( sStyleName ),
1315 12 : UNO_QUERY );
1316 6 : if ( !xPropState.is() )
1317 : {
1318 : // error case
1319 0 : return sal_False;
1320 : }
1321 :
1322 6 : if ( xPropState->getPropertyState( sNumberingStyleName ) == PropertyState_DIRECT_VALUE )
1323 : {
1324 : // list style found
1325 1 : bRet = sal_True;
1326 : // special case: the set list style equals the chapter numbering
1327 1 : Reference< XPropertySet > xPropSet( xPropState, UNO_QUERY );
1328 1 : if ( xPropSet.is() )
1329 : {
1330 1 : OUString sListStyle;
1331 1 : xPropSet->getPropertyValue( sNumberingStyleName ) >>= sListStyle;
1332 2 : if ( !sListStyle.isEmpty() &&
1333 1 : sListStyle == sOutlineStyleName )
1334 : {
1335 0 : bRet = sal_False;
1336 1 : }
1337 1 : }
1338 : }
1339 : else
1340 : {
1341 : // Tools.Outline settings lost on Save (#i77708#)
1342 5 : sal_Int32 nUPD( 0 );
1343 5 : sal_Int32 nBuild( 0 );
1344 : // Don't use UPD for versioning: xmloff/source/text/txtstyli.cxx and txtimp.cxx (#i86058#)
1345 5 : const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild );
1346 : // search list style at parent
1347 5 : Reference<XStyle> xStyle( xPropState, UNO_QUERY );
1348 20 : while ( xStyle.is() )
1349 : {
1350 15 : OUString aParentStyle( xStyle->getParentStyle() );
1351 15 : if ( !aParentStyle.isEmpty() )
1352 : {
1353 20 : aParentStyle =
1354 : rImport.GetStyleDisplayName( XML_STYLE_FAMILY_TEXT_PARAGRAPH,
1355 10 : aParentStyle );
1356 : }
1357 15 : if ( aParentStyle.isEmpty() || !xParaStyles->hasByName( aParentStyle ) )
1358 : {
1359 : // no list style found
1360 5 : break;
1361 : }
1362 : else
1363 : {
1364 30 : xPropState = Reference< XPropertyState >(
1365 20 : xParaStyles->getByName( aParentStyle ),
1366 10 : UNO_QUERY );
1367 10 : if ( !xPropState.is() )
1368 : {
1369 : // error case
1370 0 : return sal_True;
1371 : }
1372 10 : if ( xPropState->getPropertyState( sNumberingStyleName ) == PropertyState_DIRECT_VALUE )
1373 : {
1374 : // list style found
1375 0 : bRet = sal_True;
1376 : // Special case: the found list style equals the chapter numbering (#i73973#)
1377 0 : Reference< XPropertySet > xPropSet( xPropState, UNO_QUERY );
1378 0 : if ( xPropSet.is() )
1379 : {
1380 0 : OUString sListStyle;
1381 0 : xPropSet->getPropertyValue( sNumberingStyleName ) >>= sListStyle;
1382 0 : if ( !sListStyle.isEmpty() &&
1383 0 : sListStyle == sOutlineStyleName )
1384 : {
1385 0 : bRet = sal_False;
1386 : }
1387 : // Special handling for text documents from OOo version prior OOo 2.4 (#i77708#)
1388 : /* Check explicitly on certain versions and on import of
1389 : text documents in OpenOffice.org file format (#i86058#)
1390 : */
1391 0 : else if ( sListStyle.isEmpty() &&
1392 0 : ( rImport.IsTextDocInOOoFileFormat() ||
1393 0 : ( bBuildIdFound &&
1394 0 : ( ( nUPD == 641 ) || ( nUPD == 645 ) || // prior OOo 2.0
1395 0 : ( nUPD == 680 && nBuild <= 9238 ) ) ) ) ) // OOo 2.0 - OOo 2.3.1
1396 : {
1397 0 : bRet = sal_False;
1398 0 : }
1399 : }
1400 0 : break;
1401 : }
1402 : else
1403 : {
1404 : // search list style at parent
1405 10 : xStyle = Reference<XStyle>( xPropState, UNO_QUERY );
1406 : }
1407 : }
1408 15 : }
1409 : }
1410 :
1411 6 : return bRet;
1412 : }
1413 1249 : OUString XMLTextImportHelper::SetStyleAndAttrs(
1414 : SvXMLImport& rImport,
1415 : const Reference < XTextCursor >& rCursor,
1416 : const OUString& rStyleName,
1417 : sal_Bool bPara,
1418 : sal_Bool bOutlineLevelAttrFound,
1419 : sal_Int8 nOutlineLevel,
1420 : // Numberings/Bullets in table not visible aftzer save/reload (#i80724#)
1421 : sal_Bool bSetListAttrs )
1422 : {
1423 1249 : static OUString s_ParaStyleName( "ParaStyleName");
1424 1249 : static OUString s_CharStyleName( "CharStyleName");
1425 1249 : static OUString s_NumberingRules( "NumberingRules");
1426 1249 : static OUString s_NumberingIsNumber( "NumberingIsNumber");
1427 1249 : static OUString s_NumberingLevel( "NumberingLevel");
1428 1249 : static OUString s_ParaIsNumberingRestart( "ParaIsNumberingRestart");
1429 1249 : static OUString s_NumberingStartValue( "NumberingStartValue");
1430 1249 : static OUString s_PropNameListId( "ListId");
1431 1249 : static OUString s_PageDescName( "PageDescName");
1432 1249 : static OUString s_ServiceCombinedCharacters( "com.sun.star.text.TextField.CombinedCharacters");
1433 1249 : static OUString s_Content("Content");
1434 1249 : static OUString s_OutlineLevel( "OutlineLevel");
1435 1249 : static OUString s_NumberingStyleName( "NumberingStyleName");
1436 :
1437 : const sal_uInt16 nFamily = bPara ? XML_STYLE_FAMILY_TEXT_PARAGRAPH
1438 1249 : : XML_STYLE_FAMILY_TEXT_TEXT;
1439 1249 : XMLTextStyleContext *pStyle = 0;
1440 1249 : OUString sStyleName( rStyleName );
1441 1249 : if (!sStyleName.isEmpty() && m_pImpl->m_xAutoStyles.Is())
1442 : {
1443 : const SvXMLStyleContext* pTempStyle =
1444 729 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
1445 1458 : FindStyleChildContext( nFamily, sStyleName, sal_True );
1446 729 : pStyle = PTR_CAST( XMLTextStyleContext,pTempStyle);
1447 : }
1448 1249 : if( pStyle )
1449 379 : sStyleName = pStyle->GetParentName();
1450 :
1451 2498 : Reference < XPropertySet > xPropSet( rCursor, UNO_QUERY );
1452 : Reference< XPropertySetInfo > xPropSetInfo(
1453 2498 : xPropSet->getPropertySetInfo());
1454 :
1455 : // style
1456 1249 : if( !sStyleName.isEmpty() )
1457 : {
1458 541 : sStyleName = rImport.GetStyleDisplayName( nFamily, sStyleName );
1459 541 : const OUString& rPropName = (bPara) ? s_ParaStyleName : s_CharStyleName;
1460 : const Reference < XNameContainer > & rStyles = (bPara)
1461 541 : ? m_pImpl->m_xParaStyles
1462 1082 : : m_pImpl->m_xTextStyles;
1463 1623 : if( rStyles.is() &&
1464 1082 : xPropSetInfo->hasPropertyByName( rPropName ) &&
1465 541 : rStyles->hasByName( sStyleName ) )
1466 : {
1467 520 : xPropSet->setPropertyValue( rPropName, makeAny(sStyleName) );
1468 : }
1469 : else
1470 21 : sStyleName = OUString();
1471 : }
1472 :
1473 : /* The outline level needs to be only applied as list level, if the heading
1474 : is not inside a list and if it by default applies the outline style. (#i70748#)
1475 : */
1476 1249 : bool bApplyOutlineLevelAsListLevel( false );
1477 : // Numberings/Bullets in table not visible aftzer save/reload (#i80724#)
1478 2470 : if (bSetListAttrs && bPara
1479 2351 : && xPropSetInfo->hasPropertyByName( s_NumberingRules))
1480 : {
1481 : // Set numbering rules
1482 : Reference< XIndexReplace > const xNumRules(
1483 1102 : xPropSet->getPropertyValue(s_NumberingRules), UNO_QUERY);
1484 :
1485 1102 : XMLTextListBlockContext * pListBlock(0);
1486 1102 : XMLTextListItemContext * pListItem(0);
1487 1102 : XMLNumberedParaContext * pNumberedParagraph(0);
1488 1102 : GetTextListHelper().ListContextTop(
1489 1102 : pListBlock, pListItem, pNumberedParagraph);
1490 :
1491 : OSL_ENSURE(!(pListBlock && pNumberedParagraph), "XMLTextImportHelper::"
1492 : "SetStyleAndAttrs: both list and numbered-paragraph???");
1493 :
1494 2204 : Reference < XIndexReplace > xNewNumRules;
1495 1102 : sal_Int8 nLevel(-1);
1496 2204 : OUString sListId;
1497 1102 : sal_Int16 nStartValue(-1);
1498 1102 : bool bNumberingIsNumber(true);
1499 :
1500 1102 : if (pListBlock) {
1501 :
1502 32 : if (!pListItem) {
1503 0 : bNumberingIsNumber = false; // list-header
1504 : }
1505 : // consider text:style-override property of <text:list-item>
1506 : xNewNumRules.set(
1507 64 : (pListItem != 0 && pListItem->HasNumRulesOverride())
1508 0 : ? pListItem->GetNumRulesOverride()
1509 32 : : pListBlock->GetNumRules() );
1510 32 : nLevel = static_cast<sal_Int8>(pListBlock->GetLevel());
1511 :
1512 32 : if ( pListItem && pListItem->HasStartValue() ) {
1513 1 : nStartValue = pListItem->GetStartValue();
1514 : }
1515 :
1516 : // Inconsistent behavior regarding lists (#i92811#)
1517 64 : sListId = m_pImpl->m_pTextListsHelper->GetListIdForListBlock(
1518 32 : *pListBlock);
1519 : }
1520 1070 : else if (pNumberedParagraph)
1521 : {
1522 0 : xNewNumRules.set(pNumberedParagraph->GetNumRules());
1523 0 : nLevel = static_cast<sal_Int8>(pNumberedParagraph->GetLevel());
1524 0 : sListId = pNumberedParagraph->GetListId();
1525 0 : nStartValue = pNumberedParagraph->GetStartValue();
1526 : }
1527 :
1528 :
1529 1102 : if (pListBlock || pNumberedParagraph)
1530 : {
1531 : // Assure that list style of automatic paragraph style is applied at paragraph. (#i101349#)
1532 32 : sal_Bool bApplyNumRules = pStyle && pStyle->IsListStyleSet();
1533 32 : if ( !bApplyNumRules )
1534 : {
1535 2 : sal_Bool bSameNumRules = xNewNumRules == xNumRules;
1536 2 : if( !bSameNumRules && xNewNumRules.is() && xNumRules.is() )
1537 : {
1538 : // If the interface pointers are different then this does
1539 : // not mean that the num rules are different. Further tests
1540 : // are required then. However, if only one num rule is
1541 : // set, no tests are required of course.
1542 2 : Reference< XNamed > xNewNamed( xNewNumRules, UNO_QUERY );
1543 4 : Reference< XNamed > xNamed( xNumRules, UNO_QUERY );
1544 2 : if( xNewNamed.is() && xNamed.is() )
1545 : {
1546 0 : bSameNumRules = xNewNamed->getName() == xNamed->getName();
1547 : }
1548 : else
1549 : {
1550 2 : Reference< XAnyCompare > xNumRuleCompare( xNumRules, UNO_QUERY );
1551 2 : if( xNumRuleCompare.is() )
1552 : {
1553 2 : bSameNumRules = (xNumRuleCompare->compare( Any(xNumRules), Any(xNewNumRules) ) == 0);
1554 2 : }
1555 2 : }
1556 : }
1557 2 : bApplyNumRules = !bSameNumRules;
1558 : }
1559 :
1560 32 : if ( bApplyNumRules )
1561 : {
1562 : // #102607# This may except when xNewNumRules contains
1563 : // a Writer-NumRule-Implementation bug gets applied to
1564 : // a shape. Since this may occur inside a document
1565 : // (e.g. when edited), this must be handled
1566 : // gracefully.
1567 : try
1568 : {
1569 32 : xPropSet->setPropertyValue(
1570 32 : s_NumberingRules, makeAny(xNewNumRules) );
1571 : }
1572 0 : catch(const Exception&)
1573 : {
1574 : ; // I would really like to use a warning here,
1575 : // but I can't access the XMLErrorHandler from
1576 : // here.
1577 : }
1578 : }
1579 :
1580 32 : if (!bNumberingIsNumber &&
1581 0 : xPropSetInfo->hasPropertyByName(s_NumberingIsNumber))
1582 : {
1583 0 : xPropSet->setPropertyValue(s_NumberingIsNumber, Any(sal_False));
1584 : }
1585 :
1586 32 : xPropSet->setPropertyValue( s_NumberingLevel, Any(nLevel) );
1587 :
1588 32 : if( pListBlock && pListBlock->IsRestartNumbering() )
1589 : {
1590 : // TODO: property missing
1591 1 : if (xPropSetInfo->hasPropertyByName(s_ParaIsNumberingRestart))
1592 : {
1593 1 : sal_Bool bTmp = sal_True;
1594 1 : xPropSet->setPropertyValue(s_ParaIsNumberingRestart,
1595 1 : makeAny(bTmp) );
1596 : }
1597 1 : pListBlock->ResetRestartNumbering();
1598 : }
1599 :
1600 33 : if ( 0 <= nStartValue &&
1601 1 : xPropSetInfo->hasPropertyByName(s_NumberingStartValue))
1602 : {
1603 1 : xPropSet->setPropertyValue(s_NumberingStartValue,
1604 1 : makeAny(nStartValue));
1605 : }
1606 :
1607 32 : if (xPropSetInfo->hasPropertyByName(s_PropNameListId))
1608 : {
1609 30 : if (!sListId.isEmpty()) {
1610 30 : xPropSet->setPropertyValue(s_PropNameListId,
1611 30 : makeAny(sListId) );
1612 : }
1613 : }
1614 :
1615 32 : GetTextListHelper().SetListItem( (XMLTextListItemContext *)0 );
1616 : }
1617 : else
1618 : {
1619 : /* If the paragraph is not in a list but its style, remove it from
1620 : the list. Do not remove it, if the list of the style is
1621 : the chapter numbering rule.
1622 : */
1623 1070 : if( xNumRules.is() )
1624 : {
1625 544 : bool bRemove( true );
1626 : // Special handling for document from OOo 2.x (#i70748#)
1627 544 : sal_Int32 nUPD( 0 );
1628 544 : sal_Int32 nBuild( 0 );
1629 544 : const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild );
1630 : DBG_ASSERT( ( bBuildIdFound && nUPD == 680 ) ||
1631 : !pStyle ||
1632 : !pStyle->IsListStyleSet() ||
1633 : pStyle->GetListStyle().isEmpty(),
1634 : "automatic paragraph style with list style name, but paragraph not in list???" );
1635 767 : if ( ( bBuildIdFound && nUPD == 680 ) ||
1636 606 : !pStyle || !pStyle->IsListStyleSet() )
1637 : {
1638 544 : if (m_pImpl->m_xChapterNumbering.is())
1639 : {
1640 4 : Reference< XNamed > xNumNamed( xNumRules, UNO_QUERY );
1641 : Reference< XNamed > const xChapterNumNamed (
1642 8 : m_pImpl->m_xChapterNumbering, UNO_QUERY);
1643 12 : if ( xNumNamed.is() && xChapterNumNamed.is() &&
1644 4 : xNumNamed->getName() == xChapterNumNamed->getName() )
1645 : {
1646 0 : bRemove = false;
1647 : // RFE: inserting headings into text documents (#i70748#)
1648 0 : bApplyOutlineLevelAsListLevel = true;
1649 4 : }
1650 : }
1651 : }
1652 544 : if ( bRemove )
1653 : {
1654 544 : xPropSet->setPropertyValue( s_NumberingRules, Any() );
1655 : }
1656 : }
1657 1102 : }
1658 : }
1659 :
1660 : // hard paragraph properties
1661 1249 : if( pStyle )
1662 : {
1663 379 : pStyle->FillPropertySet( xPropSet );
1664 392 : if( bPara && pStyle->HasMasterPageName() &&
1665 13 : xPropSetInfo->hasPropertyByName(s_PageDescName))
1666 : {
1667 : OUString sDisplayName(
1668 : rImport.GetStyleDisplayName(
1669 : XML_STYLE_FAMILY_MASTER_PAGE,
1670 13 : pStyle->GetMasterPageName()) );
1671 39 : if( sDisplayName.isEmpty() ||
1672 26 : (m_pImpl->m_xPageStyles.is() &&
1673 13 : m_pImpl->m_xPageStyles->hasByName( sDisplayName)))
1674 : {
1675 13 : xPropSet->setPropertyValue(s_PageDescName,
1676 13 : makeAny(sDisplayName));
1677 13 : }
1678 : }
1679 379 : if( bPara && !pStyle->GetDropCapStyleName().isEmpty() &&
1680 0 : m_pImpl->m_xTextStyles.is())
1681 : {
1682 : OUString sDisplayName(
1683 : rImport.GetStyleDisplayName(
1684 : XML_STYLE_FAMILY_TEXT_TEXT,
1685 0 : pStyle->GetDropCapStyleName()) );
1686 0 : if (m_pImpl->m_xTextStyles->hasByName(sDisplayName) &&
1687 0 : xPropSetInfo->hasPropertyByName( sDisplayName ) )
1688 : {
1689 0 : xPropSet->setPropertyValue( pStyle->sDropCapCharStyleName, makeAny(sDisplayName) );
1690 0 : }
1691 : }
1692 :
1693 : // combined characters special treatment
1694 379 : if (!bPara && pStyle->HasCombinedCharactersLetter())
1695 : {
1696 : // insert combined characters text field
1697 0 : if (m_pImpl->m_xServiceFactory.is())
1698 : {
1699 : uno::Reference<beans::XPropertySet> const xTmp(
1700 0 : m_pImpl->m_xServiceFactory->createInstance(
1701 0 : s_ServiceCombinedCharacters), UNO_QUERY);
1702 0 : if( xTmp.is() )
1703 : {
1704 : // fix cursor if larger than possible for
1705 : // combined characters field
1706 0 : if (rCursor->getString().getLength() >
1707 : MAX_COMBINED_CHARACTERS)
1708 : {
1709 0 : rCursor->gotoRange(rCursor->getStart(), sal_False);
1710 0 : rCursor->goRight(MAX_COMBINED_CHARACTERS, sal_True);
1711 : }
1712 :
1713 : // set field value (the combined character string)
1714 0 : xTmp->setPropertyValue(s_Content,
1715 0 : makeAny(rCursor->getString()));
1716 :
1717 : // insert the field over it's original text
1718 0 : Reference<XTextContent> xTextContent(xTmp, UNO_QUERY);
1719 0 : if (m_pImpl->m_xText.is() && rCursor.is())
1720 : {
1721 : // #i107225# the combined characters need to be inserted first
1722 : // the selected text has to be removed afterwards
1723 0 : m_pImpl->m_xText->insertTextContent( rCursor->getStart(), xTextContent, sal_True );
1724 :
1725 0 : if( !rCursor->getString().isEmpty() )
1726 : {
1727 : try
1728 : {
1729 0 : uno::Reference< text::XTextCursor > xCrsr = rCursor->getText()->createTextCursorByRange( rCursor->getStart() );
1730 0 : xCrsr->goLeft( 1, true );
1731 0 : uno::Reference< beans::XPropertySet> xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
1732 : //the hard properties of the removed text need to be applied to the combined characters field
1733 0 : pStyle->FillPropertySet( xCrsrProperties );
1734 0 : xCrsr->collapseToEnd();
1735 0 : xCrsr->gotoRange( rCursor->getEnd(), true );
1736 0 : xCrsr->setString( OUString() );
1737 : }
1738 0 : catch(const uno::Exception&)
1739 : {
1740 : }
1741 : }
1742 0 : }
1743 0 : }
1744 : }
1745 : }
1746 : }
1747 :
1748 : // outline level; set after list style has been set
1749 : // Complete re-worked and corrected: (#i53198#)
1750 : // - set outline level at paragraph
1751 : // - set numbering level at paragraph, if none is already set
1752 : // - assure that style is marked as an outline style for the corresponding
1753 : // outline level.
1754 : // - DO NOT set type of numbering rule to outline.
1755 : // - DO NOT set numbering rule directly at the paragraph.
1756 :
1757 : // Some minor rework and adjust access to paragraph styles (#i70748#)
1758 1249 : if ( bPara )
1759 : {
1760 : // Headings not numbered anymore in 3.1 (#i103817#)
1761 1130 : sal_Int16 nCurrentOutlineLevelInheritedFromParagraphStyle = 0;
1762 : const bool bHasOutlineLevelProp(
1763 1130 : xPropSetInfo->hasPropertyByName(s_OutlineLevel));
1764 1130 : if ( bHasOutlineLevelProp )
1765 : {
1766 584 : xPropSet->getPropertyValue(s_OutlineLevel)
1767 584 : >>= nCurrentOutlineLevelInheritedFromParagraphStyle;
1768 : }
1769 1130 : if ( nOutlineLevel > 0 )
1770 : {
1771 4 : if ( bHasOutlineLevelProp )
1772 : {
1773 : // In case that the value equals the value of its paragraph style
1774 : // attribute outline level, the paragraph attribute value is left unset
1775 4 : if ( nCurrentOutlineLevelInheritedFromParagraphStyle != nOutlineLevel )
1776 : {
1777 2 : xPropSet->setPropertyValue( s_OutlineLevel,
1778 2 : makeAny( static_cast<sal_Int16>(nOutlineLevel) ) );
1779 : }
1780 : }
1781 :
1782 : // RFE: inserting headings into text documents (#i70748#)
1783 4 : if ( bApplyOutlineLevelAsListLevel )
1784 : {
1785 0 : sal_Int16 nNumLevel = -1;
1786 0 : xPropSet->getPropertyValue( s_NumberingLevel ) >>= nNumLevel;
1787 0 : if ( nNumLevel == -1 ||
1788 0 : nNumLevel != (nOutlineLevel - 1) )
1789 : {
1790 0 : xPropSet->setPropertyValue( s_NumberingLevel,
1791 0 : makeAny( static_cast<sal_Int8>(nOutlineLevel - 1) ) );
1792 : }
1793 : }
1794 : /* Correction: (#i69629#)
1795 : - for text document from version OOo 2.0.4/SO 8 PU4 and earlier
1796 : the paragraph style of a heading should be assigned to the
1797 : corresponding list level of the outline style.
1798 : - for other text documents the paragraph style of a heading is only
1799 : a candidate for an assignment to the list level of the outline
1800 : style, if it has no direct list style property and (if exists) the
1801 : automatic paragraph style has also no direct list style set.
1802 : */
1803 4 : if (m_pImpl->m_xParaStyles.is() && m_pImpl->m_xParaStyles->hasByName(sStyleName))
1804 : {
1805 4 : bool bOutlineStyleCandidate( false );
1806 :
1807 4 : sal_Int32 nUPD( 0 );
1808 4 : sal_Int32 nBuild( 0 );
1809 4 : const bool bBuildIdFound = rImport.getBuildIds( nUPD, nBuild );
1810 : // Lost outline numbering in master document (#i73509#)
1811 : // Check explicitly on certain versions (#i86058#)
1812 4 : if ( rImport.IsTextDocInOOoFileFormat() ||
1813 0 : ( bBuildIdFound &&
1814 0 : ( nUPD == 645 || nUPD == 641 ) ) )
1815 : {
1816 0 : bOutlineStyleCandidate = true;
1817 : }
1818 4 : else if ( nUPD == 680 && nBuild <= 9073 ) /* BuildId of OOo 2.0.4/SO8 PU4 */
1819 : {
1820 0 : bOutlineStyleCandidate = bOutlineLevelAttrFound;
1821 : }
1822 4 : if ( bOutlineStyleCandidate )
1823 : {
1824 0 : AddOutlineStyleCandidate( nOutlineLevel, sStyleName );
1825 : }
1826 : // Assure that heading applies the outline style (#i103817#)
1827 8 : if ( ( !pStyle || !pStyle->IsListStyleSet() ) &&
1828 4 : !bOutlineStyleCandidate &&
1829 0 : m_pImpl->m_xChapterNumbering.is())
1830 : {
1831 0 : OUString sEmptyStr;
1832 0 : if ( !lcl_HasListStyle( sStyleName,
1833 0 : m_pImpl->m_xParaStyles, GetXMLImport(),
1834 : s_NumberingStyleName,
1835 0 : sEmptyStr ) )
1836 : {
1837 : // heading not in a list --> apply outline style
1838 0 : xPropSet->setPropertyValue( s_NumberingRules,
1839 0 : makeAny(m_pImpl->m_xChapterNumbering) );
1840 0 : xPropSet->setPropertyValue( s_NumberingLevel,
1841 0 : makeAny(static_cast<sal_Int8>(nOutlineLevel - 1)));
1842 0 : }
1843 : }
1844 : }
1845 : }
1846 : //handle for text:p,if the paragraphstyle outlinelevel is set to[1~10]
1847 1126 : else if( bHasOutlineLevelProp )
1848 : {
1849 580 : if ( nCurrentOutlineLevelInheritedFromParagraphStyle != 0 )
1850 : {
1851 0 : sal_Int16 nZero = 0;
1852 0 : xPropSet->setPropertyValue(s_OutlineLevel,
1853 0 : makeAny( static_cast<sal_Int16>(nZero) ));
1854 : }
1855 : }
1856 : }
1857 :
1858 2498 : return sStyleName;
1859 : }
1860 :
1861 0 : void XMLTextImportHelper::FindOutlineStyleName( OUString& rStyleName,
1862 : sal_Int8 nOutlineLevel )
1863 : {
1864 0 : static OUString s_HeadingStyleName( "HeadingStyleName");
1865 :
1866 : // style name empty?
1867 0 : if( rStyleName.isEmpty() )
1868 : {
1869 : // Empty? Then we need o do stuff. Let's do error checking first.
1870 0 : if (m_pImpl->m_xChapterNumbering.is() &&
1871 0 : ( nOutlineLevel > 0 ) &&
1872 0 : (nOutlineLevel <= m_pImpl->m_xChapterNumbering->getCount()))
1873 : {
1874 0 : nOutlineLevel--; // for the remainder, the level's are 0-based
1875 :
1876 : // empty style name: look-up previously used name
1877 :
1878 : // if we don't have a previously used name, we'll use the default
1879 0 : m_pImpl->InitOutlineStylesCandidates();
1880 0 : if (m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel].empty())
1881 : {
1882 : // no other name used previously? Then use default
1883 :
1884 : // iterate over property value sequence to find the style name
1885 0 : Sequence<PropertyValue> aProperties;
1886 0 : m_pImpl->m_xChapterNumbering->getByIndex( nOutlineLevel )
1887 0 : >>= aProperties;
1888 0 : for( sal_Int32 i = 0; i < aProperties.getLength(); i++ )
1889 : {
1890 0 : if (aProperties[i].Name == s_HeadingStyleName)
1891 : {
1892 0 : OUString aOutlineStyle;
1893 0 : aProperties[i].Value >>= aOutlineStyle;
1894 0 : m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel]
1895 0 : .push_back( aOutlineStyle );
1896 0 : break; // early out, if we found it!.
1897 : }
1898 0 : }
1899 : }
1900 :
1901 : // finally, we'll use the previously used style name for this
1902 : // format (or the default we've just put into that style)
1903 : // take last added one (#i71249#)
1904 : rStyleName =
1905 0 : m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel].back();
1906 : }
1907 : // else: nothing we can do, so we'll leave it empty
1908 : }
1909 : // else: we already had a style name, so we let it pass.
1910 0 : }
1911 :
1912 6 : void XMLTextImportHelper::AddOutlineStyleCandidate( const sal_Int8 nOutlineLevel,
1913 : const OUString& rStyleName )
1914 : {
1915 12 : if (!rStyleName.isEmpty()
1916 6 : && m_pImpl->m_xChapterNumbering.is()
1917 6 : && (nOutlineLevel > 0)
1918 12 : && (nOutlineLevel <= m_pImpl->m_xChapterNumbering->getCount()))
1919 : {
1920 6 : m_pImpl->InitOutlineStylesCandidates();
1921 6 : m_pImpl->m_pOutlineStylesCandidates[nOutlineLevel-1].push_back(
1922 6 : rStyleName);
1923 : }
1924 6 : }
1925 :
1926 105 : void XMLTextImportHelper::SetOutlineStyles( sal_Bool bSetEmptyLevels )
1927 : {
1928 105 : static OUString s_NumberingStyleName( "NumberingStyleName");
1929 105 : static OUString s_HeadingStyleName( "HeadingStyleName");
1930 :
1931 364 : if ((m_pImpl->m_pOutlineStylesCandidates != 0 || bSetEmptyLevels) &&
1932 211 : m_pImpl->m_xChapterNumbering.is() &&
1933 53 : !IsInsertMode())
1934 : {
1935 52 : bool bChooseLastOne( false );
1936 : {
1937 52 : if ( GetXMLImport().IsTextDocInOOoFileFormat() )
1938 : {
1939 4 : bChooseLastOne = true;
1940 : }
1941 : else
1942 : {
1943 48 : sal_Int32 nUPD( 0 );
1944 48 : sal_Int32 nBuild( 0 );
1945 48 : if ( GetXMLImport().getBuildIds( nUPD, nBuild ) )
1946 : {
1947 : // check explicitly on certain versions
1948 32 : bChooseLastOne = ( nUPD == 641 ) || ( nUPD == 645 ) || // prior OOo 2.0
1949 33 : ( nUPD == 680 && nBuild <= 9073 ); // OOo 2.0 - OOo 2.0.4
1950 : }
1951 : }
1952 : }
1953 :
1954 52 : OUString sOutlineStyleName;
1955 : {
1956 : Reference<XPropertySet> xChapterNumRule(
1957 52 : m_pImpl->m_xChapterNumbering, UNO_QUERY);
1958 104 : const OUString sName("Name");
1959 104 : xChapterNumRule->getPropertyValue(sName) >>= sOutlineStyleName;
1960 : }
1961 :
1962 52 : const sal_Int32 nCount = m_pImpl->m_xChapterNumbering->getCount();
1963 : /* First collect all paragraph styles choosen for assignment to each
1964 : list level of the outline style, then perform the intrinsic assignment.
1965 : Reason: The assignment of a certain paragraph style to a list level
1966 : of the outline style causes side effects on the children
1967 : paragraph styles in Writer. (#i106218#)
1968 : */
1969 104 : ::std::vector<OUString> sChosenStyles(nCount);
1970 572 : for( sal_Int32 i=0; i < nCount; ++i )
1971 : {
1972 1040 : if ( bSetEmptyLevels ||
1973 0 : (m_pImpl->m_pOutlineStylesCandidates &&
1974 0 : !m_pImpl->m_pOutlineStylesCandidates[i].empty()))
1975 : {
1976 : // determine, which candidate is one to be assigned to the list
1977 : // level of the outline style
1978 1080 : if (m_pImpl->m_pOutlineStylesCandidates &&
1979 560 : !m_pImpl->m_pOutlineStylesCandidates[i].empty())
1980 : {
1981 6 : if ( bChooseLastOne )
1982 : {
1983 0 : sChosenStyles[i] =
1984 0 : m_pImpl->m_pOutlineStylesCandidates[i].back();
1985 : }
1986 : else
1987 : {
1988 14 : for (sal_uInt32 j = 0;
1989 7 : j < m_pImpl->m_pOutlineStylesCandidates[i].size();
1990 : ++j)
1991 : {
1992 12 : if (!lcl_HasListStyle(
1993 6 : m_pImpl->m_pOutlineStylesCandidates[i][j],
1994 6 : m_pImpl->m_xParaStyles, GetXMLImport(),
1995 : s_NumberingStyleName,
1996 18 : sOutlineStyleName))
1997 : {
1998 5 : sChosenStyles[i] =
1999 10 : m_pImpl->m_pOutlineStylesCandidates[i][j];
2000 5 : break;
2001 : }
2002 : }
2003 : }
2004 : }
2005 : }
2006 : }
2007 : // Trashed outline numbering in ODF 1.1 text document created by OOo 3.x (#i106218#)
2008 104 : Sequence < PropertyValue > aProps( 1 );
2009 52 : PropertyValue *pProps = aProps.getArray();
2010 52 : pProps->Name = s_HeadingStyleName;
2011 572 : for ( sal_Int32 i = 0; i < nCount; ++i )
2012 : {
2013 : // Paragraph style assignments in Outline of template lost from second level on (#i107610#)
2014 520 : if ( bSetEmptyLevels || !sChosenStyles[i].isEmpty() )
2015 : {
2016 520 : pProps->Value <<= sChosenStyles[i];
2017 520 : m_pImpl->m_xChapterNumbering->replaceByIndex(i,
2018 520 : makeAny( aProps ));
2019 : }
2020 52 : }
2021 : }
2022 105 : }
2023 :
2024 1 : void XMLTextImportHelper::SetHyperlink(
2025 : SvXMLImport& rImport,
2026 : const Reference < XTextCursor >& rCursor,
2027 : const OUString& rHRef,
2028 : const OUString& rName,
2029 : const OUString& rTargetFrameName,
2030 : const OUString& rStyleName,
2031 : const OUString& rVisitedStyleName,
2032 : XMLEventsImportContext* pEvents)
2033 : {
2034 1 : static OUString s_HyperLinkURL( "HyperLinkURL");
2035 1 : static OUString s_HyperLinkName( "HyperLinkName");
2036 1 : static OUString s_HyperLinkTarget( "HyperLinkTarget");
2037 1 : static OUString s_UnvisitedCharStyleName( "UnvisitedCharStyleName");
2038 1 : static OUString s_VisitedCharStyleName( "VisitedCharStyleName");
2039 1 : static OUString s_HyperLinkEvents( "HyperLinkEvents");
2040 :
2041 1 : Reference < XPropertySet > xPropSet( rCursor, UNO_QUERY );
2042 : Reference < XPropertySetInfo > xPropSetInfo(
2043 2 : xPropSet->getPropertySetInfo());
2044 1 : if (!xPropSetInfo.is() || !xPropSetInfo->hasPropertyByName(s_HyperLinkURL))
2045 1 : return;
2046 :
2047 1 : xPropSet->setPropertyValue(s_HyperLinkURL, makeAny(rHRef));
2048 :
2049 1 : if (xPropSetInfo->hasPropertyByName(s_HyperLinkName))
2050 : {
2051 1 : xPropSet->setPropertyValue(s_HyperLinkName, makeAny(rName));
2052 : }
2053 :
2054 1 : if (xPropSetInfo->hasPropertyByName(s_HyperLinkTarget))
2055 : {
2056 1 : xPropSet->setPropertyValue(s_HyperLinkTarget,
2057 1 : makeAny(rTargetFrameName));
2058 : }
2059 :
2060 1 : if ( (pEvents != NULL) &&
2061 0 : xPropSetInfo->hasPropertyByName(s_HyperLinkEvents))
2062 : {
2063 : // The API treats events at hyperlinks differently from most
2064 : // other properties: You have to set a name replace with the
2065 : // events in it. The easiest way to to this is to 1) get
2066 : // events, 2) set new ones, and 3) then put events back.
2067 : uno::Reference<XNameReplace> const xReplace(
2068 0 : xPropSet->getPropertyValue(s_HyperLinkEvents), UNO_QUERY);
2069 0 : if (xReplace.is())
2070 : {
2071 : // set events
2072 0 : pEvents->SetEvents(xReplace);
2073 :
2074 : // put events
2075 0 : xPropSet->setPropertyValue(s_HyperLinkEvents, makeAny(xReplace));
2076 0 : }
2077 : }
2078 :
2079 1 : if (m_pImpl->m_xTextStyles.is())
2080 : {
2081 : OUString sDisplayName(
2082 : rImport.GetStyleDisplayName(
2083 1 : XML_STYLE_FAMILY_TEXT_TEXT, rStyleName ) );
2084 2 : if( !sDisplayName.isEmpty() &&
2085 1 : xPropSetInfo->hasPropertyByName(s_UnvisitedCharStyleName) &&
2086 0 : m_pImpl->m_xTextStyles->hasByName(sDisplayName))
2087 : {
2088 0 : xPropSet->setPropertyValue(s_UnvisitedCharStyleName,
2089 0 : makeAny(sDisplayName));
2090 : }
2091 :
2092 2 : sDisplayName =
2093 : rImport.GetStyleDisplayName(
2094 1 : XML_STYLE_FAMILY_TEXT_TEXT, rVisitedStyleName );
2095 2 : if( !sDisplayName.isEmpty() &&
2096 1 : xPropSetInfo->hasPropertyByName(s_VisitedCharStyleName) &&
2097 0 : m_pImpl->m_xTextStyles->hasByName(sDisplayName))
2098 : {
2099 0 : xPropSet->setPropertyValue(s_VisitedCharStyleName,
2100 0 : makeAny(sDisplayName));
2101 1 : }
2102 1 : }
2103 : }
2104 :
2105 12 : void XMLTextImportHelper::SetRuby(
2106 : SvXMLImport& rImport,
2107 : const Reference < XTextCursor >& rCursor,
2108 : const OUString& rStyleName,
2109 : const OUString& rTextStyleName,
2110 : const OUString& rText )
2111 : {
2112 12 : Reference<XPropertySet> xPropSet(rCursor, UNO_QUERY);
2113 :
2114 24 : OUString sRubyText("RubyText");
2115 24 : OUString sRubyCharStyleName("RubyCharStyleName");
2116 :
2117 : // if we have one Ruby property, we assume all of them are present
2118 48 : if (xPropSet.is() &&
2119 48 : xPropSet->getPropertySetInfo()->hasPropertyByName( sRubyText ))
2120 : {
2121 : // the ruby text
2122 12 : xPropSet->setPropertyValue(sRubyText, makeAny(rText));
2123 :
2124 : // the ruby style (ruby-adjust)
2125 12 : XMLPropStyleContext *pStyle = 0;
2126 12 : if (!rStyleName.isEmpty() && m_pImpl->m_xAutoStyles.Is())
2127 : {
2128 : const SvXMLStyleContext* pTempStyle =
2129 12 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2130 : FindStyleChildContext( XML_STYLE_FAMILY_TEXT_RUBY,
2131 12 : rStyleName, sal_True );
2132 12 : pStyle = PTR_CAST(XMLPropStyleContext,pTempStyle);
2133 :
2134 12 : if (NULL != pStyle)
2135 12 : pStyle->FillPropertySet( xPropSet );
2136 : }
2137 :
2138 : // the ruby text character style
2139 12 : if (m_pImpl->m_xTextStyles.is())
2140 : {
2141 : OUString sDisplayName(
2142 : rImport.GetStyleDisplayName(
2143 12 : XML_STYLE_FAMILY_TEXT_TEXT, rTextStyleName ) );
2144 12 : if( (!sDisplayName.isEmpty()) &&
2145 0 : m_pImpl->m_xTextStyles->hasByName( sDisplayName ))
2146 : {
2147 0 : xPropSet->setPropertyValue(sRubyCharStyleName, makeAny(sDisplayName));
2148 12 : }
2149 : }
2150 12 : }
2151 12 : }
2152 :
2153 457 : void XMLTextImportHelper::SetAutoStyles( SvXMLStylesContext *pStyles )
2154 : {
2155 457 : m_pImpl->m_xAutoStyles = pStyles;
2156 457 : }
2157 :
2158 263 : void XMLTextImportHelper::SetFontDecls( XMLFontStylesContext *pFontDecls )
2159 : {
2160 263 : m_pImpl->m_xFontDecls = pFontDecls;
2161 263 : ((XMLTextImportPropertyMapper *)m_pImpl->m_xParaImpPrMap.get())
2162 263 : ->SetFontDecls( pFontDecls );
2163 263 : ((XMLTextImportPropertyMapper *)m_pImpl->m_xTextImpPrMap.get())
2164 263 : ->SetFontDecls( pFontDecls );
2165 263 : }
2166 :
2167 17 : const XMLFontStylesContext *XMLTextImportHelper::GetFontDecls() const
2168 : {
2169 17 : return (XMLFontStylesContext *)&m_pImpl->m_xFontDecls;
2170 : }
2171 :
2172 1180 : SvXMLImportContext *XMLTextImportHelper::CreateTextChildContext(
2173 : SvXMLImport& rImport,
2174 : sal_uInt16 nPrefix, const OUString& rLocalName,
2175 : const Reference< XAttributeList > & xAttrList,
2176 : XMLTextType eType )
2177 : {
2178 1180 : SvXMLImportContext *pContext = 0;
2179 :
2180 1180 : const SvXMLTokenMap& rTokenMap = GetTextElemTokenMap();
2181 1180 : sal_Bool bHeading = sal_False;
2182 1180 : sal_Bool bContent = sal_True;
2183 1180 : sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName );
2184 1180 : switch( nToken )
2185 : {
2186 : case XML_TOK_TEXT_H:
2187 0 : bHeading = sal_True;
2188 : case XML_TOK_TEXT_P:
2189 : pContext = new XMLParaContext( rImport,
2190 : nPrefix, rLocalName,
2191 1065 : xAttrList, bHeading );
2192 1065 : if (m_pImpl->m_bProgress && XML_TEXT_TYPE_SHAPE != eType)
2193 : {
2194 521 : rImport.GetProgressBarHelper()->Increment();
2195 : }
2196 1065 : break;
2197 : case XML_TOK_TEXT_NUMBERED_PARAGRAPH:
2198 : pContext = new XMLNumberedParaContext(
2199 0 : rImport, nPrefix, rLocalName, xAttrList );
2200 0 : break;
2201 : case XML_TOK_TEXT_LIST:
2202 : pContext = new XMLTextListBlockContext( rImport, *this,
2203 : nPrefix, rLocalName,
2204 10 : xAttrList );
2205 10 : break;
2206 : case XML_TOK_TABLE_TABLE:
2207 5 : if( XML_TEXT_TYPE_BODY == eType ||
2208 3 : XML_TEXT_TYPE_TEXTBOX == eType ||
2209 2 : XML_TEXT_TYPE_SECTION == eType ||
2210 0 : XML_TEXT_TYPE_HEADER_FOOTER == eType ||
2211 0 : XML_TEXT_TYPE_CHANGED_REGION == eType ||
2212 : XML_TEXT_TYPE_CELL == eType )
2213 : pContext = CreateTableChildContext( rImport, nPrefix, rLocalName,
2214 5 : xAttrList );
2215 5 : break;
2216 : case XML_TOK_TEXT_SEQUENCE_DECLS:
2217 50 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2218 : XML_TEXT_TYPE_HEADER_FOOTER == eType )
2219 : {
2220 : pContext = new XMLVariableDeclsImportContext(
2221 50 : rImport, *this, nPrefix, rLocalName, VarTypeSequence);
2222 50 : bContent = sal_False;
2223 : }
2224 50 : break;
2225 :
2226 : case XML_TOK_TEXT_VARFIELD_DECLS:
2227 1 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2228 : XML_TEXT_TYPE_HEADER_FOOTER == eType )
2229 : {
2230 : pContext = new XMLVariableDeclsImportContext(
2231 1 : rImport, *this, nPrefix, rLocalName, VarTypeSimple);
2232 1 : bContent = sal_False;
2233 : }
2234 1 : break;
2235 :
2236 : case XML_TOK_TEXT_USERFIELD_DECLS:
2237 3 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted)||
2238 : XML_TEXT_TYPE_HEADER_FOOTER == eType )
2239 : {
2240 : pContext = new XMLVariableDeclsImportContext(
2241 3 : rImport, *this, nPrefix, rLocalName, VarTypeUserField);
2242 3 : bContent = sal_False;
2243 : }
2244 3 : break;
2245 :
2246 : case XML_TOK_TEXT_DDE_DECLS:
2247 0 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2248 : XML_TEXT_TYPE_HEADER_FOOTER == eType )
2249 : {
2250 : pContext = new XMLDdeFieldDeclsImportContext(
2251 0 : rImport, nPrefix, rLocalName);
2252 0 : bContent = sal_False;
2253 : }
2254 0 : break;
2255 :
2256 : case XML_TOK_TEXT_FRAME_PAGE:
2257 2 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2258 1 : XML_TEXT_TYPE_TEXTBOX == eType ||
2259 : XML_TEXT_TYPE_CHANGED_REGION == eType )
2260 : {
2261 : TextContentAnchorType eAnchorType =
2262 : XML_TEXT_TYPE_TEXTBOX == eType ? TextContentAnchorType_AT_FRAME
2263 1 : : TextContentAnchorType_AT_PAGE;
2264 : pContext = new XMLTextFrameContext( rImport, nPrefix,
2265 : rLocalName, xAttrList,
2266 1 : eAnchorType );
2267 1 : bContent = sal_False;
2268 : }
2269 1 : break;
2270 :
2271 : case XML_TOK_DRAW_A_PAGE:
2272 0 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2273 0 : XML_TEXT_TYPE_TEXTBOX == eType ||
2274 : XML_TEXT_TYPE_CHANGED_REGION == eType)
2275 : {
2276 : TextContentAnchorType eAnchorType =
2277 : XML_TEXT_TYPE_TEXTBOX == eType ? TextContentAnchorType_AT_FRAME
2278 0 : : TextContentAnchorType_AT_PAGE;
2279 : pContext = new XMLTextFrameHyperlinkContext( rImport, nPrefix,
2280 : rLocalName, xAttrList,
2281 0 : eAnchorType );
2282 0 : bContent = sal_False;
2283 : }
2284 0 : break;
2285 :
2286 : case XML_TOK_TEXT_INDEX_TITLE:
2287 : case XML_TOK_TEXT_SECTION:
2288 20 : pContext = new XMLSectionImportContext( rImport, nPrefix, rLocalName );
2289 20 : break;
2290 :
2291 : case XML_TOK_TEXT_TOC:
2292 : case XML_TOK_TEXT_OBJECT_INDEX:
2293 : case XML_TOK_TEXT_TABLE_INDEX:
2294 : case XML_TOK_TEXT_ILLUSTRATION_INDEX:
2295 : case XML_TOK_TEXT_USER_INDEX:
2296 : case XML_TOK_TEXT_ALPHABETICAL_INDEX:
2297 : case XML_TOK_TEXT_BIBLIOGRAPHY_INDEX:
2298 14 : if( XML_TEXT_TYPE_SHAPE != eType )
2299 14 : pContext = new XMLIndexTOCContext( rImport, nPrefix, rLocalName );
2300 14 : break;
2301 :
2302 : case XML_TOK_TEXT_TRACKED_CHANGES:
2303 : pContext = new XMLTrackedChangesImportContext( rImport, nPrefix,
2304 0 : rLocalName);
2305 0 : bContent = sal_False;
2306 0 : break;
2307 :
2308 : case XML_TOK_TEXT_CHANGE:
2309 : case XML_TOK_TEXT_CHANGE_START:
2310 : case XML_TOK_TEXT_CHANGE_END:
2311 : pContext = new XMLChangeImportContext(
2312 : rImport, nPrefix, rLocalName,
2313 : (XML_TOK_TEXT_CHANGE_END != nToken),
2314 : (XML_TOK_TEXT_CHANGE_START != nToken),
2315 0 : sal_True);
2316 0 : break;
2317 :
2318 : case XML_TOK_TEXT_FORMS:
2319 6 : pContext = rImport.GetFormImport()->createOfficeFormsContext(rImport, nPrefix, rLocalName);
2320 6 : bContent = sal_False;
2321 6 : break;
2322 :
2323 : case XML_TOK_TEXT_AUTOMARK:
2324 0 : if( XML_TEXT_TYPE_BODY == eType )
2325 : {
2326 0 : pContext = new XMLAutoMarkFileContext(rImport, nPrefix,rLocalName);
2327 : }
2328 0 : bContent = sal_False;
2329 0 : break;
2330 :
2331 : case XML_TOK_TEXT_CALCULATION_SETTINGS:
2332 1 : pContext = new XMLCalculationSettingsContext ( rImport, nPrefix, rLocalName, xAttrList);
2333 1 : bContent = sal_False;
2334 1 : break;
2335 :
2336 : default:
2337 8 : if ((XML_TEXT_TYPE_BODY == eType && m_pImpl->m_bBodyContentStarted) ||
2338 4 : XML_TEXT_TYPE_TEXTBOX == eType ||
2339 : XML_TEXT_TYPE_CHANGED_REGION == eType )
2340 : {
2341 4 : Reference < XShapes > xShapes;
2342 : pContext = rImport.GetShapeImport()->CreateGroupChildContext(
2343 4 : rImport, nPrefix, rLocalName, xAttrList, xShapes );
2344 4 : bContent = sal_False;
2345 : }
2346 : }
2347 :
2348 : // handle open redlines
2349 : if ( (XML_TOK_TEXT_CHANGE != nToken) &&
2350 : (XML_TOK_TEXT_CHANGE_END != nToken) &&
2351 : (XML_TOK_TEXT_CHANGE_START != nToken) )
2352 : {
2353 : // ResetOpenRedlineId();
2354 : }
2355 :
2356 1180 : if( XML_TEXT_TYPE_BODY == eType && bContent )
2357 : {
2358 346 : m_pImpl->m_bBodyContentStarted = sal_False;
2359 : }
2360 :
2361 1180 : return pContext;
2362 : }
2363 :
2364 0 : SvXMLImportContext *XMLTextImportHelper::CreateTableChildContext(
2365 : SvXMLImport&,
2366 : sal_uInt16 /*nPrefix*/, const OUString& /*rLocalName*/,
2367 : const Reference< XAttributeList > & )
2368 : {
2369 0 : return 0;
2370 : }
2371 :
2372 : /// get data style key for use with NumberFormat property
2373 112 : sal_Int32 XMLTextImportHelper::GetDataStyleKey(const OUString& sStyleName,
2374 : sal_Bool* pIsSystemLanguage )
2375 : {
2376 : const SvXMLStyleContext* pStyle =
2377 112 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2378 : FindStyleChildContext( XML_STYLE_FAMILY_DATA_STYLE,
2379 112 : sStyleName, sal_True );
2380 :
2381 : // get appropriate context
2382 :
2383 :
2384 : // first check if its a impress and draw only number format
2385 : // this is needed since its also a SvXMLNumFormatContext,
2386 : // that was needed to support them for controls in impress/draw also
2387 112 : SdXMLNumberFormatImportContext* pSdNumStyle = PTR_CAST( SdXMLNumberFormatImportContext, pStyle );
2388 112 : if( pSdNumStyle )
2389 : {
2390 0 : return pSdNumStyle->GetDrawKey();
2391 : }
2392 : else
2393 : {
2394 112 : SvXMLNumFormatContext* pNumStyle = PTR_CAST( SvXMLNumFormatContext, pStyle );
2395 112 : if( pNumStyle )
2396 : {
2397 12 : if( pIsSystemLanguage != NULL )
2398 8 : *pIsSystemLanguage = pNumStyle->IsSystemLanguage();
2399 :
2400 : // return key
2401 12 : return pNumStyle->GetKey();
2402 : }
2403 : }
2404 100 : return -1;
2405 : }
2406 :
2407 5 : const SvxXMLListStyleContext *XMLTextImportHelper::FindAutoListStyle( const OUString& rName ) const
2408 : {
2409 5 : const SvxXMLListStyleContext *pStyle = 0;
2410 5 : if (m_pImpl->m_xAutoStyles.Is())
2411 : {
2412 : const SvXMLStyleContext* pTempStyle =
2413 5 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2414 : FindStyleChildContext( XML_STYLE_FAMILY_TEXT_LIST, rName,
2415 5 : sal_True );
2416 5 : pStyle = PTR_CAST( SvxXMLListStyleContext ,pTempStyle);
2417 : }
2418 :
2419 5 : return pStyle;
2420 : }
2421 :
2422 48 : XMLPropStyleContext *XMLTextImportHelper::FindAutoFrameStyle( const OUString& rName ) const
2423 : {
2424 48 : XMLPropStyleContext *pStyle = 0;
2425 48 : if (m_pImpl->m_xAutoStyles.Is())
2426 : {
2427 : const SvXMLStyleContext* pTempStyle =
2428 48 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2429 : FindStyleChildContext( XML_STYLE_FAMILY_SD_GRAPHICS_ID, rName,
2430 48 : sal_True );
2431 48 : pStyle = PTR_CAST( XMLPropStyleContext ,pTempStyle);
2432 : }
2433 :
2434 48 : return pStyle;
2435 : }
2436 :
2437 34 : XMLPropStyleContext* XMLTextImportHelper::FindSectionStyle(
2438 : const OUString& rName ) const
2439 : {
2440 34 : XMLPropStyleContext* pStyle = NULL;
2441 34 : if (m_pImpl->m_xAutoStyles.Is())
2442 : {
2443 : const SvXMLStyleContext* pTempStyle =
2444 34 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2445 : FindStyleChildContext(
2446 : XML_STYLE_FAMILY_TEXT_SECTION,
2447 34 : rName, sal_True );
2448 34 : pStyle = PTR_CAST( XMLPropStyleContext,pTempStyle);
2449 : }
2450 :
2451 34 : return pStyle;
2452 : }
2453 :
2454 232 : XMLPropStyleContext* XMLTextImportHelper::FindPageMaster(
2455 : const OUString& rName ) const
2456 : {
2457 232 : XMLPropStyleContext* pStyle = NULL;
2458 232 : if (m_pImpl->m_xAutoStyles.Is())
2459 : {
2460 : const SvXMLStyleContext* pTempStyle =
2461 232 : ((SvXMLStylesContext *)&m_pImpl->m_xAutoStyles)->
2462 : FindStyleChildContext(
2463 : XML_STYLE_FAMILY_PAGE_MASTER,
2464 232 : rName, sal_True );
2465 232 : pStyle = PTR_CAST( XMLPropStyleContext,pTempStyle);
2466 : }
2467 :
2468 232 : return pStyle;
2469 : }
2470 :
2471 :
2472 160 : void XMLTextImportHelper::PushListContext(XMLTextListBlockContext *i_pListBlock)
2473 : {
2474 160 : GetTextListHelper().PushListContext(i_pListBlock);
2475 160 : }
2476 :
2477 160 : void XMLTextImportHelper::PopListContext()
2478 : {
2479 160 : GetTextListHelper().PopListContext();
2480 160 : }
2481 :
2482 :
2483 0 : const SvXMLTokenMap& XMLTextImportHelper::GetTextNumberedParagraphAttrTokenMap()
2484 : {
2485 0 : if (!m_pImpl->m_pTextNumberedParagraphAttrTokenMap.get())
2486 : {
2487 0 : m_pImpl->m_pTextNumberedParagraphAttrTokenMap.reset(
2488 0 : new SvXMLTokenMap( aTextNumberedParagraphAttrTokenMap ) );
2489 : }
2490 0 : return *m_pImpl->m_pTextNumberedParagraphAttrTokenMap;
2491 : }
2492 :
2493 27 : const SvXMLTokenMap& XMLTextImportHelper::GetTextListBlockAttrTokenMap()
2494 : {
2495 27 : if (!m_pImpl->m_pTextListBlockAttrTokenMap.get())
2496 : {
2497 5 : m_pImpl->m_pTextListBlockAttrTokenMap.reset(
2498 10 : new SvXMLTokenMap( aTextListBlockAttrTokenMap ) );
2499 : }
2500 27 : return *m_pImpl->m_pTextListBlockAttrTokenMap;
2501 : }
2502 :
2503 37 : const SvXMLTokenMap& XMLTextImportHelper::GetTextListBlockElemTokenMap()
2504 : {
2505 37 : if (!m_pImpl->m_pTextListBlockElemTokenMap.get())
2506 : {
2507 5 : m_pImpl->m_pTextListBlockElemTokenMap.reset(
2508 10 : new SvXMLTokenMap( aTextListBlockElemTokenMap ) );
2509 : }
2510 37 : return *m_pImpl->m_pTextListBlockElemTokenMap;
2511 : }
2512 :
2513 229 : SvI18NMap& XMLTextImportHelper::GetRenameMap()
2514 : {
2515 229 : if (!m_pImpl->m_pRenameMap.get())
2516 : {
2517 50 : m_pImpl->m_pRenameMap.reset( new SvI18NMap() );
2518 : }
2519 229 : return *m_pImpl->m_pRenameMap;
2520 : }
2521 :
2522 955 : void XMLTextImportHelper::InsertBookmarkStartRange(
2523 : const OUString & sName,
2524 : const Reference<XTextRange> & rRange,
2525 : OUString const& i_rXmlId,
2526 : ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > & i_rpRDFaAttributes)
2527 : {
2528 1910 : m_pImpl->m_BookmarkStartRanges[sName] =
2529 955 : ::boost::make_tuple(rRange, i_rXmlId, i_rpRDFaAttributes);
2530 955 : m_pImpl->m_BookmarkVector.push_back(sName);
2531 955 : }
2532 :
2533 955 : sal_Bool XMLTextImportHelper::FindAndRemoveBookmarkStartRange(
2534 : const OUString & sName,
2535 : Reference<XTextRange> & o_rRange,
2536 : OUString & o_rXmlId,
2537 : ::boost::shared_ptr< ::xmloff::ParsedRDFaAttributes > & o_rpRDFaAttributes)
2538 : {
2539 955 : if (m_pImpl->m_BookmarkStartRanges.count(sName))
2540 : {
2541 : Impl::BookmarkMapEntry_t & rEntry =
2542 955 : (*m_pImpl->m_BookmarkStartRanges.find(sName)).second;
2543 955 : o_rRange.set(rEntry.get<0>());
2544 955 : o_rXmlId = rEntry.get<1>();
2545 955 : o_rpRDFaAttributes = rEntry.get<2>();
2546 955 : m_pImpl->m_BookmarkStartRanges.erase(sName);
2547 955 : Impl::BookmarkVector_t::iterator it(m_pImpl->m_BookmarkVector.begin());
2548 1910 : while (it != m_pImpl->m_BookmarkVector.end() && it->compareTo(sName)!=0)
2549 : {
2550 0 : ++it;
2551 : }
2552 955 : if (it!=m_pImpl->m_BookmarkVector.end())
2553 : {
2554 955 : m_pImpl->m_BookmarkVector.erase(it);
2555 : }
2556 955 : return sal_True;
2557 : }
2558 : else
2559 : {
2560 0 : return sal_False;
2561 : }
2562 : }
2563 :
2564 0 : OUString XMLTextImportHelper::FindActiveBookmarkName()
2565 : {
2566 0 : if (!m_pImpl->m_BookmarkVector.empty())
2567 : {
2568 0 : return m_pImpl->m_BookmarkVector.back();
2569 : }
2570 : else
2571 : {
2572 0 : return OUString(); // return the empty string on error...
2573 : }
2574 : }
2575 :
2576 0 : void XMLTextImportHelper::pushFieldCtx( OUString name, OUString type )
2577 : {
2578 0 : m_pImpl->m_FieldStack.push(Impl::field_stack_item_t(
2579 0 : Impl::field_name_type_t(name, type), Impl::field_params_t()));
2580 0 : }
2581 :
2582 0 : void XMLTextImportHelper::popFieldCtx()
2583 : {
2584 0 : if ( !m_pImpl->m_FieldStack.empty() )
2585 0 : m_pImpl->m_FieldStack.pop();
2586 0 : }
2587 :
2588 0 : void XMLTextImportHelper::addFieldParam( OUString name, OUString value )
2589 : {
2590 : DBG_ASSERT(!m_pImpl->m_FieldStack.empty(),
2591 : "stack is empty: not good! Do a pushFieldCtx before...");
2592 0 : if (!m_pImpl->m_FieldStack.empty()) {
2593 0 : Impl::field_stack_item_t & FieldStackItem(m_pImpl->m_FieldStack.top());
2594 0 : FieldStackItem.second.push_back(Impl::field_param_t( name, value ));
2595 : }
2596 0 : }
2597 :
2598 0 : OUString XMLTextImportHelper::getCurrentFieldType()
2599 : {
2600 : DBG_ASSERT(!m_pImpl->m_FieldStack.empty(),
2601 : "stack is empty: not good! Do a pushFieldCtx before...");
2602 0 : if (!m_pImpl->m_FieldStack.empty())
2603 : {
2604 0 : return m_pImpl->m_FieldStack.top().first.second;
2605 : }
2606 : else
2607 : {
2608 0 : return OUString();
2609 : }
2610 : }
2611 :
2612 0 : bool XMLTextImportHelper::hasCurrentFieldCtx()
2613 : {
2614 0 : return !m_pImpl->m_FieldStack.empty();
2615 : }
2616 :
2617 0 : void XMLTextImportHelper::setCurrentFieldParamsTo(::com::sun::star::uno::Reference< ::com::sun::star::text::XFormField> &xFormField)
2618 : {
2619 : DBG_ASSERT(!m_pImpl->m_FieldStack.empty(),
2620 : "stack is empty: not good! Do a pushFieldCtx before...");
2621 0 : if (!m_pImpl->m_FieldStack.empty() && xFormField.is())
2622 : {
2623 0 : FieldParamImporter(&m_pImpl->m_FieldStack.top().second,
2624 0 : xFormField->getParameters()).Import();
2625 : }
2626 0 : }
2627 :
2628 :
2629 14 : void XMLTextImportHelper::ConnectFrameChains(
2630 : const OUString& rFrmName,
2631 : const OUString& rNextFrmName,
2632 : const Reference < XPropertySet >& rFrmPropSet )
2633 : {
2634 14 : static OUString s_ChainNextName( "ChainNextName");
2635 14 : static OUString s_ChainPrevName( "ChainPrevName");
2636 :
2637 14 : if( rFrmName.isEmpty() )
2638 15 : return;
2639 :
2640 13 : if( !rNextFrmName.isEmpty() )
2641 : {
2642 0 : OUString sNextFrmName(GetRenameMap().Get( XML_TEXT_RENAME_TYPE_FRAME,
2643 0 : rNextFrmName ));
2644 0 : if (m_pImpl->m_xTextFrames.is()
2645 0 : && m_pImpl->m_xTextFrames->hasByName(sNextFrmName))
2646 : {
2647 0 : rFrmPropSet->setPropertyValue(s_ChainNextName,
2648 0 : makeAny(sNextFrmName));
2649 : }
2650 : else
2651 : {
2652 0 : if (!m_pImpl->m_pPrevFrmNames.get())
2653 : {
2654 0 : m_pImpl->m_pPrevFrmNames.reset( new std::vector<OUString> );
2655 0 : m_pImpl->m_pNextFrmNames.reset( new std::vector<OUString> );
2656 : }
2657 0 : m_pImpl->m_pPrevFrmNames->push_back(rFrmName);
2658 0 : m_pImpl->m_pNextFrmNames->push_back(sNextFrmName);
2659 0 : }
2660 : }
2661 13 : if (m_pImpl->m_pPrevFrmNames.get() && !m_pImpl->m_pPrevFrmNames->empty())
2662 : {
2663 0 : for(std::vector<OUString>::iterator i = m_pImpl->m_pPrevFrmNames->begin(), j = m_pImpl->m_pNextFrmNames->begin(); i != m_pImpl->m_pPrevFrmNames->end() && j != m_pImpl->m_pNextFrmNames->end(); ++i, ++j)
2664 : {
2665 0 : if((*j).equals(rFrmName))
2666 : {
2667 : // The previuous frame must exist, because it existing than
2668 : // inserting the entry
2669 0 : rFrmPropSet->setPropertyValue(s_ChainPrevName, makeAny(*i));
2670 :
2671 0 : i = m_pImpl->m_pPrevFrmNames->erase(i);
2672 0 : j = m_pImpl->m_pNextFrmNames->erase(j);
2673 :
2674 : // There cannot be more than one previous frames
2675 0 : break;
2676 : }
2677 : }
2678 : }
2679 : }
2680 :
2681 3 : sal_Bool XMLTextImportHelper::IsInFrame() const
2682 : {
2683 3 : static OUString s_TextFrame( "TextFrame");
2684 :
2685 3 : sal_Bool bIsInFrame = sal_False;
2686 :
2687 : // are we currently in a text frame? yes, if the cursor has a
2688 : // TextFrame property and it's non-NULL
2689 3 : Reference<XPropertySet> xPropSet(((XMLTextImportHelper *)this)->GetCursor(), UNO_QUERY);
2690 3 : if (xPropSet.is())
2691 : {
2692 3 : if (xPropSet->getPropertySetInfo()->hasPropertyByName(s_TextFrame))
2693 : {
2694 : uno::Reference<XTextFrame> const xFrame(
2695 3 : xPropSet->getPropertyValue(s_TextFrame), UNO_QUERY);
2696 :
2697 3 : if (xFrame.is())
2698 : {
2699 0 : bIsInFrame = sal_True;
2700 3 : }
2701 : }
2702 : }
2703 :
2704 3 : return bIsInFrame;
2705 : }
2706 :
2707 0 : sal_Bool XMLTextImportHelper::IsInHeaderFooter() const
2708 : {
2709 0 : return sal_False;
2710 : }
2711 :
2712 0 : Reference< XPropertySet> XMLTextImportHelper::createAndInsertOLEObject(
2713 : SvXMLImport&,
2714 : const OUString& /*rHRef*/,
2715 : const OUString& /*rStyleName*/,
2716 : const OUString& /*rTblName*/,
2717 : sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ )
2718 : {
2719 0 : Reference< XPropertySet> xPropSet;
2720 0 : return xPropSet;
2721 : }
2722 :
2723 0 : Reference< XPropertySet> XMLTextImportHelper::createAndInsertOOoLink(
2724 : SvXMLImport&,
2725 : const OUString& /*rHRef*/,
2726 : const OUString& /*rStyleName*/,
2727 : const OUString& /*rTblName*/,
2728 : sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ )
2729 : {
2730 0 : Reference< XPropertySet> xPropSet;
2731 0 : return xPropSet;
2732 : }
2733 :
2734 0 : Reference< XPropertySet> XMLTextImportHelper::createAndInsertApplet(
2735 : const OUString& /*rCode*/,
2736 : const OUString& /*rName*/,
2737 : sal_Bool /*bMayScript*/,
2738 : const OUString& /*rHRef*/,
2739 : sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ )
2740 : {
2741 0 : Reference< XPropertySet> xPropSet;
2742 0 : return xPropSet;
2743 : }
2744 0 : Reference< XPropertySet> XMLTextImportHelper::createAndInsertPlugin(
2745 : const OUString& /*rMimeType*/,
2746 : const OUString& /*rHRef*/,
2747 : sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ )
2748 : {
2749 0 : Reference< XPropertySet> xPropSet;
2750 0 : return xPropSet;
2751 : }
2752 0 : Reference< XPropertySet> XMLTextImportHelper::createAndInsertFloatingFrame(
2753 : const OUString& /*rName*/,
2754 : const OUString& /*rHRef*/,
2755 : const OUString& /*rStyleName*/,
2756 : sal_Int32 /*nWidth*/, sal_Int32 /*nHeight*/ )
2757 : {
2758 0 : Reference< XPropertySet> xPropSet;
2759 0 : return xPropSet;
2760 : }
2761 :
2762 0 : void XMLTextImportHelper::endAppletOrPlugin(
2763 : const Reference < XPropertySet> &,
2764 : std::map < const OUString, OUString, UStringLess > &)
2765 : {
2766 0 : }
2767 : // redline helper: dummy implementation to be overridden in sw/filter/xml
2768 0 : void XMLTextImportHelper::RedlineAdd( const OUString& /*rType*/,
2769 : const OUString& /*rId*/,
2770 : const OUString& /*rAuthor*/,
2771 : const OUString& /*rComment*/,
2772 : const util::DateTime& /*rDateTime*/,
2773 : sal_Bool /*bMergeLastPara*/)
2774 : {
2775 : // dummy implementation: do nothing
2776 0 : }
2777 :
2778 0 : Reference<XTextCursor> XMLTextImportHelper::RedlineCreateText(
2779 : Reference<XTextCursor> & /*rOldCursor*/,
2780 : const OUString& /*rId*/)
2781 : {
2782 : // dummy implementation: do nothing
2783 0 : Reference<XTextCursor> xRet;
2784 0 : return xRet;
2785 : }
2786 :
2787 0 : void XMLTextImportHelper::RedlineSetCursor(
2788 : const OUString& /*rId*/,
2789 : sal_Bool /*bStart*/,
2790 : sal_Bool /*bIsOutsideOfParagraph*/)
2791 : {
2792 : // dummy implementation: do nothing
2793 0 : }
2794 :
2795 0 : void XMLTextImportHelper::RedlineAdjustStartNodeCursor(sal_Bool)
2796 : {
2797 : // dummy implementation: do nothing
2798 0 : }
2799 :
2800 0 : void XMLTextImportHelper::SetShowChanges( sal_Bool )
2801 : {
2802 : // dummy implementation: do nothing
2803 0 : }
2804 :
2805 0 : void XMLTextImportHelper::SetRecordChanges( sal_Bool )
2806 : {
2807 : // dummy implementation: do nothing
2808 0 : }
2809 0 : void XMLTextImportHelper::SetChangesProtectionKey(const Sequence<sal_Int8> &)
2810 : {
2811 : // dummy implementation: do nothing
2812 0 : }
2813 :
2814 :
2815 285 : OUString XMLTextImportHelper::GetOpenRedlineId()
2816 : {
2817 285 : return m_pImpl->m_sOpenRedlineIdentifier;
2818 : }
2819 :
2820 0 : void XMLTextImportHelper::SetOpenRedlineId( OUString& rId)
2821 : {
2822 0 : m_pImpl->m_sOpenRedlineIdentifier = rId;
2823 0 : }
2824 :
2825 0 : void XMLTextImportHelper::ResetOpenRedlineId()
2826 : {
2827 0 : OUString sEmpty;
2828 0 : SetOpenRedlineId(sEmpty);
2829 0 : }
2830 :
2831 : void
2832 158 : XMLTextImportHelper::SetCellParaStyleDefault(OUString const& rNewValue)
2833 : {
2834 158 : m_pImpl->m_sCellParaStyleDefault = rNewValue;
2835 158 : }
2836 :
2837 1227 : OUString const& XMLTextImportHelper::GetCellParaStyleDefault()
2838 : {
2839 1227 : return m_pImpl->m_sCellParaStyleDefault;
2840 : }
2841 :
2842 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|