Files
libreoffice/sw/source/core/text/txtio.cxx
Stephan Bergmann 62f47bb2a5 loplugin:includeform: sw
Change-Id: Ifc3c4c31a31ee7189eeab6f1af30b94d64f2f92a
2017-10-23 22:45:50 +02:00

611 lines
16 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#ifdef DBG_UTIL
#include <viewsh.hxx>
#include <viewopt.hxx>
#include <txtatr.hxx>
#include <txtfrm.hxx>
#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>
#if OSL_DEBUG_LEVEL < 2
static void Error()
{
SAL_WARN( "sw", "txtio: No debug version" );
}
#define IMPL_OUTOP(class) \
SvStream &class::operator<<( SvStream &rOs ) const /*$ostream*/\
{ \
Error(); \
return rOs; \
}
IMPL_OUTOP( SwTextPortion )
IMPL_OUTOP( SwLinePortion )
IMPL_OUTOP( SwBreakPortion )
IMPL_OUTOP( SwGluePortion )
IMPL_OUTOP( SwFieldPortion )
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( SwFootnotePortion )
IMPL_OUTOP( SwFootnoteNumPortion )
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 )
#else
#include <limits.h>
#include <stdlib.h>
#include "swtypes.hxx"
#include "swfont.hxx"
#define CONSTCHAR( name, string ) static const sal_Char name[] = string
CONSTCHAR( pClose, "} " );
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" );
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" );
SvStream &SwLinePortion::operator<<( SvStream &rOs ) const //$ ostream
{
rOs.WriteCharPtr(" {");
rOs.WriteCharPtr("L:").WriteInt32(nLineLength);
rOs.WriteCharPtr(" H:").WriteUInt16(Height());
rOs.WriteCharPtr(" W:").WriteUInt16(PrtWidth());
rOs.WriteCharPtr(" A:").WriteUInt32(nAscent);
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTextPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TXT:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTmpEndPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {END:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
if( PrtWidth() )
rOs.WriteCharPtr("(view)");
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwBreakPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {BREAK:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwKernPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {KERN:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwArrowPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {ARROW:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwMultiPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {MULTI:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwCombinedPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {COMBINED:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwLineLayout::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {LINE:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
SwLinePortion *pPos = GetPortion();
while( pPos )
{
rOs.WriteCharPtr("\t");
pPos->operator<<( rOs );
pPos = pPos->GetPortion();
}
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwGluePortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {GLUE:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(" F:").WriteUInt16(GetFixWidth());
rOs.WriteCharPtr(" G:").WriteInt16(GetPrtGlue());
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFixPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FIX:" );
rOs.WriteCharPtr(pText);
SwGluePortion::operator<<( rOs );
rOs.WriteCharPtr(" Fix:").WriteUInt16(nFix);
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFlyPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FLY:" );
rOs.WriteCharPtr(pText);
SwFixPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwMarginPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {MAR:" );
rOs.WriteCharPtr(pText);
SwGluePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFlyCntPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FLYCNT:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
if( bDraw )
{
CONSTCHAR( pText2, " {DRAWINCNT" );
rOs.WriteCharPtr(pText2);
rOs.WriteCharPtr(pClose);
}
else
{
CONSTCHAR( pText2, " {FRM:" );
rOs.WriteCharPtr(pText2);
rOs.WriteCharPtr(" {FRM:");
WriteSwRect(rOs, GetFlyFrame()->Frame()).WriteCharPtr(pClose);
rOs.WriteCharPtr(" {PRT:");
WriteSwRect(rOs, GetFlyFrame()->Prt()).WriteCharPtr(pClose);
rOs.WriteCharPtr(pClose);
}
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwExpandPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {EXP:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFootnotePortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FTN:" );
rOs.WriteCharPtr(pText);
SwExpandPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFootnoteNumPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FTNNUM:" );
rOs.WriteCharPtr(pText);
SwNumberPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwNumberPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {NUMBER:" );
rOs.WriteCharPtr(pText);
SwExpandPortion::operator<<( rOs );
rOs.WriteCharPtr(" Exp:\"").WriteChar('\"');
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwBulletPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {BULLET:" );
rOs.WriteCharPtr(pText);
SwNumberPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwGrfNumPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {GRFNUM:" );
rOs.WriteCharPtr(pText);
SwNumberPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwHiddenPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {Hidden:" );
rOs.WriteCharPtr(pText);
SwFieldPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwToxPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TOX:" );
rOs.WriteCharPtr(pText);
SwTextPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwRefPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {Ref:" );
rOs.WriteCharPtr(pText);
SwTextPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwIsoToxPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {ISOTOX:" );
rOs.WriteCharPtr(pText);
SwToxPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwIsoRefPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {ISOREF:" );
rOs.WriteCharPtr(pText);
SwRefPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwHyphPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {HYPH:" );
rOs.WriteCharPtr(pText);
SwExpandPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {HYPHSTR:" );
rOs.WriteCharPtr(pText);
SwExpandPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwSoftHyphPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {SOFTHYPH:" );
rOs.WriteCharPtr(pText);
SwHyphPortion::operator<<( rOs );
rOs.WriteCharPtr(IsExpand() ? " on" : " off");
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwSoftHyphStrPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {SOFTHYPHSTR:" );
rOs.WriteCharPtr(pText);
SwHyphStrPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwBlankPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {BLANK:" );
rOs.WriteCharPtr(pText);
SwExpandPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwFieldPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {FLD:" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
if( IsFollow() )
rOs.WriteCharPtr(" F!");
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwPostItsPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {POSTITS" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTabPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TAB" );
rOs.WriteCharPtr(pText);
SwFixPortion::operator<<( rOs );
rOs.WriteCharPtr(" T:").WriteUInt16(nTabPos);
if( IsFilled() )
rOs.WriteCharPtr(" \"").WriteChar(cFill).WriteChar('\"');
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTabLeftPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TABLEFT" );
rOs.WriteCharPtr(pText);
SwTabPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTabRightPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TABRIGHT" );
rOs.WriteCharPtr(pText);
SwTabPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTabCenterPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TABCENTER" );
rOs.WriteCharPtr(pText);
SwTabPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwTabDecimalPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {TABDECIMAL" );
rOs.WriteCharPtr(pText);
SwTabPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwParaPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {PAR" );
rOs.WriteCharPtr(pText);
SwLineLayout::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwHolePortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {HOLE" );
rOs.WriteCharPtr(pText);
SwLinePortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwQuoVadisPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {QUOVADIS" );
rOs.WriteCharPtr(pText);
SwFieldPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwErgoSumPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {ERGOSUM" );
rOs.WriteCharPtr(pText);
SwFieldPortion::operator<<( rOs );
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &operator<<( SvStream &rOs, const SwTextSizeInfo &rInf ) //$ ostream
{
CONSTCHAR( pText, " {SIZEINFO:" );
rOs.WriteCharPtr(pText);
rOs.WriteChar(' ').WriteCharPtr(rInf.OnWin() ? "WIN:" : "PRT:");
rOs.WriteCharPtr(" Idx:").WriteInt32(rInf.GetIdx());
rOs.WriteCharPtr(" Len:").WriteInt32(rInf.GetLen());
rOs.WriteCharPtr(pClose);
return rOs;
}
SvStream &SwDropPortion::operator<<( SvStream &rOs ) const //$ ostream
{
CONSTCHAR( pText, " {DROP:" );
rOs.WriteCharPtr(pText);
SwTextPortion::operator<<( rOs );
if( pPart && nDropHeight )
{
rOs.WriteCharPtr(" H:").WriteUInt16(nDropHeight);
rOs.WriteCharPtr(" L:").WriteUInt16(nLines);
rOs.WriteCharPtr(" Fnt:").WriteInt32(pPart->GetFont().GetHeight());
if( nX || nY )
rOs.WriteCharPtr(" [").WriteInt16(nX).WriteChar('/').WriteInt16(nY).WriteChar(']');
}
rOs.WriteCharPtr(pClose);
return rOs;
}
#endif
#endif /* DBG_UTIL */
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */