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 : #include <hintids.hxx>
21 : #include <svl/urihelper.hxx>
22 : #include <osl/thread.h>
23 : #include <unotools/pathoptions.hxx>
24 : #include <tools/stream.hxx>
25 : #include <sfx2/docfile.hxx>
26 : #include <svl/itemiter.hxx>
27 : #include <editeng/brushitem.hxx>
28 :
29 : #include <tools/resid.hxx>
30 : #include <fmtornt.hxx>
31 : #include <swtypes.hxx>
32 : #include <wrtsh.hxx>
33 : #include <uinums.hxx>
34 : #include <poolfmt.hxx>
35 : #include <charfmt.hxx>
36 : #include <frmatr.hxx>
37 :
38 : #include <unomid.h>
39 :
40 : using namespace ::com::sun::star;
41 :
42 : #define VERSION_30B ((sal_uInt16)250)
43 : #define VERSION_31B ((sal_uInt16)326)
44 : #define VERSION_40A ((sal_uInt16)364)
45 : #define VERSION_53A ((sal_uInt16)596)
46 : #define ACT_NUM_VERSION VERSION_53A
47 :
48 : #define CHAPTER_FILENAME "chapter.cfg"
49 :
50 : /*
51 : Description: Saving a rule
52 : Parameter: rCopy -- the rule to save
53 : nIdx -- position, where the rule is to be saved.
54 : An old rule at that position will be overwritten.
55 : */
56 :
57 0 : SwBaseNumRules::SwBaseNumRules( const OUString& rFileName )
58 : :
59 : sFileName( rFileName ),
60 : nVersion(0),
61 0 : bModified( false )
62 : {
63 0 : Init();
64 0 : }
65 :
66 0 : SwBaseNumRules::~SwBaseNumRules()
67 : {
68 0 : if( bModified )
69 : {
70 0 : SvtPathOptions aPathOpt;
71 0 : OUString sNm( aPathOpt.GetUserConfigPath() + "/" + sFileName );
72 0 : INetURLObject aTempObj(sNm);
73 0 : sNm = aTempObj.GetFull();
74 : SfxMedium aStrm( sNm, STREAM_WRITE | STREAM_TRUNC |
75 0 : STREAM_SHARE_DENYALL );
76 0 : Store( *aStrm.GetOutStream() );
77 : }
78 :
79 0 : for( sal_uInt16 i = 0; i < nMaxRules; ++i )
80 0 : delete pNumRules[i];
81 0 : }
82 :
83 0 : void SwBaseNumRules::Init()
84 : {
85 0 : for(sal_uInt16 i = 0; i < nMaxRules; ++i )
86 0 : pNumRules[i] = 0;
87 :
88 0 : OUString sNm( sFileName );
89 0 : SvtPathOptions aOpt;
90 0 : if( aOpt.SearchFile( sNm, SvtPathOptions::PATH_USERCONFIG ))
91 : {
92 0 : SfxMedium aStrm( sNm, STREAM_STD_READ );
93 0 : Load( *aStrm.GetInStream() );
94 0 : }
95 0 : }
96 :
97 0 : void SwBaseNumRules::ApplyNumRules(const SwNumRulesWithName &rCopy, sal_uInt16 nIdx)
98 : {
99 : OSL_ENSURE(nIdx < nMaxRules, "Array der NumRules ueberindiziert.");
100 0 : if( !pNumRules[nIdx] )
101 0 : pNumRules[nIdx] = new SwNumRulesWithName( rCopy );
102 : else
103 0 : *pNumRules[nIdx] = rCopy;
104 0 : }
105 :
106 0 : bool SwBaseNumRules::Store(SvStream &rStream)
107 : {
108 0 : rStream.WriteUInt16( ACT_NUM_VERSION );
109 : // Write, what positions are occupied by a rule
110 : // Then write each of the rules
111 0 : for(sal_uInt16 i = 0; i < nMaxRules; ++i)
112 : {
113 0 : if(pNumRules[i])
114 : {
115 0 : rStream.WriteUChar( sal_True );
116 0 : pNumRules[i]->Store( rStream );
117 : }
118 : else
119 0 : rStream.WriteUChar( sal_False );
120 : }
121 0 : return true;
122 : }
123 :
124 0 : int SwBaseNumRules::Load(SvStream &rStream)
125 : {
126 0 : int rc = 0;
127 :
128 0 : rStream.ReadUInt16( nVersion );
129 :
130 : // due to a small but serious mistake, PreFinal writes the same VERION_40A as SP2
131 : // #55402#
132 0 : if(VERSION_40A == nVersion)
133 : {
134 : OSL_FAIL("Version 364 is not clear #55402#");
135 : }
136 0 : else if( VERSION_30B == nVersion || VERSION_31B == nVersion ||
137 0 : ACT_NUM_VERSION >= nVersion )
138 : {
139 0 : unsigned char bRule = sal_False;
140 0 : for(sal_uInt16 i = 0; i < nMaxRules; ++i)
141 : {
142 0 : rStream.ReadUChar( bRule );
143 0 : if(bRule)
144 0 : pNumRules[i] = new SwNumRulesWithName( rStream, nVersion );
145 0 : }
146 : }
147 : else
148 : {
149 0 : rc = 1;
150 : }
151 :
152 0 : return rc;
153 : }
154 :
155 0 : SwChapterNumRules::SwChapterNumRules() :
156 0 : SwBaseNumRules(OUString(CHAPTER_FILENAME))
157 : {
158 0 : }
159 :
160 0 : SwChapterNumRules::~SwChapterNumRules()
161 : {
162 0 : }
163 :
164 0 : void SwChapterNumRules::ApplyNumRules(const SwNumRulesWithName &rCopy, sal_uInt16 nIdx)
165 : {
166 0 : bModified = true;
167 0 : SwBaseNumRules::ApplyNumRules(rCopy, nIdx);
168 0 : }
169 :
170 0 : SwNumRulesWithName::SwNumRulesWithName( const SwNumRule &rCopy,
171 : const OUString &rName )
172 0 : : maName(rName)
173 : {
174 0 : for( sal_uInt16 n = 0; n < MAXLEVEL; ++n )
175 : {
176 0 : const SwNumFmt* pFmt = rCopy.GetNumFmt( n );
177 0 : if( pFmt )
178 0 : aFmts[ n ] = new _SwNumFmtGlobal( *pFmt );
179 : else
180 0 : aFmts[ n ] = 0;
181 : }
182 0 : }
183 :
184 0 : SwNumRulesWithName::SwNumRulesWithName( const SwNumRulesWithName& rCopy )
185 : {
186 0 : memset( aFmts, 0, sizeof( aFmts ));
187 0 : *this = rCopy;
188 0 : }
189 :
190 0 : SwNumRulesWithName::~SwNumRulesWithName()
191 : {
192 0 : for( int n = 0; n < MAXLEVEL; ++n )
193 0 : delete aFmts[ n ];
194 0 : }
195 :
196 0 : const SwNumRulesWithName& SwNumRulesWithName::operator=(const SwNumRulesWithName &rCopy)
197 : {
198 0 : if( this != &rCopy )
199 : {
200 0 : maName = rCopy.maName;
201 0 : for( int n = 0; n < MAXLEVEL; ++n )
202 : {
203 0 : delete aFmts[ n ];
204 :
205 0 : _SwNumFmtGlobal* pFmt = rCopy.aFmts[ n ];
206 0 : if( pFmt )
207 0 : aFmts[ n ] = new _SwNumFmtGlobal( *pFmt );
208 : else
209 0 : aFmts[ n ] = 0;
210 : }
211 : }
212 0 : return *this;
213 : }
214 :
215 0 : SwNumRulesWithName::SwNumRulesWithName( SvStream &rStream, sal_uInt16 nVersion )
216 : {
217 0 : rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
218 0 : maName = rStream.ReadUniOrByteString(eEncoding);
219 :
220 : char c;
221 0 : for(sal_uInt16 n = 0; n < MAXLEVEL; ++n )
222 : {
223 0 : if( VERSION_30B == nVersion )
224 0 : c = 1;
225 : // due to a small but serious mistake, PreFinal writes the same VERION_40A as SP2
226 : // #55402#
227 0 : else if(nVersion < VERSION_40A && n > 5)
228 0 : c = 0;
229 : else
230 0 : rStream.ReadChar( c );
231 :
232 0 : if( c )
233 0 : aFmts[ n ] = new _SwNumFmtGlobal( rStream, nVersion );
234 : else
235 0 : aFmts[ n ] = 0;
236 : }
237 0 : }
238 :
239 0 : void SwNumRulesWithName::MakeNumRule( SwWrtShell& rSh, SwNumRule& rChg ) const
240 : {
241 : // #i89178#
242 0 : rChg = SwNumRule( maName, numfunc::GetDefaultPositionAndSpaceMode() );
243 0 : rChg.SetAutoRule( false );
244 : _SwNumFmtGlobal* pFmt;
245 0 : for( sal_uInt16 n = 0; n < MAXLEVEL; ++n )
246 0 : if( 0 != ( pFmt = aFmts[ n ] ) )
247 : {
248 0 : SwNumFmt aNew;
249 0 : pFmt->ChgNumFmt( rSh, aNew );
250 0 : rChg.Set( n, aNew );
251 : }
252 0 : }
253 :
254 0 : void SwNumRulesWithName::Store( SvStream &rStream )
255 : {
256 0 : rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
257 0 : rStream.WriteUniOrByteString(maName, eEncoding);
258 :
259 0 : for( sal_uInt16 n = 0; n < MAXLEVEL; ++n )
260 : {
261 0 : _SwNumFmtGlobal* pFmt = aFmts[ n ];
262 0 : if( pFmt )
263 : {
264 0 : rStream.WriteChar( (char)1 );
265 0 : pFmt->Store( rStream );
266 : }
267 : else
268 0 : rStream.WriteChar( (char)0 );
269 : }
270 0 : }
271 :
272 0 : SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( const SwNumFmt& rFmt )
273 0 : : aFmt( rFmt ), nCharPoolId( USHRT_MAX )
274 : {
275 : // relative gaps?????
276 :
277 0 : SwCharFmt* pFmt = rFmt.GetCharFmt();
278 0 : if( pFmt )
279 : {
280 0 : sCharFmtName = pFmt->GetName();
281 0 : nCharPoolId = pFmt->GetPoolFmtId();
282 0 : if( pFmt->GetAttrSet().Count() )
283 : {
284 0 : SfxItemIter aIter( pFmt->GetAttrSet() );
285 0 : const SfxPoolItem *pCurr = aIter.GetCurItem();
286 : while( true )
287 : {
288 0 : aItems.push_back( pCurr->Clone() );
289 0 : if( aIter.IsAtEnd() )
290 0 : break;
291 0 : pCurr = aIter.NextItem();
292 0 : }
293 : }
294 :
295 0 : aFmt.SetCharFmt( 0 );
296 : }
297 0 : }
298 :
299 0 : SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( const _SwNumFmtGlobal& rFmt )
300 : :
301 : aFmt( rFmt.aFmt ),
302 : sCharFmtName( rFmt.sCharFmtName ),
303 0 : nCharPoolId( rFmt.nCharPoolId )
304 : {
305 0 : for( sal_uInt16 n = rFmt.aItems.size(); n; )
306 0 : aItems.push_back( rFmt.aItems[ --n ].Clone() );
307 0 : }
308 :
309 0 : SwNumRulesWithName::_SwNumFmtGlobal::_SwNumFmtGlobal( SvStream& rStream,
310 : sal_uInt16 nVersion )
311 0 : : nCharPoolId( USHRT_MAX )
312 : {
313 0 : rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
314 : {
315 : sal_uInt16 nUS;
316 : short nShort;
317 : sal_Char cChar;
318 : bool bFlag;
319 0 : OUString sStr;
320 :
321 0 : rStream.ReadUInt16( nUS ); aFmt.SetNumberingType((sal_Int16)nUS );
322 0 : if( VERSION_53A > nVersion )
323 : {
324 0 : rStream.ReadChar( cChar ); aFmt.SetBulletChar( cChar );
325 : }
326 : else
327 : {
328 0 : rStream.ReadUInt16( nUS ); aFmt.SetBulletChar( nUS );
329 : }
330 :
331 0 : rStream.ReadCharAsBool( bFlag ); aFmt.SetIncludeUpperLevels( bFlag );
332 :
333 0 : if( VERSION_30B == nVersion )
334 : {
335 : sal_Int32 nL;
336 0 : rStream.ReadChar( cChar ); aFmt.SetStart( (sal_uInt16)cChar );
337 :
338 0 : sStr = rStream.ReadUniOrByteString(eEncoding);
339 0 : aFmt.SetPrefix( sStr );
340 0 : sStr = rStream.ReadUniOrByteString(eEncoding);
341 0 : aFmt.SetSuffix( sStr );
342 0 : rStream.ReadUInt16( nUS ); aFmt.SetNumAdjust( SvxAdjust( nUS ) );
343 0 : rStream.ReadInt32( nL ); aFmt.SetLSpace( lNumIndent );
344 0 : rStream.ReadInt32( nL ); aFmt.SetFirstLineOffset( (short)nL );
345 : }
346 : else // old start-value was a Byte
347 : {
348 0 : rStream.ReadUInt16( nUS ); aFmt.SetStart( nUS );
349 0 : sStr = rStream.ReadUniOrByteString(eEncoding);
350 0 : aFmt.SetPrefix( sStr );
351 0 : sStr = rStream.ReadUniOrByteString(eEncoding);
352 0 : aFmt.SetSuffix( sStr );
353 0 : rStream.ReadUInt16( nUS ); aFmt.SetNumAdjust( SvxAdjust( nUS ) );
354 0 : rStream.ReadUInt16( nUS ); aFmt.SetAbsLSpace( nUS );
355 0 : rStream.ReadInt16( nShort ); aFmt.SetFirstLineOffset( nShort );
356 0 : rStream.ReadUInt16( nUS ); aFmt.SetCharTextDistance( nUS );
357 0 : rStream.ReadInt16( nShort ); aFmt.SetLSpace( nShort );
358 0 : rStream.ReadCharAsBool( bFlag );
359 : }
360 :
361 : sal_uInt16 nFamily;
362 : sal_uInt16 nCharSet;
363 : short nWidth;
364 : short nHeight;
365 : sal_uInt16 nPitch;
366 0 : OUString aName;
367 :
368 0 : aName = rStream.ReadUniOrByteString(eEncoding);
369 0 : rStream.ReadUInt16( nFamily ).ReadUInt16( nCharSet ).ReadInt16( nWidth ).ReadInt16( nHeight ).ReadUInt16( nPitch );
370 :
371 0 : if( !aName.isEmpty() )
372 : {
373 0 : vcl::Font aFont( static_cast<FontFamily>(nFamily), Size( nWidth, nHeight ) );
374 0 : aFont.SetName( aName );
375 0 : aFont.SetCharSet( (rtl_TextEncoding)nCharSet );
376 0 : aFont.SetPitch( (FontPitch)nPitch );
377 :
378 0 : aFmt.SetBulletFont( &aFont );
379 : }
380 : else
381 0 : nCharSet = RTL_TEXTENCODING_SYMBOL;
382 :
383 0 : if( VERSION_53A > nVersion )
384 : {
385 0 : sal_Char cEncoded(aFmt.GetBulletChar());
386 0 : aFmt.SetBulletChar(OUString(&cEncoded, 1, nCharSet).toChar());
387 0 : }
388 : }
389 :
390 0 : if( VERSION_30B != nVersion )
391 : {
392 : sal_uInt16 nItemCount;
393 0 : rStream.ReadUInt16( nCharPoolId );
394 0 : sCharFmtName = rStream.ReadUniOrByteString(eEncoding);
395 0 : rStream.ReadUInt16( nItemCount );
396 :
397 0 : while( nItemCount-- )
398 : {
399 : sal_uInt16 nWhich, nVers;
400 0 : rStream.ReadUInt16( nWhich ).ReadUInt16( nVers );
401 0 : aItems.push_back( GetDfltAttr( nWhich )->Create( rStream, nVers ) );
402 : }
403 : }
404 :
405 0 : if( VERSION_40A == nVersion && SVX_NUM_BITMAP == aFmt.GetNumberingType() )
406 : {
407 : sal_uInt8 cF;
408 0 : sal_Int32 nWidth(0), nHeight(0);
409 :
410 0 : rStream.ReadInt32( nWidth ).ReadInt32( nHeight );
411 :
412 0 : Size aSz(nWidth, nHeight);
413 :
414 0 : rStream.ReadUChar( cF );
415 0 : if( cF )
416 : {
417 0 : SvxBrushItem* pBrush = 0;
418 0 : SwFmtVertOrient* pVOrient = 0;
419 : sal_uInt16 nVer;
420 :
421 0 : if( cF & 1 )
422 : {
423 0 : rStream.ReadUInt16( nVer );
424 0 : pBrush = (SvxBrushItem*)GetDfltAttr( RES_BACKGROUND )
425 0 : ->Create( rStream, nVer );
426 : }
427 :
428 0 : if( cF & 2 )
429 : {
430 0 : rStream.ReadUInt16( nVer );
431 0 : pVOrient = (SwFmtVertOrient*)GetDfltAttr( RES_VERT_ORIENT )
432 0 : ->Create( rStream, nVer );
433 : }
434 0 : sal_Int16 eOrient = text::VertOrientation::NONE;
435 0 : if(pVOrient)
436 0 : eOrient = (sal_Int16)pVOrient->GetVertOrient();
437 0 : aFmt.SetGraphicBrush( pBrush, &aSz, pVOrient ? &eOrient : 0 );
438 : }
439 : }
440 0 : }
441 :
442 0 : SwNumRulesWithName::_SwNumFmtGlobal::~_SwNumFmtGlobal()
443 : {
444 0 : }
445 :
446 0 : void SwNumRulesWithName::_SwNumFmtGlobal::Store( SvStream& rStream )
447 : {
448 0 : rtl_TextEncoding eEncoding = osl_getThreadTextEncoding();
449 : {
450 0 : OUString aName;
451 0 : sal_uInt16 nFamily = FAMILY_DONTKNOW, nCharSet = 0, nPitch = 0;
452 0 : short nWidth = 0, nHeight = 0;
453 :
454 0 : const vcl::Font* pFnt = aFmt.GetBulletFont();
455 0 : if( pFnt )
456 : {
457 0 : aName = pFnt->GetName();
458 0 : nFamily = (sal_uInt16)pFnt->GetFamily();
459 0 : nCharSet = (sal_uInt16)pFnt->GetCharSet();
460 0 : nWidth = (short)pFnt->GetSize().Width();
461 0 : nHeight = (short)pFnt->GetSize().Height();
462 0 : nPitch = (sal_uInt16)pFnt->GetPitch();
463 : }
464 :
465 0 : rStream.WriteUInt16( aFmt.GetNumberingType() )
466 0 : .WriteUInt16( aFmt.GetBulletChar() )
467 0 : .WriteUChar( aFmt.GetIncludeUpperLevels() > 0 )
468 0 : .WriteUInt16( aFmt.GetStart() );
469 0 : rStream.WriteUniOrByteString( aFmt.GetPrefix(), eEncoding );
470 0 : rStream.WriteUniOrByteString( aFmt.GetSuffix(), eEncoding );
471 0 : rStream.WriteUInt16( aFmt.GetNumAdjust() )
472 0 : .WriteInt16( aFmt.GetAbsLSpace() )
473 0 : .WriteInt16( aFmt.GetFirstLineOffset() )
474 0 : .WriteInt16( aFmt.GetCharTextDistance() )
475 0 : .WriteInt16( aFmt.GetLSpace() )
476 0 : .WriteUChar( sal_False );//aFmt.IsRelLSpace();
477 0 : rStream.WriteUniOrByteString( aName, eEncoding );
478 0 : rStream.WriteUInt16( nFamily )
479 0 : .WriteUInt16( nCharSet )
480 0 : .WriteInt16( nWidth )
481 0 : .WriteInt16( nHeight )
482 0 : .WriteUInt16( nPitch );
483 : }
484 0 : rStream.WriteUInt16( nCharPoolId );
485 0 : rStream.WriteUniOrByteString( sCharFmtName, eEncoding );
486 0 : rStream.WriteUInt16( aItems.size() );
487 :
488 0 : for( sal_uInt16 n = aItems.size(); n; )
489 : {
490 0 : SfxPoolItem* pItem = &aItems[ --n ];
491 0 : sal_uInt16 nIVers = pItem->GetVersion( SOFFICE_FILEFORMAT_50 );
492 : OSL_ENSURE( nIVers != USHRT_MAX,
493 : "Was'n das: Item-Version USHRT_MAX in der aktuellen Version" );
494 0 : rStream.WriteUInt16( pItem->Which() )
495 0 : .WriteUInt16( nIVers );
496 0 : pItem->Store( rStream, nIVers );
497 : }
498 :
499 : // Extensions for 40A
500 :
501 0 : if( SVX_NUM_BITMAP == aFmt.GetNumberingType() )
502 : {
503 0 : rStream.WriteInt32( aFmt.GetGraphicSize().Width() )
504 0 : .WriteInt32( aFmt.GetGraphicSize().Height() );
505 0 : sal_uInt8 cFlg = ( 0 != aFmt.GetBrush() ? 1 : 0 ) +
506 0 : ( 0 != aFmt.GetGraphicOrientation() ? 2 : 0 );
507 0 : rStream.WriteUChar( cFlg );
508 :
509 0 : if( aFmt.GetBrush() )
510 : {
511 0 : sal_uInt16 nVersion = aFmt.GetBrush()->GetVersion( SOFFICE_FILEFORMAT_50 );
512 0 : rStream.WriteUInt16( nVersion );
513 0 : aFmt.GetBrush()->Store( rStream, nVersion );
514 : }
515 0 : if( aFmt.GetGraphicOrientation() )
516 : {
517 0 : sal_uInt16 nVersion = aFmt.GetGraphicOrientation()->GetVersion( SOFFICE_FILEFORMAT_50 );
518 0 : rStream.WriteUInt16( nVersion );
519 0 : aFmt.GetGraphicOrientation()->Store( rStream, nVersion );
520 : }
521 : }
522 0 : }
523 :
524 0 : void SwNumRulesWithName::_SwNumFmtGlobal::ChgNumFmt( SwWrtShell& rSh,
525 : SwNumFmt& rNew ) const
526 : {
527 0 : SwCharFmt* pFmt = 0;
528 0 : if( !sCharFmtName.isEmpty() )
529 : {
530 : // at first, look for the name
531 0 : sal_uInt16 nArrLen = rSh.GetCharFmtCount();
532 0 : for( sal_uInt16 i = 1; i < nArrLen; ++i )
533 : {
534 0 : pFmt = &rSh.GetCharFmt( i );
535 0 : if (pFmt->GetName()==sCharFmtName)
536 : // exists, so leave attributes as they are!
537 0 : break;
538 0 : pFmt = 0;
539 : }
540 :
541 0 : if( !pFmt )
542 : {
543 0 : if( IsPoolUserFmt( nCharPoolId ) )
544 : {
545 0 : pFmt = rSh.MakeCharFmt( sCharFmtName );
546 0 : pFmt->SetAuto( false );
547 : }
548 : else
549 0 : pFmt = rSh.GetCharFmtFromPool( nCharPoolId );
550 :
551 0 : if( !pFmt->GetDepends() ) // set attributes
552 0 : for( sal_uInt16 n = aItems.size(); n; )
553 0 : pFmt->SetFmtAttr( aItems[ --n ] );
554 : }
555 : }
556 0 : ((SwNumFmt&)aFmt).SetCharFmt( pFmt );
557 0 : rNew = aFmt;
558 0 : if( pFmt )
559 0 : ((SwNumFmt&)aFmt).SetCharFmt( 0 );
560 270 : }
561 :
562 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|