/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sw.hxx" #ifdef DBG_UTIL #include "viewsh.hxx" // IsDbg() #include "viewopt.hxx" // IsDbg() #include "txtatr.hxx" #include "errhdl.hxx" #include "txtcfg.hxx" #include "txtfrm.hxx" // IsDbg() #include "rootfrm.hxx" #include "flyfrms.hxx" #include "inftxt.hxx" #include "porexp.hxx" #include "porfld.hxx" #include "porfly.hxx" #include "porftn.hxx" #include "porglue.hxx" #include "porhyph.hxx" #include "porlay.hxx" #include "porlin.hxx" #include "porref.hxx" #include "porrst.hxx" #include "portab.hxx" #include "portox.hxx" #include "portxt.hxx" #include "pordrop.hxx" #include "pormulti.hxx" #include "ndhints.hxx" // So kann man die Layoutstruktur ausgeben lassen // #define AMA_LAYOUT #ifdef AMA_LAYOUT #include #include // getenv() #include #include #include #include void lcl_OutFollow( XubString &rTmp, const SwFrm* pFrm ) { if( pFrm->IsFlowFrm() ) { const SwFlowFrm *pFlow = SwFlowFrm::CastFlowFrm( pFrm ); if( pFlow->IsFollow() || pFlow->GetFollow() ) { rTmp += "("; if( pFlow->IsFollow() ) rTmp += "."; if( pFlow->GetFollow() ) { MSHORT nFrmId = pFlow->GetFollow()->GetFrm()->GetFrmId(); rTmp += nFrmId; } rTmp += ")"; } } } void lcl_OutFrame( SvFileStream& rStr, const SwFrm* pFrm, ByteString& rSp, sal_Bool bNxt ) { if( !pFrm ) return; KSHORT nSpc = 0; MSHORT nFrmId = pFrm->GetFrmId(); ByteString aTmp; if( pFrm->IsLayoutFrm() ) { if( pFrm->IsRootFrm() ) aTmp = "R"; else if( pFrm->IsPageFrm() ) aTmp = "P"; else if( pFrm->IsBodyFrm() ) aTmp = "B"; else if( pFrm->IsColumnFrm() ) aTmp = "C"; else if( pFrm->IsTabFrm() ) aTmp = "Tb"; else if( pFrm->IsRowFrm() ) aTmp = "Rw"; else if( pFrm->IsCellFrm() ) aTmp = "Ce"; else if( pFrm->IsSctFrm() ) aTmp = "S"; else if( pFrm->IsFlyFrm() ) { aTmp = "F"; const SwFlyFrm *pFly = (SwFlyFrm*)pFrm; if( pFly->IsFlyInCntFrm() ) aTmp += "in"; else if( pFly->IsFlyAtCntFrm() ) { aTmp += "a"; if( pFly->IsAutoPos() ) aTmp += "u"; else aTmp += "t"; } else aTmp += "l"; } else if( pFrm->IsHeaderFrm() ) aTmp = "H"; else if( pFrm->IsFooterFrm() ) aTmp = "Fz"; else if( pFrm->IsFtnContFrm() ) aTmp = "Fc"; else if( pFrm->IsFtnFrm() ) aTmp = "Fn"; else aTmp = "?L?"; aTmp += nFrmId; lcl_OutFollow( aTmp, pFrm ); aTmp += " "; rStr << aTmp; nSpc = aTmp.Len(); rSp.Expand( nSpc + rSp.Len() ); lcl_OutFrame( rStr, ((SwLayoutFrm*)pFrm)->Lower(), rSp, sal_True ); } else { if( pFrm->IsTxtFrm() ) aTmp = "T"; else if( pFrm->IsNoTxtFrm() ) aTmp = "N"; else aTmp = "?C?"; aTmp += nFrmId; lcl_OutFollow( aTmp, pFrm ); aTmp += " "; rStr << aTmp; nSpc = aTmp.Len(); rSp.Expand( nSpc + rSp.Len() ); } if( pFrm->IsPageFrm() ) { const SwPageFrm* pPg = (SwPageFrm*)pFrm; const SwSortedObjs *pSorted = pPg->GetSortedObjs(); const MSHORT nCnt = pSorted ? pSorted->Count() : 0; if( nCnt ) { for( MSHORT i=0; i < nCnt; ++i ) { // --> OD 2004-07-07 #i28701# - consider changed type of // entries SwAnchoredObject* pAnchoredObj = (*pSorted)[ i ]; if( pAnchoredObj->ISA(SwFlyFrm) ) { SwFlyFrm* pFly = static_cast(pAnchoredObj); lcl_OutFrame( rStr, pFly, rSp, sal_False ); } else { aTmp = pAnchoredObj->GetDrawObj()->IsUnoObj() ? "UNO" : "Drw"; rStr << aTmp; } // <-- if( i < nCnt - 1 ) rStr << endl << rSp; } } } else if( pFrm->GetDrawObjs() ) { MSHORT nCnt = pFrm->GetDrawObjs()->Count(); if( nCnt ) { for( MSHORT i=0; i < nCnt; ++i ) { // --> OD 2004-07-07 #i28701# - consider changed type of // entries SwAnchoredObject* pAnchoredObj = (*pFrm->GetDrawObjs())[ i ]; if( pAnchoredObj->ISA(SwFlyFrm) ) { SwFlyFrm* pFly = static_cast(pAnchoredObj); lcl_OutFrame( rStr, pFly, rSp, sal_False ); } else { aTmp = pAnchoredObj->GetDrawObj()->IsUnoObj() ? "UNO" : "Drw"; rStr << aTmp; } if( i < nCnt - 1 ) rStr << endl << rSp; } } } if( nSpc ) rSp.Erase( rSp.Len() - nSpc ); if( bNxt && pFrm->GetNext() ) { do { pFrm = pFrm->GetNext(); rStr << endl << rSp; lcl_OutFrame( rStr, pFrm, rSp, sal_False ); } while ( pFrm->GetNext() ); } } void LayOutPut( const SwFrm* pFrm ) { static char* pOutName = 0; const sal_Bool bFirstOpen = pOutName ? sal_False : sal_True; if( bFirstOpen ) { char *pPath = getenv( "TEMP" ); char *pName = "layout.txt"; if( !pPath ) pOutName = pName; else { const int nLen = strlen(pPath); // fuer dieses new wird es kein delete geben. pOutName = new char[nLen + strlen(pName) + 3]; if(nLen && (pPath[nLen-1] == '\\') || (pPath[nLen-1] == '/')) snprintf( pOutName, sizeof(pOutName), "%s%s", pPath, pName ); else snprintf( pOutName, sizeof(pOutName), "%s/%s", pPath, pName ); } } SvFileStream aStream( pOutName, (bFirstOpen ? STREAM_WRITE | STREAM_TRUNC : STREAM_WRITE )); if( !aStream.GetError() ) { if ( bFirstOpen ) aStream << "Layout-Struktur"; else aStream.Seek( STREAM_SEEK_TO_END ); aStream << endl; aStream << "---------------------------------------------" << endl; XubString aSpace; lcl_OutFrame( aStream, pFrm, aSpace, sal_False ); } } #endif SvStream &operator<<( SvStream &rOs, const SwpHints & ) //$ ostream { rOs << " {HINTS:"; // REMOVED rOs << '}'; return rOs; } /************************************************************************* * IsDbg() *************************************************************************/ sal_Bool IsDbg( const SwTxtFrm *pFrm ) { if( pFrm && pFrm->getRootFrm()->GetCurrShell() ) return pFrm->getRootFrm()->GetCurrShell()->GetViewOptions()->IsTest4(); else return sal_False; } #if OSL_DEBUG_LEVEL < 2 static void Error() { // wegen PM und BCC sal_Bool bFalse = sal_False; ASSERT( bFalse, "txtio: No debug version" ); } #define IMPL_OUTOP(class) \ SvStream &class::operator<<( SvStream &rOs ) const /*$ostream*/\ { \ Error(); \ return rOs; \ } IMPL_OUTOP( SwTxtPortion ) IMPL_OUTOP( SwLinePortion ) IMPL_OUTOP( SwBreakPortion ) IMPL_OUTOP( SwGluePortion ) IMPL_OUTOP( SwFldPortion ) IMPL_OUTOP( SwHiddenPortion ) IMPL_OUTOP( SwHyphPortion ) IMPL_OUTOP( SwFixPortion ) IMPL_OUTOP( SwFlyPortion ) IMPL_OUTOP( SwFlyCntPortion ) IMPL_OUTOP( SwMarginPortion ) IMPL_OUTOP( SwNumberPortion ) IMPL_OUTOP( SwBulletPortion ) IMPL_OUTOP( SwGrfNumPortion ) IMPL_OUTOP( SwLineLayout ) IMPL_OUTOP( SwParaPortion ) IMPL_OUTOP( SwFtnPortion ) IMPL_OUTOP( SwFtnNumPortion ) IMPL_OUTOP( SwTmpEndPortion ) IMPL_OUTOP( SwHyphStrPortion ) IMPL_OUTOP( SwExpandPortion ) IMPL_OUTOP( SwBlankPortion ) IMPL_OUTOP( SwToxPortion ) IMPL_OUTOP( SwRefPortion ) IMPL_OUTOP( SwIsoToxPortion ) IMPL_OUTOP( SwIsoRefPortion ) IMPL_OUTOP( SwSoftHyphPortion ) IMPL_OUTOP( SwSoftHyphStrPortion ) IMPL_OUTOP( SwTabPortion ) IMPL_OUTOP( SwTabLeftPortion ) IMPL_OUTOP( SwTabRightPortion ) IMPL_OUTOP( SwTabCenterPortion ) IMPL_OUTOP( SwTabDecimalPortion ) IMPL_OUTOP( SwPostItsPortion ) IMPL_OUTOP( SwQuoVadisPortion ) IMPL_OUTOP( SwErgoSumPortion ) IMPL_OUTOP( SwHolePortion ) IMPL_OUTOP( SwDropPortion ) IMPL_OUTOP( SwKernPortion ) IMPL_OUTOP( SwArrowPortion ) IMPL_OUTOP( SwMultiPortion ) IMPL_OUTOP( SwCombinedPortion ) const char *GetPortionName( const MSHORT ) { return 0; } const char *GetPrepName( const PrepareHint ) { return 0; } void SwLineLayout::DebugPortions( SvStream &, const XubString &, //$ ostream const xub_StrLen ) { } const char *GetLangName( const MSHORT ) { return 0; } #else # include # include # include "swtypes.hxx" // ZTCCONST # include "swfont.hxx" // SwDropPortion CONSTCHAR( pClose, "} " ); /************************************************************************* * GetPortionName() *************************************************************************/ CONSTCHAR( pPOR_LIN, "LIN" ); CONSTCHAR( pPOR_TXT, "TXT" ); CONSTCHAR( pPOR_SHADOW, "SHADOW" ); CONSTCHAR( pPOR_TAB, "TAB" ); CONSTCHAR( pPOR_TABLEFT, "TABLEFT" ); CONSTCHAR( pPOR_TABRIGHT, "TABRIGHT" ); CONSTCHAR( pPOR_TABCENTER, "TABCENTER" ); CONSTCHAR( pPOR_TABDECIMAL, "TABDECIMAL" ); CONSTCHAR( pPOR_EXP, "EXP" ); CONSTCHAR( pPOR_HYPH, "HYPH" ); CONSTCHAR( pPOR_HYPHSTR, "HYPHSTR" ); CONSTCHAR( pPOR_FLD, "FLD" ); CONSTCHAR( pPOR_FIX, "FIX" ); CONSTCHAR( pPOR_FLY, "FLY" ); CONSTCHAR( pPOR_FLYCNT, "FLYCNT" ); CONSTCHAR( pPOR_MARGIN, "MARGIN" ); CONSTCHAR( pPOR_GLUE, "GLUE" ); CONSTCHAR( pPOR_HOLE, "HOLE" ); CONSTCHAR( pPOR_END, "END" ); CONSTCHAR( pPOR_BRK, "BRK" ); CONSTCHAR( pPOR_LAY, "LAY" ); CONSTCHAR( pPOR_BLANK, "BLANK" ); CONSTCHAR( pPOR_FTN, "FTN" ); CONSTCHAR( pPOR_FTNNUM, "FTNNUM" ); CONSTCHAR( pPOR_POSTITS, "POSTITS" ); CONSTCHAR( pPOR_SOFTHYPH, "SOFTHYPH" ); CONSTCHAR( pPOR_SOFTHYPHSTR, "SOFTHYPHSTR" ); CONSTCHAR( pPOR_TOX, "TOX" ); CONSTCHAR( pPOR_REF, "REF" ); CONSTCHAR( pPOR_ISOTOX, "ISOTOX" ); CONSTCHAR( pPOR_ISOREF, "ISOREF" ); CONSTCHAR( pPOR_HIDDEN, "Hidden" ); CONSTCHAR( pPOR_QUOVADIS, "QuoVadis" ); CONSTCHAR( pPOR_ERGOSUM, "ErgoSum" ); CONSTCHAR( pPOR_NUMBER, "NUMBER" ); CONSTCHAR( pPOR_BULLET, "BULLET" ); CONSTCHAR( pPOR_UNKW, "UNKW" ); CONSTCHAR( pPOR_PAR, "PAR" ); const char *GetPortionName( const MSHORT /*nType*/ ) { return 0; } CONSTCHAR( pPREP_CLEAR, "CLEAR" ); CONSTCHAR( pPREP_WIDOWS_ORPHANS, "WIDOWS_ORPHANS" ); CONSTCHAR( pPREP_FIXSIZE_CHG, "FIXSIZE_CHG" ); CONSTCHAR( pPREP_FOLLOW_FOLLOWS, "FOLLOW_FOLLOWS" ); CONSTCHAR( pPREP_ADJUST_FRM, "ADJUST_FRM" ); CONSTCHAR( pPREP_FREE_SPACE, "FREE_SPACE" ); CONSTCHAR( pPREP_FLY_CHGD, "FLY_CHGD" ); CONSTCHAR( pPREP_FLY_ATTR_CHG, "FLY_ATTR_CHG" ); CONSTCHAR( pPREP_FLY_ARRIVE, "FLY_ARRIVE" ); CONSTCHAR( pPREP_FLY_LEAVE, "FLY_LEAVE" ); CONSTCHAR( pPREP_VIEWOPT, "VIEWOPT" ); CONSTCHAR( pPREP_FTN, "FTN" ); CONSTCHAR( pPREP_POS_CHGD, "POS" ); CONSTCHAR( pPREP_UL_SPACE, "UL_SPACE" ); CONSTCHAR( pPREP_MUST_FIT, "MUST_FIT" ); CONSTCHAR( pPREP_WIDOWS, "ORPHANS" ); CONSTCHAR( pPREP_QUOVADIS, "QUOVADIS" ); CONSTCHAR( pPREP_PAGE, "PAGE" ); const char *GetPrepName( const PrepareHint ePrep ) { // Kurz und schmerzlos: const char *ppNameArr[PREP_END] = { pPREP_CLEAR, pPREP_WIDOWS_ORPHANS, pPREP_FIXSIZE_CHG, pPREP_FOLLOW_FOLLOWS, pPREP_ADJUST_FRM, pPREP_FREE_SPACE, pPREP_FLY_CHGD, pPREP_FLY_ATTR_CHG, pPREP_FLY_ARRIVE, pPREP_FLY_LEAVE, pPREP_VIEWOPT, pPREP_FTN, pPREP_POS_CHGD, pPREP_UL_SPACE, pPREP_MUST_FIT, pPREP_WIDOWS, pPREP_QUOVADIS, pPREP_PAGE }; ASSERT( ePrep < PREP_END, "GetPrepName: unknown PrepareHint" ); return( ppNameArr[ePrep] ); } /************************************************************************* * SwLineLayout::DebugPortions() * * DebugPortion() iteriert ueber alle Portions einer Zeile und deckt die * internen Strukturen auf. * Im Gegensatz zum Ausgabe-Operator werden auch die Textteile ausgegeben. *************************************************************************/ void SwLineLayout::DebugPortions( SvStream &rOs, const XubString &/*rTxt*/, //$ ostream const xub_StrLen /*nStart*/ ) { SwLinePortion *pPortion2 = GetPortion(); xub_StrLen nPos = 0; MSHORT nNr = 0; KSHORT nPrtWidth, nLastPrt; nPrtWidth = nLastPrt = 0; SwLinePortion::operator<<( rOs ); rOs << '\"' << endl; while( pPortion2 ) { DBG_LOOP; SwTxtPortion *pTxtPor = pPortion2->InTxtGrp() ? (SwTxtPortion *)pPortion2 : NULL ; (void)pTxtPor; ++nNr; nLastPrt = nPrtWidth; nPrtWidth = nPrtWidth + pPortion2->PrtWidth(); rOs << "\tNr:" << nNr << " Pos:" << nPos << " Org:" << nLastPrt << endl; rOs << "\t"; pPortion2->operator<<( rOs ); rOs << endl; nPos = nPos + pPortion2->GetLen(); pPortion2 = pPortion2->GetPortion(); } } const char *GetLangName( const MSHORT /*nLang*/ ) { return "???"; } SvStream &SwLinePortion::operator<<( SvStream &rOs ) const //$ ostream { rOs << " {"; rOs << "L:" << nLineLength; rOs << " H:" << Height(); rOs << " W:" << PrtWidth(); rOs << " A:" << nAscent; rOs << pClose; return rOs; } SvStream &SwTxtPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TXT:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwTmpEndPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {END:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); if( PrtWidth() ) rOs << "(view)"; rOs << pClose; return rOs; } SvStream &SwBreakPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {BREAK:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwKernPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {KERN:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwArrowPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {ARROW:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwMultiPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {MULTI:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwCombinedPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {COMBINED:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwLineLayout::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {LINE:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); SwLinePortion *pPos = GetPortion(); while( pPos ) { DBG_LOOP; rOs << "\t"; pPos->operator<<( rOs ); pPos = pPos->GetPortion(); } rOs << pClose; return rOs; } SvStream &SwGluePortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {GLUE:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << " F:" << GetFixWidth(); rOs << " G:" << GetPrtGlue(); rOs << pClose; return rOs; } SvStream &SwFixPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FIX:" ); rOs << pTxt; SwGluePortion::operator<<( rOs ); rOs << " Fix:" << nFix; rOs << pClose; return rOs; } SvStream &SwFlyPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FLY:" ); rOs << pTxt; SwFixPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwMarginPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {MAR:" ); rOs << pTxt; SwGluePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwFlyCntPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FLYCNT:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); if( bDraw ) { CONSTCHAR( pTxt2, " {DRAWINCNT" ); rOs << pTxt2; rOs << pClose; } else { CONSTCHAR( pTxt2, " {FRM:" ); rOs << pTxt2; rOs << " {FRM:" << GetFlyFrm()->Frm() << pClose; rOs << " {PRT:" << GetFlyFrm()->Prt() << pClose; rOs << pClose; } rOs << pClose; return rOs; } SvStream &SwExpandPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {EXP:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwFtnPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FTN:" ); rOs << pTxt; SwExpandPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwFtnNumPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FTNNUM:" ); rOs << pTxt; SwNumberPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwNumberPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {NUMBER:" ); rOs << pTxt; SwExpandPortion::operator<<( rOs ); rOs << " Exp:\"" << '\"'; rOs << pClose; return rOs; } SvStream &SwBulletPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {BULLET:" ); rOs << pTxt; SwNumberPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwGrfNumPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {GRFNUM:" ); rOs << pTxt; SwNumberPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwHiddenPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {Hidden:" ); rOs << pTxt; SwFldPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwToxPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TOX:" ); rOs << pTxt; SwTxtPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwRefPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {Ref:" ); rOs << pTxt; SwTxtPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwIsoToxPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {ISOTOX:" ); rOs << pTxt; SwToxPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwIsoRefPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {ISOREF:" ); rOs << pTxt; SwRefPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwHyphPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {HYPH:" ); rOs << pTxt; SwExpandPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {HYPHSTR:" ); rOs << pTxt; SwExpandPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwSoftHyphPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {SOFTHYPH:" ); rOs << pTxt; SwHyphPortion::operator<<( rOs ); rOs << (IsExpand() ? " on" : " off"); rOs << pClose; return rOs; } SvStream &SwSoftHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {SOFTHYPHSTR:" ); rOs << pTxt; SwHyphStrPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwBlankPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {BLANK:" ); rOs << pTxt; SwExpandPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwFldPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {FLD:" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); if( IsFollow() ) rOs << " F!"; rOs << pClose; return rOs; } SvStream &SwPostItsPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {POSTITS" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwTabPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TAB" ); rOs << pTxt; SwFixPortion::operator<<( rOs ); rOs << " T:" << nTabPos; if( IsFilled() ) rOs << " \"" << cFill << '\"'; rOs << pClose; return rOs; } SvStream &SwTabLeftPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TABLEFT" ); rOs << pTxt; SwTabPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwTabRightPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TABRIGHT" ); rOs << pTxt; SwTabPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwTabCenterPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TABCENTER" ); rOs << pTxt; SwTabPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwTabDecimalPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {TABDECIMAL" ); rOs << pTxt; SwTabPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwParaPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {PAR" ); rOs << pTxt; SwLineLayout::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwHolePortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {HOLE" ); rOs << pTxt; SwLinePortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwQuoVadisPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {QUOVADIS" ); rOs << pTxt; SwFldPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &SwErgoSumPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {ERGOSUM" ); rOs << pTxt; SwFldPortion::operator<<( rOs ); rOs << pClose; return rOs; } SvStream &operator<<( SvStream &rOs, const SwTxtSizeInfo &rInf ) //$ ostream { CONSTCHAR( pTxt, " {SIZEINFO:" ); rOs << pTxt; rOs << ' ' << (rInf.OnWin() ? "WIN:" : "PRT:" ); rOs << " Idx:" << rInf.GetIdx(); rOs << " Len:" << rInf.GetLen(); rOs << pClose; return rOs; } SvStream &SwDropPortion::operator<<( SvStream &rOs ) const //$ ostream { CONSTCHAR( pTxt, " {DROP:" ); rOs << pTxt; SwTxtPortion::operator<<( rOs ); if( pPart && nDropHeight ) { rOs << " H:" << nDropHeight; rOs << " L:" << nLines; rOs <<" Fnt:" << pPart->GetFont().GetHeight(); if( nX || nY ) rOs << " [" << nX << '/' << nY << ']'; } rOs << pClose; return rOs; } #endif /* OSL_DEBUG_LEVEL */ #endif // DBG_UTIL