Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <com/sun/star/beans/PropertyValue.hpp>
30 : : #include <com/sun/star/beans/XPropertySet.hpp>
31 : : #include <com/sun/star/awt/Size.hpp>
32 : : #include <com/sun/star/awt/FontDescriptor.hpp>
33 : : #include <com/sun/star/text/HoriOrientation.hpp>
34 : : #include <com/sun/star/text/VertOrientation.hpp>
35 : : #include <com/sun/star/text/PositionAndSpaceMode.hpp>
36 : : #include <com/sun/star/text/LabelFollow.hpp>
37 : : #include <com/sun/star/container/XNameContainer.hpp>
38 : : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
39 : : #include <com/sun/star/style/XStyle.hpp>
40 : : #include <com/sun/star/io/XOutputStream.hpp>
41 : :
42 : : #include <rtl/ustrbuf.hxx>
43 : :
44 : : #include <tools/debug.hxx>
45 : : #include <tools/fontenum.hxx>
46 : : #include <tools/string.hxx>
47 : :
48 : : #include <sax/tools/converter.hxx>
49 : :
50 : : #include <xmloff/xmltkmap.hxx>
51 : : #include <xmloff/nmspmap.hxx>
52 : : #include "xmloff/xmlnmspe.hxx"
53 : : #include <xmloff/xmlimp.hxx>
54 : : #include <xmloff/XMLBase64ImportContext.hxx>
55 : : #include <xmloff/xmltoken.hxx>
56 : :
57 : : #include <xmloff/i18nmap.hxx>
58 : : #include <xmloff/xmluconv.hxx>
59 : : #include "fonthdl.hxx"
60 : : #include <xmloff/XMLFontStylesContext.hxx>
61 : : #include <xmloff/families.hxx>
62 : : #include <xmloff/maptype.hxx>
63 : :
64 : : #include <xmloff/xmlnumi.hxx>
65 : :
66 : :
67 : : using ::rtl::OUString;
68 : : using ::rtl::OUStringBuffer;
69 : :
70 : : using namespace ::com::sun::star;
71 : : using namespace ::com::sun::star::uno;
72 : : using namespace ::com::sun::star::style;
73 : : using namespace ::com::sun::star::text;
74 : : using namespace ::com::sun::star::beans;
75 : : using namespace ::com::sun::star::container;
76 : : using namespace ::com::sun::star::lang;
77 : : using namespace ::com::sun::star::frame;
78 : : using namespace ::xmloff::token;
79 : : using namespace ::com::sun::star::io;
80 : :
81 : : using rtl::OUString;
82 : : using rtl::OUStringBuffer;
83 : :
84 : : static sal_Char const XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE[] =
85 : : "SymbolTextDistance";
86 : : static sal_Char const XML_UNO_NAME_NRULE_PARENT_NUMBERING[] =
87 : : "ParentNumbering";
88 : : static sal_Char const XML_UNO_NAME_NRULE_CHAR_STYLE_NAME[] =
89 : : "CharStyleName";
90 : : static sal_Char const XML_UNO_NAME_NRULE_BULLET_CHAR[] ="BulletChar";
91 : : static sal_Char const XML_UNO_NAME_NRULE_BULLET_RELSIZE[] = "BulletRelSize";
92 : : static sal_Char const XML_UNO_NAME_NRULE_GRAPHIC_SIZE[] =
93 : : "GraphicSize";
94 : : static sal_Char const XML_UNO_NAME_NRULE_VERT_ORIENT[] ="VertOrient";
95 : :
96 : : static sal_Char const XML_UNO_NAME_NRULE_NUMBERINGTYPE[] = "NumberingType";
97 : : static sal_Char const XML_UNO_NAME_NRULE_PREFIX[] = "Prefix";
98 : : static sal_Char const XML_UNO_NAME_NRULE_SUFFIX[] = "Suffix";
99 : : static sal_Char const XML_UNO_NAME_NRULE_ADJUST[] = "Adjust";
100 : : static sal_Char const XML_UNO_NAME_NRULE_LEFT_MARGIN[] = "LeftMargin";
101 : : static sal_Char const XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET[] =
102 : : "FirstLineOffset";
103 : : static sal_Char const XML_UNO_NAME_NRULE_BULLET_FONT[] = "BulletFont";
104 : : static sal_Char const XML_UNO_NAME_NRULE_GRAPHICURL[] = "GraphicURL";
105 : : static sal_Char const XML_UNO_NAME_NRULE_START_WITH[] = "StartWith";
106 : : static sal_Char const XML_UNO_NAME_NRULE_BULLET_COLOR[] = "BulletColor";
107 : : static sal_Char const XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE[] = "PositionAndSpaceMode";
108 : : static sal_Char const XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY[] = "LabelFollowedBy";
109 : : static sal_Char const XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION[] = "ListtabStopPosition";
110 : : static sal_Char const XML_UNO_NAME_NRULE_FIRST_LINE_INDENT[] = "FirstLineIndent";
111 : : static sal_Char const XML_UNO_NAME_NRULE_INDENT_AT[] = "IndentAt";
112 : :
113 : : // ---------------------------------------------------------------------
114 : :
115 : : class SvxXMLListLevelStyleContext_Impl;
116 : :
117 : : class SvxXMLListLevelStyleAttrContext_Impl : public SvXMLImportContext
118 : : {
119 : : SvxXMLListLevelStyleContext_Impl& rListLevel;
120 : :
121 : : public:
122 : :
123 : : SvxXMLListLevelStyleAttrContext_Impl(
124 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
125 : : const OUString& rLName,
126 : : const Reference< xml::sax::XAttributeList >& xAttrList,
127 : : SvxXMLListLevelStyleContext_Impl& rLLevel );
128 : : virtual ~SvxXMLListLevelStyleAttrContext_Impl();
129 : :
130 : : virtual SvXMLImportContext *CreateChildContext(
131 : : sal_uInt16 nPrefix, const OUString& rLocalName,
132 : : const Reference< xml::sax::XAttributeList > & xAttrList );
133 : : };
134 : :
135 : : // ---------------------------------------------------------------------
136 : :
137 : : class SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl : public SvXMLImportContext
138 : : {
139 : : SvxXMLListLevelStyleContext_Impl& rListLevel;
140 : :
141 : : public:
142 : :
143 : : SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
144 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
145 : : const OUString& rLName,
146 : : const Reference< xml::sax::XAttributeList >& xAttrList,
147 : : SvxXMLListLevelStyleContext_Impl& rLLevel );
148 : : virtual ~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl();
149 : : };
150 : :
151 : : // ---------------------------------------------------------------------
152 : :
153 : : enum SvxXMLTextListLevelStyleAttrTokens
154 : : {
155 : : XML_TOK_TEXT_LEVEL_ATTR_LEVEL,
156 : : XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME,
157 : : XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR,
158 : : XML_TOK_TEXT_LEVEL_ATTR_HREF,
159 : : XML_TOK_TEXT_LEVEL_ATTR_TYPE,
160 : : XML_TOK_TEXT_LEVEL_ATTR_SHOW,
161 : : XML_TOK_TEXT_LEVEL_ATTR_ACTUATE,
162 : : XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT,
163 : : XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX,
164 : : XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX,
165 : : XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC,
166 : : XML_TOK_TEXT_LEVEL_ATTR_START_VALUE,
167 : : XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS,
168 : :
169 : : XML_TOK_TEXT_LEVEL_ATTR_END=XML_TOK_UNKNOWN
170 : : };
171 : :
172 : 1450 : const SvXMLTokenMapEntry* lcl_getLevelAttrTokenMap()
173 : : {
174 : : static SvXMLTokenMapEntry aLevelAttrTokenMap[] =
175 : : {
176 : : { XML_NAMESPACE_TEXT, XML_LEVEL, XML_TOK_TEXT_LEVEL_ATTR_LEVEL },
177 : : { XML_NAMESPACE_TEXT, XML_STYLE_NAME, XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME },
178 : : { XML_NAMESPACE_TEXT, XML_BULLET_CHAR, XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR },
179 : : { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_TEXT_LEVEL_ATTR_HREF },
180 : : { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_TEXT_LEVEL_ATTR_TYPE },
181 : : { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_TEXT_LEVEL_ATTR_SHOW },
182 : : { XML_NAMESPACE_XLINK, XML_ACTUATE, XML_TOK_TEXT_LEVEL_ATTR_ACTUATE },
183 : :
184 : : { XML_NAMESPACE_STYLE, XML_NUM_FORMAT, XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT },
185 : : { XML_NAMESPACE_STYLE, XML_NUM_PREFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX },
186 : : { XML_NAMESPACE_STYLE, XML_NUM_SUFFIX, XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX },
187 : : { XML_NAMESPACE_STYLE, XML_NUM_LETTER_SYNC, XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC },
188 : : { XML_NAMESPACE_TEXT, XML_START_VALUE, XML_TOK_TEXT_LEVEL_ATTR_START_VALUE },
189 : : { XML_NAMESPACE_TEXT, XML_DISPLAY_LEVELS, XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS },
190 : :
191 : : XML_TOKEN_MAP_END
192 : : };
193 : 1450 : return aLevelAttrTokenMap;
194 : : }
195 : :
196 : : class SvxXMLListLevelStyleContext_Impl : public SvXMLImportContext
197 : : {
198 : : friend class SvxXMLListLevelStyleAttrContext_Impl;
199 : : const OUString sStarBats;
200 : : const OUString sStarMath;
201 : :
202 : : OUString sPrefix;
203 : : OUString sSuffix;
204 : : OUString sTextStyleName;
205 : : OUString sNumFormat;
206 : : OUString sNumLetterSync;
207 : : OUString sBulletFontName;
208 : : OUString sBulletFontStyleName;
209 : : OUString sImageURL;
210 : :
211 : : Reference < XOutputStream > xBase64Stream;
212 : :
213 : : sal_Int32 nLevel;
214 : : sal_Int32 nSpaceBefore;
215 : : sal_Int32 nMinLabelWidth;
216 : : sal_Int32 nMinLabelDist;
217 : : sal_Int32 nImageWidth;
218 : : sal_Int32 nImageHeight;
219 : : sal_Int16 nNumStartValue;
220 : : sal_Int16 nNumDisplayLevels;
221 : :
222 : : sal_Int16 eAdjust;
223 : : sal_Int16 eBulletFontFamily;
224 : : sal_Int16 eBulletFontPitch;
225 : : rtl_TextEncoding eBulletFontEncoding;
226 : : sal_Int16 eImageVertOrient;
227 : :
228 : : sal_Unicode cBullet;
229 : :
230 : : sal_Int16 nRelSize;
231 : : sal_Int32 m_nColor;
232 : :
233 : : sal_Int16 ePosAndSpaceMode;
234 : : sal_Int16 eLabelFollowedBy;
235 : : sal_Int32 nListtabStopPosition;
236 : : sal_Int32 nFirstLineIndent;
237 : : sal_Int32 nIndentAt;
238 : :
239 : : sal_Bool bBullet : 1;
240 : : sal_Bool bImage : 1;
241 : : sal_Bool bNum : 1;
242 : : sal_Bool bHasColor : 1;
243 : :
244 : 460 : void SetRelSize( sal_Int16 nRel ) { nRelSize = nRel; }
245 : 460 : void SetColor( sal_Int32 nColor )
246 : 460 : { m_nColor = nColor; bHasColor = sal_True; }
247 : 479 : void SetSpaceBefore( sal_Int32 nSet ) { nSpaceBefore = nSet; }
248 : 499 : void SetMinLabelWidth( sal_Int32 nSet ) { nMinLabelWidth = nSet; }
249 : 50 : void SetMinLabelDist( sal_Int32 nSet ) { nMinLabelDist = nSet; }
250 : 9 : void SetAdjust( sal_Int16 eSet ) { eAdjust = eSet; }
251 : :
252 : 522 : void SetBulletFontName( const OUString& rSet ) { sBulletFontName = rSet; }
253 : 32 : void SetBulletFontStyleName( const OUString& rSet )
254 : 32 : { sBulletFontStyleName = rSet; }
255 : 32 : void SetBulletFontFamily( sal_Int16 eSet ) { eBulletFontFamily = eSet; }
256 : 32 : void SetBulletFontPitch( sal_Int16 eSet ) { eBulletFontPitch = eSet; }
257 : 32 : void SetBulletFontEncoding( rtl_TextEncoding eSet )
258 : 32 : { eBulletFontEncoding = eSet; }
259 : :
260 : 0 : void SetImageWidth( sal_Int32 nSet ) { nImageWidth = nSet; }
261 : 0 : void SetImageHeight( sal_Int32 nSet ) { nImageHeight = nSet; }
262 : 1812 : void SetImageVertOrient( sal_Int16 eSet )
263 : 1812 : { eImageVertOrient = eSet; }
264 : :
265 : : public:
266 : :
267 : : SvxXMLListLevelStyleContext_Impl(
268 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
269 : : const OUString& rLName,
270 : : const Reference< xml::sax::XAttributeList > & xAttrList );
271 : : virtual ~SvxXMLListLevelStyleContext_Impl();
272 : :
273 : : virtual SvXMLImportContext *CreateChildContext(
274 : : sal_uInt16 nPrefix, const OUString& rLocalName,
275 : : const Reference< xml::sax::XAttributeList > & xAttrList );
276 : :
277 : 1310 : sal_Int32 GetLevel() const { return nLevel; }
278 : : Sequence<beans::PropertyValue> GetProperties(
279 : : const SvI18NMap *pI18NMap=0 );
280 : :
281 : 860 : inline void SetPosAndSpaceMode( sal_Int16 eValue )
282 : : {
283 : 860 : ePosAndSpaceMode = eValue;
284 : 860 : }
285 : 860 : inline void SetLabelFollowedBy( sal_Int16 eValue )
286 : : {
287 : 860 : eLabelFollowedBy = eValue;
288 : 860 : }
289 : 644 : inline void SetListtabStopPosition( sal_Int32 nValue )
290 : : {
291 : 644 : nListtabStopPosition = nValue;
292 : 644 : }
293 : 833 : inline void SetFirstLineIndent( sal_Int32 nValue )
294 : : {
295 : 833 : nFirstLineIndent = nValue;
296 : 833 : }
297 : 857 : inline void SetIndentAt( sal_Int32 nValue )
298 : : {
299 : 857 : nIndentAt = nValue;
300 : 857 : }
301 : : };
302 : :
303 : 1450 : SvxXMLListLevelStyleContext_Impl::SvxXMLListLevelStyleContext_Impl(
304 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
305 : : const OUString& rLName,
306 : : const Reference< xml::sax::XAttributeList > & xAttrList )
307 : :
308 : : : SvXMLImportContext( rImport, nPrfx, rLName )
309 : : , sStarBats( "StarBats" )
310 : : , sStarMath( "StarMath" )
311 : : , sNumFormat( OUString("1") )
312 : : , nLevel( -1L )
313 : : , nSpaceBefore( 0L )
314 : : , nMinLabelWidth( 0L )
315 : : , nMinLabelDist( 0L )
316 : : , nImageWidth( 0L )
317 : : , nImageHeight( 0L )
318 : : , nNumStartValue( 1 )
319 : : , nNumDisplayLevels( 1 )
320 : : , eAdjust( HoriOrientation::LEFT )
321 : : , eBulletFontFamily( FAMILY_DONTKNOW )
322 : : , eBulletFontPitch( PITCH_DONTKNOW )
323 : : , eBulletFontEncoding( RTL_TEXTENCODING_DONTKNOW )
324 : : , eImageVertOrient(0)
325 : : , cBullet( 0 )
326 : : , nRelSize(0)
327 : : , m_nColor(0)
328 : : , ePosAndSpaceMode( PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION )
329 : : , eLabelFollowedBy( LabelFollow::LISTTAB )
330 : : , nListtabStopPosition( 0 )
331 : : , nFirstLineIndent( 0 )
332 : : , nIndentAt( 0 )
333 : : , bBullet( sal_False )
334 : : , bImage( sal_False )
335 : : , bNum( sal_False )
336 : 1450 : , bHasColor( sal_False )
337 : : {
338 [ + + ][ + + ]: 2602 : if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
[ + + ][ + - ]
339 [ + - ]: 1152 : IsXMLToken( rLName, XML_OUTLINE_LEVEL_STYLE ) )
340 : 928 : bNum = sal_True;
341 [ + - ][ + - ]: 522 : else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_BULLET ) )
342 : 522 : bBullet = sal_True;
343 [ # # ][ # # ]: 0 : else if( IsXMLToken( rLName, XML_LIST_LEVEL_STYLE_IMAGE ) )
344 : 0 : bImage = sal_True;
345 : :
346 [ + - ]: 1450 : SvXMLTokenMap aTokenMap( lcl_getLevelAttrTokenMap() );
347 [ + - ][ + - ]: 1450 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
348 [ + + ]: 4863 : for( sal_Int16 i=0; i < nAttrCount; i++ )
349 : : {
350 [ + - ][ + - ]: 3413 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
351 : 3413 : OUString aLocalName;
352 : : sal_uInt16 nPrefix =
353 : 3413 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
354 [ + - ]: 3413 : &aLocalName );
355 [ + - ][ + - ]: 3413 : const OUString& rValue = xAttrList->getValueByIndex( i );
356 : :
357 [ + - ][ + + : 3413 : switch( aTokenMap.Get( nPrefix, aLocalName ) )
+ - - + +
+ - - +
- ]
358 : : {
359 : : case XML_TOK_TEXT_LEVEL_ATTR_LEVEL:
360 : 1450 : nLevel = rValue.toInt32();
361 [ + - ]: 1450 : if( nLevel >= 1L )
362 : 1450 : nLevel--;
363 : : else
364 : 0 : nLevel = 0;
365 : 1450 : break;
366 : : case XML_TOK_TEXT_LEVEL_ATTR_STYLE_NAME:
367 : 120 : sTextStyleName = rValue;
368 : 120 : break;
369 : : case XML_TOK_TEXT_LEVEL_ATTR_BULLET_CHAR:
370 : 522 : cBullet = rValue[0];
371 : 522 : break;
372 : : case XML_TOK_TEXT_LEVEL_ATTR_HREF:
373 [ # # ]: 0 : if( bImage )
374 : 0 : sImageURL = rValue;
375 : 0 : break;
376 : : case XML_TOK_TEXT_LEVEL_ATTR_TYPE:
377 : : case XML_TOK_TEXT_LEVEL_ATTR_SHOW:
378 : : case XML_TOK_TEXT_LEVEL_ATTR_ACTUATE:
379 : : // This properties will be ignored
380 : 0 : break;
381 : : case XML_TOK_TEXT_LEVEL_ATTR_NUM_FORMAT:
382 [ + - ]: 928 : if( bNum )
383 : 928 : sNumFormat = rValue;
384 : 928 : break;
385 : : case XML_TOK_TEXT_LEVEL_ATTR_NUM_PREFIX:
386 : 21 : sPrefix = rValue;
387 : 21 : break;
388 : : case XML_TOK_TEXT_LEVEL_ATTR_NUM_SUFFIX:
389 : 276 : sSuffix = rValue;
390 : 276 : break;
391 : : case XML_TOK_TEXT_LEVEL_ATTR_NUM_LETTER_SYNC:
392 [ # # ]: 0 : if( bNum )
393 : 0 : sNumLetterSync = rValue;
394 : 0 : break;
395 : : case XML_TOK_TEXT_LEVEL_ATTR_START_VALUE:
396 [ # # ]: 0 : if( bNum )
397 : : {
398 : 0 : sal_Int32 nTmp = rValue.toInt32();
399 : : nNumStartValue =
400 : : (nTmp < 0L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
401 [ # # ][ # # ]: 0 : : (sal_Int16)nTmp );
402 : : }
403 : 0 : break;
404 : : case XML_TOK_TEXT_LEVEL_ATTR_DISPLAY_LEVELS:
405 [ + - ]: 96 : if( bNum )
406 : : {
407 : 96 : sal_Int32 nTmp = rValue.toInt32();
408 : : nNumDisplayLevels =
409 : : (nTmp < 1L) ? 1 : ( (nTmp>SHRT_MAX) ? SHRT_MAX
410 [ + - ][ + - ]: 96 : : (sal_Int16)nTmp );
411 : : }
412 : 96 : break;
413 : : }
414 [ + - ]: 4863 : }
415 : 1450 : }
416 : :
417 : 1450 : SvxXMLListLevelStyleContext_Impl::~SvxXMLListLevelStyleContext_Impl()
418 : : {
419 [ - + ]: 2900 : }
420 : :
421 : 1812 : SvXMLImportContext *SvxXMLListLevelStyleContext_Impl::CreateChildContext(
422 : : sal_uInt16 nPrefix, const OUString& rLocalName,
423 : : const Reference< xml::sax::XAttributeList > & xAttrList )
424 : : {
425 : 1812 : SvXMLImportContext *pContext = 0;
426 [ + - + + : 4006 : if( XML_NAMESPACE_STYLE == nPrefix &&
+ - ][ + - ]
427 : 1812 : ( IsXMLToken( rLocalName, XML_LIST_LEVEL_PROPERTIES ) ||
428 : 382 : IsXMLToken( rLocalName, XML_TEXT_PROPERTIES ) ) )
429 : : {
430 : 1812 : pContext = new SvxXMLListLevelStyleAttrContext_Impl( GetImport(),
431 : : nPrefix,
432 : : rLocalName,
433 : : xAttrList,
434 [ + - ]: 1812 : *this );
435 : : }
436 [ # # # # ]: 0 : else if( (XML_NAMESPACE_OFFICE == nPrefix) && xmloff::token::IsXMLToken( rLocalName,
[ # # ]
437 : 0 : xmloff::token::XML_BINARY_DATA ) )
438 : : {
439 [ # # ][ # # ]: 0 : if( bImage && sImageURL.isEmpty() && !xBase64Stream.is() )
[ # # ][ # # ]
440 : : {
441 [ # # ]: 0 : xBase64Stream = GetImport().GetStreamForGraphicObjectURLFromBase64();
442 [ # # ]: 0 : if( xBase64Stream.is() )
443 : 0 : pContext = new XMLBase64ImportContext( GetImport(), nPrefix,
444 : : rLocalName, xAttrList,
445 [ # # ]: 0 : xBase64Stream );
446 : : }
447 : : }
448 [ - + ]: 1812 : if( !pContext )
449 : : {
450 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
451 : : }
452 : :
453 : 1812 : return pContext;
454 : : }
455 : :
456 : 1310 : Sequence<beans::PropertyValue> SvxXMLListLevelStyleContext_Impl::GetProperties(
457 : : const SvI18NMap *pI18NMap )
458 : : {
459 : : sal_Int16 eType;
460 : :
461 : 1310 : sal_Int32 nCount = 0;
462 [ + + ]: 1310 : if( bBullet )
463 : : {
464 : 382 : eType = NumberingType::CHAR_SPECIAL;
465 [ + - ]: 382 : nCount = cBullet ? 15 : 14;
466 : : }
467 [ - + ]: 1310 : if( bImage )
468 : : {
469 : 0 : eType = NumberingType::BITMAP;
470 : 0 : nCount = 15;
471 : :
472 [ # # ][ # # ]: 0 : if( !sImageURL.isEmpty() || xBase64Stream.is() )
[ # # ]
473 : 0 : nCount++;
474 : : }
475 [ + + ]: 1310 : if( bNum )
476 : : {
477 : 928 : eType = NumberingType::ARABIC;
478 : 928 : GetImport().GetMM100UnitConverter().convertNumFormat(
479 [ + - ]: 928 : eType, sNumFormat, sNumLetterSync, sal_True );
480 : 928 : nCount = 15;
481 : : }
482 : :
483 [ + + ][ + - ]: 1310 : if( ( bBullet || bNum ) && nRelSize )
[ + + ]
484 : 320 : nCount++;
485 : :
486 [ + - ][ + + ]: 1310 : if( !bImage && bHasColor )
487 : : {
488 : 320 : nCount++;
489 : : }
490 : :
491 [ + + ][ + + ]: 1310 : if (bBullet && !sSuffix.isEmpty())
[ + + ]
492 : : {
493 [ + - ]: 32 : sal_uInt16 const nVersion(GetImport().getGeneratorVersion());
494 : : sal_Int32 nUPD;
495 : : sal_Int32 nBuildId;
496 [ + - ][ + - ]: 32 : if (GetImport().getBuildIds(nUPD, nBuildId)
[ + - ][ - + ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ + - ]
497 : : && ( (SvXMLImport::OOo_1x == nVersion)
498 : : || (SvXMLImport::OOo_2x == nVersion)
499 : : || (310 == nUPD) || (320 == nUPD) || (330 == nUPD)
500 : : || ((300 == nUPD) && (nBuildId <= 9573))))
501 : : {
502 : : // #i93908# OOo < 3.4 wrote a bogus suffix for bullet chars
503 : 32 : sSuffix = ::rtl::OUString(); // clear it
504 : : }
505 : : }
506 : :
507 [ + - ]: 1310 : Sequence<beans::PropertyValue> aPropSeq( nCount );
508 [ + - ]: 1310 : if( nCount > 0 )
509 : : {
510 [ + - ]: 1310 : beans::PropertyValue *pProps = aPropSeq.getArray();
511 : 1310 : sal_Int32 nPos = 0;
512 : 1310 : pProps[nPos].Name =
513 : 1310 : OUString(XML_UNO_NAME_NRULE_NUMBERINGTYPE );
514 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int16)eType ;
515 : :
516 : 1310 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_PREFIX );
517 [ + - ]: 1310 : pProps[nPos++].Value <<= sPrefix;
518 : :
519 : 1310 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_SUFFIX );
520 [ + - ]: 1310 : pProps[nPos++].Value <<= sSuffix;
521 : :
522 : 1310 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_ADJUST );
523 [ + - ]: 1310 : pProps[nPos++].Value <<= eAdjust;
524 : :
525 : 1310 : sal_Int32 nLeftMargin = nSpaceBefore + nMinLabelWidth;
526 : 1310 : pProps[nPos].Name =
527 : 1310 : OUString(XML_UNO_NAME_NRULE_LEFT_MARGIN );
528 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int32)nLeftMargin;
529 : :
530 : 1310 : sal_Int32 nFirstLineOffset = -nMinLabelWidth;
531 : :
532 : 1310 : pProps[nPos].Name =
533 : 1310 : OUString(XML_UNO_NAME_NRULE_FIRST_LINE_OFFSET );
534 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int32)nFirstLineOffset;
535 : :
536 : 1310 : pProps[nPos].Name =
537 : 1310 : OUString(XML_UNO_NAME_NRULE_SYMBOL_TEXT_DISTANCE);
538 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int16)nMinLabelDist;
539 : :
540 : 1310 : pProps[nPos].Name =
541 : 1310 : OUString(XML_UNO_NAME_NRULE_POSITION_AND_SPACE_MODE);
542 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int16)ePosAndSpaceMode;
543 : 1310 : pProps[nPos].Name =
544 : 1310 : OUString(XML_UNO_NAME_NRULE_LABEL_FOLLOWED_BY);
545 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int16)eLabelFollowedBy;
546 : 1310 : pProps[nPos].Name =
547 : 1310 : OUString(XML_UNO_NAME_NRULE_LISTTAB_STOP_POSITION);
548 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int32)nListtabStopPosition;
549 : 1310 : pProps[nPos].Name =
550 : 1310 : OUString(XML_UNO_NAME_NRULE_FIRST_LINE_INDENT);
551 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int32)nFirstLineIndent;
552 : 1310 : pProps[nPos].Name =
553 : 1310 : OUString(XML_UNO_NAME_NRULE_INDENT_AT);
554 [ + - ]: 1310 : pProps[nPos++].Value <<= (sal_Int32)nIndentAt;
555 : :
556 : 1310 : OUString sDisplayTextStyleName = GetImport().GetStyleDisplayName(
557 [ + - ]: 1310 : XML_STYLE_FAMILY_TEXT_TEXT, sTextStyleName );
558 : 1310 : OUString sStyleName = sDisplayTextStyleName;
559 [ - + ][ - + ]: 1310 : if( !sStyleName.isEmpty() && pI18NMap )
[ + + ]
560 [ # # ]: 0 : sStyleName = pI18NMap->Get( SFX_STYLE_FAMILY_CHAR, sStyleName );
561 : 1310 : pProps[nPos].Name =
562 : 1310 : OUString(XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
563 [ + - ]: 1310 : pProps[nPos++].Value <<= sDisplayTextStyleName;
564 : :
565 [ + + ]: 1310 : if( bBullet )
566 : : {
567 : 382 : awt::FontDescriptor aFDesc;
568 : 382 : aFDesc.Name = sBulletFontName;
569 [ + - ]: 382 : if( !sBulletFontName.isEmpty() )
570 : : {
571 : 382 : aFDesc.StyleName = sBulletFontStyleName;
572 : 382 : aFDesc.Family = eBulletFontFamily;
573 : 382 : aFDesc.Pitch = eBulletFontPitch;
574 : 382 : aFDesc.CharSet = eBulletFontEncoding;
575 : 382 : aFDesc.Weight = WEIGHT_DONTKNOW;
576 : 382 : sal_Bool bStarSymbol = sal_False;
577 [ - + ]: 382 : if( aFDesc.Name.equalsIgnoreAsciiCase( sStarBats ) )
578 : : {
579 [ # # ]: 0 : cBullet = GetImport().ConvStarBatsCharToStarSymbol( cBullet );
580 : 0 : bStarSymbol = sal_True;
581 : : }
582 [ - + ]: 382 : else if( aFDesc.Name.equalsIgnoreAsciiCase( sStarMath ) )
583 : : {
584 [ # # ]: 0 : cBullet = GetImport().ConvStarMathCharToStarSymbol( cBullet );
585 : 0 : bStarSymbol = sal_True;
586 : : }
587 [ - + ]: 382 : if( bStarSymbol )
588 : 0 : aFDesc.Name = OUString( "StarSymbol" );
589 : : }
590 : :
591 [ + - ]: 382 : if( cBullet )
592 : : {
593 : 382 : OUStringBuffer sTmp(1);
594 [ + - ]: 382 : sTmp.append( cBullet );
595 : 382 : pProps[nPos].Name =
596 : 382 : OUString(XML_UNO_NAME_NRULE_BULLET_CHAR );
597 [ + - ][ + - ]: 382 : pProps[nPos++].Value <<= sTmp.makeStringAndClear();
598 : : }
599 : :
600 : 382 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_FONT );
601 [ + - ]: 382 : pProps[nPos++].Value <<= aFDesc;
602 : :
603 : : }
604 : :
605 [ - + ]: 1310 : if( bImage )
606 : : {
607 : 0 : OUString sStr( sImageURL );
608 [ # # ]: 0 : if( !sImageURL.isEmpty() )
609 : : {
610 : 0 : sStr = GetImport().ResolveGraphicObjectURL( sImageURL,
611 [ # # ]: 0 : sal_False );
612 : : }
613 [ # # ]: 0 : else if( xBase64Stream.is() )
614 : : {
615 [ # # ]: 0 : sStr = GetImport().ResolveGraphicObjectURLFromBase64( xBase64Stream );
616 : : }
617 : :
618 [ # # ]: 0 : if( !sStr.isEmpty() )
619 : : {
620 : 0 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_GRAPHICURL );
621 [ # # ]: 0 : pProps[nPos++].Value <<= sStr;
622 : : }
623 : :
624 : 0 : awt::Size aSize( nImageWidth, nImageHeight );
625 : 0 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_GRAPHIC_SIZE );
626 [ # # ]: 0 : pProps[nPos++].Value <<= aSize;
627 : :
628 : 0 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_VERT_ORIENT );
629 [ # # ]: 0 : pProps[nPos++].Value <<= (sal_Int16)eImageVertOrient;
630 : : }
631 : :
632 [ + + ]: 1310 : if( bNum )
633 : : {
634 : 928 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_START_WITH );
635 [ + - ]: 928 : pProps[nPos++].Value <<= (sal_Int16)nNumStartValue;
636 : :
637 : 928 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_PARENT_NUMBERING);
638 [ + - ]: 928 : pProps[nPos++].Value <<= (sal_Int16)nNumDisplayLevels;
639 : : }
640 : :
641 [ + + ][ + - ]: 1310 : if( ( bNum || bBullet ) && nRelSize )
[ + + ]
642 : : {
643 : 320 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_RELSIZE );
644 [ + - ]: 320 : pProps[nPos++].Value <<= nRelSize;
645 : : }
646 : :
647 [ + - ][ + + ]: 1310 : if( !bImage && bHasColor )
648 : : {
649 : 320 : pProps[nPos].Name = OUString(XML_UNO_NAME_NRULE_BULLET_COLOR );
650 [ + - ]: 320 : pProps[nPos++].Value <<= m_nColor;
651 : : }
652 : :
653 : 1310 : DBG_ASSERT( nPos == nCount, "array under/overflow" );
654 : : }
655 : :
656 : 1310 : return aPropSeq;
657 : : }
658 : :
659 : : // ---------------------------------------------------------------------
660 : :
661 : : enum SvxXMLStyleAttributesAttrTokens
662 : : {
663 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE,
664 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH,
665 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST,
666 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN,
667 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME,
668 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY,
669 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC,
670 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME,
671 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH,
672 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET,
673 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS,
674 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL,
675 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH,
676 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT,
677 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR,
678 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR,
679 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE,
680 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE,
681 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_END=XML_TOK_UNKNOWN
682 : : };
683 : 1812 : const SvXMLTokenMapEntry* lcl_getStyleAttributesAttrTokenMap()
684 : : {
685 : : static SvXMLTokenMapEntry aStyleAttributesAttrTokenMap[] =
686 : : {
687 : : { XML_NAMESPACE_TEXT, XML_SPACE_BEFORE,
688 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE },
689 : : { XML_NAMESPACE_TEXT, XML_MIN_LABEL_WIDTH,
690 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH },
691 : : { XML_NAMESPACE_TEXT, XML_MIN_LABEL_DISTANCE,
692 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST },
693 : : { XML_NAMESPACE_FO, XML_TEXT_ALIGN,
694 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN },
695 : : { XML_NAMESPACE_STYLE, XML_FONT_NAME,
696 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME },
697 : : { XML_NAMESPACE_FO, XML_FONT_FAMILY,
698 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY },
699 : : { XML_NAMESPACE_STYLE, XML_FONT_FAMILY_GENERIC,
700 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC },
701 : : { XML_NAMESPACE_STYLE, XML_FONT_STYLE_NAME,
702 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME },
703 : : { XML_NAMESPACE_STYLE, XML_FONT_PITCH,
704 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH },
705 : : { XML_NAMESPACE_STYLE, XML_FONT_CHARSET,
706 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET },
707 : : { XML_NAMESPACE_STYLE, XML_VERTICAL_POS,
708 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS },
709 : : { XML_NAMESPACE_STYLE, XML_VERTICAL_REL,
710 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL },
711 : : { XML_NAMESPACE_FO, XML_WIDTH,
712 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH },
713 : : { XML_NAMESPACE_FO, XML_HEIGHT,
714 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT },
715 : : { XML_NAMESPACE_FO, XML_COLOR,
716 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR },
717 : : { XML_NAMESPACE_STYLE, XML_USE_WINDOW_FONT_COLOR,
718 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR },
719 : : { XML_NAMESPACE_FO, XML_FONT_SIZE,
720 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE },
721 : : { XML_NAMESPACE_TEXT, XML_LIST_LEVEL_POSITION_AND_SPACE_MODE,
722 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE },
723 : : XML_TOKEN_MAP_END
724 : : };
725 : 1812 : return aStyleAttributesAttrTokenMap;
726 : : }
727 : 1812 : SvxXMLListLevelStyleAttrContext_Impl::SvxXMLListLevelStyleAttrContext_Impl(
728 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
729 : : const OUString& rLName,
730 : : const Reference< xml::sax::XAttributeList > & xAttrList,
731 : : SvxXMLListLevelStyleContext_Impl& rLLevel ) :
732 : : SvXMLImportContext( rImport, nPrfx, rLName ),
733 : 1812 : rListLevel( rLLevel )
734 : : {
735 [ + - ]: 1812 : SvXMLTokenMap aTokenMap( lcl_getStyleAttributesAttrTokenMap() );
736 : 1812 : SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
737 : :
738 : 1812 : OUString sFontName, sFontFamily, sFontStyleName, sFontFamilyGeneric,
739 : 1812 : sFontPitch, sFontCharset;
740 : 1812 : OUString sVerticalPos, sVerticalRel;
741 : :
742 [ + - ][ + - ]: 1812 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
743 [ + + ]: 5151 : for( sal_Int16 i=0; i < nAttrCount; i++ )
744 : : {
745 [ + - ][ + - ]: 3339 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
746 : 3339 : OUString aLocalName;
747 : : sal_uInt16 nPrefix =
748 : 3339 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
749 [ + - ]: 3339 : &aLocalName );
750 [ + - ][ + - ]: 3339 : const OUString& rValue = xAttrList->getValueByIndex( i );
751 : :
752 : : sal_Int32 nVal;
753 [ + - ][ + + : 3339 : switch( aTokenMap.Get( nPrefix, aLocalName ) )
+ + + + -
- - - - -
- - - + +
+ - ]
754 : : {
755 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_SPACE_BEFORE:
756 [ + - ][ + - ]: 479 : if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
757 : 479 : rListLevel.SetSpaceBefore( nVal );
758 : 479 : break;
759 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_WIDTH:
760 [ + - ][ + - ]: 499 : if (rUnitConv.convertMeasureToCore( nVal, rValue, 0, SHRT_MAX ))
761 : 499 : rListLevel.SetMinLabelWidth( nVal );
762 : 499 : break;
763 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_MIN_LABEL_DIST:
764 [ + - ][ + - ]: 50 : if (rUnitConv.convertMeasureToCore( nVal, rValue, 0, USHRT_MAX ))
765 : 50 : rListLevel.SetMinLabelDist( nVal );
766 : 50 : break;
767 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_TEXT_ALIGN:
768 [ + - ]: 9 : if( !rValue.isEmpty() )
769 : : {
770 : 9 : sal_Int16 eAdjust = HoriOrientation::LEFT;
771 [ + - ][ - + ]: 9 : if( IsXMLToken( rValue, XML_CENTER ) )
772 : 0 : eAdjust = HoriOrientation::CENTER;
773 [ + - ][ + - ]: 9 : else if( IsXMLToken( rValue, XML_END ) )
774 : 9 : eAdjust = HoriOrientation::RIGHT;
775 : 9 : rListLevel.SetAdjust( eAdjust );
776 : : }
777 : 9 : break;
778 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_NAME:
779 : 32 : sFontName = rValue;
780 : 32 : break;
781 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY:
782 : 490 : sFontFamily = rValue;
783 : 490 : break;
784 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_FAMILY_GENERIC:
785 : 0 : sFontFamilyGeneric = rValue;
786 : 0 : break;
787 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_STYLENAME:
788 : 0 : sFontStyleName = rValue;
789 : 0 : break;
790 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_PITCH:
791 : 0 : sFontPitch = rValue;
792 : 0 : break;
793 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_CHARSET:
794 : 0 : sFontCharset = rValue;
795 : 0 : break;
796 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_POS:
797 : 0 : sVerticalPos = rValue;
798 : 0 : break;
799 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_VERTICAL_REL:
800 : 0 : sVerticalRel = rValue;
801 : 0 : break;
802 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_WIDTH:
803 [ # # ][ # # ]: 0 : if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SAL_MAX_INT32))
804 : 0 : rListLevel.SetImageWidth( nVal );
805 : 0 : break;
806 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_HEIGHT:
807 [ # # ][ # # ]: 0 : if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SAL_MAX_INT32))
808 : 0 : rListLevel.SetImageHeight( nVal );
809 : 0 : break;
810 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_COLOR:
811 : : {
812 : 0 : sal_Int32 nColor(0);
813 [ # # ][ # # ]: 0 : if (::sax::Converter::convertColor( nColor, rValue ))
814 : : {
815 : 0 : rListLevel.SetColor( nColor );
816 : : }
817 : : }
818 : 0 : break;
819 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_WINDOW_FONT_COLOR:
820 : : {
821 [ + - ][ + - ]: 460 : if( IsXMLToken( rValue, XML_TRUE ) )
822 : 460 : rListLevel.SetColor( (sal_Int32)0xffffffff );
823 : : }
824 : 460 : break;
825 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FONT_SIZE:
826 [ + - ][ + - ]: 460 : if (::sax::Converter::convertPercent( nVal, rValue ))
827 : 460 : rListLevel.SetRelSize( (sal_Int16)nVal );
828 : 460 : break;
829 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_POSITION_AND_SPACE_MODE:
830 : : {
831 : 860 : sal_Int16 ePosAndSpaceMode = PositionAndSpaceMode::LABEL_WIDTH_AND_POSITION;
832 [ + - ][ + - ]: 860 : if( IsXMLToken( rValue, XML_LABEL_ALIGNMENT ) )
833 : 860 : ePosAndSpaceMode = PositionAndSpaceMode::LABEL_ALIGNMENT;
834 : 860 : rListLevel.SetPosAndSpaceMode( ePosAndSpaceMode );
835 : : }
836 : 860 : break;
837 : : }
838 : 3339 : }
839 : :
840 [ + + ]: 1812 : if( !sFontName.isEmpty() )
841 : : {
842 : : const XMLFontStylesContext *pFontDecls =
843 [ + - ][ + - ]: 32 : GetImport().GetTextImport()->GetFontDecls();
[ + - ][ + - ]
844 [ + - ]: 32 : if( pFontDecls )
845 : : {
846 [ + - ]: 32 : ::std::vector < XMLPropertyState > aProps;
847 [ + - ][ + - ]: 32 : if( pFontDecls->FillProperties( sFontName, aProps, 0, 1, 2, 3, 4 ) )
848 : : {
849 : 32 : OUString sTmp;
850 : 32 : sal_Int16 nTmp = 0;
851 : 32 : ::std::vector< XMLPropertyState >::iterator i;
852 [ + - ][ + + ]: 192 : for( i = aProps.begin(); i != aProps.end(); ++i )
853 : : {
854 [ + + + + : 160 : switch( i->mnIndex )
+ - ]
855 : : {
856 : : case 0:
857 : 32 : i->maValue >>= sTmp;
858 : 32 : rListLevel.SetBulletFontName( sTmp);
859 : 32 : break;
860 : : case 1:
861 : 32 : i->maValue >>= sTmp;
862 : 32 : rListLevel.SetBulletFontStyleName( sTmp );
863 : 32 : break;
864 : : case 2:
865 : 32 : i->maValue >>= nTmp;
866 : 32 : rListLevel.SetBulletFontFamily( nTmp );
867 : 32 : break;
868 : : case 3:
869 : 32 : i->maValue >>= nTmp;
870 : 32 : rListLevel.SetBulletFontPitch( nTmp );
871 : 32 : break;
872 : : case 4:
873 : 32 : i->maValue >>= nTmp;
874 : 32 : rListLevel.SetBulletFontEncoding( nTmp );
875 : 32 : break;
876 : : }
877 : 32 : }
878 : 32 : }
879 : : }
880 : : }
881 [ + + ]: 1812 : if( !sFontFamily.isEmpty() )
882 : : {
883 [ + - ]: 490 : String sEmpty;
884 : 490 : Any aAny;
885 : :
886 : 490 : XMLFontFamilyNamePropHdl aFamilyNameHdl;
887 [ + - ][ + - ]: 490 : if( aFamilyNameHdl.importXML( sFontFamily, aAny, rUnitConv ) )
888 : : {
889 : 490 : OUString sTmp;
890 : 490 : aAny >>= sTmp;
891 : 490 : rListLevel.SetBulletFontName( sTmp);
892 : : }
893 : :
894 : 490 : XMLFontFamilyPropHdl aFamilyHdl;
895 [ - + ][ # # ]: 490 : if( !sFontFamilyGeneric.isEmpty() &&
[ - + ]
896 [ # # ]: 0 : aFamilyHdl.importXML( sFontFamilyGeneric, aAny, rUnitConv ) )
897 : : {
898 : 0 : sal_Int16 nTmp = 0;
899 : 0 : aAny >>= nTmp;
900 : 0 : rListLevel.SetBulletFontFamily( nTmp );
901 : : }
902 : :
903 [ - + ]: 490 : if( !sFontStyleName.isEmpty() )
904 : 0 : rListLevel.SetBulletFontStyleName( sFontStyleName );
905 : :
906 : 490 : XMLFontPitchPropHdl aPitchHdl;
907 [ - + ][ # # ]: 490 : if( !sFontPitch.isEmpty() &&
[ - + ]
908 [ # # ]: 0 : aPitchHdl.importXML( sFontPitch, aAny, rUnitConv ) )
909 : : {
910 : 0 : sal_Int16 nTmp = 0;
911 : 0 : aAny >>= nTmp;
912 : 0 : rListLevel.SetBulletFontPitch( nTmp );
913 : : }
914 : :
915 : 490 : XMLFontEncodingPropHdl aEncHdl;
916 [ - + ][ # # ]: 490 : if( !sFontCharset.isEmpty() &&
[ - + ]
917 [ # # ]: 0 : aEncHdl.importXML( sFontCharset, aAny, rUnitConv ) )
918 : : {
919 : 0 : sal_Int16 nTmp = 0;
920 : 0 : aAny >>= nTmp;
921 : 0 : rListLevel.SetBulletFontEncoding( nTmp );
922 [ + - ][ + - ]: 490 : }
[ + - ][ + - ]
[ + - ]
923 : : }
924 : :
925 : 1812 : sal_Int16 eVertOrient = VertOrientation::LINE_CENTER;
926 [ - + ]: 1812 : if( !sVerticalPos.isEmpty() )
927 : : {
928 [ # # ][ # # ]: 0 : if( IsXMLToken( sVerticalPos, XML_TOP ) )
929 : 0 : eVertOrient = VertOrientation::LINE_TOP;
930 [ # # ][ # # ]: 0 : else if( IsXMLToken( sVerticalPos, XML_BOTTOM ) )
931 : 0 : eVertOrient = VertOrientation::LINE_BOTTOM;
932 : : }
933 [ - + ]: 1812 : if( !sVerticalRel.isEmpty() )
934 : : {
935 [ # # ][ # # ]: 0 : if( IsXMLToken( sVerticalRel, XML_BASELINE ) )
936 : : {
937 : : // TOP and BOTTOM are exchanged for a baseline relation
938 [ # # # # ]: 0 : switch( eVertOrient )
939 : : {
940 : : case VertOrientation::LINE_TOP:
941 : 0 : eVertOrient = VertOrientation::BOTTOM;
942 : 0 : break;
943 : : case VertOrientation::LINE_CENTER:
944 : 0 : eVertOrient = VertOrientation::CENTER;
945 : 0 : break;
946 : : case VertOrientation::LINE_BOTTOM:
947 : 0 : eVertOrient = VertOrientation::TOP;
948 : 0 : break;
949 : : }
950 : : }
951 [ # # ][ # # ]: 0 : else if( IsXMLToken( sVerticalRel, XML_CHAR ) )
952 : : {
953 [ # # # # ]: 0 : switch( eVertOrient )
954 : : {
955 : : case VertOrientation::LINE_TOP:
956 : 0 : eVertOrient = VertOrientation::CHAR_TOP;
957 : 0 : break;
958 : : case VertOrientation::LINE_CENTER:
959 : 0 : eVertOrient = VertOrientation::CHAR_CENTER;
960 : 0 : break;
961 : : case VertOrientation::LINE_BOTTOM:
962 : 0 : eVertOrient = VertOrientation::CHAR_BOTTOM;
963 : 0 : break;
964 : : }
965 : : }
966 : : }
967 [ + - ]: 1812 : rListLevel.SetImageVertOrient( eVertOrient );
968 : 1812 : }
969 : :
970 : 1812 : SvxXMLListLevelStyleAttrContext_Impl::~SvxXMLListLevelStyleAttrContext_Impl()
971 : : {
972 [ - + ]: 3624 : }
973 : :
974 : 860 : SvXMLImportContext* SvxXMLListLevelStyleAttrContext_Impl::CreateChildContext(
975 : : sal_uInt16 nPrefix, const OUString& rLocalName,
976 : : const Reference< xml::sax::XAttributeList > & xAttrList )
977 : : {
978 : 860 : SvXMLImportContext *pContext = 0;
979 [ + - + - ]: 1720 : if ( XML_NAMESPACE_STYLE == nPrefix &&
[ + - ]
980 : 860 : IsXMLToken( rLocalName, XML_LIST_LEVEL_LABEL_ALIGNMENT ) )
981 : : {
982 : 860 : pContext = new SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl( GetImport(),
983 : : nPrefix,
984 : : rLocalName,
985 : : xAttrList,
986 [ + - ]: 860 : rListLevel );
987 : : }
988 [ - + ]: 860 : if( !pContext )
989 : : {
990 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
991 : : }
992 : :
993 : 860 : return pContext;
994 : : }
995 : :
996 : : // ---------------------------------------------------------------------
997 : :
998 : : enum SvxXMLStyleAttributesLabelAlignmentAttrTokens
999 : : {
1000 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY,
1001 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION,
1002 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT,
1003 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT,
1004 : :
1005 : : XML_TOK_STYLE_ATTRIBUTES_LABEL_ALIGNMENT_ATTR_END=XML_TOK_UNKNOWN
1006 : : };
1007 : 860 : const SvXMLTokenMapEntry* lcl_getStyleAlignmentAttributesAttrTokenMap()
1008 : : {
1009 : : static SvXMLTokenMapEntry aStyleAlignmentAttributesAttrTokenMap[] =
1010 : : {
1011 : : { XML_NAMESPACE_TEXT, XML_LABEL_FOLLOWED_BY,
1012 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY },
1013 : : { XML_NAMESPACE_TEXT, XML_LIST_TAB_STOP_POSITION,
1014 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION },
1015 : : { XML_NAMESPACE_FO, XML_TEXT_INDENT,
1016 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT },
1017 : : { XML_NAMESPACE_FO, XML_MARGIN_LEFT,
1018 : : XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT },
1019 : :
1020 : : XML_TOKEN_MAP_END
1021 : : };
1022 : 860 : return aStyleAlignmentAttributesAttrTokenMap;
1023 : : }
1024 : 860 : SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl(
1025 : : SvXMLImport& rImport, sal_uInt16 nPrfx,
1026 : : const OUString& rLName,
1027 : : const Reference< xml::sax::XAttributeList > & xAttrList,
1028 : : SvxXMLListLevelStyleContext_Impl& rLLevel ) :
1029 : : SvXMLImportContext( rImport, nPrfx, rLName ),
1030 : 860 : rListLevel( rLLevel )
1031 : : {
1032 [ + - ]: 860 : SvXMLTokenMap aTokenMap( lcl_getStyleAlignmentAttributesAttrTokenMap() );
1033 : 860 : SvXMLUnitConverter& rUnitConv = GetImport().GetMM100UnitConverter();
1034 : :
1035 [ + - ][ + - ]: 860 : sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
[ + - ]
1036 [ + + ]: 4054 : for( sal_Int16 i=0; i < nAttrCount; i++ )
1037 : : {
1038 [ + - ][ + - ]: 3194 : const OUString& rAttrName = xAttrList->getNameByIndex( i );
1039 : 3194 : OUString aLocalName;
1040 : : sal_uInt16 nPrefix =
1041 : 3194 : GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
1042 [ + - ]: 3194 : &aLocalName );
1043 [ + - ][ + - ]: 3194 : const OUString& rValue = xAttrList->getValueByIndex( i );
1044 : :
1045 : : sal_Int32 nVal;
1046 [ + - ][ + + : 3194 : switch( aTokenMap.Get( nPrefix, aLocalName ) )
+ + - ]
1047 : : {
1048 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_LABEL_FOLLOWED_BY:
1049 : : {
1050 : 860 : sal_Int16 eLabelFollowedBy = LabelFollow::LISTTAB;
1051 [ + - ][ - + ]: 860 : if( IsXMLToken( rValue, XML_SPACE ) )
1052 : 0 : eLabelFollowedBy = LabelFollow::SPACE;
1053 [ + - ][ + + ]: 860 : else if( IsXMLToken( rValue, XML_NOTHING ) )
1054 : 54 : eLabelFollowedBy = LabelFollow::NOTHING;
1055 : 860 : rListLevel.SetLabelFollowedBy( eLabelFollowedBy );
1056 : : }
1057 : 860 : break;
1058 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_LISTTAB_STOP_POSITION:
1059 [ + - ][ + - ]: 644 : if (rUnitConv.convertMeasureToCore(nVal, rValue, 0, SHRT_MAX))
1060 : 644 : rListLevel.SetListtabStopPosition( nVal );
1061 : 644 : break;
1062 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_FIRST_LINE_INDENT:
1063 [ + - ][ + - ]: 833 : if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
1064 : 833 : rListLevel.SetFirstLineIndent( nVal );
1065 : 833 : break;
1066 : : case XML_TOK_STYLE_ATTRIBUTES_ATTR_INDENT_AT:
1067 [ + - ][ + - ]: 857 : if (rUnitConv.convertMeasureToCore(nVal, rValue, SHRT_MIN, SHRT_MAX))
1068 : 857 : rListLevel.SetIndentAt( nVal );
1069 : 857 : break;
1070 : : }
1071 [ + - ]: 4054 : }
1072 : 860 : }
1073 : :
1074 : 860 : SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl::~SvxXMLListLevelStyleLabelAlignmentAttrContext_Impl()
1075 : : {
1076 [ - + ]: 1720 : }
1077 : :
1078 : : // ---------------------------------------------------------------------
1079 : :
1080 : 290 : class SvxXMLListStyle_Impl : public std::vector<SvxXMLListLevelStyleContext_Impl *> {};
1081 : :
1082 : 151 : void SvxXMLListStyleContext::SetAttribute( sal_uInt16 nPrefixKey,
1083 : : const OUString& rLocalName,
1084 : : const OUString& rValue )
1085 : : {
1086 [ - + # # ]: 151 : if( XML_NAMESPACE_TEXT == nPrefixKey &&
[ - + ]
1087 : 0 : IsXMLToken( rLocalName, XML_CONSECUTIVE_NUMBERING ) )
1088 : : {
1089 : 0 : bConsecutive = IsXMLToken( rValue, XML_TRUE );
1090 : : }
1091 : : else
1092 : : {
1093 : 151 : SvXMLStyleContext::SetAttribute( nPrefixKey, rLocalName, rValue );
1094 : : }
1095 : 151 : }
1096 : :
1097 : :
1098 : 145 : SvxXMLListStyleContext::SvxXMLListStyleContext( SvXMLImport& rImport,
1099 : : sal_uInt16 nPrfx,
1100 : : const OUString& rLName,
1101 : : const Reference< xml::sax::XAttributeList > & xAttrList,
1102 : : sal_Bool bOutl )
1103 : : : SvXMLStyleContext( rImport, nPrfx, rLName, xAttrList, bOutl ? XML_STYLE_FAMILY_TEXT_OUTLINE : XML_STYLE_FAMILY_TEXT_LIST )
1104 : : , sIsPhysical( "IsPhysical" )
1105 : : , sNumberingRules( "NumberingRules" )
1106 : : , sName( "Name" )
1107 : : , sIsContinuousNumbering( "IsContinuousNumbering" )
1108 : : , pLevelStyles( 0 )
1109 : : , nLevels( 0 )
1110 : : , bConsecutive( sal_False )
1111 [ + + ]: 145 : , bOutline( bOutl )
1112 : : {
1113 : 145 : }
1114 : :
1115 : 145 : SvxXMLListStyleContext::~SvxXMLListStyleContext()
1116 : : {
1117 [ + - ]: 145 : if( pLevelStyles )
1118 : : {
1119 [ + + ]: 1595 : while( !pLevelStyles->empty() )
1120 : : {
1121 [ + - ]: 1450 : SvxXMLListLevelStyleContext_Impl *pStyle = pLevelStyles->back();
1122 [ + - ]: 1450 : pLevelStyles->pop_back();
1123 [ + - ]: 1450 : pStyle->ReleaseRef();
1124 : : }
1125 : : }
1126 : :
1127 [ + - ]: 145 : delete pLevelStyles;
1128 [ - + ]: 290 : }
1129 : :
1130 [ + + ][ - + ]: 74 : TYPEINIT1( SvxXMLListStyleContext, SvXMLStyleContext );
1131 : :
1132 : 1450 : SvXMLImportContext *SvxXMLListStyleContext::CreateChildContext(
1133 : : sal_uInt16 nPrefix,
1134 : : const OUString& rLocalName,
1135 : : const Reference< xml::sax::XAttributeList > & xAttrList )
1136 : : {
1137 : 1450 : SvXMLImportContext *pContext = 0;
1138 : :
1139 [ + - ]: 2900 : if( XML_NAMESPACE_TEXT == nPrefix &&
[ + + + - ]
[ + - ]
1140 : : ( bOutline
1141 : 630 : ? IsXMLToken( rLocalName, XML_OUTLINE_LEVEL_STYLE )
1142 : 820 : : ( IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_NUMBER ) ||
1143 : 522 : IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_BULLET ) ||
1144 [ # # ]: 1342 : IsXMLToken( rLocalName, XML_LIST_LEVEL_STYLE_IMAGE ) ) ) )
[ + + - + ]
1145 : : {
1146 : : SvxXMLListLevelStyleContext_Impl *pLevelStyle =
1147 : 1450 : new SvxXMLListLevelStyleContext_Impl( GetImport(), nPrefix,
1148 [ + - ][ + - ]: 1450 : rLocalName, xAttrList );
1149 [ + + ]: 1450 : if( !pLevelStyles )
1150 [ + - ][ + - ]: 145 : pLevelStyles = new SvxXMLListStyle_Impl;
1151 [ + - ]: 1450 : pLevelStyles->push_back( pLevelStyle );
1152 : 1450 : pLevelStyle->AddRef();
1153 : :
1154 : 1450 : pContext = pLevelStyle;
1155 : : }
1156 : : else
1157 : : {
1158 [ # # ]: 0 : pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
1159 : : }
1160 : :
1161 : 1450 : return pContext;
1162 : : }
1163 : :
1164 : 131 : void SvxXMLListStyleContext::FillUnoNumRule(
1165 : : const Reference< container::XIndexReplace > & rNumRule,
1166 : : const SvI18NMap *pI18NMap ) const
1167 : : {
1168 : : try
1169 : : {
1170 [ + - ][ + - ]: 131 : if( pLevelStyles && rNumRule.is() )
[ + - ]
1171 : : {
1172 : 131 : sal_uInt16 nCount = pLevelStyles->size();
1173 [ + - ][ + - ]: 131 : sal_Int32 l_nLevels = rNumRule->getCount();
1174 [ + + ]: 1441 : for( sal_uInt16 i=0; i < nCount; i++ )
1175 : : {
1176 : : SvxXMLListLevelStyleContext_Impl *pLevelStyle =
1177 : 1310 : (*pLevelStyles)[i];
1178 : 1310 : sal_Int32 nLevel = pLevelStyle->GetLevel();
1179 [ + - ][ + - ]: 1310 : if( nLevel >= 0 && nLevel < l_nLevels )
1180 : : {
1181 : : Sequence<beans::PropertyValue> aProps =
1182 [ + - ]: 1310 : pLevelStyle->GetProperties( pI18NMap );
1183 : 1310 : Any aAny;
1184 [ + - ]: 1310 : aAny <<= aProps;
1185 [ + - ][ + - ]: 1310 : rNumRule->replaceByIndex( nLevel, aAny );
[ + - ]
1186 : : }
1187 : : }
1188 : : }
1189 : :
1190 [ + - ]: 131 : Reference < XPropertySet > xPropSet( rNumRule, UNO_QUERY );
1191 : 131 : Reference< XPropertySetInfo > xPropSetInfo;
1192 [ + + ]: 131 : if (xPropSet.is())
1193 [ + - ][ + - ]: 99 : xPropSetInfo = xPropSet->getPropertySetInfo();
[ + - ]
1194 [ + + ][ + - ]: 230 : if( xPropSetInfo.is() &&
[ + + ]
1195 [ + - ][ + - ]: 99 : xPropSetInfo->hasPropertyByName( sIsContinuousNumbering ) )
1196 : : {
1197 : 99 : Any aAny;
1198 : 99 : sal_Bool bTmp = bConsecutive;
1199 [ + - ]: 99 : aAny.setValue( &bTmp, ::getBooleanCppuType() );
1200 [ + - ][ + - ]: 99 : xPropSet->setPropertyValue( sIsContinuousNumbering, aAny );
1201 [ # # ]: 131 : }
1202 : : }
1203 : 0 : catch (const Exception&)
1204 : : {
1205 : : OSL_FAIL( "SvxXMLListStyleContext::FillUnoNumRule - Exception caught" );
1206 : : }
1207 : 131 : }
1208 : :
1209 : 95 : void SvxXMLListStyleContext::CreateAndInsertLate( sal_Bool bOverwrite )
1210 : : {
1211 [ + + ]: 95 : if( bOutline )
1212 : : {
1213 [ + - ]: 63 : if( bOverwrite )
1214 : : {
1215 : : const Reference< XIndexReplace >& rNumRule =
1216 [ + - ][ + - ]: 63 : GetImport().GetTextImport()->GetChapterNumbering();
1217 : : // We don't set xNumberingRules here, to avoid using them
1218 : : // as numbering rules.
1219 [ + - ]: 63 : if( rNumRule.is() )
1220 : 63 : FillUnoNumRule( rNumRule, 0 );
1221 : : }
1222 : : }
1223 : : else
1224 : : {
1225 : 32 : Reference < XStyle > xStyle;
1226 : 32 : const OUString& rName = GetDisplayName();
1227 [ - + ]: 32 : if( rName.isEmpty() )
1228 : : {
1229 : 0 : SetValid( sal_False );
1230 : : return;
1231 : : }
1232 : :
1233 : : const Reference < XNameContainer >& rNumStyles =
1234 [ + - ][ + - ]: 32 : GetImport().GetTextImport()->GetNumberingStyles();
[ + - ][ + - ]
1235 [ - + ]: 32 : if( !rNumStyles.is() )
1236 : : {
1237 : 0 : SetValid( sal_False );
1238 : : return;
1239 : : }
1240 : :
1241 : 32 : sal_Bool bNew = sal_False;
1242 [ + - ][ + - ]: 32 : if( rNumStyles->hasByName( rName ) )
[ + + ]
1243 : : {
1244 [ + - ][ + - ]: 8 : Any aAny = rNumStyles->getByName( rName );
1245 [ + - ]: 8 : aAny >>= xStyle;
1246 : : }
1247 : : else
1248 : : {
1249 : 24 : Reference< XMultiServiceFactory > xFactory( GetImport().GetModel(),
1250 [ + - ]: 24 : UNO_QUERY );
1251 : : DBG_ASSERT( xFactory.is(), "no factory" );
1252 [ - + ]: 24 : if( !xFactory.is() )
1253 : : return;
1254 : :
1255 [ + - ][ + - ]: 24 : Reference < XInterface > xIfc = xFactory->createInstance(OUString("com.sun.star.style.NumberingStyle") );
1256 [ - + ]: 24 : if( !xIfc.is() )
1257 : : return;
1258 [ + - ]: 24 : Reference < XStyle > xTmp( xIfc, UNO_QUERY );
1259 [ + - ]: 24 : xStyle = xTmp;
1260 [ - + ]: 24 : if( !xStyle.is() )
1261 : : return;
1262 : :
1263 : 24 : Any aAny;
1264 [ + - ]: 24 : aAny <<= xStyle;
1265 [ + - ][ + - ]: 24 : rNumStyles->insertByName( rName, aAny );
1266 [ - + ][ - + ]: 24 : bNew = sal_True;
[ + - ]
1267 : : }
1268 : :
1269 [ + - ]: 32 : Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
1270 : : Reference< XPropertySetInfo > xPropSetInfo =
1271 [ + - ][ + - ]: 32 : xPropSet->getPropertySetInfo();
1272 [ + + ][ + - ]: 32 : if( !bNew && xPropSetInfo->hasPropertyByName( sIsPhysical ) )
[ + - ][ + - ]
[ + + ]
1273 : : {
1274 [ + - ][ + - ]: 8 : Any aAny = xPropSet->getPropertyValue( sIsPhysical );
1275 : 8 : bNew = !*(sal_Bool *)aAny.getValue();
1276 : : }
1277 [ + + ]: 32 : if( rName != GetName() )
1278 : 8 : GetImport().AddStyleDisplayName( XML_STYLE_FAMILY_TEXT_LIST,
1279 [ + - ]: 16 : GetName(), rName );
1280 : :
1281 [ + - ][ + - ]: 32 : Any aAny = xPropSet->getPropertyValue( sNumberingRules );
1282 [ + - ]: 32 : aAny >>= xNumRules;
1283 [ + - ][ + - ]: 32 : nLevels = xNumRules->getCount();
1284 [ - + ][ # # ]: 32 : if( bOverwrite || bNew )
1285 : : {
1286 [ + - ]: 32 : FillUnoNumRule( xNumRules, 0 );
1287 [ + - ]: 32 : aAny <<= xNumRules;
1288 [ + - ][ + - ]: 32 : xPropSet->setPropertyValue( sNumberingRules, aAny );
1289 : : }
1290 : : else
1291 : : {
1292 : 0 : SetValid( sal_False );
1293 : : }
1294 : :
1295 [ + - ]: 95 : SetNew( bNew );
1296 : : }
1297 : : }
1298 : :
1299 : 4 : void SvxXMLListStyleContext::CreateAndInsertAuto() const
1300 : : {
1301 : : DBG_ASSERT( !bOutline, "Outlines cannot be inserted here" );
1302 : : DBG_ASSERT( !xNumRules.is(), "Numbering Rule is existing already" );
1303 : :
1304 : 4 : const OUString& rName = GetName();
1305 [ + - ][ - + ]: 4 : if( bOutline || xNumRules.is() || rName.isEmpty() )
[ - + ][ + - ]
1306 : : {
1307 : 0 : ((SvxXMLListStyleContext *)this)->SetValid( sal_False );
1308 : 4 : return;
1309 : : }
1310 : :
1311 : : ((SvxXMLListStyleContext *)this)->xNumRules = CreateNumRule(
1312 [ + - ]: 4 : GetImport().GetModel() );
1313 : 4 : ((SvxXMLListStyleContext *)this)->nLevels = xNumRules->getCount();
1314 : :
1315 : 4 : FillUnoNumRule( xNumRules, 0 );
1316 : : }
1317 : :
1318 : 36 : Reference < XIndexReplace > SvxXMLListStyleContext::CreateNumRule(
1319 : : const Reference < XModel > & rModel )
1320 : : {
1321 : 36 : Reference<XIndexReplace> xNumRule;
1322 : :
1323 [ + - ]: 36 : Reference< XMultiServiceFactory > xFactory( rModel, UNO_QUERY );
1324 : : DBG_ASSERT( xFactory.is(), "no factory" );
1325 [ + - ]: 36 : if( !xFactory.is() )
1326 : : return xNumRule;
1327 : :
1328 [ + - ][ + - ]: 36 : Reference < XInterface > xIfc = xFactory->createInstance(OUString("com.sun.star.text.NumberingRules") );
1329 [ + - ]: 36 : if( !xIfc.is() )
1330 : : return xNumRule;
1331 : :
1332 [ + - ][ + - ]: 36 : xNumRule = Reference<XIndexReplace>( xIfc, UNO_QUERY );
1333 : : DBG_ASSERT( xNumRule.is(), "go no numbering rule" );
1334 : :
1335 : 36 : return xNumRule;
1336 : : }
1337 : :
1338 : 0 : void SvxXMLListStyleContext::SetDefaultStyle(
1339 : : const Reference < XIndexReplace > & rNumRule,
1340 : : sal_Int16 nLevel,
1341 : : sal_Bool bOrdered )
1342 : : {
1343 [ # # ][ # # ]: 0 : Sequence<beans::PropertyValue> aPropSeq( bOrdered ? 1 : 4 );
1344 [ # # ]: 0 : beans::PropertyValue *pProps = aPropSeq.getArray();
1345 : :
1346 : : pProps->Name =
1347 : 0 : OUString(XML_UNO_NAME_NRULE_NUMBERINGTYPE );
1348 : : (pProps++)->Value <<= (sal_Int16)(bOrdered ? NumberingType::ARABIC
1349 [ # # ][ # # ]: 0 : : NumberingType::CHAR_SPECIAL );
1350 [ # # ]: 0 : if( !bOrdered )
1351 : : {
1352 : : // TODO: Bullet-Font
1353 : 0 : awt::FontDescriptor aFDesc;
1354 : : aFDesc.Name = OUString(
1355 : : #if defined UNX
1356 : : "starbats"
1357 : : #else
1358 : : "StarBats"
1359 : : #endif
1360 : 0 : );
1361 : 0 : aFDesc.Family = FAMILY_DONTKNOW ;
1362 : 0 : aFDesc.Pitch = PITCH_DONTKNOW ;
1363 : 0 : aFDesc.CharSet = RTL_TEXTENCODING_SYMBOL ;
1364 : 0 : aFDesc.Weight = WEIGHT_DONTKNOW;
1365 : : pProps->Name =
1366 : 0 : OUString(XML_UNO_NAME_NRULE_BULLET_FONT );
1367 [ # # ]: 0 : (pProps++)->Value <<= aFDesc;
1368 : :
1369 : 0 : OUStringBuffer sTmp(1);
1370 [ # # ]: 0 : sTmp.append( (sal_Unicode)(0xF000 + 149) );
1371 : : pProps->Name =
1372 : 0 : OUString(XML_UNO_NAME_NRULE_BULLET_CHAR );
1373 [ # # ][ # # ]: 0 : (pProps++)->Value <<= sTmp.makeStringAndClear();
1374 : : pProps->Name =
1375 : 0 : OUString(XML_UNO_NAME_NRULE_CHAR_STYLE_NAME );
1376 [ # # ]: 0 : (pProps++)->Value <<= OUString( "Numbering Symbols" );
1377 : : }
1378 : :
1379 : 0 : Any aAny;
1380 [ # # ]: 0 : aAny <<= aPropSeq;
1381 [ # # ][ # # ]: 0 : rNumRule->replaceByIndex( nLevel, aAny );
[ # # ]
1382 : 0 : }
1383 : :
1384 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|