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
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26
27 #ifdef DBG_UTIL
28
29 #include "viewsh.hxx" // IsDbg()
30 #include "viewopt.hxx" // IsDbg()
31 #include "txtatr.hxx"
32 #include "errhdl.hxx"
33 #include "txtcfg.hxx"
34 #include "txtfrm.hxx" // IsDbg()
35 #include "rootfrm.hxx"
36 #include "flyfrms.hxx"
37 #include "inftxt.hxx"
38 #include "porexp.hxx"
39 #include "porfld.hxx"
40 #include "porfly.hxx"
41 #include "porftn.hxx"
42 #include "porglue.hxx"
43 #include "porhyph.hxx"
44 #include "porlay.hxx"
45 #include "porlin.hxx"
46 #include "porref.hxx"
47 #include "porrst.hxx"
48 #include "portab.hxx"
49 #include "portox.hxx"
50 #include "portxt.hxx"
51 #include "pordrop.hxx"
52 #include "pormulti.hxx"
53 #include "ndhints.hxx"
54
55 // So kann man die Layoutstruktur ausgeben lassen
56 // #define AMA_LAYOUT
57 #ifdef AMA_LAYOUT
58 #include <stdio.h>
59 #include <stdlib.h> // getenv()
60 #include <flowfrm.hxx>
61 #include <pagefrm.hxx>
62 #include <svx/svdobj.hxx>
63 #include <dflyobj.hxx>
64
65
lcl_OutFollow(XubString & rTmp,const SwFrm * pFrm)66 void lcl_OutFollow( XubString &rTmp, const SwFrm* pFrm )
67 {
68 if( pFrm->IsFlowFrm() )
69 {
70 const SwFlowFrm *pFlow = SwFlowFrm::CastFlowFrm( pFrm );
71 if( pFlow->IsFollow() || pFlow->GetFollow() )
72 {
73 rTmp += "(";
74 if( pFlow->IsFollow() )
75 rTmp += ".";
76 if( pFlow->GetFollow() )
77 {
78 MSHORT nFrmId = pFlow->GetFollow()->GetFrm()->GetFrmId();
79 rTmp += nFrmId;
80 }
81 rTmp += ")";
82 }
83 }
84 }
85
lcl_OutFrame(SvFileStream & rStr,const SwFrm * pFrm,ByteString & rSp,sal_Bool bNxt)86 void lcl_OutFrame( SvFileStream& rStr, const SwFrm* pFrm, ByteString& rSp, sal_Bool bNxt )
87 {
88 if( !pFrm )
89 return;
90 KSHORT nSpc = 0;
91 MSHORT nFrmId = pFrm->GetFrmId();
92 ByteString aTmp;
93 if( pFrm->IsLayoutFrm() )
94 {
95 if( pFrm->IsRootFrm() )
96 aTmp = "R";
97 else if( pFrm->IsPageFrm() )
98 aTmp = "P";
99 else if( pFrm->IsBodyFrm() )
100 aTmp = "B";
101 else if( pFrm->IsColumnFrm() )
102 aTmp = "C";
103 else if( pFrm->IsTabFrm() )
104 aTmp = "Tb";
105 else if( pFrm->IsRowFrm() )
106 aTmp = "Rw";
107 else if( pFrm->IsCellFrm() )
108 aTmp = "Ce";
109 else if( pFrm->IsSctFrm() )
110 aTmp = "S";
111 else if( pFrm->IsFlyFrm() )
112 {
113 aTmp = "F";
114 const SwFlyFrm *pFly = (SwFlyFrm*)pFrm;
115 if( pFly->IsFlyInCntFrm() )
116 aTmp += "in";
117 else if( pFly->IsFlyAtCntFrm() )
118 {
119 aTmp += "a";
120 if( pFly->IsAutoPos() )
121 aTmp += "u";
122 else
123 aTmp += "t";
124 }
125 else
126 aTmp += "l";
127 }
128 else if( pFrm->IsHeaderFrm() )
129 aTmp = "H";
130 else if( pFrm->IsFooterFrm() )
131 aTmp = "Fz";
132 else if( pFrm->IsFtnContFrm() )
133 aTmp = "Fc";
134 else if( pFrm->IsFtnFrm() )
135 aTmp = "Fn";
136 else
137 aTmp = "?L?";
138 aTmp += nFrmId;
139 lcl_OutFollow( aTmp, pFrm );
140 aTmp += " ";
141 rStr << aTmp;
142 nSpc = aTmp.Len();
143 rSp.Expand( nSpc + rSp.Len() );
144 lcl_OutFrame( rStr, ((SwLayoutFrm*)pFrm)->Lower(), rSp, sal_True );
145 }
146 else
147 {
148 if( pFrm->IsTxtFrm() )
149 aTmp = "T";
150 else if( pFrm->IsNoTxtFrm() )
151 aTmp = "N";
152 else
153 aTmp = "?C?";
154 aTmp += nFrmId;
155 lcl_OutFollow( aTmp, pFrm );
156 aTmp += " ";
157 rStr << aTmp;
158 nSpc = aTmp.Len();
159 rSp.Expand( nSpc + rSp.Len() );
160 }
161 if( pFrm->IsPageFrm() )
162 {
163 const SwPageFrm* pPg = (SwPageFrm*)pFrm;
164 const SwSortedObjs *pSorted = pPg->GetSortedObjs();
165 const MSHORT nCnt = pSorted ? pSorted->Count() : 0;
166 if( nCnt )
167 {
168 for( MSHORT i=0; i < nCnt; ++i )
169 {
170 // --> OD 2004-07-07 #i28701# - consider changed type of
171 // <SwSortedObjs> entries
172 SwAnchoredObject* pAnchoredObj = (*pSorted)[ i ];
173 if( pAnchoredObj->ISA(SwFlyFrm) )
174 {
175 SwFlyFrm* pFly = static_cast<SwFlyFrm*>(pAnchoredObj);
176 lcl_OutFrame( rStr, pFly, rSp, sal_False );
177 }
178 else
179 {
180 aTmp = pAnchoredObj->GetDrawObj()->IsUnoObj() ? "UNO" : "Drw";
181 rStr << aTmp;
182 }
183 // <--
184 if( i < nCnt - 1 )
185 rStr << endl << rSp;
186 }
187 }
188 }
189 else if( pFrm->GetDrawObjs() )
190 {
191 MSHORT nCnt = pFrm->GetDrawObjs()->Count();
192 if( nCnt )
193 {
194 for( MSHORT i=0; i < nCnt; ++i )
195 {
196 // --> OD 2004-07-07 #i28701# - consider changed type of
197 // <SwSortedObjs> entries
198 SwAnchoredObject* pAnchoredObj = (*pFrm->GetDrawObjs())[ i ];
199 if( pAnchoredObj->ISA(SwFlyFrm) )
200 {
201 SwFlyFrm* pFly = static_cast<SwFlyFrm*>(pAnchoredObj);
202 lcl_OutFrame( rStr, pFly, rSp, sal_False );
203 }
204 else
205 {
206 aTmp = pAnchoredObj->GetDrawObj()->IsUnoObj() ? "UNO" : "Drw";
207 rStr << aTmp;
208 }
209 if( i < nCnt - 1 )
210 rStr << endl << rSp;
211 }
212 }
213 }
214 if( nSpc )
215 rSp.Erase( rSp.Len() - nSpc );
216 if( bNxt && pFrm->GetNext() )
217 {
218 do
219 {
220 pFrm = pFrm->GetNext();
221 rStr << endl << rSp;
222 lcl_OutFrame( rStr, pFrm, rSp, sal_False );
223 } while ( pFrm->GetNext() );
224 }
225 }
226
LayOutPut(const SwFrm * pFrm)227 void LayOutPut( const SwFrm* pFrm )
228 {
229 static char* pOutName = 0;
230 const sal_Bool bFirstOpen = pOutName ? sal_False : sal_True;
231 if( bFirstOpen )
232 {
233 char *pPath = getenv( "TEMP" );
234 char *pName = "layout.txt";
235 if( !pPath )
236 pOutName = pName;
237 else
238 {
239 const int nLen = strlen(pPath);
240 // fuer dieses new wird es kein delete geben.
241 pOutName = new char[nLen + strlen(pName) + 3];
242 if(nLen && (pPath[nLen-1] == '\\') || (pPath[nLen-1] == '/'))
243 snprintf( pOutName, sizeof(pOutName), "%s%s", pPath, pName );
244 else
245 snprintf( pOutName, sizeof(pOutName), "%s/%s", pPath, pName );
246 }
247 }
248 SvFileStream aStream( pOutName, (bFirstOpen
249 ? STREAM_WRITE | STREAM_TRUNC
250 : STREAM_WRITE ));
251
252 if( !aStream.GetError() )
253 {
254 if ( bFirstOpen )
255 aStream << "Layout-Struktur";
256 else
257 aStream.Seek( STREAM_SEEK_TO_END );
258 aStream << endl;
259 aStream << "---------------------------------------------" << endl;
260 XubString aSpace;
261 lcl_OutFrame( aStream, pFrm, aSpace, sal_False );
262 }
263 }
264
265 #endif
266
operator <<(SvStream & rOs,const SwpHints &)267 SvStream &operator<<( SvStream &rOs, const SwpHints & ) //$ ostream
268 {
269 rOs << " {HINTS:";
270
271 // REMOVED
272
273 rOs << '}';
274 return rOs;
275 }
276
277 /*************************************************************************
278 * IsDbg()
279 *************************************************************************/
280
IsDbg(const SwTxtFrm * pFrm)281 sal_Bool IsDbg( const SwTxtFrm *pFrm )
282 {
283 if( pFrm && pFrm->getRootFrm()->GetCurrShell() )
284 return pFrm->getRootFrm()->GetCurrShell()->GetViewOptions()->IsTest4();
285 else
286 return sal_False;
287 }
288
289 #if OSL_DEBUG_LEVEL < 2
290
Error()291 static void Error()
292 {
293 // wegen PM und BCC
294 sal_Bool bFalse = sal_False;
295 ASSERT( bFalse, "txtio: No debug version" );
296 }
297
298 #define IMPL_OUTOP(class) \
299 SvStream &class::operator<<( SvStream &rOs ) const /*$ostream*/\
300 { \
301 Error(); \
302 return rOs; \
303 }
304
305 IMPL_OUTOP( SwTxtPortion )
IMPL_OUTOP(SwLinePortion)306 IMPL_OUTOP( SwLinePortion )
307 IMPL_OUTOP( SwBreakPortion )
308 IMPL_OUTOP( SwGluePortion )
309 IMPL_OUTOP( SwFldPortion )
310 IMPL_OUTOP( SwHiddenPortion )
311 IMPL_OUTOP( SwHyphPortion )
312 IMPL_OUTOP( SwFixPortion )
313 IMPL_OUTOP( SwFlyPortion )
314 IMPL_OUTOP( SwFlyCntPortion )
315 IMPL_OUTOP( SwMarginPortion )
316 IMPL_OUTOP( SwNumberPortion )
317 IMPL_OUTOP( SwBulletPortion )
318 IMPL_OUTOP( SwGrfNumPortion )
319 IMPL_OUTOP( SwLineLayout )
320 IMPL_OUTOP( SwParaPortion )
321 IMPL_OUTOP( SwFtnPortion )
322 IMPL_OUTOP( SwFtnNumPortion )
323 IMPL_OUTOP( SwTmpEndPortion )
324 IMPL_OUTOP( SwHyphStrPortion )
325 IMPL_OUTOP( SwExpandPortion )
326 IMPL_OUTOP( SwBlankPortion )
327 IMPL_OUTOP( SwToxPortion )
328 IMPL_OUTOP( SwRefPortion )
329 IMPL_OUTOP( SwIsoToxPortion )
330 IMPL_OUTOP( SwIsoRefPortion )
331 IMPL_OUTOP( SwSoftHyphPortion )
332 IMPL_OUTOP( SwSoftHyphStrPortion )
333 IMPL_OUTOP( SwTabPortion )
334 IMPL_OUTOP( SwTabLeftPortion )
335 IMPL_OUTOP( SwTabRightPortion )
336 IMPL_OUTOP( SwTabCenterPortion )
337 IMPL_OUTOP( SwTabDecimalPortion )
338 IMPL_OUTOP( SwPostItsPortion )
339 IMPL_OUTOP( SwQuoVadisPortion )
340 IMPL_OUTOP( SwErgoSumPortion )
341 IMPL_OUTOP( SwHolePortion )
342 IMPL_OUTOP( SwDropPortion )
343 IMPL_OUTOP( SwKernPortion )
344 IMPL_OUTOP( SwArrowPortion )
345 IMPL_OUTOP( SwMultiPortion )
346 IMPL_OUTOP( SwCombinedPortion )
347
348 const char *GetPortionName( const MSHORT )
349 {
350 return 0;
351 }
352
GetPrepName(const PrepareHint)353 const char *GetPrepName( const PrepareHint )
354 {
355 return 0;
356 }
357
DebugPortions(SvStream &,const XubString &,const xub_StrLen)358 void SwLineLayout::DebugPortions( SvStream &, const XubString &, //$ ostream
359 const xub_StrLen )
360 {
361 }
362
GetLangName(const MSHORT)363 const char *GetLangName( const MSHORT )
364 {
365 return 0;
366 }
367
368 #else
369 # include <limits.h>
370 # include <stdlib.h>
371 # include "swtypes.hxx" // ZTCCONST
372 # include "swfont.hxx" // SwDropPortion
373
374 CONSTCHAR( pClose, "} " );
375
376 /*************************************************************************
377 * GetPortionName()
378 *************************************************************************/
379
380 CONSTCHAR( pPOR_LIN, "LIN" );
381 CONSTCHAR( pPOR_TXT, "TXT" );
382 CONSTCHAR( pPOR_SHADOW, "SHADOW" );
383 CONSTCHAR( pPOR_TAB, "TAB" );
384 CONSTCHAR( pPOR_TABLEFT, "TABLEFT" );
385 CONSTCHAR( pPOR_TABRIGHT, "TABRIGHT" );
386 CONSTCHAR( pPOR_TABCENTER, "TABCENTER" );
387 CONSTCHAR( pPOR_TABDECIMAL, "TABDECIMAL" );
388 CONSTCHAR( pPOR_EXP, "EXP" );
389 CONSTCHAR( pPOR_HYPH, "HYPH" );
390 CONSTCHAR( pPOR_HYPHSTR, "HYPHSTR" );
391 CONSTCHAR( pPOR_FLD, "FLD" );
392 CONSTCHAR( pPOR_FIX, "FIX" );
393 CONSTCHAR( pPOR_FLY, "FLY" );
394 CONSTCHAR( pPOR_FLYCNT, "FLYCNT" );
395 CONSTCHAR( pPOR_MARGIN, "MARGIN" );
396 CONSTCHAR( pPOR_GLUE, "GLUE" );
397 CONSTCHAR( pPOR_HOLE, "HOLE" );
398 CONSTCHAR( pPOR_END, "END" );
399 CONSTCHAR( pPOR_BRK, "BRK" );
400 CONSTCHAR( pPOR_LAY, "LAY" );
401 CONSTCHAR( pPOR_BLANK, "BLANK" );
402 CONSTCHAR( pPOR_FTN, "FTN" );
403 CONSTCHAR( pPOR_FTNNUM, "FTNNUM" );
404 CONSTCHAR( pPOR_POSTITS, "POSTITS" );
405 CONSTCHAR( pPOR_SOFTHYPH, "SOFTHYPH" );
406 CONSTCHAR( pPOR_SOFTHYPHSTR, "SOFTHYPHSTR" );
407 CONSTCHAR( pPOR_TOX, "TOX" );
408 CONSTCHAR( pPOR_REF, "REF" );
409
410 CONSTCHAR( pPOR_ISOTOX, "ISOTOX" );
411 CONSTCHAR( pPOR_ISOREF, "ISOREF" );
412 CONSTCHAR( pPOR_HIDDEN, "Hidden" );
413 CONSTCHAR( pPOR_QUOVADIS, "QuoVadis" );
414 CONSTCHAR( pPOR_ERGOSUM, "ErgoSum" );
415 CONSTCHAR( pPOR_NUMBER, "NUMBER" );
416 CONSTCHAR( pPOR_BULLET, "BULLET" );
417 CONSTCHAR( pPOR_UNKW, "UNKW" );
418 CONSTCHAR( pPOR_PAR, "PAR" );
419
GetPortionName(const MSHORT)420 const char *GetPortionName( const MSHORT /*nType*/ )
421 {
422 return 0;
423 }
424
425 CONSTCHAR( pPREP_CLEAR, "CLEAR" );
426 CONSTCHAR( pPREP_WIDOWS_ORPHANS, "WIDOWS_ORPHANS" );
427 CONSTCHAR( pPREP_FIXSIZE_CHG, "FIXSIZE_CHG" );
428 CONSTCHAR( pPREP_FOLLOW_FOLLOWS, "FOLLOW_FOLLOWS" );
429 CONSTCHAR( pPREP_ADJUST_FRM, "ADJUST_FRM" );
430 CONSTCHAR( pPREP_FREE_SPACE, "FREE_SPACE" );
431 CONSTCHAR( pPREP_FLY_CHGD, "FLY_CHGD" );
432 CONSTCHAR( pPREP_FLY_ATTR_CHG, "FLY_ATTR_CHG" );
433 CONSTCHAR( pPREP_FLY_ARRIVE, "FLY_ARRIVE" );
434 CONSTCHAR( pPREP_FLY_LEAVE, "FLY_LEAVE" );
435 CONSTCHAR( pPREP_VIEWOPT, "VIEWOPT" );
436 CONSTCHAR( pPREP_FTN, "FTN" );
437 CONSTCHAR( pPREP_POS_CHGD, "POS" );
438 CONSTCHAR( pPREP_UL_SPACE, "UL_SPACE" );
439 CONSTCHAR( pPREP_MUST_FIT, "MUST_FIT" );
440 CONSTCHAR( pPREP_WIDOWS, "ORPHANS" );
441 CONSTCHAR( pPREP_QUOVADIS, "QUOVADIS" );
442 CONSTCHAR( pPREP_PAGE, "PAGE" );
443
GetPrepName(const PrepareHint ePrep)444 const char *GetPrepName( const PrepareHint ePrep )
445 {
446 // Kurz und schmerzlos:
447 const char *ppNameArr[PREP_END] =
448 {
449 pPREP_CLEAR, pPREP_WIDOWS_ORPHANS, pPREP_FIXSIZE_CHG,
450 pPREP_FOLLOW_FOLLOWS, pPREP_ADJUST_FRM, pPREP_FREE_SPACE,
451 pPREP_FLY_CHGD, pPREP_FLY_ATTR_CHG, pPREP_FLY_ARRIVE,
452 pPREP_FLY_LEAVE, pPREP_VIEWOPT, pPREP_FTN, pPREP_POS_CHGD,
453 pPREP_UL_SPACE, pPREP_MUST_FIT, pPREP_WIDOWS, pPREP_QUOVADIS,
454 pPREP_PAGE
455 };
456 ASSERT( ePrep < PREP_END, "GetPrepName: unknown PrepareHint" );
457 return( ppNameArr[ePrep] );
458 }
459
460 /*************************************************************************
461 * SwLineLayout::DebugPortions()
462 *
463 * DebugPortion() iteriert ueber alle Portions einer Zeile und deckt die
464 * internen Strukturen auf.
465 * Im Gegensatz zum Ausgabe-Operator werden auch die Textteile ausgegeben.
466 *************************************************************************/
467
DebugPortions(SvStream & rOs,const XubString &,const xub_StrLen)468 void SwLineLayout::DebugPortions( SvStream &rOs, const XubString &/*rTxt*/, //$ ostream
469 const xub_StrLen /*nStart*/ )
470 {
471 SwLinePortion *pPortion2 = GetPortion();
472
473 xub_StrLen nPos = 0;
474 MSHORT nNr = 0;
475 KSHORT nPrtWidth, nLastPrt;
476 nPrtWidth = nLastPrt = 0;
477
478 SwLinePortion::operator<<( rOs );
479 rOs << '\"' << endl;
480
481 while( pPortion2 )
482 {
483 DBG_LOOP;
484 SwTxtPortion *pTxtPor = pPortion2->InTxtGrp() ?
485 (SwTxtPortion *)pPortion2 : NULL ;
486 (void)pTxtPor;
487 ++nNr;
488 nLastPrt = nPrtWidth;
489 nPrtWidth = nPrtWidth + pPortion2->PrtWidth();
490 rOs << "\tNr:" << nNr
491 << " Pos:" << nPos
492 << " Org:" << nLastPrt
493 << endl;
494
495 rOs << "\t";
496 pPortion2->operator<<( rOs );
497 rOs << endl;
498 nPos = nPos + pPortion2->GetLen();
499 pPortion2 = pPortion2->GetPortion();
500 }
501 }
502
GetLangName(const MSHORT)503 const char *GetLangName( const MSHORT /*nLang*/ )
504 {
505 return "???";
506 }
507
operator <<(SvStream & rOs) const508 SvStream &SwLinePortion::operator<<( SvStream &rOs ) const //$ ostream
509 {
510 rOs << " {";
511 rOs << "L:" << nLineLength;
512 rOs << " H:" << Height();
513 rOs << " W:" << PrtWidth();
514 rOs << " A:" << nAscent;
515 rOs << pClose;
516 return rOs;
517 }
518
operator <<(SvStream & rOs) const519 SvStream &SwTxtPortion::operator<<( SvStream &rOs ) const //$ ostream
520 {
521 CONSTCHAR( pTxt, " {TXT:" );
522 rOs << pTxt;
523 SwLinePortion::operator<<( rOs );
524 rOs << pClose;
525 return rOs;
526 }
527
operator <<(SvStream & rOs) const528 SvStream &SwTmpEndPortion::operator<<( SvStream &rOs ) const //$ ostream
529 {
530 CONSTCHAR( pTxt, " {END:" );
531 rOs << pTxt;
532 SwLinePortion::operator<<( rOs );
533 if( PrtWidth() )
534 rOs << "(view)";
535 rOs << pClose;
536 return rOs;
537 }
538
operator <<(SvStream & rOs) const539 SvStream &SwBreakPortion::operator<<( SvStream &rOs ) const //$ ostream
540 {
541 CONSTCHAR( pTxt, " {BREAK:" );
542 rOs << pTxt;
543 SwLinePortion::operator<<( rOs );
544 rOs << pClose;
545 return rOs;
546 }
547
operator <<(SvStream & rOs) const548 SvStream &SwKernPortion::operator<<( SvStream &rOs ) const //$ ostream
549 {
550 CONSTCHAR( pTxt, " {KERN:" );
551 rOs << pTxt;
552 SwLinePortion::operator<<( rOs );
553 rOs << pClose;
554 return rOs;
555 }
556
operator <<(SvStream & rOs) const557 SvStream &SwArrowPortion::operator<<( SvStream &rOs ) const //$ ostream
558 {
559 CONSTCHAR( pTxt, " {ARROW:" );
560 rOs << pTxt;
561 SwLinePortion::operator<<( rOs );
562 rOs << pClose;
563 return rOs;
564 }
565
operator <<(SvStream & rOs) const566 SvStream &SwMultiPortion::operator<<( SvStream &rOs ) const //$ ostream
567 {
568 CONSTCHAR( pTxt, " {MULTI:" );
569 rOs << pTxt;
570 SwLinePortion::operator<<( rOs );
571 rOs << pClose;
572 return rOs;
573 }
574
operator <<(SvStream & rOs) const575 SvStream &SwCombinedPortion::operator<<( SvStream &rOs ) const //$ ostream
576 {
577 CONSTCHAR( pTxt, " {COMBINED:" );
578 rOs << pTxt;
579 SwLinePortion::operator<<( rOs );
580 rOs << pClose;
581 return rOs;
582 }
583
operator <<(SvStream & rOs) const584 SvStream &SwLineLayout::operator<<( SvStream &rOs ) const //$ ostream
585 {
586 CONSTCHAR( pTxt, " {LINE:" );
587 rOs << pTxt;
588 SwLinePortion::operator<<( rOs );
589 SwLinePortion *pPos = GetPortion();
590 while( pPos )
591 {
592 DBG_LOOP;
593 rOs << "\t";
594 pPos->operator<<( rOs );
595 pPos = pPos->GetPortion();
596 }
597 rOs << pClose;
598 return rOs;
599 }
600
operator <<(SvStream & rOs) const601 SvStream &SwGluePortion::operator<<( SvStream &rOs ) const //$ ostream
602 {
603 CONSTCHAR( pTxt, " {GLUE:" );
604 rOs << pTxt;
605 SwLinePortion::operator<<( rOs );
606 rOs << " F:" << GetFixWidth();
607 rOs << " G:" << GetPrtGlue();
608 rOs << pClose;
609 return rOs;
610 }
611
operator <<(SvStream & rOs) const612 SvStream &SwFixPortion::operator<<( SvStream &rOs ) const //$ ostream
613 {
614 CONSTCHAR( pTxt, " {FIX:" );
615 rOs << pTxt;
616 SwGluePortion::operator<<( rOs );
617 rOs << " Fix:" << nFix;
618 rOs << pClose;
619 return rOs;
620 }
621
operator <<(SvStream & rOs) const622 SvStream &SwFlyPortion::operator<<( SvStream &rOs ) const //$ ostream
623 {
624 CONSTCHAR( pTxt, " {FLY:" );
625 rOs << pTxt;
626 SwFixPortion::operator<<( rOs );
627 rOs << pClose;
628 return rOs;
629 }
630
operator <<(SvStream & rOs) const631 SvStream &SwMarginPortion::operator<<( SvStream &rOs ) const //$ ostream
632 {
633 CONSTCHAR( pTxt, " {MAR:" );
634 rOs << pTxt;
635 SwGluePortion::operator<<( rOs );
636 rOs << pClose;
637 return rOs;
638 }
639
operator <<(SvStream & rOs) const640 SvStream &SwFlyCntPortion::operator<<( SvStream &rOs ) const //$ ostream
641 {
642 CONSTCHAR( pTxt, " {FLYCNT:" );
643 rOs << pTxt;
644 SwLinePortion::operator<<( rOs );
645 if( bDraw )
646 {
647 CONSTCHAR( pTxt2, " {DRAWINCNT" );
648 rOs << pTxt2;
649 rOs << pClose;
650 }
651 else
652 {
653 CONSTCHAR( pTxt2, " {FRM:" );
654 rOs << pTxt2;
655 rOs << " {FRM:" << GetFlyFrm()->Frm() << pClose;
656 rOs << " {PRT:" << GetFlyFrm()->Prt() << pClose;
657 rOs << pClose;
658 }
659 rOs << pClose;
660 return rOs;
661 }
662
operator <<(SvStream & rOs) const663 SvStream &SwExpandPortion::operator<<( SvStream &rOs ) const //$ ostream
664 {
665 CONSTCHAR( pTxt, " {EXP:" );
666 rOs << pTxt;
667 SwLinePortion::operator<<( rOs );
668 rOs << pClose;
669 return rOs;
670 }
671
operator <<(SvStream & rOs) const672 SvStream &SwFtnPortion::operator<<( SvStream &rOs ) const //$ ostream
673 {
674 CONSTCHAR( pTxt, " {FTN:" );
675 rOs << pTxt;
676 SwExpandPortion::operator<<( rOs );
677 rOs << pClose;
678 return rOs;
679 }
680
operator <<(SvStream & rOs) const681 SvStream &SwFtnNumPortion::operator<<( SvStream &rOs ) const //$ ostream
682 {
683 CONSTCHAR( pTxt, " {FTNNUM:" );
684 rOs << pTxt;
685 SwNumberPortion::operator<<( rOs );
686 rOs << pClose;
687 return rOs;
688 }
689
operator <<(SvStream & rOs) const690 SvStream &SwNumberPortion::operator<<( SvStream &rOs ) const //$ ostream
691 {
692 CONSTCHAR( pTxt, " {NUMBER:" );
693 rOs << pTxt;
694 SwExpandPortion::operator<<( rOs );
695 rOs << " Exp:\"" << '\"';
696 rOs << pClose;
697 return rOs;
698 }
699
operator <<(SvStream & rOs) const700 SvStream &SwBulletPortion::operator<<( SvStream &rOs ) const //$ ostream
701 {
702 CONSTCHAR( pTxt, " {BULLET:" );
703 rOs << pTxt;
704 SwNumberPortion::operator<<( rOs );
705 rOs << pClose;
706 return rOs;
707 }
708
operator <<(SvStream & rOs) const709 SvStream &SwGrfNumPortion::operator<<( SvStream &rOs ) const //$ ostream
710 {
711 CONSTCHAR( pTxt, " {GRFNUM:" );
712 rOs << pTxt;
713 SwNumberPortion::operator<<( rOs );
714 rOs << pClose;
715 return rOs;
716 }
717
operator <<(SvStream & rOs) const718 SvStream &SwHiddenPortion::operator<<( SvStream &rOs ) const //$ ostream
719 {
720 CONSTCHAR( pTxt, " {Hidden:" );
721 rOs << pTxt;
722 SwFldPortion::operator<<( rOs );
723 rOs << pClose;
724 return rOs;
725 }
726
operator <<(SvStream & rOs) const727 SvStream &SwToxPortion::operator<<( SvStream &rOs ) const //$ ostream
728 {
729 CONSTCHAR( pTxt, " {TOX:" );
730 rOs << pTxt;
731 SwTxtPortion::operator<<( rOs );
732 rOs << pClose;
733 return rOs;
734 }
735
operator <<(SvStream & rOs) const736 SvStream &SwRefPortion::operator<<( SvStream &rOs ) const //$ ostream
737 {
738 CONSTCHAR( pTxt, " {Ref:" );
739 rOs << pTxt;
740 SwTxtPortion::operator<<( rOs );
741 rOs << pClose;
742 return rOs;
743 }
744
operator <<(SvStream & rOs) const745 SvStream &SwIsoToxPortion::operator<<( SvStream &rOs ) const //$ ostream
746 {
747 CONSTCHAR( pTxt, " {ISOTOX:" );
748 rOs << pTxt;
749 SwToxPortion::operator<<( rOs );
750 rOs << pClose;
751 return rOs;
752 }
753
operator <<(SvStream & rOs) const754 SvStream &SwIsoRefPortion::operator<<( SvStream &rOs ) const //$ ostream
755 {
756 CONSTCHAR( pTxt, " {ISOREF:" );
757 rOs << pTxt;
758 SwRefPortion::operator<<( rOs );
759 rOs << pClose;
760 return rOs;
761 }
762
operator <<(SvStream & rOs) const763 SvStream &SwHyphPortion::operator<<( SvStream &rOs ) const //$ ostream
764 {
765 CONSTCHAR( pTxt, " {HYPH:" );
766 rOs << pTxt;
767 SwExpandPortion::operator<<( rOs );
768 rOs << pClose;
769 return rOs;
770 }
771
operator <<(SvStream & rOs) const772 SvStream &SwHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream
773 {
774 CONSTCHAR( pTxt, " {HYPHSTR:" );
775 rOs << pTxt;
776 SwExpandPortion::operator<<( rOs );
777 rOs << pClose;
778 return rOs;
779 }
780
operator <<(SvStream & rOs) const781 SvStream &SwSoftHyphPortion::operator<<( SvStream &rOs ) const //$ ostream
782 {
783 CONSTCHAR( pTxt, " {SOFTHYPH:" );
784 rOs << pTxt;
785 SwHyphPortion::operator<<( rOs );
786 rOs << (IsExpand() ? " on" : " off");
787 rOs << pClose;
788 return rOs;
789 }
790
operator <<(SvStream & rOs) const791 SvStream &SwSoftHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream
792 {
793 CONSTCHAR( pTxt, " {SOFTHYPHSTR:" );
794 rOs << pTxt;
795 SwHyphStrPortion::operator<<( rOs );
796 rOs << pClose;
797 return rOs;
798 }
799
operator <<(SvStream & rOs) const800 SvStream &SwBlankPortion::operator<<( SvStream &rOs ) const //$ ostream
801 {
802 CONSTCHAR( pTxt, " {BLANK:" );
803 rOs << pTxt;
804 SwExpandPortion::operator<<( rOs );
805 rOs << pClose;
806 return rOs;
807 }
808
operator <<(SvStream & rOs) const809 SvStream &SwFldPortion::operator<<( SvStream &rOs ) const //$ ostream
810 {
811 CONSTCHAR( pTxt, " {FLD:" );
812 rOs << pTxt;
813 SwLinePortion::operator<<( rOs );
814 if( IsFollow() )
815 rOs << " F!";
816 rOs << pClose;
817 return rOs;
818 }
819
operator <<(SvStream & rOs) const820 SvStream &SwPostItsPortion::operator<<( SvStream &rOs ) const //$ ostream
821 {
822 CONSTCHAR( pTxt, " {POSTITS" );
823 rOs << pTxt;
824 SwLinePortion::operator<<( rOs );
825 rOs << pClose;
826 return rOs;
827 }
828
operator <<(SvStream & rOs) const829 SvStream &SwTabPortion::operator<<( SvStream &rOs ) const //$ ostream
830 {
831 CONSTCHAR( pTxt, " {TAB" );
832 rOs << pTxt;
833 SwFixPortion::operator<<( rOs );
834 rOs << " T:" << nTabPos;
835 if( IsFilled() )
836 rOs << " \"" << cFill << '\"';
837 rOs << pClose;
838 return rOs;
839 }
840
operator <<(SvStream & rOs) const841 SvStream &SwTabLeftPortion::operator<<( SvStream &rOs ) const //$ ostream
842 {
843 CONSTCHAR( pTxt, " {TABLEFT" );
844 rOs << pTxt;
845 SwTabPortion::operator<<( rOs );
846 rOs << pClose;
847 return rOs;
848 }
849
operator <<(SvStream & rOs) const850 SvStream &SwTabRightPortion::operator<<( SvStream &rOs ) const //$ ostream
851 {
852 CONSTCHAR( pTxt, " {TABRIGHT" );
853 rOs << pTxt;
854 SwTabPortion::operator<<( rOs );
855 rOs << pClose;
856 return rOs;
857 }
858
operator <<(SvStream & rOs) const859 SvStream &SwTabCenterPortion::operator<<( SvStream &rOs ) const //$ ostream
860 {
861 CONSTCHAR( pTxt, " {TABCENTER" );
862 rOs << pTxt;
863 SwTabPortion::operator<<( rOs );
864 rOs << pClose;
865 return rOs;
866 }
867
operator <<(SvStream & rOs) const868 SvStream &SwTabDecimalPortion::operator<<( SvStream &rOs ) const //$ ostream
869 {
870 CONSTCHAR( pTxt, " {TABDECIMAL" );
871 rOs << pTxt;
872 SwTabPortion::operator<<( rOs );
873 rOs << pClose;
874 return rOs;
875 }
876
operator <<(SvStream & rOs) const877 SvStream &SwParaPortion::operator<<( SvStream &rOs ) const //$ ostream
878 {
879 CONSTCHAR( pTxt, " {PAR" );
880 rOs << pTxt;
881 SwLineLayout::operator<<( rOs );
882 rOs << pClose;
883 return rOs;
884 }
885
operator <<(SvStream & rOs) const886 SvStream &SwHolePortion::operator<<( SvStream &rOs ) const //$ ostream
887 {
888 CONSTCHAR( pTxt, " {HOLE" );
889 rOs << pTxt;
890 SwLinePortion::operator<<( rOs );
891 rOs << pClose;
892 return rOs;
893 }
894
operator <<(SvStream & rOs) const895 SvStream &SwQuoVadisPortion::operator<<( SvStream &rOs ) const //$ ostream
896 {
897 CONSTCHAR( pTxt, " {QUOVADIS" );
898 rOs << pTxt;
899 SwFldPortion::operator<<( rOs );
900 rOs << pClose;
901 return rOs;
902 }
903
operator <<(SvStream & rOs) const904 SvStream &SwErgoSumPortion::operator<<( SvStream &rOs ) const //$ ostream
905 {
906 CONSTCHAR( pTxt, " {ERGOSUM" );
907 rOs << pTxt;
908 SwFldPortion::operator<<( rOs );
909 rOs << pClose;
910 return rOs;
911 }
912
operator <<(SvStream & rOs,const SwTxtSizeInfo & rInf)913 SvStream &operator<<( SvStream &rOs, const SwTxtSizeInfo &rInf ) //$ ostream
914 {
915 CONSTCHAR( pTxt, " {SIZEINFO:" );
916 rOs << pTxt;
917 rOs << ' ' << (rInf.OnWin() ? "WIN:" : "PRT:" );
918 rOs << " Idx:" << rInf.GetIdx();
919 rOs << " Len:" << rInf.GetLen();
920 rOs << pClose;
921 return rOs;
922 }
923
operator <<(SvStream & rOs) const924 SvStream &SwDropPortion::operator<<( SvStream &rOs ) const //$ ostream
925 {
926 CONSTCHAR( pTxt, " {DROP:" );
927 rOs << pTxt;
928 SwTxtPortion::operator<<( rOs );
929 if( pPart && nDropHeight )
930 {
931 rOs << " H:" << nDropHeight;
932 rOs << " L:" << nLines;
933 rOs <<" Fnt:" << pPart->GetFont().GetHeight();
934 if( nX || nY )
935 rOs << " [" << nX << '/' << nY << ']';
936 }
937 rOs << pClose;
938 return rOs;
939 }
940
941 #endif /* OSL_DEBUG_LEVEL */
942
943 #endif // DBG_UTIL
944
945