xref: /trunk/main/sw/source/core/text/porlay.hxx (revision 1d2dbeb0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _PORLAY_HXX
24 #define _PORLAY_HXX
25 
26 #include <tools/string.hxx>
27 #include <tools/fract.hxx>
28 #include <scriptinfo.hxx>
29 
30 #include "swrect.hxx"   // SwRepaint
31 #include "portxt.hxx"
32 #include "swfont.hxx"
33 
34 #include <vector>
35 
36 class SwMarginPortion;
37 class SwDropPortion;
38 class SvStream;
39 class SwTxtFormatter;
40 
41 /*************************************************************************
42  *						class SwCharRange
43  *************************************************************************/
44 
45 class SwCharRange
46 {
47 	xub_StrLen nStart, nLen;
48 public:
SwCharRange(const xub_StrLen nInitStart=0,const xub_StrLen nInitLen=0)49 	inline SwCharRange( const xub_StrLen nInitStart = 0,
50 		const xub_StrLen nInitLen = 0):	nStart( nInitStart ), nLen(nInitLen) {}
Start()51 	inline xub_StrLen &Start() { return nStart; }
Start() const52 	inline const xub_StrLen &Start() const { return nStart; }
LeftMove(xub_StrLen nNew)53 	inline void LeftMove( xub_StrLen nNew )
54 			{ if ( nNew < nStart ) { nLen += nStart-nNew; nStart = nNew; } }
End() const55 	inline xub_StrLen End() const
56 				{ return nStart + nLen; }
Len()57 	inline xub_StrLen &Len() { return nLen; }
Len() const58 	inline const xub_StrLen &Len() const { return nLen; }
operator <(const SwCharRange & rRange) const59 	inline sal_Bool operator<(const SwCharRange &rRange) const
60 				{ return nStart < rRange.nStart; }
operator >(const SwCharRange & rRange) const61 	inline sal_Bool operator>(const SwCharRange &rRange) const
62 				{ return nStart + nLen > rRange.nStart + rRange.nLen; }
operator !=(const SwCharRange & rRange) const63 	inline sal_Bool operator!=(const SwCharRange &rRange) const
64 				{ return *this < rRange || *this > rRange; }
65 	SwCharRange &operator+=(const SwCharRange &rRange);
66 };
67 
68 /*************************************************************************
69  *						class SwRepaint
70  *************************************************************************/
71 
72 // SwRepaint ist ein dokumentglobales SwRect mit einem nOfst der angibt,
73 // ab wo in der ersten Zeile gepaintet werden soll
74 // und einem nRightOfst, der den rechten Rand bestimmt
75 class SwRepaint : public SwRect
76 {
77 	SwTwips nOfst;
78 	SwTwips nRightOfst;
79 public:
SwRepaint()80 	SwRepaint() : SwRect(), nOfst( 0 ), nRightOfst( 0 ) {}
SwRepaint(const SwRepaint & rRep)81 	SwRepaint( const SwRepaint& rRep ) : SwRect( rRep ), nOfst( rRep.nOfst ),
82 		nRightOfst( rRep.nRightOfst ) {}
83 
GetOfst() const84 	SwTwips GetOfst() const { return nOfst; }
SetOfst(const SwTwips nNew)85 	void   SetOfst( const SwTwips nNew ) { nOfst = nNew; }
GetRightOfst() const86 	SwTwips GetRightOfst() const { return nRightOfst; }
SetRightOfst(const SwTwips nNew)87 	void   SetRightOfst( const SwTwips nNew ) { nRightOfst = nNew; }
88 };
89 
90 /*************************************************************************
91  *						class SwLineLayout
92  *************************************************************************/
93 
94 class SwLineLayout : public SwTxtPortion
95 {
96 private:
97     SwLineLayout *pNext;                // Die naechste Zeile.
98     std::vector<long>* pLLSpaceAdd;     // Used for justified alignment.
99     SvUShorts* pKanaComp;               // Used for Kana compression.
100     KSHORT nRealHeight;                 // Die aus Zeilenabstand/Register resultierende Hoehe.
101 	sal_Bool bFormatAdj : 1;
102 	sal_Bool bDummy 	: 1;
103 	sal_Bool bFntChg	: 1;
104 	sal_Bool bEndHyph	: 1;
105 	sal_Bool bMidHyph	: 1;
106 	sal_Bool bTab		: 1;
107     sal_Bool bFly       : 1;
108 	sal_Bool bRest		: 1;
109 	sal_Bool bBlinking	: 1;
110 	sal_Bool bClipping	: 1; // Clipping erforderlich wg. exakter Zeilenhoehe
111 	sal_Bool bContent	: 1; // enthaelt Text, fuer Zeilennumerierung
112 	sal_Bool bRedline	: 1; // enthaelt Redlining
113 	sal_Bool bForcedLeftMargin : 1; // vom Fly verschobener linker Einzug
114 	sal_Bool bHanging : 1; // contents a hanging portion in the margin
115     sal_Bool bUnderscore : 1;
116 
117 	SwTwips _GetHangingMargin() const;
118 
119 public:
120 	// von SwLinePortion
121 	virtual SwLinePortion *Insert( SwLinePortion *pPortion );
122 	virtual SwLinePortion *Append( SwLinePortion *pPortion );
123 	inline SwLinePortion *GetFirstPortion() const;
124 
125 	// Flags
126 	inline void ResetFlags();
SetFormatAdj(const sal_Bool bNew)127 	inline void SetFormatAdj( const sal_Bool bNew ) { bFormatAdj = bNew; }
IsFormatAdj() const128 	inline sal_Bool IsFormatAdj() const { return bFormatAdj; }
SetFntChg(const sal_Bool bNew)129 	inline void SetFntChg( const sal_Bool bNew ) { bFntChg = bNew; }
IsFntChg() const130 	inline sal_Bool IsFntChg() const { return bFntChg; }
SetEndHyph(const sal_Bool bNew)131 	inline void SetEndHyph( const sal_Bool bNew ) { bEndHyph = bNew; }
IsEndHyph() const132 	inline sal_Bool IsEndHyph() const { return bEndHyph; }
SetMidHyph(const sal_Bool bNew)133 	inline void SetMidHyph( const sal_Bool bNew ) { bMidHyph = bNew; }
IsMidHyph() const134 	inline sal_Bool IsMidHyph() const { return bMidHyph; }
SetTab(const sal_Bool bNew)135 	inline void SetTab( const sal_Bool bNew ) { bTab = bNew; }
IsTab() const136 	inline sal_Bool IsTab() const { return bTab; }
SetFly(const sal_Bool bNew)137     inline void SetFly( const sal_Bool bNew ) { bFly = bNew; }
IsFly() const138     inline sal_Bool IsFly() const { return bFly; }
SetRest(const sal_Bool bNew)139 	inline void SetRest( const sal_Bool bNew ) { bRest = bNew; }
IsRest() const140 	inline sal_Bool IsRest() const { return bRest; }
SetBlinking(const sal_Bool bNew=sal_True)141 	inline void SetBlinking( const sal_Bool bNew = sal_True ) { bBlinking = bNew; }
IsBlinking() const142 	inline sal_Bool IsBlinking() const { return bBlinking; }
SetCntnt(const sal_Bool bNew=sal_True)143 	inline void SetCntnt( const sal_Bool bNew = sal_True ) { bContent = bNew; }
HasCntnt() const144 	inline sal_Bool HasCntnt() const { return bContent; }
SetRedline(const sal_Bool bNew=sal_True)145 	inline void SetRedline( const sal_Bool bNew = sal_True ) { bRedline = bNew; }
HasRedline() const146 	inline sal_Bool HasRedline() const { return bRedline; }
SetForcedLeftMargin(const sal_Bool bNew=sal_True)147 	inline void SetForcedLeftMargin( const sal_Bool bNew = sal_True ) { bForcedLeftMargin = bNew; }
HasForcedLeftMargin() const148 	inline sal_Bool HasForcedLeftMargin() const { return bForcedLeftMargin; }
SetHanging(const sal_Bool bNew=sal_True)149 	inline void SetHanging( const sal_Bool bNew = sal_True ) { bHanging = bNew; }
IsHanging() const150 	inline sal_Bool IsHanging() const { return bHanging; }
SetUnderscore(const sal_Bool bNew=sal_True)151     inline void SetUnderscore( const sal_Bool bNew = sal_True ) { bUnderscore = bNew; }
HasUnderscore() const152     inline sal_Bool HasUnderscore() const { return bUnderscore; }
153 
154 	// Beruecksichtigung von Dummyleerzeilen
155 	// 4147, 8221:
SetDummy(const sal_Bool bNew)156 	inline void SetDummy( const sal_Bool bNew ) { bDummy = bNew; }
IsDummy() const157 	inline sal_Bool IsDummy() const { return bDummy; }
158 
SetClipping(const sal_Bool bNew)159 	inline void SetClipping( const sal_Bool bNew ) { bClipping = bNew; }
IsClipping() const160 	inline sal_Bool IsClipping() const { return bClipping; }
161 
162 	inline SwLineLayout();
163 	virtual ~SwLineLayout();
164 
GetNext()165 	inline SwLineLayout *GetNext() { return pNext; }
GetNext() const166 	inline const SwLineLayout *GetNext() const { return pNext; }
SetNext(SwLineLayout * pNew)167 	inline void SetNext( SwLineLayout *pNew ) { pNext = pNew; }
168 
169 	void Init( SwLinePortion *pNextPortion = NULL);
170 
171 	// Sammelt die Daten fuer die Zeile.
172 	void CalcLine( SwTxtFormatter &rLine, SwTxtFormatInfo &rInf );
173 
SetRealHeight(KSHORT nNew)174 	inline void SetRealHeight( KSHORT nNew ) { nRealHeight = nNew; }
GetRealHeight() const175 	inline KSHORT GetRealHeight() const { return nRealHeight; }
176 
177 	// Erstellt bei kurzen Zeilen die Glue-Kette.
178 	SwMarginPortion *CalcLeftMargin();
179 
GetHangingMargin() const180 	inline SwTwips GetHangingMargin() const
181         { return _GetHangingMargin(); }
182 
183 	// fuer die Sonderbehandlung bei leeren Zeilen
184 	virtual sal_Bool Format( SwTxtFormatInfo &rInf );
185 
186     //
187     // STUFF FOR JUSTIFIED ALIGNMENT
188     //
IsSpaceAdd()189     inline sal_Bool IsSpaceAdd() { return pLLSpaceAdd != NULL; }
190     void InitSpaceAdd();     // Creates pLLSpaceAdd if necessary
191     void CreateSpaceAdd( const long nInit = 0 );
FinishSpaceAdd()192     inline void FinishSpaceAdd() { delete pLLSpaceAdd; pLLSpaceAdd = NULL; }
GetLLSpaceAddCount() const193     inline sal_uInt16 GetLLSpaceAddCount() const { return sal::static_int_cast< sal_uInt16 >(pLLSpaceAdd->size()); }
SetLLSpaceAdd(long nNew,sal_uInt16 nIdx)194     inline void SetLLSpaceAdd( long nNew, sal_uInt16 nIdx )
195     {
196         if ( nIdx == GetLLSpaceAddCount() )
197             pLLSpaceAdd->push_back( nNew );
198         else
199             (*pLLSpaceAdd)[ nIdx ] = nNew;
200     }
GetLLSpaceAdd(sal_uInt16 nIdx)201     inline long GetLLSpaceAdd( sal_uInt16 nIdx ) { return (*pLLSpaceAdd)[ nIdx ]; }
RemoveFirstLLSpaceAdd()202     inline void RemoveFirstLLSpaceAdd() { pLLSpaceAdd->erase( pLLSpaceAdd->begin() ); }
GetpLLSpaceAdd() const203     inline std::vector<long>* GetpLLSpaceAdd() const { return pLLSpaceAdd; }
204 
205     //
206     // STUFF FOR KANA COMPRESSION
207     //
SetKanaComp(SvUShorts * pNew)208     inline void SetKanaComp( SvUShorts* pNew ){ pKanaComp = pNew; }
FinishKanaComp()209     inline void FinishKanaComp() { delete pKanaComp; pKanaComp = NULL; }
GetpKanaComp() const210     inline SvUShorts* GetpKanaComp() const { return pKanaComp; }
GetKanaComp()211     inline SvUShorts& GetKanaComp() { return *pKanaComp; }
212 
213     /** determine ascent and descent for positioning of as-character anchored
214         object
215 
216         OD 07.01.2004 #i11859# - previously local method <lcl_MaxAscDescent>
217         Method calculates maximum ascents and descents of the line layout.
218         One value considering as-character anchored objects, one without these
219         objects.
220         Portions for other anchored objects aren't considered.
221         OD 2005-05-20 #i47162# - add optional parameter <_bNoFlyCntPorAndLinePor>
222         to control, if the fly content portions and line portion are considered.
223 
224         @param _orAscent
225         output parameter - maximum ascent without as-character anchored objects
226 
227         @param _orDescent
228         output parameter - maximum descent without as-character anchored objects
229 
230         @param _orObjAscent
231         output parameter - maximum ascent with as-character anchored objects
232 
233         @param _orObjDescent
234         output parameter - maximum descent with as-character anchored objects
235 
236         @param _pDontConsiderPortion
237         input parameter - portion, which isn't considered for calculating
238         <_orObjAscent> and <_orObjDescent>, if it isn't a portion for a
239         as-character anchored object or it isn't as high as the line.
240 
241         @param _bNoFlyCntPorAndLinePor
242         optional input parameter - boolean, indicating that fly content portions
243         and the line portion are considered or not.
244 
245         @author OD
246     */
247     void MaxAscentDescent( SwTwips& _orAscent,
248                            SwTwips& _orDescent,
249                            SwTwips& _orObjAscent,
250                            SwTwips& _orObjDescent,
251                            const SwLinePortion* _pDontConsiderPortion = NULL,
252                            const bool _bNoFlyCntPorAndLinePor = false ) const;
253 
254 #ifdef DBG_UTIL
255 	void DebugPortions( SvStream &rOs, const XubString &rTxt,
256 						const xub_StrLen nStart ); //$ ostream
257 #endif
258 
259 	OUTPUT_OPERATOR
260 	DECL_FIXEDMEMPOOL_NEWDEL(SwLineLayout)
261 };
262 
263 class SwParaPortion : public SwLineLayout
264 {
265 	// neu zu paintender Bereich
266 	SwRepaint aRepaint;
267 	// neu zu formatierender Bereich
268 	SwCharRange aReformat;
269 	SwScriptInfo aScriptInfo;
270 //   Fraction aZoom;
271     long nDelta;
272 
273 	// Wenn ein SwTxtFrm gelocked ist, werden keine Veraenderungen an den
274 	// Formatierungsdaten (unter pLine) vorgenommen (vgl. ORPHANS)
275 	sal_Bool bFlys			: 1; // Ueberlappen Flys ?
276 	sal_Bool bPrep			: 1; // PREP_*
277 	sal_Bool bPrepWidows	: 1; // PREP_WIDOWS
278 	sal_Bool bPrepAdjust	: 1; // PREP_ADJUST_FRM
279 	sal_Bool bPrepMustFit	: 1; // PREP_MUST_FIT
280 	sal_Bool bFollowField	: 1; // Es steht noch ein Feldrest fuer den Follow an.
281 
282 	sal_Bool bFixLineHeight	: 1; // Feste Zeilenhoehe
283 	sal_Bool bFtnNum	: 1; // contents a footnotenumberportion
284 	sal_Bool bMargin	: 1; // contents a hanging punctuation in the margin
285 
286 	sal_Bool bFlag00	: 1; //
287 	sal_Bool bFlag11	: 1; //
288 	sal_Bool bFlag12	: 1; //
289 	sal_Bool bFlag13	: 1; //
290 	sal_Bool bFlag14	: 1; //
291 	sal_Bool bFlag15	: 1; //
292 	sal_Bool bFlag16	: 1; //
293 
294 public:
295 	SwParaPortion();
296     virtual ~SwParaPortion();
297 
298 	// setzt alle Formatinformationen zurueck (ausser bFlys wg. 9916)
299 	inline void FormatReset();
300 
301 	// Setzt die Flags zurueck
302 	inline void ResetPreps();
303 
304 	// Get/Set-Methoden
GetRepaint()305 	inline SwRepaint *GetRepaint() { return &aRepaint; }
GetRepaint() const306 	inline const SwRepaint *GetRepaint() const { return &aRepaint; }
GetReformat()307 	inline SwCharRange *GetReformat() { return &aReformat; }
GetReformat() const308 	inline const SwCharRange *GetReformat() const { return &aReformat; }
GetDelta()309 	inline long *GetDelta() { return &nDelta; }
GetDelta() const310 	inline const long *GetDelta() const { return &nDelta; }
GetScriptInfo()311     inline SwScriptInfo& GetScriptInfo() { return aScriptInfo; }
GetScriptInfo() const312     inline const SwScriptInfo& GetScriptInfo() const { return aScriptInfo; }
313 
314     // fuer SwTxtFrm::Format: liefert die aktuelle Laenge des Absatzes
315 	xub_StrLen GetParLen() const;
316 
317 	// fuer Prepare()
318 	sal_Bool UpdateQuoVadis( const XubString &rQuo );
319 
320 	// Flags
SetFly(const sal_Bool bNew=sal_True)321 	inline void SetFly( const sal_Bool bNew = sal_True ) { bFlys = bNew; }
HasFly() const322 	inline sal_Bool HasFly() const { return bFlys; }
323 
324 	// Preps
SetPrep(const sal_Bool bNew=sal_True)325 	inline void SetPrep( const sal_Bool bNew = sal_True ) { bPrep = bNew; }
IsPrep() const326 	inline sal_Bool IsPrep() const { return bPrep; }
SetPrepWidows(const sal_Bool bNew=sal_True)327 	inline void SetPrepWidows( const sal_Bool bNew = sal_True ) { bPrepWidows = bNew; }
IsPrepWidows() const328 	inline sal_Bool IsPrepWidows() const { return bPrepWidows; }
SetPrepMustFit(const sal_Bool bNew=sal_True)329 	inline void SetPrepMustFit( const sal_Bool bNew = sal_True ) { bPrepMustFit = bNew; }
IsPrepMustFit() const330 	inline sal_Bool IsPrepMustFit() const { return bPrepMustFit; }
SetPrepAdjust(const sal_Bool bNew=sal_True)331 	inline void SetPrepAdjust( const sal_Bool bNew = sal_True ) { bPrepAdjust = bNew; }
IsPrepAdjust() const332 	inline sal_Bool IsPrepAdjust() const { return bPrepAdjust; }
SetFollowField(const sal_Bool bNew=sal_True)333 	inline void SetFollowField( const sal_Bool bNew = sal_True ) { bFollowField = bNew; }
IsFollowField() const334 	inline sal_Bool IsFollowField() const { return bFollowField; }
SetFixLineHeight(const sal_Bool bNew=sal_True)335 	inline void SetFixLineHeight( const sal_Bool bNew = sal_True ) { bFixLineHeight = bNew; }
IsFixLineHeight() const336 	inline sal_Bool  IsFixLineHeight() const { return bFixLineHeight; }
337 
SetFtnNum(const sal_Bool bNew=sal_True)338 	inline void SetFtnNum( const sal_Bool bNew = sal_True ) { bFtnNum = bNew; }
IsFtnNum() const339 	inline sal_Bool  IsFtnNum() const { return bFtnNum; }
SetMargin(const sal_Bool bNew=sal_True)340 	inline void SetMargin( const sal_Bool bNew = sal_True ) { bMargin = bNew; }
IsMargin() const341 	inline sal_Bool  IsMargin() const { return bMargin; }
SetFlag00(const sal_Bool bNew=sal_True)342 	inline void SetFlag00( const sal_Bool bNew = sal_True ) { bFlag00 = bNew; }
IsFlag00() const343 	inline sal_Bool  IsFlag00() const { return bFlag00; }
SetFlag11(const sal_Bool bNew=sal_True)344 	inline void SetFlag11( const sal_Bool bNew = sal_True ) { bFlag11 = bNew; }
IsFlag11() const345 	inline sal_Bool  IsFlag11() const { return bFlag11; }
SetFlag12(const sal_Bool bNew=sal_True)346 	inline void SetFlag12( const sal_Bool bNew = sal_True ) { bFlag12 = bNew; }
IsFlag12() const347 	inline sal_Bool  IsFlag12() const { return bFlag12; }
SetFlag13(const sal_Bool bNew=sal_True)348 	inline void SetFlag13( const sal_Bool bNew = sal_True ) { bFlag13 = bNew; }
IsFlag13() const349 	inline sal_Bool  IsFlag13() const { return bFlag13; }
SetFlag14(const sal_Bool bNew=sal_True)350 	inline void SetFlag14( const sal_Bool bNew = sal_True ) { bFlag14 = bNew; }
IsFlag14() const351 	inline sal_Bool  IsFlag14() const { return bFlag14; }
SetFlag15(const sal_Bool bNew=sal_True)352 	inline void SetFlag15( const sal_Bool bNew = sal_True ) { bFlag15 = bNew; }
IsFlag15() const353 	inline sal_Bool  IsFlag15() const { return bFlag15; }
SetFlag16(const sal_Bool bNew=sal_True)354 	inline void SetFlag16( const sal_Bool bNew = sal_True ) { bFlag16 = bNew; }
IsFlag16() const355 	inline sal_Bool  IsFlag16() const { return bFlag16; }
356 
357 	// schneller, hoeher, weiter: Read/Write-Methoden fuer den SWG-Filter
358 	SvStream &ReadSwg ( SvStream& rStream ); //$ istream
359 	SvStream &WriteSwg( SvStream& rStream ); //$ ostream
360 
361 	// nErgo in der QuoVadisPortion setzen
362 	void SetErgoSumNum( const XubString &rErgo );
363 
364 	const SwDropPortion *FindDropPortion() const;
365 
366 	OUTPUT_OPERATOR
367 	DECL_FIXEDMEMPOOL_NEWDEL(SwParaPortion)
368 };
369 
370 /*************************************************************************
371  *						Inline-Implementierungen
372  *************************************************************************/
373 
ResetFlags()374 inline void SwLineLayout::ResetFlags()
375 {
376     bFormatAdj = bDummy = bFntChg = bTab = bEndHyph = bMidHyph = bFly
377 	= bRest = bBlinking = bClipping = bContent = bRedline
378     = bForcedLeftMargin = bHanging = sal_False;
379 }
380 
SwLineLayout()381 inline SwLineLayout::SwLineLayout()
382     : pNext( 0 ), pLLSpaceAdd( 0 ), pKanaComp( 0 ), nRealHeight( 0 ),
383       bUnderscore( sal_False )
384 {
385 	ResetFlags();
386 	SetWhichPor( POR_LAY );
387 }
388 
ResetPreps()389 inline void SwParaPortion::ResetPreps()
390 {
391 	bPrep = bPrepWidows = bPrepAdjust = bPrepMustFit = sal_False;
392 }
393 
FormatReset()394 inline void SwParaPortion::FormatReset()
395 {
396 	nDelta = 0;
397 	aReformat = SwCharRange( 0, STRING_LEN );
398 //	AMA 9916: bFlys muss in SwTxtFrm::_Format() erhalten bleiben, damit
399 //	leere Absaetze, die Rahmen ohne Umfluss ausweichen mussten, sich
400 //	neu formatieren, wenn der Rahmen aus dem Bereich verschwindet.
401 //	bFlys = sal_False;
402 	ResetPreps();
403 	bFollowField = bFixLineHeight = bMargin = sal_False;
404 }
405 
406 #ifdef UNX
407 // C30 ist mit dem ternaeren Ausdruck ueberfordert.
GetFirstPortion() const408 inline SwLinePortion *SwLineLayout::GetFirstPortion() const
409 {
410 	SwLinePortion *pTmp = pPortion;
411 	if ( !pPortion )
412 		pTmp = (SwLinePortion*)this;
413 	return( pTmp );
414 }
415 #else
GetFirstPortion() const416 inline SwLinePortion *SwLineLayout::GetFirstPortion() const
417 { return( pPortion ? pPortion : (SwLinePortion*)this ); }
418 #endif
419 
420 CLASSIO( SwLineLayout )
421 CLASSIO( SwParaPortion )
422 
423 #endif
424