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 <fmtfld.hxx>
22 : #include <txtfld.hxx>
23 : #include <charfmt.hxx>
24 :
25 : #include "viewsh.hxx"
26 : #include "doc.hxx"
27 : #include "rootfrm.hxx"
28 : #include "pagefrm.hxx"
29 : #include "ndtxt.hxx"
30 : #include "fldbas.hxx"
31 : #include "viewopt.hxx"
32 : #include "flyfrm.hxx"
33 : #include "viewimp.hxx"
34 : #include "txtatr.hxx"
35 : #include "swfont.hxx"
36 : #include "fntcache.hxx"
37 : #include "porfld.hxx"
38 : #include "porftn.hxx"
39 : #include "porref.hxx"
40 : #include "portox.hxx"
41 : #include "porhyph.hxx"
42 : #include "porfly.hxx"
43 : #include "itrform2.hxx"
44 : #include "chpfld.hxx"
45 : #include "dbfld.hxx"
46 : #include "expfld.hxx"
47 : #include "docufld.hxx"
48 : #include "pagedesc.hxx"
49 : #include <pormulti.hxx>
50 : #include "fmtmeta.hxx"
51 : #include "reffld.hxx"
52 : #include "flddat.hxx"
53 :
54 : /*************************************************************************
55 : * SwTxtFormatter::NewFldPortion()
56 : *************************************************************************/
57 :
58 0 : static bool lcl_IsInBody( SwFrm *pFrm )
59 : {
60 0 : if ( pFrm->IsInDocBody() )
61 0 : return true;
62 : else
63 : {
64 0 : const SwFrm *pTmp = pFrm;
65 : const SwFlyFrm *pFly;
66 0 : while ( 0 != (pFly = pTmp->FindFlyFrm()) )
67 0 : pTmp = pFly->GetAnchorFrm();
68 0 : return pTmp->IsInDocBody();
69 : }
70 : }
71 :
72 0 : SwExpandPortion *SwTxtFormatter::NewFldPortion( SwTxtFormatInfo &rInf,
73 : const SwTxtAttr *pHint ) const
74 : {
75 0 : SwExpandPortion *pRet = 0;
76 0 : SwFrm *pFrame = (SwFrm*)pFrm;
77 0 : SwField *pFld = (SwField*)pHint->GetFmtFld().GetField();
78 0 : const bool bName = rInf.GetOpt().IsFldName();
79 :
80 0 : SwCharFmt* pChFmt = 0;
81 0 : bool bNewFlyPor = false;
82 0 : sal_uInt16 subType = 0;
83 :
84 : // set language
85 0 : ((SwTxtFormatter*)this)->SeekAndChg( rInf );
86 0 : if (pFld->GetLanguage() != GetFnt()->GetLanguage())
87 : {
88 0 : pFld->SetLanguage( GetFnt()->GetLanguage() );
89 : // let the visual note know about its new language
90 0 : if (pFld->GetTyp()->Which()==RES_POSTITFLD)
91 0 : const_cast<SwFmtFld*> (&pHint->GetFmtFld())->Broadcast( SwFmtFldHint( &pHint->GetFmtFld(), SWFMTFLD_LANGUAGE ) );
92 : }
93 :
94 0 : SwViewShell *pSh = rInf.GetVsh();
95 0 : SwDoc *const pDoc( (pSh) ? pSh->GetDoc() : 0 );
96 0 : bool const bInClipboard( (pDoc) ? pDoc->IsClipBoard() : true );
97 0 : bool bPlaceHolder = false;
98 :
99 0 : switch( pFld->GetTyp()->Which() )
100 : {
101 : case RES_SCRIPTFLD:
102 : case RES_POSTITFLD:
103 0 : pRet = new SwPostItsPortion( RES_SCRIPTFLD == pFld->GetTyp()->Which() );
104 0 : break;
105 :
106 : case RES_COMBINED_CHARS:
107 : {
108 0 : if( bName )
109 0 : pRet = new SwFldPortion( pFld->GetFieldName() );
110 : else
111 0 : pRet = new SwCombinedPortion( pFld->ExpandField(bInClipboard) );
112 : }
113 0 : break;
114 :
115 : case RES_HIDDENTXTFLD:
116 : {
117 : OUString const aStr( (bName)
118 0 : ? pFld->GetFieldName()
119 0 : : pFld->ExpandField(bInClipboard) );
120 0 : pRet = new SwHiddenPortion(aStr);
121 : }
122 0 : break;
123 :
124 : case RES_CHAPTERFLD:
125 0 : if( !bName && pSh && !pSh->Imp()->IsUpdateExpFlds() )
126 : {
127 : ((SwChapterField*)pFld)->ChangeExpansion( pFrame,
128 0 : &((SwTxtFld*)pHint)->GetTxtNode() );
129 : }
130 : {
131 : OUString const aStr( (bName)
132 0 : ? pFld->GetFieldName()
133 0 : : pFld->ExpandField(bInClipboard) );
134 0 : pRet = new SwFldPortion( aStr );
135 : }
136 0 : break;
137 :
138 : case RES_DOCSTATFLD:
139 0 : if( !bName && pSh && !pSh->Imp()->IsUpdateExpFlds() )
140 : {
141 0 : ((SwDocStatField*)pFld)->ChangeExpansion( pFrame );
142 : }
143 : {
144 : OUString const aStr( (bName)
145 0 : ? pFld->GetFieldName()
146 0 : : pFld->ExpandField(bInClipboard) );
147 0 : pRet = new SwFldPortion( aStr );
148 : }
149 0 : if(pRet)
150 0 : ((SwFldPortion*)pRet)->m_nAttrFldType= ATTR_PAGECOOUNTFLD;
151 0 : break;
152 :
153 : case RES_PAGENUMBERFLD:
154 : {
155 0 : if( !bName && pSh && pSh->GetLayout() && !pSh->Imp()->IsUpdateExpFlds() )
156 : {
157 0 : SwPageNumberFieldType *pPageNr = (SwPageNumberFieldType *)pFld->GetTyp();
158 :
159 0 : const SwRootFrm* pTmpRootFrm = pSh->GetLayout();
160 0 : const bool bVirt = pTmpRootFrm->IsVirtPageNum();
161 :
162 0 : MSHORT nVirtNum = pFrame->GetVirtPageNum();
163 0 : MSHORT nNumPages = pTmpRootFrm->GetPageNum();
164 0 : sal_Int16 nNumFmt = -1;
165 0 : if(SVX_NUM_PAGEDESC == pFld->GetFormat())
166 0 : nNumFmt = pFrame->FindPageFrm()->GetPageDesc()->GetNumType().GetNumberingType();
167 : static_cast<SwPageNumberField*>(pFld)
168 0 : ->ChangeExpansion(nVirtNum, nNumPages);
169 : pPageNr->ChangeExpansion(pDoc,
170 0 : bVirt, nNumFmt > -1 ? &nNumFmt : 0);
171 : }
172 : {
173 : OUString const aStr( (bName)
174 0 : ? pFld->GetFieldName()
175 0 : : pFld->ExpandField(bInClipboard) );
176 0 : pRet = new SwFldPortion( aStr );
177 : }
178 0 : if(pRet)
179 0 : ((SwFldPortion*)pRet)->m_nAttrFldType= ATTR_PAGENUMBERFLD;
180 0 : break;
181 : }
182 : case RES_GETEXPFLD:
183 : {
184 0 : if( !bName && pSh && !pSh->Imp()->IsUpdateExpFlds() )
185 : {
186 0 : SwGetExpField* pExpFld = (SwGetExpField*)pFld;
187 0 : if( !::lcl_IsInBody( pFrame ) )
188 : {
189 0 : pExpFld->ChgBodyTxtFlag( false );
190 0 : pExpFld->ChangeExpansion( *pFrame, *((SwTxtFld*)pHint) );
191 : }
192 0 : else if( !pExpFld->IsInBodyTxt() )
193 : {
194 : // war vorher anders, also erst expandieren, dann umsetzen!!
195 0 : pExpFld->ChangeExpansion( *pFrame, *((SwTxtFld*)pHint) );
196 0 : pExpFld->ChgBodyTxtFlag( true );
197 : }
198 : }
199 : {
200 : OUString const aStr( (bName)
201 0 : ? pFld->GetFieldName()
202 0 : : pFld->ExpandField(bInClipboard) );
203 0 : pRet = new SwFldPortion( aStr );
204 : }
205 0 : break;
206 : }
207 : case RES_DBFLD:
208 : {
209 0 : if( !bName )
210 : {
211 0 : SwDBField* pDBFld = (SwDBField*)pFld;
212 0 : pDBFld->ChgBodyTxtFlag( ::lcl_IsInBody( pFrame ) );
213 : }
214 : {
215 : OUString const aStr( (bName)
216 0 : ? pFld->GetFieldName()
217 0 : : pFld->ExpandField(bInClipboard) );
218 0 : pRet = new SwFldPortion(aStr);
219 : }
220 0 : break;
221 : }
222 : case RES_REFPAGEGETFLD:
223 0 : if( !bName && pSh && !pSh->Imp()->IsUpdateExpFlds() )
224 : {
225 0 : ((SwRefPageGetField*)pFld)->ChangeExpansion( pFrame, (SwTxtFld*)pHint );
226 : }
227 : {
228 : OUString const aStr( (bName)
229 0 : ? pFld->GetFieldName()
230 0 : : pFld->ExpandField(bInClipboard) );
231 0 : pRet = new SwFldPortion(aStr);
232 : }
233 0 : break;
234 :
235 : case RES_JUMPEDITFLD:
236 0 : if( !bName )
237 0 : pChFmt = ((SwJumpEditField*)pFld)->GetCharFmt();
238 0 : bNewFlyPor = true;
239 0 : bPlaceHolder = true;
240 0 : break;
241 : case RES_GETREFFLD:
242 0 : subType = ((SwGetRefField*)pFld)->GetSubType();
243 : {
244 : OUString const str( (bName)
245 0 : ? pFld->GetFieldName()
246 0 : : pFld->ExpandField(bInClipboard) );
247 0 : pRet = new SwFldPortion(str);
248 : }
249 0 : if(pRet)
250 : {
251 0 : if( subType == REF_BOOKMARK )
252 0 : ((SwFldPortion*)pRet)->m_nAttrFldType = ATTR_BOOKMARKFLD;
253 0 : else if( subType == REF_SETREFATTR )
254 0 : ((SwFldPortion*)pRet)->m_nAttrFldType = ATTR_SETREFATTRFLD;
255 0 : break;
256 : }
257 : case RES_DATETIMEFLD:
258 0 : subType = ((SwDateTimeField*)pFld)->GetSubType();
259 : {
260 : OUString const str( (bName)
261 0 : ? pFld->GetFieldName()
262 0 : : pFld->ExpandField(bInClipboard) );
263 0 : pRet = new SwFldPortion(str);
264 : }
265 0 : if(pRet)
266 : {
267 0 : if( subType & DATEFLD )
268 0 : ((SwFldPortion*)pRet)->m_nAttrFldType= ATTR_DATEFLD;
269 0 : else if( subType & TIMEFLD )
270 0 : ((SwFldPortion*)pRet)->m_nAttrFldType = ATTR_TIMEFLD;
271 0 : break;
272 : }
273 : default:
274 : {
275 : OUString const aStr( (bName)
276 0 : ? pFld->GetFieldName()
277 0 : : pFld->ExpandField(bInClipboard) );
278 0 : pRet = new SwFldPortion(aStr);
279 : }
280 : }
281 :
282 0 : if( bNewFlyPor )
283 : {
284 0 : SwFont *pTmpFnt = 0;
285 0 : if( !bName )
286 : {
287 0 : pTmpFnt = new SwFont( *pFnt );
288 0 : pTmpFnt->SetDiffFnt( &pChFmt->GetAttrSet(), pFrm->GetTxtNode()->getIDocumentSettingAccess() );
289 : }
290 : {
291 : OUString const aStr( (bName)
292 0 : ? pFld->GetFieldName()
293 0 : : pFld->ExpandField(bInClipboard) );
294 0 : pRet = new SwFldPortion(aStr, pTmpFnt, bPlaceHolder);
295 : }
296 : }
297 :
298 0 : return pRet;
299 : }
300 :
301 : /*************************************************************************
302 : * SwTxtFormatter::TryNewNoLengthPortion()
303 : *************************************************************************/
304 :
305 0 : static SwFldPortion * lcl_NewMetaPortion(SwTxtAttr & rHint, const bool bPrefix)
306 : {
307 : ::sw::Meta *const pMeta(
308 0 : static_cast<SwFmtMeta &>(rHint.GetAttr()).GetMeta() );
309 0 : OUString fix;
310 0 : ::sw::MetaField *const pField( dynamic_cast< ::sw::MetaField * >(pMeta) );
311 : OSL_ENSURE(pField, "lcl_NewMetaPortion: no meta field?");
312 0 : if (pField)
313 : {
314 0 : pField->GetPrefixAndSuffix((bPrefix) ? &fix : 0, (bPrefix) ? 0 : &fix);
315 : }
316 0 : return new SwFldPortion( fix );
317 : }
318 :
319 : /** Try to create a new portion with zero length, for an end of a hint
320 : (where there is no CH_TXTATR). Because there may be multiple hint ends at a
321 : given index, m_nHintEndIndex is used to keep track of the already created
322 : portions. But the portions created here may actually be deleted again,
323 : due to Underflow. In that case, m_nHintEndIndex must be decremented,
324 : so the portion will be created again on the next line.
325 : */
326 : SwExpandPortion *
327 0 : SwTxtFormatter::TryNewNoLengthPortion(SwTxtFormatInfo & rInfo)
328 : {
329 0 : if (pHints)
330 : {
331 0 : const sal_Int32 nIdx(rInfo.GetIdx());
332 0 : while (m_nHintEndIndex < pHints->GetEndCount())
333 : {
334 0 : SwTxtAttr & rHint( *pHints->GetEnd(m_nHintEndIndex) );
335 0 : sal_Int32 const nEnd( *rHint.GetAnyEnd() );
336 0 : if (nEnd > nIdx)
337 : {
338 0 : break;
339 : }
340 0 : ++m_nHintEndIndex;
341 0 : if (nEnd == nIdx)
342 : {
343 0 : if (RES_TXTATR_METAFIELD == rHint.Which())
344 : {
345 : SwFldPortion *const pPortion(
346 0 : lcl_NewMetaPortion(rHint, false));
347 0 : pPortion->SetNoLength(); // no CH_TXTATR at hint end!
348 0 : return pPortion;
349 : }
350 : }
351 : }
352 : }
353 0 : return 0;
354 : }
355 :
356 : /*************************************************************************
357 : * SwTxtFormatter::NewExtraPortion()
358 : *************************************************************************/
359 :
360 0 : SwLinePortion *SwTxtFormatter::NewExtraPortion( SwTxtFormatInfo &rInf )
361 : {
362 0 : SwTxtAttr *pHint = GetAttr( rInf.GetIdx() );
363 0 : SwLinePortion *pRet = 0;
364 0 : if( !pHint )
365 : {
366 0 : pRet = new SwTxtPortion;
367 0 : pRet->SetLen( 1 );
368 0 : rInf.SetLen( 1 );
369 0 : return pRet;
370 : }
371 :
372 0 : switch( pHint->Which() )
373 : {
374 : case RES_TXTATR_FLYCNT :
375 : {
376 0 : pRet = NewFlyCntPortion( rInf, pHint );
377 0 : break;
378 : }
379 : case RES_TXTATR_FTN :
380 : {
381 0 : pRet = NewFtnPortion( rInf, pHint );
382 0 : break;
383 : }
384 : case RES_TXTATR_FIELD :
385 : case RES_TXTATR_ANNOTATION :
386 : {
387 0 : pRet = NewFldPortion( rInf, pHint );
388 0 : break;
389 : }
390 : case RES_TXTATR_REFMARK :
391 : {
392 0 : pRet = new SwIsoRefPortion;
393 0 : break;
394 : }
395 : case RES_TXTATR_TOXMARK :
396 : {
397 0 : pRet = new SwIsoToxPortion;
398 0 : break;
399 : }
400 : case RES_TXTATR_METAFIELD:
401 : {
402 0 : pRet = lcl_NewMetaPortion( *pHint, true );
403 0 : break;
404 : }
405 : default: ;
406 : }
407 0 : if( !pRet )
408 : {
409 0 : const OUString aNothing;
410 0 : pRet = new SwFldPortion( aNothing );
411 0 : rInf.SetLen( 1 );
412 : }
413 0 : return pRet;
414 : }
415 :
416 : /*************************************************************************
417 : * SwTxtFormatter::NewNumberPortion()
418 : *************************************************************************/
419 :
420 0 : SwNumberPortion *SwTxtFormatter::NewNumberPortion( SwTxtFormatInfo &rInf ) const
421 : {
422 0 : if( rInf.IsNumDone() || rInf.GetTxtStart() != nStart
423 0 : || rInf.GetTxtStart() != rInf.GetIdx() )
424 0 : return 0;
425 :
426 0 : SwNumberPortion *pRet = 0;
427 0 : const SwTxtNode* pTxtNd = GetTxtFrm()->GetTxtNode();
428 0 : const SwNumRule* pNumRule = pTxtNd->GetNumRule();
429 :
430 : // hat ein "gueltige" Nummer ?
431 0 : if( pTxtNd->IsNumbered() && pTxtNd->IsCountedInList())
432 : {
433 0 : int nLevel = pTxtNd->GetActualListLevel();
434 :
435 0 : if (nLevel < 0)
436 0 : nLevel = 0;
437 :
438 0 : if (nLevel >= MAXLEVEL)
439 0 : nLevel = MAXLEVEL - 1;
440 :
441 0 : const SwNumFmt &rNumFmt = pNumRule->Get( nLevel );
442 0 : const bool bLeft = SVX_ADJUST_LEFT == rNumFmt.GetNumAdjust();
443 0 : const bool bCenter = SVX_ADJUST_CENTER == rNumFmt.GetNumAdjust();
444 : const bool bLabelAlignmentPosAndSpaceModeActive(
445 0 : rNumFmt.GetPositionAndSpaceMode() == SvxNumberFormat::LABEL_ALIGNMENT );
446 : const KSHORT nMinDist = bLabelAlignmentPosAndSpaceModeActive
447 0 : ? 0 : rNumFmt.GetCharTextDistance();
448 :
449 0 : if( SVX_NUM_BITMAP == rNumFmt.GetNumberingType() )
450 : {
451 0 : pRet = new SwGrfNumPortion( (SwFrm*)GetTxtFrm(),
452 : pTxtNd->GetLabelFollowedBy(),
453 0 : rNumFmt.GetBrush(),
454 : rNumFmt.GetGraphicOrientation(),
455 0 : rNumFmt.GetGraphicSize(),
456 : bLeft, bCenter, nMinDist,
457 0 : bLabelAlignmentPosAndSpaceModeActive );
458 0 : long nTmpA = rInf.GetLast()->GetAscent();
459 0 : long nTmpD = rInf.GetLast()->Height() - nTmpA;
460 0 : if( !rInf.IsTest() )
461 0 : ((SwGrfNumPortion*)pRet)->SetBase( nTmpA, nTmpD, nTmpA, nTmpD );
462 : }
463 : else
464 : {
465 : // Der SwFont wird dynamisch angelegt und im CTOR uebergeben,
466 : // weil das CharFmt nur einen SV-Font zurueckliefert.
467 : // Im Dtor vom SwNumberPortion wird der SwFont deletet.
468 0 : SwFont *pNumFnt = 0;
469 0 : const SwAttrSet* pFmt = rNumFmt.GetCharFmt() ?
470 0 : &rNumFmt.GetCharFmt()->GetAttrSet() :
471 0 : NULL;
472 0 : const IDocumentSettingAccess* pIDSA = pTxtNd->getIDocumentSettingAccess();
473 :
474 0 : if( SVX_NUM_CHAR_SPECIAL == rNumFmt.GetNumberingType() )
475 : {
476 0 : const Font *pFmtFnt = rNumFmt.GetBulletFont();
477 :
478 : // Build a new bullet font basing on the current paragraph font:
479 :
480 0 : pNumFnt = new SwFont( &rInf.GetCharAttr(), pIDSA );
481 :
482 : // #i53199#
483 0 : if ( !pIDSA->get(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT) )
484 : {
485 : // i18463:
486 : // Underline style of paragraph font should not be considered
487 : // Overline style of paragraph font should not be considered
488 : // Weight style of paragraph font should not be considered
489 : // Posture style of paragraph font should not be considered
490 0 : pNumFnt->SetUnderline( UNDERLINE_NONE );
491 0 : pNumFnt->SetOverline( UNDERLINE_NONE );
492 0 : pNumFnt->SetItalic( ITALIC_NONE, SW_LATIN );
493 0 : pNumFnt->SetItalic( ITALIC_NONE, SW_CJK );
494 0 : pNumFnt->SetItalic( ITALIC_NONE, SW_CTL );
495 0 : pNumFnt->SetWeight( WEIGHT_NORMAL, SW_LATIN );
496 0 : pNumFnt->SetWeight( WEIGHT_NORMAL, SW_CJK );
497 0 : pNumFnt->SetWeight( WEIGHT_NORMAL, SW_CTL );
498 : }
499 :
500 : // Apply the explicit attributes from the character style
501 : // associated with the numering to the new bullet font.
502 :
503 0 : if( pFmt )
504 0 : pNumFnt->SetDiffFnt( pFmt, pIDSA );
505 :
506 0 : if ( pFmtFnt )
507 : {
508 0 : const sal_uInt8 nAct = pNumFnt->GetActual();
509 0 : pNumFnt->SetFamily( pFmtFnt->GetFamily(), nAct );
510 0 : pNumFnt->SetName( pFmtFnt->GetName(), nAct );
511 0 : pNumFnt->SetStyleName( pFmtFnt->GetStyleName(), nAct );
512 0 : pNumFnt->SetCharSet( pFmtFnt->GetCharSet(), nAct );
513 0 : pNumFnt->SetPitch( pFmtFnt->GetPitch(), nAct );
514 : }
515 :
516 : // we do not allow a vertical font
517 0 : pNumFnt->SetVertical( pNumFnt->GetOrientation(),
518 0 : pFrm->IsVertical() );
519 :
520 : // --> OD 2008-01-23 #newlistelevelattrs#
521 0 : pRet = new SwBulletPortion( rNumFmt.GetBulletChar(),
522 : pTxtNd->GetLabelFollowedBy(),
523 : pNumFnt,
524 : bLeft, bCenter, nMinDist,
525 0 : bLabelAlignmentPosAndSpaceModeActive );
526 : }
527 : else
528 : {
529 0 : OUString aTxt( pTxtNd->GetNumString() );
530 0 : if ( !aTxt.isEmpty() )
531 : {
532 0 : aTxt += pTxtNd->GetLabelFollowedBy();
533 : }
534 :
535 : // 7974: Nicht nur eine Optimierung...
536 : // Eine Numberportion ohne Text wird die Breite von 0
537 : // erhalten. Die nachfolgende Textportion wird im BreakLine
538 : // in das BreakCut laufen, obwohl rInf.GetLast()->GetFlyPortion()
539 : // vorliegt!
540 0 : if( !aTxt.isEmpty() )
541 : {
542 :
543 : // Build a new numbering font basing on the current paragraph font:
544 :
545 0 : pNumFnt = new SwFont( &rInf.GetCharAttr(), pIDSA );
546 :
547 : // #i53199#
548 0 : if ( !pIDSA->get(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT) )
549 : {
550 : // i18463:
551 : // Underline style of paragraph font should not be considered
552 0 : pNumFnt->SetUnderline( UNDERLINE_NONE );
553 : // Overline style of paragraph font should not be considered
554 0 : pNumFnt->SetOverline( UNDERLINE_NONE );
555 : }
556 :
557 : // Apply the explicit attributes from the character style
558 : // associated with the numering to the new bullet font.
559 :
560 0 : if( pFmt )
561 0 : pNumFnt->SetDiffFnt( pFmt, pIDSA );
562 :
563 : // we do not allow a vertical font
564 0 : pNumFnt->SetVertical( pNumFnt->GetOrientation(), pFrm->IsVertical() );
565 :
566 : pRet = new SwNumberPortion( aTxt, pNumFnt,
567 : bLeft, bCenter, nMinDist,
568 0 : bLabelAlignmentPosAndSpaceModeActive );
569 0 : }
570 : }
571 : }
572 : }
573 0 : return pRet;
574 : }
575 :
576 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|